添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

概念和用法

您需要将其所有面向用户的字符串放入名为 messages.json 的文件中。每次添加新的语言区域时,您都需要在名为 /_locales/_localeCode_ 的目录下添加一个消息文件,其中 localeCode 是一个代码,例如英语的代码为 en

以下是支持英语 ( en )、西班牙语 ( es ) 和韩语 ( ko ) 的国际化扩展程序的文件层次结构:

支持多种语言

假设您有一个扩展程序,其中包含下图所示的文件:

如需对此扩展程序进行国际化,您需要为每个面向用户的字符串命名,并将其放入 messages 文件中。扩展程序的清单、CSS 文件和 JavaScript 代码会使用每个字符串的名称来获取其本地化版本。

以下是该扩展程序经过国际化后的显示效果(请注意,它仍然只有英语字符串):

关于国际化的一些说明:

  • 您可以使用任何 受支持的语言区域 。如果您使用的是不受支持的语言区域,Google Chrome 会忽略该语言区域。
  • manifest.json 和 CSS 文件中,请按如下方式引用名为 messagename 的字符串:

    __MSG_messagename__
    
  • 在扩展程序或应用的 JavaScript 代码中,引用名为 messagename 的字符串,如下所示:

    chrome.i18n.getMessage("messagename")
    
  • 在每次调用 getMessage() 时,您最多可以提供 9 个要包含在消息中的字符串。如需了解详情,请参阅示例:getMessage

  • 某些消息(例如 @@bidi_dir@@ui_locale)由国际化系统提供。如需查看预定义消息名称的完整列表,请参阅预定义消息部分。

  • messages.json 中,每个面向用户的字符串都有一个名称、“message”项和可选的“description”项。名称是用于标识字符串的键,例如“extName”或“search_string”。“message”用于指定此语言区域中的字符串值。可选的“说明”可帮助译者了解字符串在您的扩展程序中的用法,因为译者可能无法看到字符串在扩展程序中的用法。例如:

    "search_string": { "message": "hello%20world", "description": "The string we search for. Put %20 between words that go together."

    如需了解详情,请参阅格式:因语言区域而异的消息

    扩展程序实现了国际化后,翻译起来就很简单了。您复制 messages.json、对其进行翻译,然后将副本放入 /_locales 下的某个新目录中。例如,如需支持西班牙语,只需将 messages.json 的翻译副本放在 /_locales/es 下即可。下图显示了之前的扩展程序以及西班牙语的新译文。

    预定义消息

    国际化系统提供了一些预定义的消息,可帮助您进行本地化。其中包括 @@ui_locale,以便您检测当前界面语言区域,以及一些 @@bidi_... 消息,以便您检测文本方向。后者的消息名称与 gadgets BIDI(双向)API 中的常量类似。

    无论扩展程序或应用是否本地化,都可以在 CSS 和 JavaScript 文件中使用特殊消息 @@extension_id。此消息不适用于清单文件。

    下表介绍了每条预定义消息。

    消息名称说明
    @@extension_id扩展程序或应用 ID;您可以使用此字符串构建扩展程序内资源的网址。即使未本地化的扩展程序也可以使用此消息。
    注意:您无法在清单文件中使用此消息。
    @@ui_locale当前语言区域;您可以使用此字符串构建基于语言区域的网址。
    @@bidi_dir当前语言区域的文本方向,对于从左到右的语言(例如英语),为“ltr”;对于从右到左的语言(例如阿拉伯语),为“rtl”。
    @@bidi_reversed_dir如果 @@bidi_dir 为“ltr”,则此值为“rtl”;否则,此值为“ltr”。
    @@bidi_start_edge如果 @@bidi_dir 为“ltr”,则此值为“left”;否则,此值为“right”。
    @@bidi_end_edge如果 @@bidi_dir 为“ltr”,则此值为“right”;否则,此值为“left”。

    以下示例展示了如何在 CSS 文件中使用 @@extension_id 构建网址:

    body {
      background-image:url('chrome-extension://__MSG_@@extension_id__/background.png');
    

    如果扩展程序 ID 为 abcdefghijklmnopqrstuvwxyzabcdef,则上一个代码段中的粗体线会变为:

      background-image:url('chrome-extension://abcdefghijklmnopqrstuvwxyzabcdef/background.png');
    

    以下是在 CSS 文件中使用 @@bidi_* 消息的示例:

    body {
      direction: __MSG_@@bidi_dir__;
    div#header {
      margin-bottom: 1.05em;
      overflow: hidden;
      padding-bottom: 1.5em;
      padding-__MSG_@@bidi_start_edge__: 0;
      padding-__MSG_@@bidi_end_edge__: 1.5em;
      position: relative;
    

    对于从左到右书写的语言(例如英语),粗体线会变成:

      dir: ltr;
      padding-left: 0;
      padding-right: 1.5em;
    

    您可以从许多语言区域中进行选择,其中有些语言区域(例如 en)支持单个翻译支持一种语言的多个变体(例如 en_GBen_US)。

    您可以将扩展程序本地化为 Chrome 应用商店支持的任何语言区域。如果此处未列出您的语言区域,请选择最接近的替代语言区域。例如,如果扩展程序的默认语言区域为 "de_CH",请在 Chrome 应用商店中选择 "de"

    您无需为每个受支持的语言区域定义每个字符串。只要默认语言区域的 messages.json 文件针对每个字符串都有值,无论翻译有多稀疏,您的扩展程序或应用都将运行。扩展程序系统会按如下方式搜索消息:

  • 在消息文件(如果有)中搜索用户的首选语言区域。例如,当 Google Chrome 的语言区域设置为英式英语 (en_GB) 时,系统会先在 /_locales/en_GB/messages.json 中查找消息。如果该文件存在且包含该消息,系统便不会再查找。
  • 如果用户的首选语言区域包含地区(即语言区域包含下划线:_),请搜索不含该地区的语言区域。例如,如果 en_GB 消息文件不存在或不包含消息,系统会在 en 消息文件中查找消息。如果该文件存在且包含该消息,系统便不会再查找。
  • 在 messages 文件中搜索默认语言区域。例如,如果扩展程序的“default_locale”设置为“es”,并且 /_locales/en_GB/messages.json/_locales/en/messages.json 均不包含消息,则扩展程序会使用 /_locales/es/messages.json 中的消息。
  • 在下图中,名为“colores”的消息在扩展程序支持的所有三个语言区域中都有,但“extName”仅在其中两个语言区域中。当使用英语(美国)的用户看到“Colors”标签时,使用英语(英国)的用户会看到“Colours”。美式英语和英式英语用户都会看到扩展程序名称“Hello World”。由于默认语言为西班牙语,因此使用任何非英语版本 Google Chrome 的用户都会看到“Colores”标签和“Hola mundo”扩展程序名称。

    设置浏览器的语言区域

    如需测试译文,您可能需要设置浏览器的语言区域。本部分介绍了如何在 WindowsMac OSLinuxChromeOS 中设置语言区域。

    Windows

    您可以使用特定于语言区域的快捷键或 Google Chrome 界面更改语言区域。快捷方式方法设置完成后,速度会更快,并且您可以同时使用多种语言。

    使用特定于语言区域的快捷方式

    如需创建和使用用于以特定语言区域启动 Google Chrome 的快捷方式,请按以下步骤操作:

  • 复制桌面上现有的 Google Chrome 快捷方式。
  • 重命名新快捷方式,使其与新语言区域相匹配。
  • 更改快捷方式的属性,以便“目标”字段指定 --lang--user-data-dir 标志。目标应如下所示:

    path_to_chrome.exe --lang=locale --user-data-dir=c:\locale_profile_dir
    
  • 双击快捷方式启动 Google Chrome。

  • 例如,若要创建用于启动西班牙语版 Google Chrome (es) 的快捷方式,您可以创建一个名为 chrome-es 的快捷方式,并为其指定以下目标:

    path_to_chrome.exe --lang=es --user-data-dir=c:\chrome-profile-es
    

    您可以根据需要创建任意数量的快捷方式,以便轻松以多种语言进行测试。例如:

    path_to_chrome.exe --lang=en --user-data-dir=c:\chrome-profile-en
    path_to_chrome.exe --lang=en_GB --user-data-dir=c:\chrome-profile-en_GB
    path_to_chrome.exe --lang=ko --user-data-dir=c:\chrome-profile-ko
    
    

    如需在 Windows 版 Google Chrome 中使用界面更改语言区域,请按以下步骤操作:

  • 应用图标 > 选项
  • 选择内部运作标签页
  • 滚动到网页内容
  • 点击更改字体和语言设置
  • 选择语言标签页
  • 使用下拉菜单设置 Google Chrome 语言
  • 重启 Chrome
  • Mac OS

    如需在 Mac 上更改语言区域,请使用系统偏好设置。

  • 在 Apple 菜单中,选择系统偏好设置
  • 个人部分下,选择国际
  • 选择语言和位置
  • 重启 Chrome
  • Linux

    如需在 Linux 上更改语言区域,请先退出 Google Chrome。然后,在同一行中设置 LANGUAGE 环境变量并启动 Google Chrome。例如:

    LANGUAGE=es ./chrome
    

    ChromeOS

    如需在 ChromeOS 上更改语言区域,请执行以下操作:

  • 在系统任务栏中,选择设置
  • 语言和输入法部分下,选择语言下拉菜单。
  • 如果没有列出您的语言,请点击添加语言并添加该语言。
  • 添加后,点击相应语言旁边的三点状 更多操作菜单项,然后选择以这种语言显示 ChromeOS
  • 点击所设语言旁边显示的重启按钮,重启 ChromeOS。
  • 您可以在 examples/api/i18n 目录中找到国际化示例。如需查看完整示例,请参阅 examples/extensions/news。如需查看其他示例以及有关查看源代码的帮助,请参阅示例

    getMessage()

    以下代码会从浏览器获取本地化消息,并将其显示为字符串。它会将消息中的两个占位符替换为字符串“string1”和“string2”。

    function getMessage() {
      var message = chrome.i18n.getMessage("click_here", ["string1", "string2"]);
      document.getElementById("languageSpan").innerHTML = message;
    

    您可以按如下方式提供和使用单个字符串:

      // In JavaScript code
      status.innerText = chrome.i18n.getMessage("error", errorDetails);
    
    "error"
    
    
    
    
        
    : {
      "message": "Error: $details$",
      "description": "Generic error template. Expects error parameter to be passed in.",
      "placeholders": {
        "details": {
          "content": "$1",
          "example": "Failed to fetch RSS feed."
    

    如需详细了解占位符,请参阅因语言区域而异的消息页面。如需详细了解如何调用 getMessage(),请参阅 API 参考文档

    getAcceptLanguages()

    以下代码会从浏览器获取 accept-languages,并通过以英文逗号分隔每个 accept-language 将其显示为字符串。

    function getAcceptLanguages() {
      chrome.i18n.getAcceptLanguages(function(languageList) {
        var languages = languageList.join(",");
        document.getElementById("languageSpan").innerHTML = languages;
    

    如需详细了解如何调用 getAcceptLanguages(),请参阅 API 参考文档

    detectLanguage()

    以下代码可从给定字符串检测最多 3 种语言,并将结果显示为以换行符分隔的字符串。

    function detectLanguage(inputText) {
      chrome.i18n.detectLanguage(inputText, function(result) {
        var outputLang = "Detected Language: ";
        var outputPercent = "Language Percentage: ";
        for(i = 0; i < result.languages.length; i++) {
          outputLang += result.languages[i].language + " ";
          outputPercent +=result.languages[i].percentage + " ";
        document.getElementById("languageSpan").innerHTML = outputLang + "\n" + outputPercent + "\nReliable: " + result.isReliable;
    

    如需详细了解如何调用 detectLanguage(inputText),请参阅 API 参考文档

    LanguageCode

    Chrome 47 及更高版本

    ISO 语言代码,例如 enfr。如需查看此方法支持的语言的完整列表,请参阅 kLanguageInfoTable。对于未知语言,系统会返回 und,这意味着 CLD 无法识别文本的 [百分比]

    detectLanguage()

    Promise Chrome 47 及更高版本
    chrome.i18n.detectLanguage(
      text: string,
      callback?: function,
    )

    使用 CLD 检测所提供文本的语言。

    要翻译的用户输入字符串。

    callback

    函数(可选)

    callback 参数如下所示:

    (result: object) => void

    LanguageDetectionResult 对象,用于存储检测到的语言可靠性和 DetectedLanguage 数组

    isReliable

    CLD 检测到的语言可靠性

    object[]

    DetectedLanguage 数组

    language

    检测到的语言所占的百分比

    chrome.i18n.getAcceptLanguages(
      callback?: function,
    )

    获取浏览器的 accept-languages。这与浏览器使用的语言区域不同;如需获取语言区域,请使用 i18n.getUILanguage

    callback

    函数(可选)

    callback 参数如下所示:

    (languages: string[]) => void

    字符串[]

    LanguageCode 数组

    Promise<LanguageCode[]>

    Chrome 99 及更高版本 清单 V3 及更高版本支持 Promise,但为了实现向后兼容性,我们提供了回调。您不能在同一函数调用中同时使用这两种方法。promise 的解析结果与传递给回调的类型相同。

    getMessage()

    chrome.i18n.getMessage(
      messageName: string,
      substitutions?: any,
      options?: object,
    )

    获取指定消息的本地化字符串。如果缺少消息,此方法会返回空字符串(“”)。如果 getMessage() 调用的格式有误(例如,messageName 不是字符串,或者 substitutions 数组包含的元素超过 9 个),此方法会返回 undefined

    messageName

    消息的名称,如 messages.json 文件中所指定。

    substitutions

    任意(可选)

    最多 9 个替换字符串(如果消息需要)。

    对象(可选)

    Chrome 79 及更高版本
    escapeLt

    布尔值(可选)

    在将文本翻译为 &lt; 时,转义 <。这仅适用于消息本身,而不适用于占位符。如果翻译内容是在 HTML 上下文中使用,开发者可能需要使用此属性。与 Closure Compiler 搭配使用的 Closure 模板会自动生成此文件。

    针对当前语言区域本地化的消息。

    如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。

    最后更新时间 (UTC):2025-02-12。

    [[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-02-12。"],[],[]]
  •