|
写了个简单的小插件,突然想将其中一些内容汉化,网上所找资料比较零散,后来折腾了一下,却突然发现有了效果,这里简单做下记录。
在 LUCI 官网得知,*.po 文件用来翻译源程序代码中的字符串。由于我编译过 Openwrt 的源码,于是在某个目录下看到许多 *.po 文件,打开一看,果然有料,如下图:
打开任意一个 po 文件,一看其结构,非常简单,就两条 :msgid 和 msgstr ,比如:
msgid "AHCP Server"
msgstr "AHCP 服务器"
msgid 是原文;msgstr 是译文。这个译文是你自定义的,准不准确都无关紧要。
在 LUCI 官网的 http://luci.subsignal.org/trac/wiki/Documentation/LMO 里看到,官方已经提供了一个转换 *.po 文件到 *.lmo 文件的工具,并知道其中一个源文件的名字是 lmo_po2lmo.c 。因此,你可以从 http://luci.subsignal.org/trac/browser/luci/trunk/libs/lmo/src 这个链接中看到完整的源代码,下载并编译出可执行文件即可。
如果你编译过 Openwrt 固件,并在 make menuconfig 里选择编译 LUCI,那么很容易在相关目录里找到已经编译好的可执行文件,它的名字是 po2lmo ,你可以使用 find 命令找到它。
如果有了 po2lmo 程序,那么转换 *.po 到 *.lmo 那就很简单了,用法为:
现在,假设你已经给 LUCI 写了个简单的 UI,但它是英文界面的,有些地方你想将其汉化。那么你将刚才转换得到的 lmo 文件存放在 /usr/lib/lua/luci/i18n 下,注意将其命名为 my.zh-cn.lmo ,zh-cn 标识是必须的,不然没法汉化。
接下来,比如我要汉化入口菜单(如 交换机,静态路由),那么转入到控制器目录下 /usr/lib/lua/luci/controller 编辑模块入口文件,在 index() 函数下添加一句 require("luci.i18n") ,并添加:
entry({"admin", "network", "NoAD"}, cbi("NoAD"), _("AD Killer"), 100).i18n = "my"
其中 "my" 就是 i18n 目录下的 lmo 文件的主名。
在插件的其它部分,在作为 translate() 函数参数的内容都会被自动汉化为资源文件里所定义的汉字。
刚接触 LUA 及 LUCI,许多地方还未弄清条理,以上内容均出自亲自试验,由于网上没找到一篇入门的汉化文章,因此上面胡扯瞎扯错漏难免,但也算为同样对 LUCI 感兴趣的入门朋友提供了一点帮助。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|