gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:53:35 24 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/30053125/

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