Angular i18n国际化(多语言)配置

1、安装依赖

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

2、配置App.module

引入模块

import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';

读取json文件

export function HttpLoaderFactory(http: HttpClient) {
  return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}

如果需要读取多个文件,使用如下配置

// export function createTranslateLoader(http: HttpClient) {
//   return new MultiTranslateHttpLoader(http, [
//     {prefix: "./assets/translations/share/", suffix: ".json"},
//     {prefix: "./assets/translations/quotes/", suffix: ".json"},
//   ]);
// }

跟模块使用forRoot配置

imports: [
    TranslateModule.forRoot({
      defaultLanguage: 'zh',
      loader: {
        provide: TranslateLoader,
        useFactory: HttpLoaderFactory,
        deps: [HttpClient]
      }
    })
  ],

3、配置子模块

如果使用了模块懒加载,则需要对子模块进行配置,没有略过,导入的文件包和函数配置等都是相同的,只有imports注入时使用forChild()配置。

imports: [
  TranslateModule.forChild({
    loader: {
     provide: TranslateLoader, 
      useFactory:(HttpLoaderFactory), 
      deps: [HttpClient]
    },
    // 隔离服务,如果隔离服务打开,会订阅不到其他模块更改语言!
    isolate: true 
  })
]

4、配置JSON

{
  "language": "Lang",
  "home": "Home"
  }
{
  "language": "语言",
  "home": "主页"
}

5、配置语言切换按钮

该示例为下拉框选择

<div class="header-icon-wrap header-dropdown">
        <button
          nz-dropdown
          [nzDropdownMenu]="languageMenu"
          [nzPlacement]="'bottomRight'"
          style="background-color: transparent; border: none"
        >
          <a class="text">{{ 'language' | translate }}</a>
        </button>
        <nz-dropdown-menu #languageMenu="nzDropdownMenu">
          <ul nz-menu>
            <li nz-menu-item (click)="changeLanguage('zh')">
              <i class="icon iconfont header-icon icon-peizhi" ></i> 简体中文
            </li>
            <li nz-menu-item  (click)="changeLanguage('en')">
              <i class="icon iconfont header-icon icon-personnel" ></i> English
            </li>
          </ul>
        </nz-dropdown-menu>
      </div>
/** 设置btn的文字和需要传递的参数 */
  settingBtn(language: string) {
    if (language === 'zh') {
      this.languageBtn = 'EN';
      this.language = 'en';
    } else {
      this.languageBtn = '中文';
      this.language = 'zh';
    }
  }
  /** 切换语言 */
  changeLanguage(lang: string) {
    this.i18n.use(lang);
    this.settingBtn(lang);
  }

6、监听语言切换

在app.component里面点阅语言切换,子模块关闭了服务隔离的话,可以全局切换语言。

import { TranslateService } from '@ngx-translate/core';
constructor(public i18n: TranslateService) { }
ngOnInit(): void {
    // 根据浏览器语言设置默认语言 
    const browserLang = this.i18n.getBrowserLang();
    const useLang = browserLang?.match(/zh|en/) ? browserLang : 'en';
    this.i18n.use(useLang);

    // 订阅语言切换事件
    this.i18n.onLangChange.subscribe((params) => {
      this.i18n.use(params.lang);
    });
  }

7、业务代码中使用

html中使用

<p>{{ 'yes' | translate }}</p>

TS中使用

this.translate.instant('yes');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值