2

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

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

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

4

1 回答 1

1

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

看起来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

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

例如:

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 文本选项的语法,比如--titleand --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。对于德语代码de LANGUAGE=de ./myscript.sh

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

  • 脚本文件
  • 语言环境
    • LC_MESSAGES
      • 我的脚本.sh.mo
      • myscript.sh.po
于 2018-05-27T21:21:10.973 回答