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



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

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

在上面的命令中,如何实现英文文本"Hello World"的语言翻译。今天过得怎么样……还好吗?"如果我将系统语言环境从英语更改为其他语言,则默认情况下带有zenity的"Yes","No"按钮文本会自动更改,但是如何翻译我的自定义文本呢?

我也在寻找这个问题的答案。我在寻找答案的时候发现了这个问题。我在正确的轨道上搜索如何使用。po和。pot文件在bash脚本。

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

我发现了一篇很好的博客文章,很好地解释了这一点。虽然他将此用于echo,但也可以用于Zenity的字符串。

基本是这样的。要使用gettext,您需要在脚本的顶部设置两个环境变量。如下所示:

export TEXTDOMAIN=$(basename $0) # Name of this script export TEXTDOMAINDIR==$(dirname "$(readlink -f "$0")")/locale # Location of this script 这将允许你把你的翻译放在文件夹旁边的脚本TEXTDOMAINDIR的默认位置,如果你没有设置它是/usr/share/locale

,并在脚本中使用

生成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

所以使用Zenity文本选项的语法,如--title--text,看起来像这样:

"$(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结尾,请将此包含到。ie。对于myscript.sh, .mo文件将是myscript.sh.mo

如果你不使用Poedit,你也可以使用msgfmt来制作。mo文件:

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

用一种语言测试你的脚本,你可以像这样运行它。ie。对于德语代码deLANGUAGE=de ./myscript.sh

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

  • myscript.sh
  • 语言环境
    • LC_MESSAGES
      • myscript.sh.mo
      • myscript.sh.po

相关内容

  • 没有找到相关文章

最新更新