特定区域设置的消息引用

每个国际化扩展至少有一个名为 messages.json 的文件,该文件提供特定区域设置的字符串。本文档介绍了 messages.json 文件的格式。

注意:有关如何使扩展国际化的信息,请参阅我们的 i18n 指南。

messages.json 示例

以下代码显示了一个 messages.json 文件示例,该示例摘自我们的 notify-link-clicks-i18n 示例扩展。只有 "name" 和 "message" 字段是必需的。

json
{
  "extensionName": {
    "message": "Notify link clicks i18n",
    "description": "Name of the extension."
  },

  "extensionDescription": {
    "message": "Shows a notification when the user clicks on links.",
    "description": "Description of the extension."
  },

  "notificationTitle": {
    "message": "Click notification",
    "description": "Title of the click notification."
  },

  "notificationContent": {
    "message": "You clicked $URL$.",
    "description": "Tells the user which link they clicked.",
    "placeholders": {
      "url": {
        "content": "$1",
        "example": "https://mdn.org.cn"
      }
    }
  }
}

放置

您的 messages.json 文件需要放置在以每个文件支持的区域设置为名的目录中 — endeja 等。这些目录又需要放置在名为 _locales 的目录中,该目录位于扩展的根目录下。

成员详情

本节介绍 messages.json 文件中可能出现的每个成员。

name

每个顶级成员都以您正在本地化的消息字符串的名称命名,例如上面示例中的 "extensionName""notificationContent"。每个名称不区分大小写,并充当检索本地化消息文本的键。

名称可以包含以下字符

  • A-Z
  • a-z
  • 0-9
  • _ (下划线)
  • @

注意:您不应该定义以 @@ 开头的名称。这些名称是为 预定义消息保留的。

message

至少此属性必须为每个字符串设置。"message" 成员包含一个本地化字符串,该字符串可以包含 占位符。您可以使用

  • $placeholder_name$(不区分大小写)将特定的占位符(例如上面示例中的 $URL$)插入到您的字符串中。
  • $1$2$3 等,用于直接将从 i18n.getMessage() 调用中获取的值插入到您的字符串中。

其他注意事项

  • 字符串中出现的任意数量的连续美元符号将被替换为相同数量的美元符号减一。因此,$$ > $$, $$$ > $$, 等。
  • 当读取区域设置文件时,匹配 /\$([a-z0-9_@]+)\$/i 的令牌将替换为字符串 "placeholders" 对象中匹配的值。这些替换发生在处理消息中的任何 /\$\d/ 令牌之前。
  • 使用区域设置字符串时,匹配 /\$\d+/ 的令牌将替换为传递给 i18n.getMessage() 的替换值。
  • getMessage() 不会处理超过 9 个占位符/替换的调用。

description

可选

"description" 成员应包含消息字符串内容的描述,旨在帮助翻译人员尽可能地对字符串进行最佳翻译。

占位符

可选

"placeholders" 成员定义了一个或多个占位符子字符串,用于在消息中使用 — 这些可以用于硬编码您不想翻译的项目,或引用变量。

每个占位符子字符串定义本身有多个值

json
"url" : {
  "content" : "$1",
  "example" : "https://mdn.org.cn"
}

占位符名称

占位符名称用于在替换字符串中表示占位符(例如,"url" 变成 $url$)。它不区分大小写,并且可以包含与消息字符串 名称相同的字符。

content

"content" 项定义了占位符的内容。它可以是硬编码的字符串,例如 "My placeholder",但它也可以包含从 i18n.getMessage() 调用中获取的值。此属性是必需的。有关更多信息,请参阅 从 JavaScript 中检索消息字符串

示例

可选

可选的 "example" 项同样旨在通过向翻译人员展示占位符如何对最终用户显示,帮助他们选择最佳的本地化文件。