本文档描述了 Tabby 如何通过其本地化和国际化 (i18n) 系统管理多语言支持。它涵盖了用户界面的翻译过程以及应用程序如何适应不同的语言和区域偏好。
Tabby 在设计之初就考虑了国际化,提供了一个全面的系统,用于将应用程序的用户界面翻译和适应不同的语言和地区。该项目目前支持多种语言,并且有一个活跃的社区致力于扩展和维护这些翻译。
本地化系统基于 Angular 的国际化能力,并结合 NGX-translate 库和 MessageFormat 来处理复杂的翻译模式。翻译存储在 PO 文件(Gettext 格式)中,并通过专门的翻译平台进行管理。
来源:README.md4-6 tabby-core/src/services/locale.service.ts1-5
Tabby 的本地化系统以 LocaleService 为核心,它负责配置和管理整个应用程序的翻译。此服务与 Angular 的内置 locale 系统和 NGX-translate 库协同工作,为组件提供翻译。
来源:tabby-core/src/services/locale.service.ts1-6
来源:tabby-core/src/services/locale.service.ts1-6 locale/zh-CN.po1-14 locale/fr-FR.po1-14
应用程序启动时,本地化系统遵循以下顺序
LocaleService来源:tabby-core/src/services/locale.service.ts
Tabby 目前支持以下语言
| 语言代码 | 语言名称 |
|---|---|
| en-US | 英语 (美国) |
| en-GB | 英语(英国) |
| zh-CN | 中文(简体) |
| fr-FR | 法语 |
| zh-TW | 中文(繁体) |
| de-DE | 德语 |
| ja-JP | 日语 |
| it-IT | 意大利语 |
| pl-PL | 波兰语 |
| hr-HR | 克罗地亚语 |
| es-ES | 西班牙语 |
| ru-RU | 俄语 |
| bg-BG | 保加利亚语 |
随着社区成员贡献新的翻译,支持的语言列表持续增长。
来源:locale/zh-CN.po locale/fr-FR.po locale/zh-TW.po locale/de-DE.po locale/ja-JP.po locale/it-IT.po locale/pl-PL.po locale/hr-HR.po locale/es-ES.po locale/ru-RU.po locale/bg-BG.po
Tabby 使用协作翻译平台 (translate.tabby.sh) 来管理翻译。工作流程如下:
来源:README.md5
在 Tabby 代码库中,需要翻译的字符串通过以下方法进行标记
Translate Pipe:用于模板中的文本
Translate Directive:用于元素属性
Programmatic Translation:用于组件中的动态字符串
这确保了所有面向用户的文本都可以本地化为不同的语言。
除了应用程序用户界面,Tabby 还对其文档进行本地化。主 README 文件有多种语言版本:
这种方法确保了用户可以使用他们首选的语言访问文档。
来源:README.md28-30 .all-contributorsrc1-13
Tabby 使用 Gettext PO 格式存储翻译。每种语言在 locale 目录中都有其自己的 PO 文件。以下是这些文件结构的一个示例:
msgid "Original text"
msgstr "Translated text"
例如,来自中文翻译文件:
msgid "{name} copy"
msgstr "{name} 副本"
msgid "A second font family used to display characters missing in the main font"
msgstr "首选字体缺失时使用备选字体显示字符"
这种格式在本地化中广泛使用,并有良好的工具支持。
社区成员可以通过项目翻译平台 translate.tabby.sh 贡献 Tabby 的翻译。流程如下:
这种协作方法使 Tabby 能够通过社区贡献支持多种语言。
来源:README.md5
与 Angular 本地化系统的技术集成包括:
registerLocaleData() 为每种受支持语言注册 locale 数据这种方法利用了 Angular 的内置国际化能力,并通过 NGX-translate 库对其进行了扩展,以提供更大的灵活性。
来源:tabby-core/src/services/locale.service.ts1-6
为 Tabby 开发新功能时,请遵循以下最佳实践以确保正确的本地化
遵循这些实践将有助于确保为所有用户提供一致且高质量的本地化体验。