场景

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


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

实现

安装ngx-translate模块

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

Ionic+Angular实现中英国际化(附代码下载)_资源文件

 

 

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



npm install --save @ngx-translate/core


Ionic+Angular实现中英国际化(附代码下载)_程序猿_02

 

 



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


Ionic+Angular实现中英国际化(附代码下载)_资源文件_03

 

 

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

Ionic+Angular实现中英国际化(附代码下载)_程序猿_04

 

 

 

模块源码地址:​​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 {}


 

具体添加位置见下图

Ionic+Angular实现中英国际化(附代码下载)_ide_05

 

 

 

新建国际化资源

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

Ionic+Angular实现中英国际化(附代码下载)_ide_06

 

 

 

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();
}


 

Ionic+Angular实现中英国际化(附代码下载)_json_07

 

 

然后在初始化的方法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的页面

Ionic+Angular实现中英国际化(附代码下载)_ide_08

 

如果想要修改为英文的话,只需要打开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');

});
}


 

运行看效果

Ionic+Angular实现中英国际化(附代码下载)_ide_09

 

 

 

示例代码下载

见下面文章末尾

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