Ionic介绍以及搭建环境、新建和运行项目:
在上面搭建起来项目的基础上,实现中英国际化的切换。
实现
安装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