Chrome扩展程序i18n:重定向到特定于语言环境的内容

时间:2014-01-20 23:14:42

标签: google-chrome internationalization locale

问题:如何根据用户的首选语言,将用户重定向到最相关的内容,位于3个不同的子目录中?

我有什么

我创建了3个不同的_locales子目录,每个子目录包含特定于语言的messages.json文件:

  • _locales / EN / messages.json
  • _locales / EN_GB / messages.json
  • _locales / DE / messages.json

在根目录的manifest.json中,这已经很好用,正如预期的那样,使用以下方法正确地调整扩展名的名称和描述:

的manifest.json

{
  "manifest_version": 2,

  "name": "__MSG_extensionName__",
  "description": "__MSG_extensionDescription__",
  "version": "1.0",

  "default_locale": "en",

  "browser_action": {
    "default_title": "__MSG_extensionName__",
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  }
}

我被困的地方

当用户点击我的扩展程序图标时,我还想从最相关的子目录加载特定于语言的内容 - 而不是“default_popup”:“popup.html”行 - 因为有些网址是我从popup.html文件链接到的语言也不同:

  • _locales / EN / popup.html
  • _locales / EN_GB / popup.html
  • _locales / DE / popup.html

所以我认为最好的方法是从我的root manifest.json中交换当前读取的那一行

"default_popup": "popup.html"

带有一行

"default_popup": "__MSG_initialContent__"

然后在每个_locales子目录中的messages.json文件都有

"initialContent": {
    "message": "popup.html"
}

以便从该子目录中本地读取内容。

但是:这就是它崩溃的地方。然后我收到“此网页未找到错误”。

我尝试过这些不同的变化(以下是_locales / de / messages.json的示例) - 但都导致了相同的错误消息:

"initialContent": {
    "message": "popup.html"
}

然后

"initialContent": {
    "message": "_locales/de/popup.html"
}

然后

"initialContent": {
    "message": "/de/popup.html"
}

最后

"initialContent": {
    "message": "de/popup.html"
}

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

我知道这个问题很老,但是我才发现它,我想这对将来的访问者来说很不错的解决方案。

您需要达到"Predefined messages"

报价:

  

预定义的消息

     

国际化系统提供了一些预定义的消息来帮助您进行本地化。其中包括 @@ui_locale ,因此您可以检测到当前的UI区域设置,...

     

[...]

     

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

     

下表描述了每个预定义的消息。

     

@@extension_id   扩展名或应用ID;您可以使用此字符串为扩展程序内的资源构造URL。即使是未本地化的扩展程序也可以使用此消息。   注意:您不能在清单文件中使用此消息。

     

@@ui_locale 当前语言环境;您可以使用此字符串来构造特定于语言环境的URL。

     

[...]