我目前从eclipse切换到android studio。在eclipse中我有2个项目,一个android应用程序项目和一个java项目,我将其作为库包含在android项目中。这个java项目使用ResourceBundles为它自己的错误创建国际化的错误消息。这是我的项目结构:
/MyApp
/src
/res
...
/MyLibrary
/src
/res (added as source folder to build path)
/loc
Bundle_en.properties
这在加载RessourceBundles时起作用如下:
ResourceBundle.getBundle("loc.Bundle", Locale.ENGLISH);
现在我切换到android studio,我的新项目结构看起来像这样(将java库添加为模块):
/MyProject
/MyApp
...
/MyLibrary
/src
/main
/java
...
/res
/loc
Bundle_en.properties
但是我不能再加载ResourceBundles了,它只是抛出一个java.util.MissingResourceException
。我为ResourceBundles和不同的路径尝试了很多不同的位置,但我会变得疯狂,因为似乎没有任何工作。任何人都可以解释在哪里放这些捆绑以及如何加载它们?
谢谢!
答案 0 :(得分:9)
面临完全相同的问题。为了使它工作,我最终必须在我的项目模块的主文件夹中创建一个resorces文件夹。
这里以同名开头的多个文件(如本图中的消息)被捆绑为资源包。
最后不得不用它来调用它 ResourceBundle.getBundle(" org.eclipse.paho.client.mqttv3.internal.nls.logcat&#34) 要么 ResourceBundle.getBundle(" org.eclipse.paho.client.mqttv3.internal.nls.messages&#34) 获得所需的资源。
答案 1 :(得分:1)
如果将第二个项目包含为库,则可能不希望按照previous answer中的建议创建新的资源文件夹(这确实有效)。相反,您只需将库的资源文件夹添加到模块build.gradle
中的资源目录中:添加到android
部分
sourceSets {
main.resources.srcDirs += 'path/to/your/libs/res'
}
如果现在添加的res
文件夹包含org/mypackage/Bundle.properties
,您可以使用
ResourceBundle.getBundle("org.mypackage.Bundle")
实际上添加新的资源文件夹只会将其添加为build.gradle
中的资源目录。
答案 2 :(得分:0)
我从未尝试过,但Intellij非常好地整合了资源包。
参考此链接
http://www.jetbrains.com/idea/webhelp/resource-bundle.html
从上面的链接
资源包是一组具有相同基本名称的属性文件 具有不同的语言特定后缀。资源包包含 例如,至少有两个具有相似基本名称的属性文件 file_en.properties和file_de.properties。
IntelliJ IDEA可识别属性文件,如果有两个或更多 名称仅以后缀不同的属性文件是 遇到了,将它们连接到资源包中。新节点资源 Bundle'(基本名称)'出现在项目工具窗口中:
您可以将这些文件放在模块内或root上。
答案 3 :(得分:0)
首先请确保您的资源文件夹(属性文件所在的位置)位于类路径中,您可以通过调用以下内容轻松找到它。
URLClassLoader ldr = (URLClassLoader)ClassLoader.getSystemClassLoader();
URL[] urls = ldr.getURLs();
for(URL url : urls)
{
System.out.println(url.getPath());
}
现在,如果在类路径中找到资源文件夹,那么您只需调用bundle base name,在您的情况下为ResourceBundle.getBundle(“Bundle”),不需要完全限定的路径。假设您正在使用英语语言环境,它应该找到它。如果需要,您可以进一步添加en_US,en_NZ,en_GB等。
如果找不到属性文件夹,请确保它位于类路径中,如果需要动态添加,请按照此主题进行操作。
How do you change the CLASSPATH within Java?
记住动态加载属性文件的唯一补充是你必须在类加载器上调用findResource或findResources API来加载属性文件。希望这会有所帮助。