【发布时间】:2021-05-30 10:56:31
【问题描述】:
我正在尝试为 primeNg 添加自动翻译,因此我不需要手动将每条消息翻译成我希望使用的语言。我使用的是 Angular 11,所以我关注the docs for V11 on localization,使用ngx-translate。
我的问题是 primeNg 示例使用英语,我似乎遗漏了一些东西以使其真正起作用。
这是我目前所拥有的:
在我的 app.module.ts 中,根据 ngx-translate explainations:
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(http);
}
@NgModule({
...
imports: [
...,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
})
]
})
我的 app.component 根据primeNg's site:
constructor(private config: PrimeNGConfig, private translateService: TranslateService) {}
ngOnInit() {
this.translateService.setDefaultLang('my_locale'); // 'my_locale is here instead of the language I actually use
}
translate(lang: string) {
this.translateService.use(lang);
this.translateService.get('primeng').subscribe(res => this.config.setTranslation(res));
}
因为this site,我还在assets/i18n下创建了一个my_locale.json文件,在里面放了如下代码:
{
"primeng": {
"emptyMessage" : "my translation",
"emptyFilterMessage" : "my translation"
}
}
我的期望是,当使用多选时,我会看到“我的翻译”而不是默认的“未找到结果”,但我没有看到这样的变化。
我缺少/缺少什么才能使它起作用?
编辑
根据评论请求,我将包含我的 html 代码示例。请注意,自从尝试添加本地化后,我还没有碰过它
<p-multiselect [options]="myOptions" [ngModel]="selectedOption"></p-multiselect>
注意:根据multiselect docs,没有记录的消息应该默认为 i18n 翻译
编辑 2
我尝试将以下内容添加到 app.component.ts,但都没有帮助:
ngOnInit() {
this.translateService.addLangs(['my_locale']) // one attempt
this.translateService.setDefaultLang('my_locale'); // 'my_locale' is here instead of the language I actually use
this.translate('my_locale'); // second attempt
}
第一次尝试、第二次尝试和一起使用都没有产生任何影响
【问题讨论】:
-
也分享您的 html 代码。 @PMO1948
-
我添加了 html,但我没有看到需要编辑它的任何地方,所以我还没有(还)
-
一切都在同一个模块上,或者你也有延迟加载模块?因为对于延迟加载模块,您必须添加 npmjs.com/package/@ngx-translate/core#lazy-loaded-modules
-
一切都在同一个模块中。项目不是特别大
-
您好,实际上您的
translate()方法无法调用。这就是为什么这段代码永远无法工作的原因。
标签: angular internationalization locale primeng ngx-translate