无法在 ASP 样板文件中添加语言 (ASPNetZero)
Can not add language in ASP boilerplate (ASPNetZero)
我正在尝试在 ASPNetZero 框架中添加 Malay 语言,但是它说找不到模块 ./ms.js.
以下是我到目前为止遵循的步骤:
1. 为马来语
添加了一个 XML 文件
2.在DefaultLanguageCreator中添加了一种新语言class
3. 从菜单栏中选择我的语言。
详细错误见下文:
core.js:14597 ERROR Error: Uncaught (in promise): Error: Cannot find module './ms.js'
Error: Cannot find module './ms.js'
at .*\.js$ namespace object:179
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:388)
at Object.onInvoke (core.js:16156)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:387)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.run (zone.js:138)
at zone.js:872
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421)
at Object.onInvokeTask (core.js:16147)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188)
at resolvePromise (zone.js:814)
at resolvePromise (zone.js:771)
at zone.js:873
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421)
at Object.onInvokeTask (core.js:16147)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188)
at drainMicroTaskQueue (zone.js:595)
defaultErrorLogger @ core.js:14597
push../node_modules/@angular/core/fesm5/core.js.ErrorHandler.handleError @ core.js:14645
next @ core.js:16628
schedulerFn @ core.js:12609
push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.__tryOrUnsub @ Subscriber.js:196
push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.next @ Subscriber.js:134
push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._next @ Subscriber.js:77
push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next @ Subscriber.js:54
push../node_modules/rxjs/_esm5/internal/Subject.js.Subject.next @ Subject.js:47
push../node_modules/@angular/core/fesm5/core.js.EventEmitter.emit @ core.js:12593
(anonymous) @ core.js:16178
push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke @ zone.js:388
push../node_modules/zone.js/dist/zone.js.Zone.run @ zone.js:138
push../node_modules/@angular/core/fesm5/core.js.NgZone.runOutsideAngular @ core.js:16115
onHandleError @ core.js:16178
push../node_modules/zone.js/dist/zone.js.ZoneDelegate.handleError @ zone.js:392
push../node_modules/zone.js/dist/zone.js.Zone.runGuarded @ zone.js:154
_loop_1 @ zone.js:677
api.microtaskDrainDone @ zone.js:686
drainMicroTaskQueue @ zone.js:602
Promise.then (async)
scheduleMicroTask @ zone.js:578
push../node_modules/zone.js/dist/zone.js.ZoneDelegate.scheduleTask @ zone.js:410
onScheduleTask @ zone.js:297
push../node_modules/zone.js/dist/zone.js.ZoneDelegate.scheduleTask @ zone.js:401
push../node_modules/zone.js/dist/zone.js.Zone.scheduleTask @ zone.js:232
push../node_modules/zone.js/dist/zone.js.Zone.scheduleMicroTask @ zone.js:252
scheduleResolveOrReject @ zone.js:862
resolvePromise @ zone.js:808
(anonymous) @ zone.js:724
webpackJsonpCallback @ bootstrap:25
(anonymous) @ 892.js:1
在 ASPNETZero 中,日期选择器在 ngx-bootstrap 中,所以在这个库中他们使用 moment.js,
你的三个步骤是正确的,但你错过了下面解释的一些步骤:
- 为马来语添加 XML 文件 (...\aspnet-core\src\YOURCOMPANY.Core\Localization\YOURCOMPANY\YOURCOMPANY.ms.xml)
- 在 DefaultLanguageCreator 中添加了一种新语言 class
首先,在你的 angular 项目中编辑这个文件...\angular\src\assets\appconfig.json,并添加 localMapping 适当的转换(暂时为 en),不要忘记将此配置设置为 appconfig.production.json.
"localeMappings": {
"angular": [
{
"from": "ms",
"to": "en"
}
],
"moment": [
{
"from": "ms",
"to": "en"
},
...
],...
- 然后去这个位置:(...\angular\src\assets\ngx-bootstrap\ngx-bootstrap-locale-mapping.service.ts),如下图所示:
const cultureMap = {
'zh-Hans': 'zh-cn',
'es-MX': 'es',
'vi': 'en-gb',
'ms': 'ms'
// Add more here
};
设置模块映射:
getModuleName(locale: string): string {
const moduleNameMap = {
'zh-Hans': 'zhCn',
'es-MX': 'es',
'pt-BR': 'ptBr',
'vi': 'enGb',
'ms': 'ms'
// Add more here
};
您可以像 'ms' 那样映射您的文化:'en',如果您这样做,您将获得乔治亚风格的 SPA 日期选择器,但是如果你想改变你的日期选择器的时刻,你必须添加你的 i18n 覆盖,这样做:
将此文件夹的js文件添加到(...\angular\src\assets\ngx-bootstrap\custom-i18n\ms.js)
您可以在网上找到您的 moment.js 文化或简单地编辑其他语言以获得适合您的时刻。
最后,转到这个文件:
(...\angular\src\assets\ngx-bootstrap\ngx-bootstrap-datepicker-config.service.ts)
并像下面这样更改此功能:
static registerNgxBootstrapDatePickerLocales(): Promise<boolean> {
if (abp.localization.currentLanguage.name === 'en') {
return Promise.resolve(true);
}
let supportedLocale = new NgxBootstrapLocaleMappingService().map(abp.localization.currentLanguage.name).toLowerCase();
let moduleLocaleName = new NgxBootstrapLocaleMappingService().getModuleName(abp.localization.currentLanguage.name);
if (abp.localization.currentLanguage.name === 'ms') {
return new Promise<boolean>((resolve, reject) => {
import(`assets/ngx-bootstrap/custom-i18n/ms.js`)
.then(module => {
defineLocale(abp.localization.currentLanguage.name.toLowerCase(), module[`msLocale`]);
resolve(true);
}, reject);
});
}
return new Promise<boolean>((resolve, reject) => {
import(`ngx-bootstrap/chronos/esm5/i18n/${supportedLocale}.js`)
.then(module => {
defineLocale(abp.localization.currentLanguage.name.toLowerCase(), module[`${moduleLocaleName}Locale`]);
resolve(true);
}, reject);
});
}
如您所见,在 Promise ms.js 文件导入函数中,我们将您的 ms.js 模块名称称为 msLocale,这是在中声明的导出变量你的 ms.js 文件。
如果您在此 link 中找不到您的 moment culture js 文件:
moment.js locales
简单自己写,这是官方教程:
moment.js customization
我正在尝试在 ASPNetZero 框架中添加 Malay 语言,但是它说找不到模块 ./ms.js.
以下是我到目前为止遵循的步骤:
1. 为马来语
添加了一个 XML 文件
2.在DefaultLanguageCreator中添加了一种新语言class
3. 从菜单栏中选择我的语言。
详细错误见下文:
core.js:14597 ERROR Error: Uncaught (in promise): Error: Cannot find module './ms.js'
Error: Cannot find module './ms.js'
at .*\.js$ namespace object:179
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:388)
at Object.onInvoke (core.js:16156)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:387)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.run (zone.js:138)
at zone.js:872
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421)
at Object.onInvokeTask (core.js:16147)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188)
at resolvePromise (zone.js:814)
at resolvePromise (zone.js:771)
at zone.js:873
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421)
at Object.onInvokeTask (core.js:16147)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188)
at drainMicroTaskQueue (zone.js:595)
defaultErrorLogger @ core.js:14597
push../node_modules/@angular/core/fesm5/core.js.ErrorHandler.handleError @ core.js:14645
next @ core.js:16628
schedulerFn @ core.js:12609
push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.__tryOrUnsub @ Subscriber.js:196
push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.next @ Subscriber.js:134
push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._next @ Subscriber.js:77
push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next @ Subscriber.js:54
push../node_modules/rxjs/_esm5/internal/Subject.js.Subject.next @ Subject.js:47
push../node_modules/@angular/core/fesm5/core.js.EventEmitter.emit @ core.js:12593
(anonymous) @ core.js:16178
push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke @ zone.js:388
push../node_modules/zone.js/dist/zone.js.Zone.run @ zone.js:138
push../node_modules/@angular/core/fesm5/core.js.NgZone.runOutsideAngular @ core.js:16115
onHandleError @ core.js:16178
push../node_modules/zone.js/dist/zone.js.ZoneDelegate.handleError @ zone.js:392
push../node_modules/zone.js/dist/zone.js.Zone.runGuarded @ zone.js:154
_loop_1 @ zone.js:677
api.microtaskDrainDone @ zone.js:686
drainMicroTaskQueue @ zone.js:602
Promise.then (async)
scheduleMicroTask @ zone.js:578
push../node_modules/zone.js/dist/zone.js.ZoneDelegate.scheduleTask @ zone.js:410
onScheduleTask @ zone.js:297
push../node_modules/zone.js/dist/zone.js.ZoneDelegate.scheduleTask @ zone.js:401
push../node_modules/zone.js/dist/zone.js.Zone.scheduleTask @ zone.js:232
push../node_modules/zone.js/dist/zone.js.Zone.scheduleMicroTask @ zone.js:252
scheduleResolveOrReject @ zone.js:862
resolvePromise @ zone.js:808
(anonymous) @ zone.js:724
webpackJsonpCallback @ bootstrap:25
(anonymous) @ 892.js:1
在 ASPNETZero 中,日期选择器在 ngx-bootstrap 中,所以在这个库中他们使用 moment.js, 你的三个步骤是正确的,但你错过了下面解释的一些步骤:
- 为马来语添加 XML 文件 (...\aspnet-core\src\YOURCOMPANY.Core\Localization\YOURCOMPANY\YOURCOMPANY.ms.xml)
- 在 DefaultLanguageCreator 中添加了一种新语言 class
首先,在你的 angular 项目中编辑这个文件...\angular\src\assets\appconfig.json,并添加 localMapping 适当的转换(暂时为 en),不要忘记将此配置设置为 appconfig.production.json.
"localeMappings": {
"angular": [
{
"from": "ms",
"to": "en"
}
],
"moment": [
{
"from": "ms",
"to": "en"
},
...
],...
- 然后去这个位置:(...\angular\src\assets\ngx-bootstrap\ngx-bootstrap-locale-mapping.service.ts),如下图所示:
const cultureMap = {
'zh-Hans': 'zh-cn',
'es-MX': 'es',
'vi': 'en-gb',
'ms': 'ms'
// Add more here
};
设置模块映射:
getModuleName(locale: string): string {
const moduleNameMap = {
'zh-Hans': 'zhCn',
'es-MX': 'es',
'pt-BR': 'ptBr',
'vi': 'enGb',
'ms': 'ms'
// Add more here
};
您可以像 'ms' 那样映射您的文化:'en',如果您这样做,您将获得乔治亚风格的 SPA 日期选择器,但是如果你想改变你的日期选择器的时刻,你必须添加你的 i18n 覆盖,这样做:
将此文件夹的js文件添加到(...\angular\src\assets\ngx-bootstrap\custom-i18n\ms.js) 您可以在网上找到您的 moment.js 文化或简单地编辑其他语言以获得适合您的时刻。
最后,转到这个文件: (...\angular\src\assets\ngx-bootstrap\ngx-bootstrap-datepicker-config.service.ts) 并像下面这样更改此功能:
static registerNgxBootstrapDatePickerLocales(): Promise<boolean> {
if (abp.localization.currentLanguage.name === 'en') {
return Promise.resolve(true);
}
let supportedLocale = new NgxBootstrapLocaleMappingService().map(abp.localization.currentLanguage.name).toLowerCase();
let moduleLocaleName = new NgxBootstrapLocaleMappingService().getModuleName(abp.localization.currentLanguage.name);
if (abp.localization.currentLanguage.name === 'ms') {
return new Promise<boolean>((resolve, reject) => {
import(`assets/ngx-bootstrap/custom-i18n/ms.js`)
.then(module => {
defineLocale(abp.localization.currentLanguage.name.toLowerCase(), module[`msLocale`]);
resolve(true);
}, reject);
});
}
return new Promise<boolean>((resolve, reject) => {
import(`ngx-bootstrap/chronos/esm5/i18n/${supportedLocale}.js`)
.then(module => {
defineLocale(abp.localization.currentLanguage.name.toLowerCase(), module[`${moduleLocaleName}Locale`]);
resolve(true);
}, reject);
});
}
如您所见,在 Promise ms.js 文件导入函数中,我们将您的 ms.js 模块名称称为 msLocale,这是在中声明的导出变量你的 ms.js 文件。
如果您在此 link 中找不到您的 moment culture js 文件: moment.js locales
简单自己写,这是官方教程: moment.js customization