Angular7 国际化多语言i18n配置

多语言之间的相互转换如上图所示,不过不要太在意以上的界面样式哦,今天的重点不是它。下面我们就来开始今天的重头戏,如何在Angular 项目中使用多语言
首先先给出本文所使用的依赖库 ngx-translate

1、安装依赖库

npm install @ngx-translate/core --save
npm install @ngx-translate/http-loader  --save

2、引入模块

在app.module.ts 中引入

import { HttpClient, HttpClientModule } from '@angular/common/http';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';

然后在@NgModule中导入核心方法

@NgModule({
  ...
  imports: [
    ...
    // ---------------添加以下代码
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: HttpLoaderFactory,
        deps: [HttpClient]
      }
    })
    // --------------------------
  ],
  ...
})

3、添加多语言json文件


如图所示,在文件夹assets下新建一个文件夹为i18n,然后i18n文件夹里再分别创建zh-CN.json、zh-TW.json、en-US.json文件,分别代表中文简体、中文繁体、英文。文件内容示例如下:

// zh-CN.json
{
  "APP_TITLE": "欢迎使用Angular"
}
// zh-TW.json
{
  "APP_TITLE": "歡迎使用Angular"
}
// en-US.json
{
  "APP_TITLE": "Welcome to use Angular"
}

4、初始化语言

在app.component.ts添加语言初始化

import { TranslateService } from '@ngx-translate/core';
...
export class AppComponent {
  ...
  constructor(
    public translate: TranslateService
  ) {}
  ...
  public async ngOnInit() {
    // 语言初始化(若未设置语言, 则取浏览器语言)
    let currentLanguage = await localStorage.getItem('currentLanguage') || this.translate.getBrowserCultureLang()
    // 当在assets/i18n中找不到对应的语言翻译时,使用'zh-CN'作为默认语言
    this.translate.setDefaultLang('zh-CN');
    this.translate.use(currentLanguage);
    // 记录当前设置的语言
    localStorage.setItem('currentLanguage', currentLanguage)
  }
}

这样做的目的在于每次我们第一次打开页面时, 会使用上一次设置的语言作为默认语言,避免每次都需要重新设置一次

5、使用多语言

我们可以在任意模块中添加如下代码

示例html代码

// 这里'APP_TITLE' 就是assets/i18n文件夹各个json文件中对应的key
<h1> {{ 'APP_TITLE' | translate }} </h1>

<button (click)="selectLanguage('zh-CN')">中文简体</button>
<button (click)="selectLanguage('zh-TW')">中文繁體</button>
<button (click)="selectLanguage('en-US')">English</button>

本例中修改语言的方法

import { TranslateService } from '@ngx-translate/core';
...
export class YourComponent {
  constructor(
    public translate: TranslateService
  ) {}
  ...
  // 设置语言
  public selectLanguage(lang) {
    this.translate.use(lang);
    // 更新当前记录的语言
    localStorage.setItem('currentLanguage', lang)
  }
  ...

好了,大功告成!快重新运行代码试试吧

附上本人简单的demo: angular-i18n 运行demo的方式在项目的README.md中

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容