gpt4 book ai didi

java - 在 Java 中,我如何找出我的资源包可用的语言

转载 作者:IT老高 更新时间:2023-10-28 20:54:32 25 4
gpt4 key购买 nike

我的主 jar 中打包了一些资源包

widget_en.properties
widget_de.properties

我根据我的默认语言环境检索资源包,如下所示

ResourceBundle.getBundle("widget", Locale.getDefault());

但我想向用户展示支持的可用语言列表,以便可以选择可能与其计算机默认设置不同的语言

但我在 ResourceBundle 中找不到列出可用语言环境的方法,我不想硬编码列表,因为添加另一个资源包时我可能会忘记更新它。

编辑

因为我只有不同语言的资源包(我没有国家细化),所以我通过遍历所有已知的语言代码生成了一个列表,并将每个语言代码检查为资源。

String[]langs = Locale.getISOLanguages();
for(String lang:langs)
{
URL rb = ClassLoader.getSystemResource("widget_"+lang+".properties");
if(rb!=null)
{
System.out.println("Found:"+rb.toString());
}
}

最佳答案

如果你真的将资源文件封装在你的JAR中,那么我会这样做:

public static void main(String[] args) {
Set<ResourceBundle> resourceBundles = getResourceBundles(A.class.getName());
if (resourceBundles.isEmpty())
// ...
}

public static Set<ResourceBundle> getResourceBundles(String baseName) {
Set<ResourceBundle> resourceBundles = new HashSet<>();

for (Locale locale : Locale.getAvailableLocales()) {
try {
resourceBundles.add(ResourceBundle.getBundle(baseName, locale));
} catch (MissingResourceException ex) {
// ...
}
}

return Collections.unmodifiableSet(resourceBundles);
}

如果您关心您的 JAR,那么您至少会得到一组包含给定 baseName 的默认资源的集合。 .

如果您只有名称如 baseName_<country> 的资源这种方法效果很好,因为只有那些 ResourceBundles将被添加到您的 JAR 中存在的集合中。即使您决定需要单独的 baseName_en_US,它也会起作用和 baseName_en_UK资源,这并非闻所未闻。

无耻自插:我写了 ResourceBundle.Control 这需要 Charset 作为它的参数,如果你想加载 UTF-8 编码的资源文件,你可能会对它感兴趣。 It's available at GitHub.

关于java - 在 Java 中,我如何找出我的资源包可用的语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12072454/

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