首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未初始设置$LANG时,Locale::TextDomain失败

未初始设置$LANG时,Locale::TextDomain失败
EN

Stack Overflow用户
提问于 2011-09-22 19:34:02
回答 2查看 301关注 0票数 1

我们有一个使用perl Locale::TextDomain/gettext的翻译系统。我们有一个问题,本地化在一个系统上工作,而不是在另一个系统上工作。

唯一明显的区别是,在工作系统上环境变量LANG等于'en_GB.UTF-8‘,而在非工作系统上没有定义LANG。非工作系统没有/etc/default/locale

在已损坏的系统上导出LANG会使其正常工作,而在正常工作的系统上取消设置会使其中断。

以下脚本演示:

代码语言:javascript
复制
#!/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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-22 00:40:04

区域设置"“(空字符串)表示系统区域设置。所有已知的setlocale()的Un*x实现都使用then环境变量来设置区域设置。您在调用setlocale()之后设置环境变量,因此它被忽略。

Locale::TextDomain在这里不会失败。这是一个配置错误。

有几种方法可以解决这些问题。如果你知道你想要使用的语言,你可以让libintl-perl来做繁重的工作:

代码语言:javascript
复制
use Locale::Util qw(set_locale);

set_locale(LC_MESSAGES, 'pt', 'BR', 'utf-8');

对set_locale()的调用将尝试所有已知的区域设置标识符约定,将巴西的语言设置为葡萄牙语'pt‘('BR')。它还将尝试选择UTF-8语言环境。有关更多信息,请参阅http://search.cpan.org/dist/libintl-perl/lib/Locale/Util.pm#FUNCTIONS!名称set_locale()是故意选择的,以避免与POSIX.pm中的setlocale()发生名称冲突。

从libintl-perl 1.22开始,您还可以切换到"dumb“gettext后端:

代码语言:javascript
复制
use Locale::Messages qw(select_package);

BEGIN { Locale::Messages->select_package('gettext_dumb') }

“哑巴”后端从不费心调用setlocale()来查找当前的语言环境设置,而只是检查环境变量。有关此方法的优缺点,请参阅http://search.cpan.org/dist/libintl-perl/lib/Locale/gettext_dumb.pm。最大的缺点是C代码不支持这一点,所以$!例如,将不使用配置的语言。

或者,您可以切换到'gettext_pp‘后端,就像上面为'gettext_dumb’所描述的那样。这将强制使用gettext运行时的纯Perl实现。这样做的主要优点实际上是它更容易调试。但是C实现也有一些细微的不同。

顺便说一句:您应该记住,环境变量LANGUAGE是GNU扩展,可能在非GNU环境中不起作用。

票数 1
EN

Stack Overflow用户

发布于 2011-09-22 21:21:42

$LANG是在大多数Unixy系统中使用的系统范围的默认变量。$LANGUAGE用于更具体的目的。

如今的系统确实应该将$LANG设置为合理的默认值。让系统管理员将其放入/etc/profile或系统范围的外壳默认设置所需的任何位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7514071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档