From 3a78678c0c9e32f6432fb68e09eccb1ec702bee6 Mon Sep 17 00:00:00 2001 From: alpha-knowledge Date: Fri, 6 Mar 2026 12:23:57 +0530 Subject: [PATCH] Add i18n support (en/hi) and ignore generated build artifacts --- .gitignore | 11 ++++++++++ medplat-ui/app/app.js | 14 +++++++++++- medplat-ui/app/locales/en.json | 11 ++++++++++ medplat-ui/app/locales/hi.json | 11 ++++++++++ .../app/login/controllers/login.controller.js | 22 +++++++++++++++++-- medplat-web/src/main/i18n.js | 18 +++++++++++++++ 6 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 medplat-ui/app/locales/en.json create mode 100644 medplat-ui/app/locales/hi.json create mode 100644 medplat-web/src/main/i18n.js diff --git a/.gitignore b/.gitignore index 90338e075..7ff6345ef 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,14 @@ replay_pid* /medplat-ui/nbproject/private/ /medplat-ui/bower_components/ /medplat-ui/node_modules/ + +# Local development artifacts +/node_modules/ +/package-lock.json +/package.json +/usr/ +/medplat-android/.gradle/ +/medplat-web/bower_components/ + +# Build output / generated files +/medplat-ui/dist/ diff --git a/medplat-ui/app/app.js b/medplat-ui/app/app.js index f7a75d39b..6e4ae39ad 100644 --- a/medplat-ui/app/app.js +++ b/medplat-ui/app/app.js @@ -20,12 +20,24 @@ 'ui.mask', 'daterangepicker', 'textAngular', - 'config' + 'config', + "pascalprecht.translate" ]); as.config(function (AuthenticateServiceProvider, MaskProvider) { MaskProvider.setTemplate(''); AuthenticateServiceProvider.setClientDetails('imtecho-ui', 'imtecho-ui-secret'); }); + as.config(['$translateProvider', function ($translateProvider) { + + $translateProvider.useStaticFilesLoader({ + prefix: 'app/locales/', + suffix: '.json' + }); + + $translateProvider.preferredLanguage('en'); + $translateProvider.fallbackLanguage('en'); + $translateProvider.useSanitizeValueStrategy(null); + }]); as.run(function ($rootScope, AuthenticateService, $state, toaster, Mask, Navigation, $http, APP_CONFIG, UUIDgenerator, $stateParams) { $rootScope.isLoggedIn = false; $rootScope.isLocked = false; diff --git a/medplat-ui/app/locales/en.json b/medplat-ui/app/locales/en.json new file mode 100644 index 000000000..3d3a40e20 --- /dev/null +++ b/medplat-ui/app/locales/en.json @@ -0,0 +1,11 @@ +{ + "LOGIN": { + "TITLE": "Login", + "USERNAME": "Username", + "PASSWORD": "Password", + "SUBMIT": "Submit", + "LOST_PASSWORD": "Lost your password?", + "DESCRIPTION": "A low code comprehensive Primary Healthcare management Platform", + "PLEASE_NOTE": "Please Note:" + } +} \ No newline at end of file diff --git a/medplat-ui/app/locales/hi.json b/medplat-ui/app/locales/hi.json new file mode 100644 index 000000000..67a49e514 --- /dev/null +++ b/medplat-ui/app/locales/hi.json @@ -0,0 +1,11 @@ +{ + "LOGIN": { + "TITLE": "लॉगिन", + "USERNAME": "उपयोगकर्ता नाम", + "PASSWORD": "पासवर्ड", + "SUBMIT": "जमा करें", + "LOST_PASSWORD": "पासवर्ड भूल गए?", + "DESCRIPTION": "सार्वजनिक स्वास्थ्य के लिए प्राथमिक स्वास्थ्य देखभाल प्रबंधन मंच", + "PLEASE_NOTE": "कृपया ध्यान दें:" + } +} \ No newline at end of file diff --git a/medplat-ui/app/login/controllers/login.controller.js b/medplat-ui/app/login/controllers/login.controller.js index 60c14cc93..0b497de6e 100644 --- a/medplat-ui/app/login/controllers/login.controller.js +++ b/medplat-ui/app/login/controllers/login.controller.js @@ -1,13 +1,28 @@ (function (angular) { - function LoginController(AuthenticateService, $rootScope, $state, States, Mask, GeneralUtil) { +function LoginController(AuthenticateService, $rootScope, $state, States, Mask, GeneralUtil, $translate) { var login = this; login.user = {}; login.as = { user: {} }; login.showSystemNotice = false; login.hideAppLink = false; login.env = GeneralUtil.getEnv(); + login.currentLang = $translate.use() || 'en'; + login.languages = [ + { code: 'en', name: 'English' }, + { code: 'hi', name: 'हिन्दी' } + ]; + login.changeLanguage = function(langCode) { + $translate.use(langCode); + login.currentLang = langCode; + localStorage.setItem('preferredLanguage', langCode); + }; login.init = () => { + var savedLang = localStorage.getItem('preferredLanguage'); + if(savedLang) { + $translate.use(savedLang); + login.currentLang = savedLang; + } [login.imagesPath, login.logoImages] = GeneralUtil.getLogoImages(); Mask.show(); AuthenticateService.getSystemNotice().then((response) => { @@ -107,5 +122,8 @@ login.init(); } + + LoginController.$inject = ['AuthenticateService', '$rootScope', '$state', 'States', 'Mask', 'GeneralUtil', '$translate']; + angular.module('imtecho.controllers').controller('LoginController', LoginController); -})(window.angular); +})(window.angular); \ No newline at end of file diff --git a/medplat-web/src/main/i18n.js b/medplat-web/src/main/i18n.js new file mode 100644 index 000000000..f411f8554 --- /dev/null +++ b/medplat-web/src/main/i18n.js @@ -0,0 +1,18 @@ +import i18n from 'i18next'; +import { initReactI18next } from 'react-i18next'; +import en from './locales/en.json'; +import hi from './locales/hi.json'; + +i18n + .use(initReactI18next) + .init({ + resources: { + en: { translation: en }, + hi: { translation: hi } + }, + lng: 'en', // default language + fallbackLng: 'en', + interpolation: { escapeValue: false } + }); + +export default i18n; \ No newline at end of file