如何翻译语言字符串 - zenity命令行实用程序

时间:2014-07-09 14:11:06

标签: user-interface localization locale language-translation zenity

我在ubuntu的shell脚本中使用zenity实用程序来显示GUI对话框。我想知道在更改系统区域设置时如何实现语言翻译。

zenity --question --title="" --text="Hello World. How was the day today..Good?" --width="500" --height="20"

在上面的命令中,如何实现英文文本的语言翻译“Hello World。今天怎么样......好吗?”用不同的语言。如果我将系统区域设置从英语更改为其他语言,默认情况下带有zenity的“是”,“否”按钮文本会自动更改,但如何翻译我的自定义文本?

1 个答案:

答案 0 :(得分:1)

我也在寻找答案。我在寻找答案时发现了这个问题。我正在寻找如何在bash脚本中使用.po和.pot文件的正确方法。

看起来gettext程序和朋友可以用来做这件事。

我发现这个好blog post解释得很好。虽然他将此用于echo,但这也可用于Zenity的字符串。

基础是这个。要使用gettext,您需要在脚本顶部设置两个环境变量。像这样的行:

export TEXTDOMAIN=$(basename $0) # Name of this script export TEXTDOMAINDIR==$(dirname "$(readlink -f "$0")")/locale # Location of this script 这样您就可以将翻译放在脚本旁边的文件夹中,如果您没有将其设置为/usr/share/locale,则为TEXTDOMAINDIR的默认位置。

并使用

在脚本中获取gettext.sh脚本

source gettext.sh

之后,您可以通过在子命令中使用eval_gettext包装来更改需要翻译的Zenity文本字符串。

例如:

zenity --info --title="Now opening programs!" --text="I will now open the starup programs for you. This will help you get the computer setup quicker. I will let you know when I am finished" --timeout=5

变为:

zenity --info --title="$(eval_gettext "Now opening programs!")" --text="$(eval_gettext "I will now open the starup programs for you. This will help you get the computer setup quicker. I will let you know when I am finished")" --timeout=5

因此,与--title--text等Zenity文本选项一起使用的语法如下所示:

"$(eval_gettext "Text string")"

我们有"Text string"双引号。

这是在eval_gettext子命令:$(eval_gettext "Text string")内,用双引号括起来,以便Zenity从双引号中获取子命令返回的字符串。 "$(eval_gettext "Text string")"

接下来,您需要使用xgettext创建翻译模板文件(.pot)。

xgettext -L Shell -o myscript.pot myscript

生成的.pot文件可以提供给您的翻译人员,他们可以使用Poedit等程序为他们的语言创建.po文件。然后,翻译人员可以将.po文件发送给您,以便包含在您的项目中。

如果您使用Poedit,还会在保存时为您创建.mo文件。在上面的TEXTDOMAINDIR中,您可以在脚本为以下文件夹结构的同一文件夹中创建:

locale/<LANG>/LC_MESSAGES/

替换为翻译的语言代码。我将.po文件放在LC_MESSAGES文件夹中翻译,然后用Poedit保存它以创建.mo文件。 .po的名称应与上面的TEXTDOMAIN变量加上.mo相同。如果您的脚本以.sh结尾,请将此包含在内。即。对于myscript.sh,.mo文件为myscript.sh.mo

如果您不使用Poedit,您还可以使用msgfmt制作.mo文件:

msgfmt -v myscript.sh.po -o myscript.sh.mo

要使用某种语言测试脚本,您可以像这样运行它。即。对于德语代码 de LANGUAGE=de ./myscript.sh

myscript.sh,德语(de),. po,.mo和文件夹的文件结构:

  • myscript.sh
  • 区域设置
    • LC_MESSAGES
      • myscript.sh.mo
      • myscript.sh.po