From 17be7a34e0c253d06b8d31c2a7a0c55db447517b Mon Sep 17 00:00:00 2001 From: Bram Luyten Date: Sun, 18 Nov 2018 08:21:51 +0100 Subject: [PATCH 1/3] Issue 298 Language switch --- config/environment.default.js | 22 ++- src/app/app.component.ts | 16 +- src/app/header/header.component.html | 3 +- .../lang-switch/lang-switch.component.html | 13 ++ .../lang-switch/lang-switch.component.scss | 0 .../lang-switch/lang-switch.component.spec.ts | 163 ++++++++++++++++++ .../lang-switch/lang-switch.component.ts | 49 ++++++ src/app/shared/shared.module.ts | 2 + src/config/global-config.interface.ts | 3 + src/config/lang-config.interface.ts | 12 ++ 10 files changed, 277 insertions(+), 6 deletions(-) create mode 100644 src/app/shared/lang-switch/lang-switch.component.html create mode 100644 src/app/shared/lang-switch/lang-switch.component.scss create mode 100644 src/app/shared/lang-switch/lang-switch.component.spec.ts create mode 100644 src/app/shared/lang-switch/lang-switch.component.ts create mode 100644 src/config/lang-config.interface.ts diff --git a/config/environment.default.js b/config/environment.default.js index a6ef738f41..d3758e66bd 100644 --- a/config/environment.default.js +++ b/config/environment.default.js @@ -52,5 +52,25 @@ module.exports = { // Log directory logDirectory: '.', // NOTE: will log all redux actions and transfers in console - debug: false + debug: false, + // Default Language in which the UI will be rendered if the user's browser language is not an active language + defaultLanguage: 'en', + // Languages. DSpace Angular holds a message catalog for each of the following languages. When set to active, users will be able to switch to the use of this language in the user interface. + languages: [{ + code: 'en', + label: 'English', + active: true, + }, { + code: 'de', + label: 'Deutsch', + active: true, + }, { + code: 'cs', + label: 'Čeština', + active: true, + }, { + code: 'nl', + label: 'Nederlands', + active: false, + }] }; diff --git a/src/app/app.component.ts b/src/app/app.component.ts index a7b9fd59bf..ab66d738b9 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -60,10 +60,18 @@ export class AppComponent implements OnInit, AfterViewInit { private menuService: MenuService, private windowService: HostWindowService ) { - // this language will be used as a fallback when a translation isn't found in the current language - translate.setDefaultLang('en'); - // the lang to use, if the lang isn't available, it will use the current loader to get them - translate.use('en'); + // Load all the languages that are defined as active from the config file + translate.addLangs(config.languages.filter((LangConfig) => LangConfig.active === true).map((a) => a.code)); + + // Load the default language from the config file + translate.setDefaultLang(config.defaultLanguage); + + // Attempt to get the browser language from the user + if (translate.getLangs().includes(translate.getBrowserLang())) { + translate.use(translate.getBrowserLang()); + } else { + translate.use(config.defaultLanguage); + } metadata.listenForRouteChange(); diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html index 461f809357..e975ec0cc1 100644 --- a/src/app/header/header.component.html +++ b/src/app/header/header.component.html @@ -6,7 +6,8 @@