一、引言

i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。在资讯领域,国际化(i18n)指让产品(出版物,软件,硬件等)无需做大的改变就能够适应不同的语言和地区的需要。对程序来说,在不修改内部代码的情况下,能根据不同语言及地区显示相应的界面。 在全球化的时代,国际化尤为重要,因为产品的潜在用户可能来自世界的各个角落。通常与i18n相关的还有L10n(“本地化”的简称)。
Angular 将使用 @ngx-translate/core 和 @ngx-translate/http-loader实现国际化方案。

二、实现

1.安装

根据Angular 版本选择好对应的版本号

  1. npm install @ngx-translate/core@9.1.1 --save
  2. npm install @ngx-translate/http-loader@2.0.1 --save 

2.在app.module.ts配置

  1. // app.module.ts
  2.  
  3. import {BrowserModule} from '@angular/platform-browser';
  4. import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
  5. import {NgModule} from '@angular/core';
  6. import {AppRoutingModule} from './app-routing.module';
  7. import {FormsModule} from '@angular/forms';
  8. import {HttpClient, HttpClientModule} from '@angular/common/http';
  9. import {TranslateHttpLoader} from '@ngx-translate/http-loader';
  10. import {TranslateLoader, TranslateModule} from '@ngx-translate/core';
  11.  
  12. // 这里配置
  13. export function createTranslateHttpLoader(http: HttpClient) {
  14. return new TranslateHttpLoader(http, './assets/i18n/', '.json');
  15. }
  16.  
  17. @NgModule({
  18. declarations: [
  19. AppComponent
  20. ],
  21. imports: [
  22. BrowserModule,
  23. AppRoutingModule,
  24. FormsModule,
  25. HttpClientModule,
  26. BrowserAnimationsModule,
  27. // 在这里配置
  28. TranslateModule.forRoot({
  29. loader: {
  30. provide: TranslateLoader,
  31. useFactory: (createTranslateHttpLoader),
  32. deps: [HttpClient]
  33. }
  34. })
  35. ],
  36. providers: [],
  37. bootstrap: [AppComponent]
  38. })
  39. export class AppModule {
  40. }

3.新建json文件

在assets 新建文件夹 i18n,在i18n文件下下新建zh.json 和 en.json 文件,分别表示中文和英文。

  1.  

// zh.json 不要在json文件写注释,会报错
{
  "hello": "你好",
  "header": {
   "author": "早上好"
  }
}

  1. // en.json 不要在json文件写注释,会报错
  2. {
      "hello": "Hello",
      "header": {
       "author": "Good morning"
      }
    }

4.获取浏览器默认语言

app.component.ts 文件获取浏览器默认语言,如果不是英语和中文,就默认设置为中文。

  1. import {Component, OnInit} from '@angular/core';
  2. import {TranslateService} from '@ngx-translate/core';
  3.  
  4. @Component({
  5. selector: 'app-root',
  6. templateUrl: './app.component.html',
  7. styleUrls: ['./app.component.css']
  8. })
  9. export class AppComponent implements OnInit {
  10. title = 'app';
  11.  
  12. constructor(public translateService: TranslateService) {
  13. }
  14.  
  15. ngOnInit() {
  16. /* --- set i18n begin ---*/
  17. this.translateService.addLangs(['zh', 'en']);
  18. this.translateService.setDefaultLang('zh');
  19. const browserLang = this.translateService.getBrowserLang();
  20. this.translateService.use(browserLang.match(/zh|en/) ? browserLang : 'zh');
  21. /* --- set i18n end ---*/
  22. }
  23. }

5.通过以上配置,即可根据浏览器语言设置来加载国际化语言

  1. <h1>{{'hello' | translate}}</h1>
  2. <h1>{{'header.author' | translate}}</h1> // 嵌套的这样书写

6.手动选择语言

  1. <button (click)="changeLanguage(language)">{{ languageBtn}}</button>
  1. languageBtn;
  2. language;
  3.  
  4. constructor(public translateService: TranslateService) {
  5. }
  6.  
  7. ngOnInit() {
  8. const browserLang = this.translateService.getBrowserLang();
  9. this.settingBtn(browserLang);
  10. }
  11.  
  12. /*设置btn的文字和需要传递的参数*/
  13. settingBtn(language: string) {
  14. if (language === 'zh') {
  15. this.languageBtn = 'English';
  16. this.language = 'en';
  17. } else {
  18. this.languageBtn = '中文';
  19. this.language = 'zh';
  20. }
  21. }
  22.  
  23. /*切换语言*/
  24. changeLanguage(lang: string) {
  25. console.log(lang);
  26. this.translateService.use(lang);
  27. this.settingBtn(lang);
  28. }

