Angular 中进行国际化(Internationalization,i18n)涉及一系列任务,从提取可本地化的文本到应用中,到动态切换语言,都需要考虑一些关键的任务。以下是一些常见的 Angular 国际化任务:

1. 提取可本地化的文本:

使用 Angular 提供的 ng extract-i18n 命令,你可以从应用中提取待本地化的文本,并生成一个 XLIFF 文件,这是一个标准的 XML 格式,包含待翻译的文本。
ng extract-i18n

2. 翻译文本:

在提取的 XLIFF 文件中,你可以找到待翻译的文本。将其提供给翻译团队或者使用翻译工具进行翻译。每个目标语言都需要一个对应的 XLIFF 文件。

3. 配置应用以支持多语言:

在 Angular 项目的 angular.json 文件中,配置应用以支持多语言。指定源语言和每个目标语言的 XLIFF 文件。
{
  "projects": {
    "your-i18n-app": {
      // ...
      "architect": {
        "build": {
          "configurations": {
            "production": {
              // ...
              "i18n": {
                "sourceLocale": "en-US",
                "locales": {
                  "fr": "src/locale/messages.fr.xlf",
                  "de": "src/locale/messages.de.xlf"
                }
              }
            }
          }
        }
      }
    }
  }
}

4. 编译应用以生成多语言版本:

使用 ng build --prod --localize 命令编译应用,生成各个目标语言的版本。
ng build --prod --localize

5. 动态切换语言:

在应用中动态切换语言,可以通过 Angular 的 LOCALE_ID 服务和 DOCUMENT 服务实现。在组件中注入这些服务,然后使用 setLocale 方法切换语言。
import { Component, Inject, LOCALE_ID } from '@angular/core';
import { DOCUMENT } from '@angular/common';

@Component({
  selector: 'app-root',
  template: `
    <button (click)="switchLanguage('en-US')">English</button>
    <button (click)="switchLanguage('fr')">Français</button>
  `,
})
export class AppComponent {
  constructor(@Inject(DOCUMENT) private document: Document, @Inject(LOCALE_ID) private locale: string) {}

  switchLanguage(language: string): void {
    this.document.documentElement.lang = language;
    this.locale = language;
  }
}

6. 日期和时间的本地化:

Angular 的国际化模块提供了 DatePipe 和 CurrencyPipe 等管道,它们可以自动根据当前语言环境对日期、时间和货币进行本地化。
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  template: `
    <p>{{ today | date }}</p>
    <p>{{ price | currency }}</p>
  `,
})
export class AppComponent {
  today = new Date();
  price = 1234.56;
}

这只是 Angular 国际化中的一些常见任务。具体的任务可能会根据应用的需求而有所不同。查阅 Angular 的官方文档和国际化模块的文档,以获取更详细的信息和示例。


转载请注明出处:http://www.pingtaimeng.com/article/detail/4965/Angular