1.安裝ngx-translate 運行下麵命令安裝@ngx-translate/core和@ngx-translate/http-loader: npm install @ngx-translate/core --save npm install @ngx-translate/http-loade ...
1.安裝ngx-translate
運行下麵命令安裝@ngx-translate/core和@ngx-translate/http-loader:
npm install @ngx-translate/core --save
npm install @ngx-translate/http-loader –save
2.配置多語言
1.在根模塊app.module.ts下導入TranslateModule,並定義配置
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}
@NgModule({
imports: [
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient],
},
}),
],
providers: [
{ provide: NZ_I18N, useValue: en_US },
]
})
2.在./src/assets/i18n下創建多語言文件en_US.json
和zh-CN.json
,多語言的值是json形式展示
cd ./src/assets/i18n
ls en_US.json
ls zh-CN.json
3.註入TranslateService
服務,並定義設置語言的函數,例如調用函數切換為英文setLanguage('en_US')
//註入多語言服務
constructor(private translate: TranslateService){}
//設置語言
async setLanguage(lang: FrontEndLanguage) {
await this.translate.use(lang).toPromise();
}
3.設置自定義文件夾
如果你想自定義多語言文件存放的路徑,那就必須實現TranslateLoader
1.繼承TranslateLoader
,實現方法
export class CustomTranslateHttpLoader implements TranslateLoader {
constructor(private http: HttpClient) { }
getTranslation(lang: string) {
const prefix = './assets/language/';
const suffix = '.json';
this.http.head
return this.http.get(`${prefix}${lang}${suffix}`, { headers: { 'Content-Type': 'application/json;charset=utf-8' } });
}
}
2.然後在app.module.ts下的HttpLoaderFactory
中使用自定義的載入器
export function HttpLoaderFactory(http: HttpClient) {
return new CustomTranslateHttpLoader(http);
}
4.多語言使用
1.在後端ts獲取多語言信息,首先註入TranslateService
服務
//註入多語言服務
constructor(private translate: TranslateService){}
//獲取多語言值
this.translate.instant(summary);
2.在html中給表格的列頭添加多語言值,“th”:{"Name":'名稱'}
<th nzAlign="center" nzWidth="20%" ><span style="color: red;"> </span>{{"th.Name"|translate}}</th>
5.WebAPI實現多語言
首先為什麼需要後端多語言,前端不是有了嗎?主要針對一些特殊提示,只能後端返回的場景,如果你對Asp .net管道模型或者webAPI框架有足夠深入,可以使用HttpModule或者根據你的業務需要,自己在框架上擴展都可以,此處使用DelegatingHandler在webAPI管道中攔截的方式實現,主要實現步驟如下:
1.首先需要客戶端在請求頭帶上語言表示當前請求的語言類型,然後web項目中創建資源文件
2.實現DelegatingHandler,以作為攔截輸出
public class CultureDelegatingHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.Headers.TryGetValues("culture", out IEnumerable<string> values);
if (values != null && values.Count() > 0)
{
string language = values.FirstOrDefault().Replace('_', '-');
switch (language)
{
case "EN":
language = "en_us";
break;
case "ZH":
language = "zh-CN";
break;
}
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(language);
}
return base.SendAsync(request, cancellationToken);
}
}