gpt4 book ai didi

处理区域设置选择级联逻辑的 Java 库

转载 作者:太空宇宙 更新时间:2023-11-04 08:04:36 26 4
gpt4 key购买 nike

我正在尝试为 ext.js 引入不同的语言环境翻译。大多数 ext.js 翻译仅附带已识别的语言 (ext-lang-fr.js)。然而,当我查看它以决定要包含哪个翻译文件时,我的门户总是会向我提供区域设置的语言/国家/地区。我需要支持的语言有限。是否有一个现有的 java 库封装了用于确定列表中找到的最具体文件的逻辑。

例如,如果我的支持语言文件标识为:{de,en,es,fr,it,pt_PT,zh_CN}如果 request.getLocale() 以“fr_FR”响应,那么它将以我的列表中的特定“fr”响应。如果我传递的值不在列表中,它会以一些默认值进行响应。

显然我可以自己解析字符串/编写自己的字符串等,但我想知道是否有一个标准且可靠的方法来做到这一点?

马克

最佳答案

如果您使用 Java 6 或更高版本,就会有一些东西。显然,他们必须实现这种区域设置层次结构才能从属性文件加载字符串。您可以使用ResourceBundle.Control获取区域设置的分层列表:

Control control = Control.getControl(Control.FORMAT_DEFAULT);
List<Locale> locales = control.getCandidateLocales("messages",
Locale.forLanguageTag("zh-HK"));
for (Locale locale : locales) {
System.out.println(locale.toLanguageTag());
}

这将返回(Java 7):

zh-Hant-HK
zh-Hant
zh-HK
zh
und

其中“und”表示“未定义”。更好的是,您实际上可以构建文件的名称:

Control control = Control.getControl(Control.FORMAT_DEFAULT);
List<Locale> locales = control.getCandidateLocales("messages",
Locale.forLanguageTag("pl-PL"));
for (Locale locale : locales) {
String bundleName = control.toBundleName("messages", locale);
System.out.println(bundleName);
String resourceName = control.toResourceName(bundleName, "properties");
System.out.println(resourceName);
}

结果是:

messages_pl_PL
messages_pl_PL.properties
messages_pl
messages_pl.properties
messages
messages.properties

当然,您需要知道特定文件是否存在,但这应该非常简单。

关于处理区域设置选择级联逻辑的 Java 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12270967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com