Shell脚本实现国际化
利用gettext实现shell脚本国际化
创建shell脚本
~$ vim test01
#!/bin/bash
alias GETTEXT='gettext "test01"'
HELLO_WORLD=$(GETTEXT "Hello word")
echo "$HELLO_WORLD"
echo "$(GETTEXT "Press any key to continue")"
注意:其中alias GETTEXT=’gettext “test01”’为最终.mo文件的名字
GETTEXT为标记
生成.pot文件
~$ xgettext -o test01.pot -L Shell --keyword=GETTEXT test01
注意:若需要对多个脚本进行国际化,可在test01后继续写上需要进行国际化翻译的脚本名,例如~$ xgettext -o test01.pot -L Shell --keyword=GETTEXT test01 test02;需要注意的是,这里test02中alias GETTEXT='gettext “test01”'这句话的”test01”要与test01保持一致,即将多个脚本文件的国际化翻译文件集成至同一个.mo文件中。
-L:表示进行国际化翻译的文件为shell文件
–keyword:表示仅翻译文件中被关键字GETTEXT标记的文字
-o:表示生成的.pot文件名字(可以取任意名字)
得到的.pot文件大概形式如下:
然后在对应的msgstr字段进行翻译
生成.po文件
~$: msginit -i test01.pot -l zh_CN.UTF-8 -o test01.po
注意:.po文件的名字可以随意定。
-i:用来指定所需翻译的 po 文件的原始档
-l:用来指定生成的 po 文件所用的语言区域 locale
-o:用来指定所生成的 po 文件翻译档的名称
生成.mo文件,即二进制文件
~$: msgfmt -o test01.mo test01.po
注意:这里的test01.mo的文件名要与shell脚本的alias字段保持一致,不然会无法调用test01.mo。
将.mo拷贝(安装)至/usr/share/locale/zh_CN/LC_MESSAGES/目录下
~$:sudo cp test03.mo /usr/share/locale/zh_CN/LC_MESSAGES/
此时运行shell脚本则能翻译成功: