Gab*_*lla 8 java resourcebundle internationalization
我正在测试Java的i18n功能并遇到问题,当它不在类根目录中时,我无法加载语言文件.现在我的文件在/lang目录中.
在SO中查看了几个答案,将它放在一个classes子目录中并加载它lang.Messages,使用完整的位置路由/Test/lang/Message(测试是项目名称),使用只是/lang/Message仍然我得到:
java.util.MissingResourceException: Can't find bundle for base name
错误.
还有别的尝试吗?
我的文件结构是:
Test/lang/Messages_es.properties
Test/src/test/Main.java
import java.util.Locale;
import java.util.ResourceBundle;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
Locale currentLocale;
ResourceBundle messages;
currentLocale = new Locale("es");
messages = ResourceBundle.getBundle("Messages", currentLocale);
System.out.println(messages.getString("Messagesgreetings"));
System.out.println(messages.getString("Messagesinquiry"));
System.out.println(messages.getString("Messagesfarewell"));
}
}
Run Code Online (Sandbox Code Playgroud)
您需要在属性文件名中包含区域设置名称.
将属性文件重命名为 Messages_es.properties
由于您尚未声明任何包,因此编译的类文件和属性文件都可以位于同一根目录中.
编辑回应评论:
让我们说你有这个项目结构:
test\src\foo\Main.java(foo是包名)
test\bin\foo\Main.class
Run Code Online (Sandbox Code Playgroud)
test\bin\resources\Messages_es.properties(属性文件resources位于类路径的文件夹中)
您可以使用以下命令运行:
c:\test>java -classpath .\bin foo.Main
Run Code Online (Sandbox Code Playgroud)
更新的源代码:
package foo;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
Locale currentLocale;
ResourceBundle messages;
currentLocale = new Locale("es");
messages = ResourceBundle.getBundle("resources.Messages", currentLocale);
System.out.println(messages.getString("Messagesgreetings"));
System.out.println(messages.getString("Messagesinquiry"));
System.out.println(messages.getString("Messagesfarewell"));
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,如您所见,我们正在加载名为"resources.Messages"的属性文件
希望这可以帮助.