Markdown Here 的国际化 (i18n) 系统使得该扩展能够在不同浏览器平台上以多种语言显示。本文档解释了 i18n 系统的结构、本地化字符串的管理方式以及构建和部署翻译的过程。
Markdown Here 扩展根据不同的浏览器平台采用不同的国际化方法:
该系统从一组定义所有用户可见字符串的源 JSON 文件开始,然后在构建过程中根据需要对其进行转换。
来源:utils/i18n.js1-157 src/_locales/en/messages.json1-361
所有本地化字符串最初都以 JSON 格式存储,遵循 Chrome 的国际化约定。每种语言都在 src/_locales/ 下有自己的目录。
JSON 结构遵循以下模式:
{
"message_key": {
"message": "Actual message text",
"description": "Explanation to help translators",
"inMozDTD": true/false (optional)
},
...
}
message_key: 字符串的唯一标识符message: 实际的翻译文本description: 供翻译人员参考的上下文inMozDTD: 当为 true 时,表示该字符串应包含在 Mozilla DTD 文件中英语 (en) 是参考语言,所有其他语言文件必须包含与英语文件相同的键。
来源:src/_locales/en/messages.json1-361 src/_locales/ja/messages.json1-355 src/_locales/fr/messages.json1-355 src/_locales/es/messages.json1-355 src/_locales/pt_BR/messages.json1-355
在构建过程中,i18n.js 工具脚本会将源 JSON 文件转换为平台特定格式。
构建过程执行多项字符串转换:
$$ 变为 $)inMozDTD: true 的字符串)在运行时,本地化字符串的访问方式因浏览器平台而异:
Chrome 扩展使用标准的 Chrome i18n API
Firefox/Thunderbird 扩展从生成的属性和 DTD 文件加载字符串
目前,Markdown Here 支持以下语言:
| 语言 | 区域码 | 文件 |
|---|---|---|
| 英语 | en | messages.json, strings.properties, strings.dtd |
| 日语 | ja | messages.json, strings.properties, strings.dtd |
| 法语 | fr | messages.json, strings.properties, strings.dtd |
| 西班牙语 | es | messages.json, strings.properties, strings.dtd |
| 巴西葡萄牙语 | pt_BR | messages.json, strings.properties, strings.dtd |
来源:src/_locales/en/messages.json1-361 src/_locales/ja/messages.json1-355 src/_locales/fr/messages.json1-355 src/_locales/es/messages.json1-355 src/_locales/pt_BR/messages.json1-355
Chrome 区域设置代码和 Mozilla 区域设置代码之间存在映射过程。这是必要的,因为这两个平台使用不同的区域设置标识标准。
区域设置映射在 chrome.manifest 文件中定义,并在构建过程中由 i18n.js 脚本处理。
在 Chrome i18n 字符串中,美元符号 ($) 用于占位符,因此要表示一个字面美元符号,源 JSON 中必须使用 $$。构建过程会处理此转换。
"message": "This costs $$10" --> Rendered as "This costs $10"
只有标记为 inMozDTD: true 的字符串才包含在生成的 DTD 文件中。这些通常是直接在 XUL/HTML 标记中使用的字符串,而不是通过 JavaScript 加载的。
来源:src/_locales/en/messages.json11-15 utils/i18n.js128-130
若要为 Markdown Here 添加新语言:
src/_locales/ 中创建新目录,并使用适当的语言代码messages.json 并翻译所有消息值chrome.manifest 中添加条目,将 Chrome 区域设置代码映射到 Mozilla 区域设置代码构建过程将处理为 Firefox/Thunderbird 创建所有必要文件。
Markdown Here 积极寻求社区的翻译贡献。鼓励贡献者帮助将此扩展翻译成新语言,如选项页面所述:
"Help make Markdown Here available in your language. Translations are welcome."
来源:src/_locales/en/messages.json319-321
i18n 系统的一些可改进领域:
不同浏览器对 i18n 的支持程度各不相同:
构建系统通过为每个平台生成相应的文件来处理这些差异。
i18n.js 脚本通过以下方式确保所有翻译文件包含完整的一组消息:
这种方法确保可以将新字符串添加到英语源文件中,而不会立即破坏其他语言文件。任何未翻译的字符串都将回退到英语,直到提供翻译。