bash有一个很好的功能,关于本地化(语言翻译):
TEXTDOMAIN=coreutils
LANG=fr_CH.utf8
echo $"system boot"
démarrage système
Run Code Online (Sandbox Code Playgroud)
(注意:对于这项工作,fr_CH.utf8已经在您的系统上生成了......否则您可以尝试使用自己的语言环境...或者安装locales并生成一个.)
问题:
但是如果这对于简单的字符串工作正常,那么当字符串包含一个\n(或者最坏的:一个反引号时,`事情会更复杂:
echo $"Written by %s, %s, %s,\nand %s.\n"
Written by %s, %s, %s,\nand %s.\n
Run Code Online (Sandbox Code Playgroud)
这不是参加的答案.
(Nota2:对于这项工作,必须在消息文件中准备确切的消息.mo,在此示例/测试中,我使用的是existant coreutils.mo文件,可以使用该命令取消格式化msgunfmt.)
总之,我发现进行翻译的唯一方法是:
eval echo \$\"$'Written by %s, %s, %s,\nand %s.\n'\"
Écrit par %s, %s, %s,
et %s.
Run Code Online (Sandbox Code Playgroud)
要么
msg=$'Written by %s, %s, %s,\nand %s.\n'
eval echo \$\""$msg"\"
Écrit par %s, %s, %s, …Run Code Online (Sandbox Code Playgroud)