簡體   English   中英

默認語言環境“ root”在ICU中如何工作?

[英]How does the default locale “root” work in ICU?

當前,在Linux和Windows中,默認語言環境“ root”的行為存在差異。

使用ICU v54.1

在Windows中,我們將Locale::getDefault()視為en_GB。
平台:Windows Server 2012 R2

在Linux中,我們將Locale::getDefault()視為“ root”。
平台:CentOS 7
strace -e file /usr/bin/locale給出

execve("/usr/bin/locale", ["locale"], [/* 27 vars */]) = 0
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
LANG=en_GB.UTF-8
LC_CTYPE="en_GB"
LC_NUMERIC="en_GB"
LC_TIME="en_GB"
LC_COLLATE="en_GB"
LC_MONETARY="en_GB"
LC_MESSAGES="en_GB"
LC_PAPER="en_GB"
LC_NAME="en_GB"
LC_ADDRESS="en_GB"
LC_TELEPHONE="en_GB"
LC_MEASUREMENT="en_GB"
LC_IDENTIFICATION="en_GB"
LC_ALL=en_GB

目前,不確定如何映射“根”語言環境! 谷歌搜索后,看到它可以被映射到en_US_POSIX-如何進行驗證?

當打印出NumberFormat::getAvailableLocales列表時,使用locale.getDisplayName(name)時僅獲取短名稱而不是全名。

盡管可以正常工作,但是當指定Locale::setDefault(locid) ,這並不理想!

還嘗試了export LC_ALL=C ,但這對ICU中的默認語言環境沒有影響。

理想情況下,在代碼中僅將語言環境設置為“ C”就足夠了,並且不管理默認值。

icu::Locale::Locale("C");

當默認為“ root”時getDisplayName(Locale, UnicodeString name)決定使用getDisplayName(Locale, UnicodeString name)返回特定於語言環境的顯示名稱

例如;

    const icu::Locale fallbackDisplayNameLocale = icu::Locale("en_US");
    UnicodeString name(icu_locale.getName());
    std::string displayName;
    if (strcmp(icu::Locale::getDefault().getLanguage(), "root") == 0)
    {
        icu_locale.getDisplayName(fallbackDisplayNameLocale, name).toUTF8String(displayName);
    } else {
        icu_locale.getDisplayName(name).toUTF8String(displayName);
    }

可能對某人有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM