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的更多相关文章

  1. Chrome浏览器扩展开发系列之十四

    Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 时间:2015-10-08 16:17:59      阅读:1361      评论:0      收藏:0    ...

  2. Chrome浏览器扩展开发系列之十四:本地消息机制Native messagin

    Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 2016-11-24 09:36 114人阅读 评论(0) 收藏 举报  分类: PPAPI(27)  通过将浏览器 ...

  3. Chrome浏览器扩展开发系列之十九:扩展开发示例

    翻译总结了这么多的官网内容,下面以一款博主开发的“沪深股票价格变化实时追踪提醒”软件为例,介绍Chrome浏览器扩展程序的开发,开发环境为Eclipse IDE+Chrome Browser. “沪深 ...

  4. Chrome浏览器扩展开发系列之十六:扩展中可用的Chrome浏览器API

    除了Chrome浏览器支持的chrome.* API之外,Chrome浏览器扩展还可以使用Chrome浏览器为Web页面或Chrome app提供的APIs.对于Chrome浏览器2支持的API,还可 ...

  5. Chrome浏览器扩展开发系列之十五:跨域访问的XMLHttpRequest对象

    XMLHttpRequest对象是W3C的标准API,用于访问服务器资源.XMLHttpRequest对象支持多种文本格式,如XML和JSON等.XMLHttpRequest对象可以通过HTTP和HT ...

  6. Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging

    通过将浏览器所在客户端的本地应用注册为Chrome浏览器扩展的“本地消息主机(native messaging host)”,Chrome浏览器扩展还可以与客户端本地应用之间收发消息. 客户端的本地应 ...

  7. Chrome浏览器扩展开发系列之十二:Content Scripts

    Content Scripts是运行在Web页面的上下文的JavaScript文件.通过标准的DOM,Content Scripts 可以操作(读取并修改)浏览器当前访问的Web页面的内容. Cont ...

  8. Chrome浏览器扩展开发系列之十:桌面通知Notification

    Desktop Notification也称为Web Notification,是在Web页面之外,以弹出桌面对话框的形式通知用户发生了某事件.Web Notification于2015.9.10成为 ...

  9. Chrome浏览器扩展开发系列之十七:扩展中可用的chrome.events API

    chrome.events中定义了一些常见的事件类型,可以供Chrome浏览器扩展程序发出对应的事件对象. 对于关注的事件,首先要通过addListener()在对应的事件上注册监听器,示例如下: c ...

随机推荐

  1. ES6核心内容精讲--快速实践ES6(一)

    前言 本文大量参考了阮一峰老师的开源教程ECMAScript6入门,适合新手入门或者对ES6常用知识点进行全面回顾,目标是以较少的篇幅涵盖ES6及部分ES7在实践中的绝大多数使用场景.更全面.更深入的 ...

  2. React 读书笔记

    序言: 领导安排部门同事本月内看一本跟自己职业相关的书籍, 根基类的书籍已经看过了,重复阅读的意义不大,所以我平时看的都是视频,也许是视频作者没有出书的条件,也许是现在出书看的人越来越少了,也许有其他 ...

  3. Java静态代理与动态代理模式的实现

    前言:    在现实生活中,考虑以下的场景:小王打算要去租房,他相中了一个房子,准备去找房东洽谈相关事宜.但是房东他很忙,平时上班没时间,总找不到时间去找他,他也没办法.后来,房东想了一个办法,他找到 ...

  4. angularjs 水平滚动选中按钮高亮显示 swiper和回到顶部指令的实现ionic

    首先安装 swiper npm install --save swiper 或者 bower install --save swiper <link rel="stylesheet&q ...

  5. 两强相争,鹿死谁手 — JQuery中的Ajax与AngularJS中的$http

    一.JQuery与AngularJS 首先,先简单的了解一下JQuery与AngularJS.从源头上来说,两者都属于原生JS所封装成的库,两种为平行关系. 二.Ajax请求与数据遍历打印 这里是Aj ...

  6. (转)java匿名内部类详解

    原文:http://android.blog.51cto.com/268543/384844/   内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态static的 ...

  7. sleep()

    sleep() 方法可以使当前线程(即调用该方法的线程)暂停执行一段时间, 让其他线程有机会继续执行, 但它并不释放对象锁: 所以当sleep()方法结束时: 当前线程还是拥有对象锁: 当线程拥有对象 ...

  8. 【原创】Ajax的用法总结

    一.什么是Ajax Ajax英文全称为“ Asynchr JavsScript and XML”(异步的JavaScript和XML),是一种创建 交互式网页的开发技术. 二.Ajax技术的核心 Aj ...

  9. [原]vue实现全选,反选

    用vue写业务代码时候,后端大神丢给我一堆数据,要求是做全选,反选功能,然后把用户更改的数据全部返回给他 基本思路 如果父级选中了,那么父级下面的子集全部选中checked=true; 如果子集中选中 ...

  10. IIS虚拟目录与UNC路径权限初探

    最近在一个项目中涉及到了虚拟目录与UNC路径的问题,总结出来分享给大家. 问题描述 某客户定制化项目(官网),有一个图片上传的功能.客户的Web机器有10台,通过F5负载均衡分摊请求. 假设这10台机 ...