內容

名稱

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]

通常可用的常數如下。

對於沒有 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

只會回傳英文的值。YESSTRNOSTR 已從 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 標頭檔。)

EXPORT

預設情況下,僅匯出 langinfo() 函式。

BUGS

在 Perl 5.28 之前,回傳值對於 RADIXCHARTHOUSEP 區域設定常數不可靠。

從 5.28 開始,在提供執行緒安全區域設定函式的系統上支援執行緒建置的區域設定變更。這些包括 POSIX 2008 系統和從 Visual Studio 2005 開始的 Windows,而此模組將在這種情況下正常運作。但是,在 Visual Studio 2015 之前的 Windows 上執行緒建置時,擷取項目 CRNCYSTRTHOUSEP 可能會與已轉換為使用全域區域設定的執行緒競爭。執行緒執行此動作的情況非常罕見。可以為此建立解決方法;歡迎提交修補程式:請參閱 "switch_to_global_locale" in perlapi

另請參閱

perllocale"localeconv" in POSIX"setlocale" in POSIXnl_langinfo(3)

作者

Jarkko Hietaniemi,<jhi@hut.fi>。目前由 Perl 5 維護人員維護。

版權和授權

版權所有 2001 Jarkko Hietaniemi

此函式庫為自由軟體;您可以在與 Perl 相同的條款下重新散布或修改它。