Chrome浏览器扩展开发系列之十八:扩展的软件国际化chrome.i18n API
i18n是internationalization 的简写,这里将讨论软件国际化的问题。熟悉软件国际化的朋友应该知道,软件国际化要求,页面中所有用户可见的字符串都必须置于资源属性文件中。资源属性文件中的资源是形如“key=value”的键值对,一行一个。其中key为资源的标识符,用于HTML页面中,根据当前页面的Locale确定要使用的资源。value是资源的值,不同的Locale对应的资源值不同,在资源文件中统一用Unicode编码。
通过chrome.i18n API和相关的资源配置文件,可以实现Chrome浏览器扩展程序的国际化。
Chrome浏览器扩展中只支持唯一的message.json资源属性文件,注意这里的唯一性。message.json资源属性文件示例如下:
{
"key": {
"message": "\u4ea7\u54c1\u540d\u79f0",
"description": "The string we search for. Put %20 between words that go together."//可选
},
...
}
资源属性文件位于Chrome浏览器扩展的根目录下的_locales\locale_Code目录下,其中的locale_Code有专门的国际标准规定,比如中国大陆的简体中文对应zh_CN。需要说明的是,Chrome浏览器目前只支持部分Locale,忽略不支持的Locale。
Chrome浏览器扩展要实现软件国际化,必须在根目录下有_locales目录,而一旦有_locales目录就必须在manifest.json文件中指定默认Locale如下:
{
...
"default_locale": "zh_CN",
...
}
定义了资源属性文件后,Chrome浏览器扩展中的manifest.json、CSS和JavaScript文件中都可以通过资源属性文件中的key引用对应Locale的资源值,只是引用方式不同。在manifest.json和CSS文件中的引用方法如下:
__MSG_key__
在JavaScript文件中的引用方法如下:
chrome.i18n.getMessage("key")
其中,chrome.i18n.getMessage(…)方法还可以带第二个参数,以替换资源值中的占位符。第二个参数要么是一个字符串,要么是一个字符串数组(数组中最多9个元素)。
Chrome浏览器扩展的国际化机制中的预定义资源
|
资源名称 |
备注 |
|
@@extension_id |
Chrome浏览器扩展的ID,可用于动态构建与某Chrome浏览器扩展相关的URL 只能用于CSS和JavaScript文件,如__MSG_@@extension_id__ manifest.json中不可用 |
|
@@ui_locale |
当前页面的Locale,可用于动态构建与Locale相关的URL |
|
@@bidi_dir |
当前Locale的文本走向 "ltr"表示从左向右,"rtl"表示从右向左 |
|
@@bidi_reversed_dir |
与@@bidi_dir的值相反 如果@@bidi_dir为"ltr",则@@bidi_reversed_dir 为"rtl" 如果@@bidi_dir为"rtl",则@@bidi_reversed_dir 为"ltr" |
|
@@bidi_start_edge |
如果@@bidi_dir为"ltr",则@@bidi_start_dir 为"left" 如果@@bidi_dir为"rtl",则@@bidi_start_dir 为"right" |
|
@@bidi_end_edge |
如果@@bidi_dir为"ltr",则@@bidi_start_dir 为"right" 如果@@bidi_dir为"rtl",则@@bidi_start_dir 为"left" |
预定义资源的用法示例如下(在CSS文件中):
body {
background-image:url('chrome-extension://__MSG_@@extension_id__/background.png');
direction: __MSG_@@bidi_dir__;
}
div#header {
margin-bottom: .05em;
overflow: hidden;
padding-bottom: .5em;
padding-__MSG_@@bidi_start_edge__: ;
padding-__MSG_@@bidi_end_edge__: .5em;
position: relative;
}
Chrome浏览器扩展开发系列之十八:扩展的软件国际化chrome.i18n API的更多相关文章
- Chrome浏览器扩展开发系列之十四
Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 时间:2015-10-08 16:17:59 阅读:1361 评论:0 收藏:0 ...
- Chrome浏览器扩展开发系列之十四:本地消息机制Native messagin
Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 2016-11-24 09:36 114人阅读 评论(0) 收藏 举报 分类: PPAPI(27) 通过将浏览器 ...
- Chrome浏览器扩展开发系列之十九:扩展开发示例
翻译总结了这么多的官网内容,下面以一款博主开发的“沪深股票价格变化实时追踪提醒”软件为例,介绍Chrome浏览器扩展程序的开发,开发环境为Eclipse IDE+Chrome Browser. “沪深 ...
- Chrome浏览器扩展开发系列之十六:扩展中可用的Chrome浏览器API
除了Chrome浏览器支持的chrome.* API之外,Chrome浏览器扩展还可以使用Chrome浏览器为Web页面或Chrome app提供的APIs.对于Chrome浏览器2支持的API,还可 ...
- Chrome浏览器扩展开发系列之十五:跨域访问的XMLHttpRequest对象
XMLHttpRequest对象是W3C的标准API,用于访问服务器资源.XMLHttpRequest对象支持多种文本格式,如XML和JSON等.XMLHttpRequest对象可以通过HTTP和HT ...
- Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging
通过将浏览器所在客户端的本地应用注册为Chrome浏览器扩展的“本地消息主机(native messaging host)”,Chrome浏览器扩展还可以与客户端本地应用之间收发消息. 客户端的本地应 ...
- Chrome浏览器扩展开发系列之十二:Content Scripts
Content Scripts是运行在Web页面的上下文的JavaScript文件.通过标准的DOM,Content Scripts 可以操作(读取并修改)浏览器当前访问的Web页面的内容. Cont ...
- Chrome浏览器扩展开发系列之十:桌面通知Notification
Desktop Notification也称为Web Notification,是在Web页面之外,以弹出桌面对话框的形式通知用户发生了某事件.Web Notification于2015.9.10成为 ...
- Chrome浏览器扩展开发系列之十七:扩展中可用的chrome.events API
chrome.events中定义了一些常见的事件类型,可以供Chrome浏览器扩展程序发出对应的事件对象. 对于关注的事件,首先要通过addListener()在对应的事件上注册监听器,示例如下: c ...
随机推荐
- yum 安装rabbitMQ
环境:linux centos6.5 1.安装erlang 下载rpm仓库:wget http://packages.erlang-solutions.com/erlang-solutions-1.0 ...
- Kotlin初探
前几天看到新闻,Google将Kotlin语言作为Android应用开发的一级语言, 与Java并驾齐驱, 这则消息在开发界一下就炸开了锅( 好像平息的很快...)! 连Google的亲儿子go语言也 ...
- 写给Android App开发人员看的Android底层知识(7)
(十二)ContentProvider (1)ContentProvider是什么? ContentProvider,简称CP. 做App开发的同学,尤其是电商类App,对CP并不熟悉,对这个概念的最 ...
- 微信小程序 获取OpenId
微信小程序 官方API:https://mp.weixin.qq.com/debug/wxadoc/dev/api/ 首先 以下代码是 页面加载请求用户 是否同意授权 同意之后 用code 访问 微信 ...
- 如何使用kali的Searchsploit查找软件漏洞
Searchsploit Searchsploit会通过本地的exploit-db, 查找软件漏洞信息 打开kali的命令行, 输入: searchsploit 查看系统帮助 查找mssql的漏洞 如 ...
- python中的map、filter、reduce函数
三个函数比较类似,都是应用于序列的内置函数.常见的序列包括list.tuple.str. 1.map函数 map函数会根据提供的函数对指定序列做映射. map函数的定义: map(function ...
- NodeJs的简单介绍
Nodejs是由谷歌v8运行.c++编写的js运行的环境,这里需要记住的是Nodejs只是一个环境. 目前很多主流网站都是使用nodejs,如知乎等大型的网站. 我们关于nodejs学习目标:安装N ...
- 有关typename
为了避免潜在的语法解析二义性,你需要在从属于形式类型参数的类型名前面使用typename,这样的类型被称为从属类型(dependent type) (摘自effective STL)
- PyQt5环境搭建及cx_freeze打包exe
Python的图形库也有好几个,Qt文档和使用面还是要广一些. 打包成可执行文件的也有好几个,PyInstaller用的比较多,但是PyInstaller目前还不支持Python3.6(开发版支持3. ...
- 关于QT5使用QtScript解析QJsonArray数组的问题
首先得在pro文件中加入QT+=script 然后导入相应的头文件 include <QStringList> #include <QtScript/QScriptEngine> ...