From c0230b7ccc1eb6a77d293909c46f5684fc5b4803 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 24 Jul 2020 06:01:08 +0300 Subject: [PATCH 1/6] feat: add support for mapping of culture name to Angular locale file name resolves #4867 --- npm/ng-packs/packages/core/src/lib/core.module.ts | 9 +++++++-- .../packages/core/src/lib/models/common.ts | 1 + .../core/src/lib/services/localization.service.ts | 4 +++- .../packages/core/src/lib/tokens/options.token.ts | 11 +++++++++++ .../packages/core/src/lib/utils/initial-utils.ts | 14 ++++++++------ 5 files changed, 30 insertions(+), 9 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts index f118ab28361..3fd29fec537 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -34,7 +34,7 @@ import { ConfigState } from './states/config.state'; import { ProfileState } from './states/profile.state'; import { ReplaceableComponentsState } from './states/replaceable-components.state'; import { SessionState } from './states/session.state'; -import { CORE_OPTIONS } from './tokens/options.token'; +import { CORE_OPTIONS, coreOptionsFactory } from './tokens/options.token'; import { noop } from './utils/common-utils'; import './utils/date-extensions'; import { getInitialData, localeInitializer, configureOAuth } from './utils/initial-utils'; @@ -171,9 +171,14 @@ export class CoreModule { useValue: { environment: options.environment }, }, { - provide: CORE_OPTIONS, + provide: 'CORE_OPTIONS', useValue: options, }, + { + provide: CORE_OPTIONS, + useFactory: coreOptionsFactory, + deps: ['CORE_OPTIONS'], + }, { provide: HTTP_INTERCEPTORS, useClass: ApiInterceptor, diff --git a/npm/ng-packs/packages/core/src/lib/models/common.ts b/npm/ng-packs/packages/core/src/lib/models/common.ts index 930265020cd..aa2f961b7b9 100644 --- a/npm/ng-packs/packages/core/src/lib/models/common.ts +++ b/npm/ng-packs/packages/core/src/lib/models/common.ts @@ -9,6 +9,7 @@ export namespace ABP { environment: Partial; skipGetAppConfiguration?: boolean; sendNullsAsQueryParam?: boolean; + cultureNameToLocaleFileNameMapping?: Dictionary; } export interface Test { diff --git a/npm/ng-packs/packages/core/src/lib/services/localization.service.ts b/npm/ng-packs/packages/core/src/lib/services/localization.service.ts index 3f89642fd95..e488bafaf44 100644 --- a/npm/ng-packs/packages/core/src/lib/services/localization.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/localization.service.ts @@ -8,6 +8,7 @@ import { Config } from '../models/config'; import { ConfigState } from '../states/config.state'; import { registerLocale } from '../utils/initial-utils'; import { createLocalizer, createLocalizerWithFallback } from '../utils/localization-utils'; +import { CORE_OPTIONS } from '../tokens/options.token'; type ShouldReuseRoute = (future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot) => boolean; @@ -44,11 +45,12 @@ export class LocalizationService { registerLocale(locale: string) { const router = this.injector.get(Router); + const { cultureNameToLocaleFileNameMapping: localeNameMap } = this.injector.get(CORE_OPTIONS); const { shouldReuseRoute } = router.routeReuseStrategy; router.routeReuseStrategy.shouldReuseRoute = () => false; router.navigated = false; - return registerLocale(locale).then(() => { + return registerLocale(locale, localeNameMap).then(() => { this.ngZone.run(async () => { await router.navigateByUrl(router.url).catch(noop); router.routeReuseStrategy.shouldReuseRoute = shouldReuseRoute; diff --git a/npm/ng-packs/packages/core/src/lib/tokens/options.token.ts b/npm/ng-packs/packages/core/src/lib/tokens/options.token.ts index 2c4dffe9dce..a4b05c8cc73 100644 --- a/npm/ng-packs/packages/core/src/lib/tokens/options.token.ts +++ b/npm/ng-packs/packages/core/src/lib/tokens/options.token.ts @@ -1,4 +1,15 @@ import { InjectionToken } from '@angular/core'; import { ABP } from '../models/common'; +import differentLocales from '../constants/different-locales'; export const CORE_OPTIONS = new InjectionToken('CORE_OPTIONS'); + +export function coreOptionsFactory({ + cultureNameToLocaleFileNameMapping: localeNameMap = {}, + ...options +}: ABP.Root) { + return { + ...options, + cultureNameToLocaleFileNameMapping: { ...differentLocales, ...localeNameMap }, + } as ABP.Root; +} diff --git a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts index bfca50bcd2d..78677b7ca41 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts @@ -4,7 +4,6 @@ import { Store } from '@ngxs/store'; import { OAuthService } from 'angular-oauth2-oidc'; import { tap } from 'rxjs/operators'; import { GetAppConfiguration } from '../actions/config.actions'; -import differentLocales from '../constants/different-locales'; import { ABP } from '../models/common'; import { ConfigState } from '../states/config.state'; import { CORE_OPTIONS } from '../tokens/options.token'; @@ -45,22 +44,25 @@ function checkAccessToken(store: Store, injector: Injector) { export function localeInitializer(injector: Injector) { const fn = () => { const store: Store = injector.get(Store); + const options = injector.get(CORE_OPTIONS); const lang = store.selectSnapshot(state => state.SessionState.language) || 'en'; return new Promise((resolve, reject) => { - registerLocale(lang).then(() => resolve('resolved'), reject); + registerLocale(lang, options.cultureNameToLocaleFileNameMapping).then( + () => resolve('resolved'), + reject, + ); }); }; return fn; } -export function registerLocale(locale: string) { +export function registerLocale(locale: string, localeNameMap: ABP.Dictionary) { return import( - /* webpackInclude: /(af|ar|am|ar-SA|as|az-Latn|be|bg|bn-BD|bn-IN|bs|ca|ca-ES-VALENCIA|cs|cy|da|de|de|el|en-GB|en|es|en|es-US|es-MX|et|eu|fa|fi|en|fr|fr|fr-CA|ga|gd|gl|gu|ha|he|hi|hr|hu|hy|id|ig|is|it|it|ja|ka|kk|km|kn|ko|kok|en|en|lb|lt|lv|en|mk|ml|mn|mr|ms|mt|nb|ne|nl|nl-BE|nn|en|or|pa|pa-Arab|pl|en|pt|pt-PT|en|en|ro|ru|rw|pa-Arab|si|sk|sl|sq|sr-Cyrl-BA|sr-Cyrl|sr-Latn|sv|sw|ta|te|tg|th|ti|tk|tn|tr|tt|ug|uk|ur|uz-Latn|vi|wo|xh|yo|zh-Hans|zh-Hant|zu)\.js$/ */ - /* webpackChunkName: "[request]"*/ - `@angular/common/locales/${differentLocales[locale] || locale}.js` + /* webpackChunkName: "_locale-[request]"*/ + `@angular/common/locales/${localeNameMap[locale] || locale}.js` ).then(module => { registerLocaleData(module.default); }); From 6b2cb684ce30a039931ca367f664b7b6e951fef0 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 24 Jul 2020 06:03:14 +0300 Subject: [PATCH 2/6] docs: add Mapping of Culture Name to Angular Locale File Name topic to Localization.md #4867 --- docs/en/UI/Angular/Localization.md | 29 +++++++++++++++++++++ docs/en/UI/Angular/images/locale-error.png | Bin 0 -> 19175 bytes 2 files changed, 29 insertions(+) create mode 100644 docs/en/UI/Angular/images/locale-error.png diff --git a/docs/en/UI/Angular/Localization.md b/docs/en/UI/Angular/Localization.md index 78822a16de4..d3215bd0109 100644 --- a/docs/en/UI/Angular/Localization.md +++ b/docs/en/UI/Angular/Localization.md @@ -193,6 +193,35 @@ import { Component } from '@angular/core'; export class AppComponent {} ``` +## Mapping of Culture Name to Angular Locale File Name + +Some of the culture names defined in .NET do not match Angular locales. In such cases, the Angular app throws an error like below at runtime: + +![locale-error](./images/locale-error.png) + +If you see the error like above, you should pass the `cultureNameToLocaleFileNameMapping` property like below to CoreModule's forRoot static method. + +```js +// app.module.ts + +@NgModule({ + imports: [ + // other imports + CoreModule.forRoot({ + // other options + cultureNameToLocaleFileNameMapping: { + "X": "Y", + "AnotherLocaleNameDefinedInDotnet": "AnotherLocaleNameDefinedInAngular" + } + }) + //... +``` + +- The key indicated by "X" above represents the culture name defined in .NET (e.g. "en-US"). +- The value indicated by "Y" above represents the locale file name defined in Angular (e.g. "en"). + +See the [all locale files in Angular](https://github.com/angular/angular/tree/master/packages/common/locales) + ## See Also diff --git a/docs/en/UI/Angular/images/locale-error.png b/docs/en/UI/Angular/images/locale-error.png new file mode 100644 index 0000000000000000000000000000000000000000..de385a59c021b876249fe9886d6758dd81b1d2b1 GIT binary patch literal 19175 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 Date: Fri, 24 Jul 2020 10:00:14 +0300 Subject: [PATCH 3/6] docs: update Localization.md --- docs/en/UI/Angular/Localization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/Angular/Localization.md b/docs/en/UI/Angular/Localization.md index d3215bd0109..94660c6f443 100644 --- a/docs/en/UI/Angular/Localization.md +++ b/docs/en/UI/Angular/Localization.md @@ -211,7 +211,7 @@ If you see the error like above, you should pass the `cultureNameToLocaleFileNam // other options cultureNameToLocaleFileNameMapping: { "X": "Y", - "AnotherLocaleNameDefinedInDotnet": "AnotherLocaleNameDefinedInAngular" + "AnotherCultureNameDefinedInDotnet": "AnotherLocaleFileNameDefinedInAngular" } }) //... From e3c81fed142a98c1a66300709260b6b31b798a64 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 24 Jul 2020 12:01:26 +0300 Subject: [PATCH 4/6] docs: update Localization.md --- docs/en/UI/Angular/Localization.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/docs/en/UI/Angular/Localization.md b/docs/en/UI/Angular/Localization.md index 94660c6f443..2282a405986 100644 --- a/docs/en/UI/Angular/Localization.md +++ b/docs/en/UI/Angular/Localization.md @@ -207,19 +207,16 @@ If you see the error like above, you should pass the `cultureNameToLocaleFileNam @NgModule({ imports: [ // other imports - CoreModule.forRoot({ + CoreModule.forRoot({ // other options cultureNameToLocaleFileNameMapping: { - "X": "Y", - "AnotherCultureNameDefinedInDotnet": "AnotherLocaleFileNameDefinedInAngular" + "DotnetCultureName": "AngularLocaleFileName", + "pt-BR": "pt" // example } }) //... ``` -- The key indicated by "X" above represents the culture name defined in .NET (e.g. "en-US"). -- The value indicated by "Y" above represents the locale file name defined in Angular (e.g. "en"). - See the [all locale files in Angular](https://github.com/angular/angular/tree/master/packages/common/locales) From aaf3c7d47f3034a32093893475992e1963c9403b Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 24 Jul 2020 12:02:50 +0300 Subject: [PATCH 5/6] docs: add a dot --- docs/en/UI/Angular/Localization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/Angular/Localization.md b/docs/en/UI/Angular/Localization.md index 2282a405986..af80ccf9657 100644 --- a/docs/en/UI/Angular/Localization.md +++ b/docs/en/UI/Angular/Localization.md @@ -217,7 +217,7 @@ If you see the error like above, you should pass the `cultureNameToLocaleFileNam //... ``` -See the [all locale files in Angular](https://github.com/angular/angular/tree/master/packages/common/locales) +See the [all locale files in Angular](https://github.com/angular/angular/tree/master/packages/common/locales). ## See Also From 7011863bbee54934d007f929343bfcbeae53fd8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Levent=20Arman=20=C3=96zak?= Date: Fri, 24 Jul 2020 12:04:14 +0300 Subject: [PATCH 6/6] Update Localization.md --- docs/en/UI/Angular/Localization.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/UI/Angular/Localization.md b/docs/en/UI/Angular/Localization.md index af80ccf9657..1ee68ace821 100644 --- a/docs/en/UI/Angular/Localization.md +++ b/docs/en/UI/Angular/Localization.md @@ -199,7 +199,7 @@ Some of the culture names defined in .NET do not match Angular locales. In such ![locale-error](./images/locale-error.png) -If you see the error like above, you should pass the `cultureNameToLocaleFileNameMapping` property like below to CoreModule's forRoot static method. +If you see an error like this, you should pass the `cultureNameToLocaleFileNameMapping` property like below to CoreModule's forRoot static method. ```js // app.module.ts @@ -217,7 +217,7 @@ If you see the error like above, you should pass the `cultureNameToLocaleFileNam //... ``` -See the [all locale files in Angular](https://github.com/angular/angular/tree/master/packages/common/locales). +See [all locale files in Angular](https://github.com/angular/angular/tree/master/packages/common/locales). ## See Also @@ -226,4 +226,4 @@ See the [all locale files in Angular](https://github.com/angular/angular/tree/ma ## What's Next? -* [Permission Management](./Permission-Management.md) \ No newline at end of file +* [Permission Management](./Permission-Management.md)