相关疑难解决方法(0)

bash本地化不适用于多行字符串(具有强语法或通过`eval`)

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)

bash localization

12
推荐指数
1
解决办法
675
查看次数

标签 统计

bash ×1

localization ×1