在 bash 中使用 gettext
如何在bash脚本中使用gettext?
我只找到了这个页面,但我不明白。
我的脚本是这样写的:
#!/bin/bash
. lang_file.sh
echo $LANG_HELLO_WORLD
lang_file.sh 看起来像这样:
#!/bin/bash
LANG_HELLO_WORLD="Hello World"
我想使用 gettext 将 lang_file.sh 更改为某些内容,如下所示:
#!/bin/bash
LANG_HELLO_WORLD=`some gettext command to get string in user language`
我想使用 Launchpad 中的代码,以便其他用户可以翻译它(.po、.pot 文件)
抱歉英语不好,有什么建议吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您需要执行以下步骤:
标记要翻译的字符串。以下代码片段给出了示例:
我们将其命名为
PRJ.sh
:<前><代码>#!/bin/sh
别名 GETTEXT='gettext "PRJ"'
## 使用GETTEXT标记要翻译的字符串
HELLO_WORLD=$(GETTEXT "你好世界")
回显“$HELLO_WORLD”
生成 .pot 文件,以便翻译人员可以对其进行处理。
运行以下命令,它只会查找 GETTEXT,即您真正想要翻译的内容。
可选:生成 .po 文件。
对于您想要覆盖的每个区域。
请注意,建议使用“UTF-8”,否则
msginit
可能会错误地为您选择一些过时的编码。检索完成的.po文件,并将其转换为.mo文件(机器可以读取的文件)
安装.mo 文件。运行:
现在您可以尝试结果:
您应该会看到 Hello world 的法语翻译。
You need to preform following steps:
Mark the strings to be translated. Following snippet gives example:
Let's call it
PRJ.sh
:Produce .pot file so translators can work on it.
Run the following command, it only looks for GETTEXT, the ones you actually want to translate.
Optional: Generate .po files.
For each locale you want to cover.
Note that "UTF-8" is sugggested, otherwise
msginit
may mistakenly choose some obsoleted encoding for you.Retrieve completed .po files, and convert them to .mo file (the file that machine can read it)
Install .mo files. Run:
Now you can try the result:
and you should see French translation for Hello world.
bash 中有一个失传已久、从未记录且几乎已弃用的内置解决方案。
There is a long-lost, never-documented and almost-deprecated builtin solution in bash.
gettext翻译使用可编辑格式*.po来存储翻译,并使用编译格式*.mo来加载。
有关文件格式的信息,请参考此处:https://www.gnu.org/software/gettext/manual/html_node/index.html
这里我重点介绍如何尝试
gettext
命令来获取简短的翻译。在您准备好具有内部层次结构(如
/LC_MESSAGES/)的文件夹 /path/to/your/locale 后, .mo
(其中
是韩语的ko_KR
),请在lang_file.sh
中使用以下代码:The gettext translation make use of an editable format *.po to store translation, and a compiled format *.mo for loading.
For info of the files format, reference here: section "3 The Format of PO Files" and "10 Producing Binary MO Files" of https://www.gnu.org/software/gettext/manual/html_node/index.html
Here I focus on how to try the
gettext
command to get a translation in short.After you prepared a folder /path/to/your/locale with inside-hierarchy like
<lang>/LC_MESSAGES/<textdomain>.mo
(where<lang>
is e.g.ko_KR
for Korean), use the following code in yourlang_file.sh
:我认为您想做的是用适当的语言询问用户?您可能希望用户首先选择语言。您所要求的另一部分只是将 $(get_some_str_func) 之类的命令嵌入到变量中。
我没有编写这段代码,但它可能符合您想要做的事情?我不确定,我不完全明白你在问什么。
What you are looking to do is I think ask the user in the appropriate language? You would probably want the user to pick the language first. The other part of what you are asking is simply just embedding commands like $(get_some_str_func) inside of your variable.
I did not write this code but it might be along the lines of what you are trying to do? I'm not sure, i don't understand fully what you are asking.
这是我尝试为 创建的演示示例代码Bash 参考手册中的国际化脚本 部分。
script.sh
:使其可执行
chmod +x script.sh
。.pot
) 和 PO(.po
) 文件:es.po
和fr.po
> 文件并添加翻译。例如 es.po:
.mo
文件注意:该示例使用本地目录中的翻译文件。并且不需要安装到其他常见地方。
Here is my attempt to create a demo example code for Creating Internationalized Scripts section from Bash Reference Manual.
script.sh
:Make it executable
chmod +x script.sh
..pot
) and PO(.po
) files:es.po
andfr.po
files and add translations.For example es.po:
.mo
filesNOTE: The example used the translation files from local directory. And installation to other common place is not required.