原创声明:
本文章为原创,欢迎转载,但请给出本文链接,多谢合作。
本文链接:http://blog.youkuaiyun.com/epinszteinic/archive/2009/11/11/4799036.aspx
本文章为原创,欢迎转载,但请给出本文链接,多谢合作。
本文链接:http://blog.youkuaiyun.com/epinszteinic/archive/2009/11/11/4799036.aspx
最近正在学做firefox的扩展。做语言国际化的时候,虽然官方有教程 ,但是写的不够详细,着实让我费了好大劲。。。
把自己的经验写下来,作为官方教程的一个补充吧。
国际化有两种,一种是定义dtd,一种是使用properties文件。
首先介绍如何使用dtd。
dtd文件是用于xul文件(用户界面描述文件 -- 请允许我用这个词来翻译)里面。
如何进行配置才能正常使用?下面是步骤:
①构造文件夹:
你的应用 -- content
|- locale
.. |- en-US
|- zh-CN
|- ja-JP
..
②为你的dtd文件取个名字吧,在心里取好就行,或者写在纸上。我们暂时给它取个名字叫:abc.dtd
这个文件里面要怎么写,放在哪里?不要着急,下面接着写。需要明确的是,locale里的每个子文件夹里都有一个abc.dtd。
③在chrome.manifest文件里,添加声明。
locale news_common_viewer en-US locale/en-US/
locale news_common_viewer zh-CN locale/zh-CN/
locale news_common_viewer ja-JP locale/ja-JP/
...
locale news_common_viewer zh-CN locale/zh-CN/
locale news_common_viewer ja-JP locale/ja-JP/
...
④在要使用这个dtd的xul文件里声明使用,否则会报错。
如何加声明?代码片段(红字,位置也要注意,一般放在<?xml>的声明下面就可以):
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://myext/content/myext.css"?>
<!DOCTYPE window SYSTEM "chrome://myext/locale/abc.dtd">
<overlay id="xxx" ....以下省略>
Q:为什么是locale/abc.dtd,而不是locale/en-US/abc.dtd,locale/zh-CN/abc.dtd呢?
<?xml-stylesheet href="chrome://myext/content/myext.css"?>
<!DOCTYPE window SYSTEM "chrome://myext/locale/abc.dtd">
<overlay id="xxx" ....以下省略>
A:因为firefox会根据当前firefox的语言设置来自动去en-US、zh-CN、ja-JP这些文件夹里面找abc.dtd,所以声明的时候不需要en-US这些目录。因此,每个子目录里面,都会有一个abc.dtd。
⑤然后是用不同的语言编写每一个abc.dtd就可以了。
dtd的内容格式如下:
<!ENTITY key "value">
其中,key可以很长,可以用「.」分割,value为任意字符串文字。
举个例子:
<!ENTITY ok_btn.val "提交">
<!ENTITY ok_btn.accesskey "f">
<!ENTITY ok_btn.accesskey "f">
⑥写完dtd以后,就可以在xul文件里面使用了,以下是代码片段:
<popup id="pop1">
<menu id="pop_menu1" label=" &ok_btn.val; " accesskey=" &ok_btn.accesskey; " insertafter="context-reload">
...省略
</popup>
使用格式:「&」号,然后是key,然后是「;」号
<menu id="pop_menu1" label=" &ok_btn.val; " accesskey=" &ok_btn.accesskey; " insertafter="context-reload">
...省略
</popup>
dtd文件的使用就介绍到这里,下一篇是properties文件的使用。
测试环境: | |
Windows Vista | |
Firefox 3.5.5 |