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,<jhi@hut.fi>。目前由 Perl 5 維護人員維護。
版權所有 2001 Jarkko Hietaniemi
此函式庫為自由軟體;您可以在與 Perl 相同的條款下重新散布或修改它。