我们有一个使用perl Locale :: TextDomain/gettext的翻译系统。 我们有一个问题,本地化在一个系统上运行,而不是在另一个系统上运行。
唯一明显的区别是环境变量LANG等于工作系统上的“en_GB.UTF-8”,而LANG未定义在非工作系统上。非工作系统没有/ etc/default/locale
导出破损系统上的LANG使其在工作系统上工作并取消设置。
下面的脚本演示:
#!/usr/bin/perl
use strict;
use warnings;
use Locale::TextDomain ('appdomain', '/path/to/language/folders');
use POSIX (':locale_h');
setlocale(LC_ALL, '');
$ENV{'LANGUAGE'} = 'it';
print __('Back'), "\n";
为什么我们需要有一个初步$ LANG如果我们指定的语言呢设定?
运行 '的Ubuntu 10.04.2 LTS' 和Locale :: TextDomain 1.20
虽然这个答案确实阐明了一些事情,但我应该注意到$ ENV {LANGUAGE} *的上述设置可以工作,但只有当预先存在LANG被设置了。 我的问题是为什么需要设置LANG,当gettext然后忽略LANG并使用我设置的LANGUAGE env时。 我不相信这个答案是答案,但我可能误解了。 – Steven
Locale :: TextDomain(和很多其他软件)只是使用libc调用setlocale()以及setlocale()的工作方式完全依赖于系统。对于GNU系统,东西在ABOUT-NLS中进行了解释,该文件包含在每个国际化的GNU软件包中。最新版本可以在这里找到:http://git.savannah.gnu.org/cgit/gettext.git/tree/gettext-runtime/ABOUT-NLS请参阅第1.2部分的第4段,以获得对您问题的回答。而且,我同意,L *环境的混乱远不是用户友好的。 –