I18N::Langinfo - 查询区域设置信息
use I18N::Langinfo;
langinfo() 函数查询可用于本地化输出和用户界面的各种区域设置信息。它使用当前的基础区域设置,无论是否在 use locale
范围内调用。langinfo() 函数需要一个数字参数来标识要查询的区域设置常量:如果没有提供参数,则使用 $_
。可作为参数使用的数字常量可从 I18N::Langinfo 导出。
以下示例将导入 langinfo() 函数本身和三个常量以用作 langinfo() 的参数:一个常量表示一周的第一天的缩写(编号从星期日 = 1 开始),以及两个常量表示当前区域设置中“是/否”问题的肯定和否定答案。
use I18N::Langinfo qw(langinfo ABDAY_1 YESSTR NOSTR);
my ($abday_1, $yesstr, $nostr) =
map { langinfo($_) } (ABDAY_1, YESSTR, NOSTR);
print "$abday_1? [$yesstr/$nostr] ";
换句话说,在“C”(或英语)区域设置中,上述内容可能会打印类似以下内容
Sun? [yes/no]
但在法语区域设置下
dim? [oui/non]
通常可用的常量如下。
对于一周的缩写和全称以及全年的月份
ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5 ABDAY_6 ABDAY_7
ABMON_1 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6
ABMON_7 ABMON_8 ABMON_9 ABMON_10 ABMON_11 ABMON_12
DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7
MON_1 MON_2 MON_3 MON_4 MON_5 MON_6
MON_7 MON_8 MON_9 MON_10 MON_11 MON_12
对于 strftime() 函数使用的日期时间、日期和时间格式(请参阅 POSIX)
D_T_FMT D_FMT T_FMT
对于有意义的区域设置,其中包含上午和下午的时间格式
AM_STR PM_STR T_FMT_AMPM
对于正在使用的字符编码集(例如“ISO8859-1”、“cp850”、“koi8-r”、“sjis”、“utf8”等),以及对于货币字符串
CODESET CRNCYSTR
对于数字的备用表示形式,对于用于十进制数字的整数部分和小数部分之间的基数字符,对于较大的浮点数的分组分隔符字符串(是的,最后两个与 POSIX::localeconv() 是冗余的)
ALT_DIGITS RADIXCHAR THOUSEP
对于肯定和否定的响应和表达式
YESSTR YESEXPR NOSTR NOEXPR
对于基于一些统治者(例如日本天皇)的时代(当然只在适当的区域设置中定义)
ERA ERA_D_FMT ERA_D_T_FMT ERA_T_FMT
nl_langinfo
的系统此模块最初只是 libc nl_langinfo
函数的一个包装器,并且在没有该函数的系统(例如 Windows)上无法使用。
从 Perl 5.28 开始,此模块可在所有平台上使用。当 nl_langinfo
不可用的情况下,它会使用各种方法来构造该函数(如果存在)将返回的内容。但可能存在潜在的故障。这些是可能不同的项
ERA
未实现,因此返回 ""
。
CODESET
这应该适用于 Windows 平台。在几乎所有其他现代平台上,如果它是代码集,它将可靠地返回“UTF-8”。否则,它取决于区域设置的名称。如果它是 foo.bar
形式,它将假定 bar
是代码集;并且它还知道两个区域设置“C”和“POSIX”。如果这些都不适用,它将返回 ""
。
YESEXPR
YESSTR
NOEXPR
NOSTR
仅返回英语的值。YESSTR
和 NOSTR
已从 POSIX 2008 中删除,并在此保留以保持向后兼容性。你的平台的 nl_langinfo
可能不支持它们。
D_FMT
始终计算为 %x
,即区域设置的适当日期表示形式。
T_FMT
始终计算为 %X
,即区域设置的适当时间表示形式。
D_T_FMT
始终计算为 %c
,即区域设置的适当日期和时间表示形式。
CRNCYSTR
对于那些用货币符号替换基数字符的罕见区域设置,返回值可能不正确。如果您有需要以不同方式工作的示例,请在 https://github.com/Perl/perl5/issues 提交报告。
ALT_DIGITS
目前,这会提供与 Linux 相同的结果。如果您有需要以不同方式工作的示例,请在 https://github.com/Perl/perl5/issues 提交报告。
ERA_D_FMT
ERA_T_FMT
ERA_D_T_FMT
T_FMT_AMPM
这些都是使用 strftime()
派生的,并非该函数的所有版本都了解它们。在这样的系统上,将返回 ""
。
请参阅 nl_langinfo(3) 以获取有关可用常量的更多信息。(通常这意味着必须直接查看 langinfo.h C 头文件。)
默认情况下,仅导出 langinfo()
函数。
在 Perl 5.28 之前,对于 RADIXCHAR
和 THOUSEP
区域设置常量,返回值不可靠。
从 5.28 开始,在提供线程安全区域设置函数的系统上支持在多线程构建中更改区域设置。其中包括 POSIX 2008 系统和从 Visual Studio 2005 开始的 Windows,此模块将在这种情况下正常工作。但是,在 Visual Studio 2015 之前的 Windows 上的多线程构建中,检索 CRNCYSTR
和 THOUSEP
项可能会导致与已转换为使用全局区域设置的线程竞争。线程执行此操作的情况非常罕见。可以为此构建一个解决方法;欢迎提交补丁:请参阅 "switch_to_global_locale" in perlapi。
perllocale、"localeconv" in POSIX、"setlocale" in POSIX、nl_langinfo(3)。
Jarkko Hietaniemi,<[email protected]>。现在由 Perl 5 维护者维护。
版权所有 2001 年 Jarkko Hietaniemi
此库是免费软件;您可以在与 Perl 自身相同的条款下重新分发和/或修改它。