曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 9494|回复: 0
打印 上一主题 下一主题

简单介绍一下如何汉化

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2014-12-17 20:56:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
写了个简单的小插件,突然想将其中一些内容汉化,网上所找资料比较零散,后来折腾了一下,却突然发现有了效果,这里简单做下记录。

在 LUCI 官网得知,*.po 文件用来翻译源程序代码中的字符串。由于我编译过 Openwrt 的源码,于是在某个目录下看到许多 *.po 文件,打开一看,果然有料,如下图:


打开任意一个 po 文件,一看其结构,非常简单,就两条 :msgidmsgstr ,比如:
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 那就很简单了,用法为:
po2lmo my.po my.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
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-3 21:40 , Processed in 0.091451 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表