使用gettext工具实现脚本国际化

原博文内容: 

1、首先通过一个简单的脚本来实践(原博文链接:http://t.csdnimg.cn/8IPPq):
#!/bin/bash
alias GETTEXT=‘gettext “test01“’				//这里的alias语句似乎无法在bash下正常执行,alias语句的功能见原博文
HELLO_WORLD=$(GETTEXT “Hello world”)		//在没有前面的alias的语句的情况下,GETTEXT只是占位符,没有任何含义,所以										在不使用alias语句的情况下应该小写为gettext才能成功生效
echo “$HELLO_WORLD“					//这个语句和其上一行语句是一个整体,两个合起来的效果与下面的语句相同,即										可以改为:echo “$(GETTEXT “Hello world”)”
echo “$(GETTEXT ”Press any key to continue“)“	

这里创建了名为test01的脚本。

以上的脚本中,主要是使用了gettext工具对echo语句的内容进行了标记:

如对于:echo "hello world"

标记后的样式为:echo "$(gettext "hello world")"

注:gettext后有空格。同时这次的测试脚本中使用的gettext为大写是因为使用了alias,个人不推荐使用alias,修改后的内容见后续步骤。

2、然后对于标记完成的脚本,使用命令生成.pot文件:
xgettext -o test01.pot -L Shell --keyword=GETTEXT test01
  
//这里的第一个文件名指的是要生成的.pot文件的文件名,后一个文件名指的是翻译的脚本文件名,即上一页的脚本文件.

翻译的工作就在生成的.pot文件中进行。

.pot文件内容如图所示:

对于新生成的.pot文件,msgstr后的引号中是空的,翻译工作就在此进行,输入每个语句对应的翻译内容到引号中,在实现翻译的时候即可将对应的语句切换为手动输入的翻译内容。

3、生成.pot文件后需要生成中间文件.po文件:
msginit -i test01.pot -l zh_CN.UTF-8 -o test01.po

//po文件主要是指定了语言区域.这个语言区域决定了gettext工具在翻译时去哪里寻找.mo文件(关于mo文件的路径选择在后面阐述)
4、最后是将.po文件生成.mo文件:
msgfmt -o test01.mo test01.po	
			
// 容易看出前一个是生成.mo文件的文件名,后一是用于生成.mo文件所依赖的.po文件的文件名
至此对应的翻译域文件(.mo文件)就会生成在当前的目录下     
5、.mo文件位置的修改:
对于该教程中的案例,原博文作者选择的是非常标准的路径:
通过命令拷贝到目标路径:sudo cp test01.mo /usr/share/locale/zh_CN/LC_MESSAGES/
然后运行即可实现对原来脚本的翻译.
注意:原博文运行时是用sh的模式运行的而不是直接以bash运行,因为似乎alias不支持bash。

个人对原博文内容的改进:

因为考虑到原博文作者使用了alias进行翻译,不能直接./运行,所以通过定义变量的方式对相关内容进行对应的修改:


对于之前的脚本的内容,取消掉alias语句,因此后面使用GETTEXT捕捉文本内容的语句需要吧GETTEXT改为小写gettext.


在脚本内容开始定义两个变量:
export TEXTDOMAIN=“test01”    //这个变量定义的内容是.mo文件的文件名
export TEXTDOMAINDIR=“./locale”    //这个变量定义的内容是.mo文件的路径,以我这个路径为例的话,指的就是去当前目录下的子目录locale内寻找.mo文件


这里为了配合寻找.mo文件的路径,需要在locale目录下创建和开始提到的标准目录相同的目录,即在locale下创建额外的文件夹zh_CN,然后再zh_CH文件夹下再创建LC_MESSAGES文件夹,然后需要将.mo文件放在该目录下.
即.mo文件的位置应该修改为当前目录下的locale/zh_CN/LC_MESSAGES/


以上路径需要手动创建,可以直接在图形界面创建和移动.mo文件,比较方便
最后就可以直接以命令:./test01运行脚本并得到翻译后的内容,不需要添加sh

最后大概的文件结构如图:


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值