场景

Ionic介绍以及搭建环境、新建和运行项目:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106308166

在上面搭建起来项目的基础上,实现中英国际化的切换。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

安装ngx-translate模块

使用VSCode打开项目并打开package.json,没有安装ngx-translate模块是这样

 

 

在项目下打开命令行或者在VSCode中打开终端

npm install --save @ngx-translate/core

 

 

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

 

 

安装完这两个模块后再打开package.json就可以看到已经添加成功这两个模块

 

 

 

模块源码地址:https://github.com/ngx-translate/core

 

模块app.module.ts中引入该模块

打开项目的app.module.ts

引入模块

//HttpClient
import {HttpClient, HttpClientModule} from '@angular/common/http';
//引入国际化资源
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
export function HttpLoaderFactory(httpClient: HttpClient) {
  return new TranslateHttpLoader(httpClient);
}

然后声明

@NgModule({
  declarations: [AppComponent],
  entryComponents: [],
  imports: [BrowserModule,
     IonicModule.forRoot(),
      AppRoutingModule,
      HttpClientModule,
      TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: HttpLoaderFactory,
        deps: [HttpClient]
      }
    })
    ],
  providers: [
    StatusBar,
    SplashScreen,
    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

 

具体添加位置见下图

 

 

 

新建国际化资源

在项目的assets下新建文件夹i18n在文件夹下新建两个json文件en.json和zh-CN.json存储中英两个资源文件

 

 

 

zn-CN.json

{
    "badao": "霸道的",
    "liumang": "程序猿"
}

 

en.json

{
    "badao": "Domineering",
    "liumang": "Code Monkey"
}

 

添加并设置国际化资源

打开项目的app.component.ts

引入并声明TranslateService

import { TranslateService } from '@ngx-translate/core';

export class AppComponent {
  constructor(
    private platform: Platform,
    private splashScreen: SplashScreen,
    private statusBar: StatusBar,
    public translate:TranslateService
  ) {
    this.initializeApp();
  }

 

 

 

然后在初始化的方法initializeApp中加载国际化文件并设置当前的国际化文件

设置选择中文

 

 initializeApp() {
    this.platform.ready().then(() => {
      this.statusBar.styleDefault();
      this.splashScreen.hide();
      //装载国际化资源文件
      this.translate.addLangs(['en', 'zh-CN']);
      //设置默认国际化资源文件
      this.translate.setDefaultLang('zh-CN');
      //获取当前浏览器环境的语言
      const browserLang = this.translate.getBrowserLang();
      this.translate.use(browserLang.match(/en|zh-CN/) ? browserLang : 'zh-CN');

    });

在相应的组件中使用Translate服务

比如我想在tab1这个模块中使用国际化服务,打开tab1.module.ts,引入并声明模块

import { TranslateModule } from '@ngx-translate/core' ;

@NgModule({
  imports: [
    IonicModule,
    CommonModule,
    FormsModule,
    ExploreContainerComponentModule,
    Tab1PageRoutingModule,
    TranslateModule
  ],
  declarations: [Tab1Page]
})
export class Tab1PageModule {}

然后打开tab1.page.html

<div>
  <h1>公众号:</h1>
  {{ 'badao' | translate }}{{ 'liumang' | translate }}
</div>

然后运行项目查看tab1的页面

 

如果想要修改为英文的话,只需要打开app.component.ts,修改为

  initializeApp() {
    this.platform.ready().then(() => {
      this.statusBar.styleDefault();
      this.splashScreen.hide();
      //装载国际化资源文件
      this.translate.addLangs(['en', 'zh-CN']);
      //设置默认国际化资源文件
      this.translate.setDefaultLang('en');
      //获取当前浏览器环境的语言
      const browserLang = this.translate.getBrowserLang();
      this.translate.use(browserLang.match(/en|zh-CN/) ? browserLang : 'en');

    });
  }

 

运行看效果

 

 

 

示例代码下载

见下面文章末尾

https://mp.weixin.qq.com/s/HFSKb7il-K_KB8XL6XRl7A

posted on 2020-06-03 10:50  霸道流氓  阅读(330)  评论(0编辑  收藏  举报