在Angular 4中实现多语言支持(国际化i18n)主要通过以下几种方式:
Angular提供了内置的国际化支持,但这种方式需要在构建时确定语言,无法在运行时动态切换。
// 1. 在模板中使用i18n标记
<h1 i18n="Site header|An introduction header for this sample@@introductionHeader">
Hello i18n!
</h1>
// 2. 提取翻译文件
ng xi18n --output-path src/locale
// 3. 为每种语言创建翻译文件(如messages.fr.xlf)
ngx-translate是更灵活的解决方案,支持运行时语言切换。
npm install @ngx-translate/core @ngx-translate/http-loader --save
// app.module.ts
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { HttpClientModule, HttpClient } from '@angular/common/http';
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(http);
}
@NgModule({
imports: [
HttpClientModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient]
}
})
]
})
export class AppModule { }
// 1. 创建翻译文件(如assets/i18n/en.json)
{
"HELLO": "Hello",
"WELCOME": "Welcome {{name}}"
}
// 2. 在组件中使用
import { TranslateService } from '@ngx-translate/core';
constructor(private translate: TranslateService) {
// 设置默认语言
translate.setDefaultLang('en');
}
// 切换语言
switchLanguage(language: string) {
this.translate.use(language);
}
<!-- 在模板中使用 -->
<h1>{{ 'HELLO' | translate }}</h1>
<p>{{ 'WELCOME' | translate:param }}</p>
如果不想使用第三方库,可以自定义服务:
// translation.service.ts
import { Injectable } from '@angular/core';
@Injectable()
export class TranslationService {
private currentLang = 'en';
private translations = {
en: {
HELLO: 'Hello',
WELCOME: 'Welcome {{name}}'
},
fr: {
HELLO: 'Bonjour',
WELCOME: 'Bienvenue {{name}}'
}
};
setLanguage(lang: string) {
this.currentLang = lang;
}
getTranslation(key: string, params?: any): string {
let translation = this.translations[this.currentLang][key] || key;
if (params) {
Object.keys(params).forEach(param => {
translation = translation.replace(`{{${param}}}`, params[param]);
});
}
return translation;
}
}
以上方法都能在Angular 4中实现语言切换和字符串更新,其中ngx-translate是最常用且功能最完善的解决方案。
没有搜到相关的文章