我們有一個使用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 *環境的混亂遠不是用戶友好的。 –