Angular 国际化

什么是国际化?

国际化,通常被称作 i18n,是指设计和开发软件产品,使其能够轻松地适应不同的语言、地区和文化的过程。

在项目中,本地化过程包含以下两个步骤:

  • 提取出用于翻译的文本
  • 将文本翻译成各个区域的语言

准备工作

  1. 运行 ng version, 检查 Angular Cli 版本号,建议不要低于 16.0.0
  2. 运行 ng new my-app,初始化项目,或者使用现有项目。

开始

添加本地化包

bash 复制代码
ng add @angular/localize

设置源区域 ID

关于区域设置 ID 请参阅 [Unicode 语言和区域设置标识符]

json 复制代码
// angular.json
{
  // 注意:my-app 是你自己的项目名
  "my-app": {
    "i18n": {
      "sourceLocale": "zh"
    }
  }
}

标记文本

angular 组件中有两处地方可标记文本:

1、在组件模板中

html 复制代码
<!-- 标记元素标签中的文本 -->
<h1 i18n>Hello i18n!</h1>

<!-- 标记无元素标签的文本 -->
<ng-container i18n>Hello i18n!</ng-container>

<!-- 标记元素属性中的文本 -->
<img i18n-title title="Angular logo" />

2、在组件代码中

ts 复制代码
// 一般文本
const name = $localize`Jony`;

// 含有变量
const text = $localize`Hello i18n! ${name}`;

提取源语言文件

运行命令 ng extract-i18n 创建一个源语言文件。

可以自定义位置、格式和文件名称:

命令选项 描述
--format 设置输出文件的格式(可选:xlf/xlf2/xmb/json/arb)
--out-file 设置输出文件的名称
--output-path 设置输出目录的路径

本文创建一个 messages.xlf 文件放在 src/locale 目录下:

bash 复制代码
ng extract-i18n --format xlf2 --out-file messages.xlf --output-path src/locale

翻译源文件

复制一份文件并重命名

bash 复制代码
# locale 为目标语言,例如:messages.en.xlf
messages.xlf --> messages.{locale}.xlf

source 标签中的内容翻译成相应地区的语言,并放置在新增的 target 标签中

html 复制代码
<!-- messages.en.xlf -->
<trans-unit id="1954851963553192813" datatype="html">
  <source>内容区</source>
  <target>Content</target>
  <context-group purpose="location">
    <context context-type="sourcefile">src/app/container/container.component.html</context>
    <context context-type="linenumber">7,8</context>
  </context-group>
</trans-unit>

配置翻译文件路径

json 复制代码
{
  "i18n": {
    "sourceLocale": "zh",
    "locales": {
      "en": {
        "translation": "src/locale/messages.en.xlf"
      }
    }
  }
}

到这一步为止就已经完成了!

测试

本地验证

angular.json 中添加如下配置:

json 复制代码
{
  "architect": {
    "build": {
      "configurations": {
        "en": {
          "localize": ["en"]
        }
      }
    },
    "serve": {
      "configurations": {
        "en": {
          "buildTarget": "my-app:build:en"
        }
      }
    }
  }
}

package.json 中添加运行命令

json 复制代码
{
  "scripts": {
    "start:en": "ng serve --configuration=en"
  }
}

最后运行 npm run start:en 就可以在本地验证当前语言是否正确了。

生产环境

配置了多语言之后,通过 npm run build 打包出来的 dist 结构如下:

复制代码
└─ dist
│  └─ my-app
│  │  ├─ zh
│  │  ├─ en
│  │  └─ fr

它给每一种语言都打包了一份文件,通过 nginx 配置每一种语言对应的文件路径,

例如 /zh --> /dist/my-app/zh/index.html,切换语言的时候只需要更改 url 上的路由即可。

conf 复制代码
server {
  listen 80;
  server_name localhost;
  root /www/data/my-app;

  location ~ ^/(zh|en|fr) {
    try_files $uri /$1/index.html?$args;
  }
}
相关推荐
贩卖黄昏的熊25 分钟前
JavaScript 笔记 --- part8 --- JS进阶 (part3)
前端·javascript·笔记
Enti7c2 小时前
JavaScript 实现输入框的撤销功能
开发语言·javascript·ecmascript
每次的天空2 小时前
Android学习总结之GetX库篇(场景运用)
android·javascript·学习
丨丨三戒丶5 小时前
layui轮播图根据设备宽度图片等比例,高度自适应
前端·javascript·layui
24白菜头5 小时前
CSS学习笔记
前端·javascript·css·笔记·学习
GISer_Jing8 小时前
前端开发 Markdown 编辑器与富文本编辑器详解
前端·javascript
hylreg8 小时前
xml 和 yaml 的区别
xml·javascript·webpack
Aaaa小嫒同学9 小时前
在spark中配置历史服务器
服务器·javascript·spark
阿珊和她的猫9 小时前
动态指令参数:根据组件状态调整指令行为
前端·javascript·vue.js
xiegwei9 小时前
vue+element 导航 实现例子
前端·javascript·vue.js