Angular i18n(国际化方案)的更多相关文章

  1. Angular(2+) 国际化方案(ngx-translate)

    本文只针对ngx-translate/core 6.x版本,如果你使用的是5.x或者更低的版本,请参照以下链接. https://github.com/ngx-translate/core/blob/ ...

  2. Angular i18n的技术分享、踩过的坑

    1.安装 npm @ngx-translate/core --save npm @ngx-translate/http-loader 2.配置(文本背景部分为该模块新增的)~app.module.ts ...

  3. angular项目国际化配置(ngx-translate)

    原文 https://www.jianshu.com/p/7d1da3098625 大纲 1.认识ngx-translate 2.ngx-translate的配置步骤 3.ngx-translate的 ...

  4. Django1.9开发博客(12)- i18n国际化

    国际化与本地化的目的为了能为各个不同的用户以他们最熟悉的语言和格式来显示网页. Django能完美支持文本翻译.日期时间和数字的格式化.时区. 另外,Django还有两点优势: 允许开发者和模板作者指 ...

  5. Bootstrap-datepicker3官方文档中文翻译---I18N/国际化(原文链接 http://bootstrap-datepicker.readthedocs.io/en/latest/index.html)

    I18N/国际化 这个插件支持月份和星期名以及weekStart选项的国际化.默认是英语(“en”); 其他有效的译本语言在 js/locales/ 目录中, 只需在插件后包含您想要的地区. 想要添加 ...

  6. i18n(国际化) 和l18n(本地化)时的地域标识代码

    i18n(国际化) 和l18n(本地化)时的地域标识代码 格式如 zh-CN(语言-国家) i18n(国际化) 和l18n(本地化)时的地域标识代码 格式如 zh-CN(语言-国家) 国家说明 语言说 ...

  7. i18n,国际化翻译,excel与js互转

    背景 公司开发新产品时,要求适配多国语言,采用i18n国际化工具,但翻译字典(js的json)还是需要前端自己写的.字典最终需要转换成excel给专业人员翻译,翻译完成后再转换成js字典文件. 如果手 ...

  8. 【JavaWeb】i18n 国际化

    i18n 国际化 什么是 i18n 国际化(Internationalization)指的是同一个网站可以支持多种不同的语言,以方便不同国家,不同语种的用户访问. 希望相同的一个网站,不同人访问的时候 ...

  9. jquery.i18n.properties前端国际化方案

    如果新项目要做系统国际化, 时下热门的任何一种技术选型都有成熟的方案,比如: vue + vue-i18n angular + angular-translate react + react-intl ...

随机推荐

  1. ABAP动态自建表维护程序Dynamin Process

    以前经常会遇到批量上传或修改数据到自建表的需求,所以在想是否可以做一个动态的程序,所有的自建表都可以用这个动态程序来维护. 于是就打算试着写动态的程序. 程序的要求:动态显示自建表ALV 动态下载Ex ...

  2. 微信小程序踩坑日记4——真机端解析json数组和开发平台不一样

    0. 引言 环境:访问服务器端php,获取json数组,并渲染在前台 问题描述:保证在开发平台上的正常运行,但是在真机端却出现了无法正确解析wx.request()返回的数据(特指无法解析res.da ...

  3. java实现序列化的两种方式

    1.Serializable接口 2.Externalizable接口 public class Demo2 implements Externalizable{ transient private ...

  4. Linux 内存文件系统-ramfs and tmpfs

    Linux内存文件系统:可满足高IO的要求 ramdisk: 基于虚拟在内存中的其他文件系统(ex2fs). 挂载方式:mount /dev/ram /mnt/ramdisk ramfs: 物理内存文 ...

  5. Linux—服务器之间传输文件

    https://www.jb51.net/article/82608.htm https://blog.csdn.net/taian1665/article/details/86492400 http ...

  6. 爬虫---PyQuert简介

    今天写一篇最近刚学习的一个第3方库pyquery,pyquery比bs4,lxml更强大的一个网页解析工具. 什么是pyQuery Pyquery是python的第3方库,PyQuery库也是一个非常 ...

  7. kettle教程---增量更新

    以下操作都在5.0.1版本下进行开发,其余版本可以进行自动比对 在平时工作当中,会遇到这种情况,而且很常见.比如:增量抽取(每隔2个小时抽取截至到上次抽取时间的记录) 一.操作前提: 存在3张表,源表 ...

  8. 2. Linux文件与目录管理

    一.目录与路径 1. 相对路径与绝对路径 绝对路径:路径写法[一定由根目录 / 写起],如:/usr/share/doc 相对路径:路径写法[不由 / 写起], /usr/share/doc 要到 / ...

  9. TeamyinyinFish-> 测试报告

    测试人员 1. 姓名:鱼嘤嘤 2. 年龄: 21 3. 职业: 大三学生 4. 感情状况: 单身 用户故事 软件工程课上,老师想要他们组实现一个小组项目,鱼嘤嘤原本想摸鱼,但是转念一想觉得 还是需要好 ...

  10. session:

    内容回顾: 多对多  class Pulisher(models.Model):  name = models.CharField(max_length=32) ​ class Book(models ...