ngx-translate - 更改语言 select 下拉列表中的显示值
ngx-translate - Change displayed value in language select dropdown
这似乎是一件相对简单的事情,但我似乎找不到任何人这样做的例子(Stackblitz、博客、ngx-translate 文档等),而且我自己也无法解决。
我想将下拉菜单的显示值从“en”、“es”、“fr”更改为“English”、“Espanol”、“Francais”。更改 addLangs() 中的值似乎会更改下拉列表中的值,但当然找不到 en.json,等等
component.html
<select class="form-control" selLang (change)="translateLanguageTo(selLang.value)">
<option *ngFor="let language of translate.getLangs()" [value]="language" [selected]="language === translate.currentLang">
{{ language }}
</option>
</select>
app.component.ts
this.translate.addLangs(['en', 'es', 'fr']);
正如您自己注意到的,ngx-translate
只关心语言代码而不关心它们的名称。不过你可以解决这个问题。
创建一个常量,其中包含所有支持的语言(语言代码 + 语言名称)。
// supported-languages.ts
export const SUPPORTED_LANGUAGES = [
{ code: 'en', name: 'English' },
{ code: 'es', name: 'Espanol' },
{ code: 'fr', name: 'Francais' },
]
将该常量导入您的组件。
// language-selector.component.ts
import { SUPPORTED_LANGUAGES } from './path/to/supported-languages';
class LanguageSelectorComponent {
languages = SUPPORTED_LANGUAGES
// ... rest of the methods
}
遍历支持的语言并显示它们的名称。
<!-- my.component.html -->
<select class="form-control" (change)="translateLanguageTo($event)">
<option *ngFor="let language of languages" [value]="language.code" [selected]="language.code === translate.currentLang">
{{ language.name }}
</option>
</select>
并在 app.component.ts
中定义 ngx-translate
的语言,如下所示:
import { SUPPORTED_LANGUAGES } from './path/to/supported-languages';
...
this.translate.addLangs(SUPPORTED_LANGUAGES.map(l => l.code);
通过使用此策略,您可以在一个文件中定义所有受支持的语言,并在以后轻松定义 add/remove 种语言,而无需触及其他部分。
感谢您的回答,因为它是有用的灵感,但我决定走一条稍微不同的路线。我会在这里为将来的任何人概述...
创建枚举...
export enum SupportedLanguages {
'en' = 'English',
'es' = 'Español',
'fr' = 'Français'
}
export type SupportedLanguage = keyof typeof SupportedLanguages;
语言选择器模板...
<select class="form-control" [ngModel]="languageKey
(ngModelChange)="onLanguageChange($event)">
<option *ngFor="let language of supportedLanguages | keyvalue"
[ngValue]="language.key"
[selected]="language.key === translate.currentLang">
{{ language.value }} - {{ language.key }}
</option>
</select>
语言选择器 ts...
import { SupportedLanguages } from 'models';
public supportedLanguages = Object(SupportedLanguages);
languageKey: string = this.translate.currentLang;
这似乎是一件相对简单的事情,但我似乎找不到任何人这样做的例子(Stackblitz、博客、ngx-translate 文档等),而且我自己也无法解决。
我想将下拉菜单的显示值从“en”、“es”、“fr”更改为“English”、“Espanol”、“Francais”。更改 addLangs() 中的值似乎会更改下拉列表中的值,但当然找不到 en.json,等等
component.html
<select class="form-control" selLang (change)="translateLanguageTo(selLang.value)">
<option *ngFor="let language of translate.getLangs()" [value]="language" [selected]="language === translate.currentLang">
{{ language }}
</option>
</select>
app.component.ts
this.translate.addLangs(['en', 'es', 'fr']);
正如您自己注意到的,ngx-translate
只关心语言代码而不关心它们的名称。不过你可以解决这个问题。
创建一个常量,其中包含所有支持的语言(语言代码 + 语言名称)。
// supported-languages.ts
export const SUPPORTED_LANGUAGES = [
{ code: 'en', name: 'English' },
{ code: 'es', name: 'Espanol' },
{ code: 'fr', name: 'Francais' },
]
将该常量导入您的组件。
// language-selector.component.ts
import { SUPPORTED_LANGUAGES } from './path/to/supported-languages';
class LanguageSelectorComponent {
languages = SUPPORTED_LANGUAGES
// ... rest of the methods
}
遍历支持的语言并显示它们的名称。
<!-- my.component.html -->
<select class="form-control" (change)="translateLanguageTo($event)">
<option *ngFor="let language of languages" [value]="language.code" [selected]="language.code === translate.currentLang">
{{ language.name }}
</option>
</select>
并在 app.component.ts
中定义 ngx-translate
的语言,如下所示:
import { SUPPORTED_LANGUAGES } from './path/to/supported-languages';
...
this.translate.addLangs(SUPPORTED_LANGUAGES.map(l => l.code);
通过使用此策略,您可以在一个文件中定义所有受支持的语言,并在以后轻松定义 add/remove 种语言,而无需触及其他部分。
感谢您的回答,因为它是有用的灵感,但我决定走一条稍微不同的路线。我会在这里为将来的任何人概述...
创建枚举...
export enum SupportedLanguages {
'en' = 'English',
'es' = 'Español',
'fr' = 'Français'
}
export type SupportedLanguage = keyof typeof SupportedLanguages;
语言选择器模板...
<select class="form-control" [ngModel]="languageKey
(ngModelChange)="onLanguageChange($event)">
<option *ngFor="let language of supportedLanguages | keyvalue"
[ngValue]="language.key"
[selected]="language.key === translate.currentLang">
{{ language.value }} - {{ language.key }}
</option>
</select>
语言选择器 ts...
import { SupportedLanguages } from 'models';
public supportedLanguages = Object(SupportedLanguages);
languageKey: string = this.translate.currentLang;