Почему язык отображения для упрощенного китайского языка использует код ISO? - PullRequest
4 голосов
/ 09 ноября 2011
import java.io.UnsupportedEncodingException;
import java.util.Locale;

public final class ForeignTextDemo {

    public static void main(String[] args) throws UnsupportedEncodingException {
        Locale locale = new Locale("TW");
        System.out.println(locale.getDisplayLanguage(Locale.TRADITIONAL_CHINESE));
        locale = new Locale("CN");
        System.out.println(locale.getDisplayLanguage(Locale.SIMPLIFIED_CHINESE));
    }

}

Когда я запускаю программу выше, я получаю следующий вывод:

契維文
cn

Но, если я изменю второй языковой стандарт на locale = new Locale("ZH");, я получу желаемый вывод:

契維文
中文

Почему это? Что мне действительно нужно, так это язык отображения для упрощенного китайского ."ZH" только это?

Ответы [ 2 ]

4 голосов
/ 09 ноября 2011

Просто "cn" не является языковым стандартом, полный локальный - "zh_CN", чтобы различать его с "tw_CN".

См. Список поддерживаемых языковых стандартов .

locale1 = new Locale("zh", "cn")
println locale1.getDisplayLanguage(locale1)
println locale1.getDisplayLanguage(Locale.TRADITIONAL_CHINESE)
println locale1.getDisplayLanguage(Locale.SIMPLIFIED_CHINESE)
println locale1.getDisplayLanguage(Locale.TAIWAN)
println locale1.getDisplayCountry(locale2)
println locale1.country

println ""

locale2 = new Locale("tw", "cn")
println locale1.getDisplayLanguage(locale2)
println locale2.getDisplayLanguage(Locale.TRADITIONAL_CHINESE)
println locale2.getDisplayLanguage(Locale.SIMPLIFIED_CHINESE)
println locale2.getDisplayLanguage(Locale.TAIWAN)
println locale2.getDisplayCountry(locale2)
println locale2.country
2 голосов
/ 09 ноября 2011

Согласно Javadoc для java.util.Locale, конструктор с одним аргументом для Locale() ожидает код языка ISO 639-1 . Код языка ISO 639-1 для китайского языка - "ZH".

То, что вы фактически предоставляете вместе со строками "TW" и "CN", это ISO 3166-1 Коды стран для Тайваня и Китая.

...