chrome扩展程序如何实现国际化

news/2025/2/23 22:38:16

先来看一个 manifest.json 文件的内容例子: 

{
"update_url": "https://clients2.google.com/service/update2/crx ",

    "default_locale": "en",
    "name": "__MSG_appName__",
    "short_name": "__MSG_appNameAbbr__",
    "version": "1.0.3",
    "manifest_version": 2,
    "description": "__MSG_appDesc__",
    "homepage_url": "https://fanyi.caiyunapp.com ",
    "icons": { 
        "16": "images/logo.png",
        "128": "images/logo.png"
    },
    "options_page": "options.html",
    "content_security_policy": "script-src 'self' 'unsafe-eval' https://www.google-analytics.com ; object-src 'self'; connect-src 'self' https://www.google-analytics.com  https://api.growingio.com/  https://caiyunapp.com/  https://biz.caiyunapp.com/  https://api.interpreter.caiyunai.com/  http://api.interpreter.caiyunai.com/  ws://api.interpreter.caiyunai.com/ http://sentry.in.caiyunapp.com/ ; frame-src 'self' https://caiyunapp.com/ ",
    "background": {
        "scripts": [
            "bkg.js"
        ],
        "persistent": true
    },
    "browser_action": {
        "default_title": "LingoCloud",
        "default_icon": "images/logo.png"
    },
    "permissions": [
        "tabCapture",
        "activeTab",
        "webRequest",
        "webRequestBlocking",
        "webNavigation",
        "storage",
        "tabs",
        "contextMenus",
        "cookies",
        "<all_urls>"
    ],
    "optional_permissions": [
       
    ],
    "web_accessible_resources": [
        "images/*",
        "css/*"
    ]
}

注意其中的

"default_locale": "en",
 "name": "__MSG_appName__",
 "short_name": "__MSG_appNameAbbr__",

"default_locale": "en"
  • 作用:指定扩展程序的默认语言。

  • 说明default_locale 指定了扩展程序的默认语言包路径。语言包通常存储在扩展的 _locales 文件夹中,例如 _locales/en/messages.json

  • 示例:如果设置为 "en",则默认加载 _locales/en/messages.json 文件中的国际化内容。

"name": "__MSG_appName__",
"short_name": "__MSG_appNameAbbr__"
  • 作用:定义扩展程序的完整名称和简短名称。

  • 说明

    • name 是扩展程序的完整名称,通常显示在扩展管理页面。

    • short_name 是扩展程序的简短名称,通常用于浏览器工具栏中的图标显示。

    • __MSG_appName____MSG_appNameAbbr__ 是国际化占位符,实际显示的内容会从语言包中读取。

__MSG_appName__ 和 __MSG_appNameAbbr__ 是国际化占位符,实际显示的内容会从语言包中读取。 这个读取过程是自动的吗?需要额外代码支持吗?

 

在 Chrome 扩展中,__MSG_<message_name>__ 是一种特殊的占位符,用于实现国际化(i18n)。这些占位符的内容会自动从扩展的语言包中读取,而不需要额外的代码支持。这个过程是由 Chrome 浏览器的扩展机制自动完成的。

国际化占位符的工作原理

  1. 占位符格式
    manifest.json 或 HTML 文件中,使用 __MSG_<message_name>__ 格式的占位符来表示需要国际化的字符串。例如:

    JSON复制

    "name": "__MSG_appName__",
    "short_name": "__MSG_appNameAbbr__"
  2. 语言包文件
    扩展需要在 _locales 文件夹下定义语言包文件。每个语言包文件是一个 JSON 文件,包含一组键值对,其中键是占位符中的 <message_name>,值是对应的本地化字符串。

    例如:

    • _locales/en/messages.json

      JSON复制

      {
        "appName": {
          "message": "LingoCloud",
          "description": "The full name of the application."
        },
        "appNameAbbr": {
          "message": "LC",
          "description": "The abbreviated name of the application."
        }
      }
    • _locales/zh_CN/messages.json

      JSON复制

      {
        "appName": {
          "message": "彩云小译",
          "description": "应用的完整名称。"
        },
        "appNameAbbr": {
          "message": "小译",
          "description": "应用的简称。"
        }
      }
  3. 自动解析
    当扩展加载时,Chrome 浏览器会根据用户的语言偏好(或扩展设置的语言)自动从对应的语言包文件中读取占位符的值,并替换 __MSG_<message_name>__ 占位符。

    • 如果用户的语言是英语(en),则从 _locales/en/messages.json 中读取。

    • 如果用户的语言是中文(zh-CN),则从 _locales/zh_CN/messages.json 中读取。

  4. 默认语言
    如果某些语言包中缺少某个占位符的定义,Chrome 会回退到 default_locale 指定的语言包。在你的例子中,default_locale"en",因此默认会使用 _locales/en/messages.json 中的值。

是否需要额外代码支持?

  • 不需要额外代码支持:对于 manifest.json 文件中的国际化占位符,Chrome 浏览器会自动处理解析过程。你只需要正确配置语言包文件即可。

  • HTML 和 JavaScript 中的国际化:如果需要在 HTML 或 JavaScript 中使用国际化字符串,可以通过 Chrome 提供的 i18n API 来实现。例如:

    • 在 HTML 中:

      HTML复制

      <div id="appName"></div>
      <script>
        document.getElementById("appName").textContent = chrome.i18n.getMessage("appName");
      </script>
    • 在 JavaScript 中:

      JavaScript复制

      const appName = chrome.i18n.getMessage("appName");
      console.log(appName);

总结

  • __MSG_<message_name>__ 占位符在 manifest.json 中的解析是自动完成的,不需要额外代码支持。

  • 语言包文件需要正确配置在 _locales 文件夹下,文件名格式为 <语言代码>/messages.json

  • 如果需要在 HTML 或 JavaScript 中实现国际化,可以使用 chrome.i18n.getMessage() 方法来动态获取本地化字符串。

通过这种方式,Chrome 扩展可以轻松实现多语言支持,而无需手动管理语言切换逻辑。


http://www.niftyadmin.cn/n/5863835.html

相关文章

lattice hdl实现spi接口

在lattice工具链中实现SPI接口通常涉及以下步骤: 定义硬件SPI接口的管脚。配置SPI时钟和模式。编写SPI主机或从机的控制逻辑。 展示了如何在Lattice工具链中使用HDL语言(例如Verilog)来配置SPI接口: lattice工程 顶层:spi_slave_top.v `timescale 1ns/ 1ps module spi_…

浅识Linux的DMA拷贝、MMAP映射与sendfile原理

Linux的DMA拷贝、MMAP映射与sendfile原理详解 1. DMA拷贝&#xff08;Direct Memory Access&#xff09; 原理&#xff1a; DMA&#xff08;直接内存访问&#xff09;是一种硬件机制&#xff0c;允许外设&#xff08;如网卡、磁盘控制器&#xff09;直接与内存交互&#xff0c…

Android studio如何把新项目上传到svn仓库

原文链接&#xff1a;1、Android studio svn上传新项目&#xff0c;2、Android Studio向SVN上传新项目 我在android studio上创建新项目&#xff0c;这项目名&#xff1a;MyApplication6 先看一下&#xff1a;TortoiseSVN\bin下的没有svn.exe的解决问题&#xff0c;把svn.ex…

第二章 基础知识(7) - 配置

注意 客户端上的用户可以看到配置和设置文件&#xff0c;用户可以篡改数据。 请勿在应用的配置或文件中存储应用机密、凭据或任何其他敏感数据使用 WebAssembly 或Auto模式时&#xff0c;请记住所有组件代码都会编译并发送到客户端&#xff0c;用户可以在客户端对其进行反向编…

算法系列之贪心算法

在算法中&#xff0c;贪心算法&#xff08;Greedy Algorithm&#xff09;是一种常见的解决优化问题的算法。贪心算法的核心思想是&#xff1a;在每一步选择中都采取当前状态下最优的选择&#xff0c;即贪心的做出局部最优的决策&#xff0c;从而希望最终能够得到全局最优解。尽…

AI革命下的多元生态:DeepSeek、ChatGPT、XAI、文心一言与通义千问的行业渗透与场景重构

前言 人工智能技术的爆发式发展催生了多样化的AI模型生态&#xff0c;从通用对话到垂直领域应用&#xff0c;从数据挖掘到创意生成&#xff0c;各模型凭借其独特的技术优势与场景适配性&#xff0c;正在重塑全球产业格局。本文将以DeepSeek、ChatGPT、XAI&#xff08;可解释人…

JAVAWeb之Servlet学习

认识 Servlet 就是 Sun 公司开发动态 Web 的一门技术 Sun 在这些 API &#xff08;Application Programming Interface&#xff0c;应用程序接口&#xff09;中提供一个接口叫做&#xff1a;Servlet&#xff0c;如果你想开发一个Servlet程序&#xff0c;只需要完成两个小步骤…

多门店协同管理困难重重,管理系统如何破局?

在零售业的快速发展中&#xff0c;越来越多的企业选择通过多门店的方式扩展市场。然而&#xff0c;随着门店数量的增加&#xff0c;企业在日常运营中的管理难度也逐渐加大&#xff0c;尤其是在协调各个门店之间的资源、信息和流程时&#xff0c;往往面临诸多挑战。如何在多门店…