gpt4 book ai didi

java - Java 中的多语言本地化

转载 作者:行者123 更新时间:2023-12-01 13:13:44 26 4
gpt4 key购买 nike

我正在尝试将程序本地化为 Java。

package javaapplication8;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;

public class LanguageController {

private final Map supportedLanguages;
private final ResourceBundle translation;

public LanguageController(String language){
supportedLanguages = new HashMap();
supportedLanguages.put("English",Locale.ENGLISH);
supportedLanguages.put("Italiano",Locale.ITALIAN);
//here I get error
translation = ResourceBundle.getBundle("language", supportedLanguages.get(language));
}

public String getWord(String keyword)
{
return translation.getString(keyword);
}
}

与在类里面相比,我尝试用两种不同的语言(意大利语和英语)打印单词。我有两个属性文件

  • 语言.属性
  • Language_it.proprieties

screen

在类里面:

LanguageController langController_it = new LanguageController("Italiano");
System.out.println(langController_it.getWord("Option"));
LanguageController langController_en = new LanguageController("English");
System.out.println(langController_en.getWord("Option"));
<小时/>

编辑:第一个问题解决方案java.util.MissingResourceException: Can't find bundle for base name 'property_file name', locale en_US

该行仍然有错误supportedLanguages.get(language)

最佳答案

您的申请(以及您的相关问题)存在几个问题。
首先,您不使用参数化集合:

private final Map supportedLanguages;

此映射将始终返回 Object,但 getBundle() 方法具有不同的签名:

public static ResourceBundle getBundle(String baseName, Locale locale);

我确信这正是 Netbeans 所提示的。解决此问题的丑陋方法是将参数强制转换为 Locale:

translation = ResourceBundle.getBundle("language", (Locale) supportedLanguages.get(language));

更好的方法是在 Map 声明中使用类型参数:

private final Map<String, Locale> supportedLanguages = new HashMap<>();

应用程序的另一个可能的问题是您保存带有翻译的属性文件的位置。不幸的是,Java 在文件位置方面极其敏感,您必须提供属性文件的完全限定路径。 Java 8 和 ResourceBundle 的 SPI 提供程序有所改变,但这是一个不同的故事。

最后但并非最不重要的一点是,您似乎正在尝试实现常见的反模式,即语言切换器。如果您正在实现桌面应用程序,请不要犯此错误!获取用户界面默认区域设置就足够了:

Locale locale = Locale.getDefault(LocaleCategory.DISPLAY);

不管你相信与否,ResourceBundle 类将尝试回退到最适合用户的语言。如果我已经在操作系统首选项中设置了 UI 语言,为什么还要费心再次选择呢?
老实说,语言切换器有时对于静态网站有意义,但对于 Web 应用程序则不然,更不用说桌面应用程序了。

关于java - Java 中的多语言本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22630766/

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