簡體   English   中英

不支持的語言環境的 Java I18n

[英]Java I18n for not supported Locales

Java I18n 能力是驚人的。 支持的語言環境工作完美:

Locale ar = new Locale("ar","SA");
System.out.println(ar.getDisplayName(ar));

輸出: العربية (السعودية)

但是對於不支持的語言環境,如Kazakh ,語言名稱顯示在相同的 lang 中,將輸出 Enlish(Standard),如 Java Spec 中所寫。

Locale locale = new Locale("kk","KZ");
System.out.println(kk.getDisplayLanguage(kk));

輸出: Kazakh (Kazakhstan)

我正在嘗試解決這個問題,最后的代碼必須像這樣輸出: Қазақша (Қазақстан)

有人知道解決方案嗎?

任何猜測(或與 Java SE 開發人員聯系的方式,或了解算法的人)我都會記錄為答案;)

謝謝!

最明顯的解決方案是自己提供翻譯,即根據語言和國家屬性的值將語言環境外部化,並將它們放入即 ListResourceBundle 實例中。 如果這看起來像很多工作,它應該......其他值得一試的解決方案是使用ICU
它不會直接為您提供 Locale 顯示名稱,但您可以基於 Locale 創建 ULocale 對象,這可能只是被翻譯。
如果 ICU 技巧不起作用,您可能會被迫查看CLDR語言列表並自己提供翻譯。 順便提一句。 塞爾維亞語有完全相同的問題,我不確定他們是否為 JDK7 修復了它...

假設您在 Windows 上運行,您需要在 OS 區域設置中更改區域設置。 請看這個鏈接。 (在 win 2000 中出現哈薩克語,但是,在 win 7 中它沒有出現在列表中......)。 在 linux 上,您可以使用localedef 實用程序設置語言環境。

祝你好運!

由於您的帖子很舊,我認為從 Java JDK 9 開始,您的代碼應該可以正常工作。

使用 Java 11 測試的示例:

Locale country = new Locale.Builder().setRegion("KZ").build();
Locale lang = new Locale.Builder().setLanguage("kk").build();
System.out.println(country.getDisplayCountry(lang));

請注意,在 Java 8 中該問題仍然存在(沒有翻譯)。

暫無
暫無

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

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