Java EE i18n和默认项目结构
我是Python Django-devel 我想尝试一下Java 在django,我经常做如下翻译:Java EE i18n和默认项目结构,java,internationalization,jakarta-ee,enterprise,directory-structure,Java,Internationalization,Jakarta Ee,Enterprise,Directory Structure,我是Python Django-devel 我想尝试一下Java 在django,我经常做如下翻译: from django.utils.translation import ugettext_lazy as _ 然后,如果在locale/en/django.po文件中的.po文件中指定了翻译 _("hello world") 问题1:Java中有类似的东西吗 我发现: 但它们都不是我想要的 我像例子中那样做了 import java.util.ResourceBundle; im
from django.utils.translation import ugettext_lazy as _
然后,如果在locale/en/django.po文件中的.po文件中指定了翻译
_("hello world")
问题1:Java中有类似的东西吗
我发现:
import java.util.ResourceBundle;
import java.util.MissingResourceException;
public class i18n {
private static ResourceBundle myResources = ResourceBundle.getBundle("messages");
public static String _ (String originalStr) {
try {
return myResources.getString(originalStr);
} catch (MissingResourceException e) {
return originalStr;
}
}
}
后来
import static i18n._;
问题2:但是把messages.properties文件放在哪里呢
- 我想有一个单独的区域设置目录与这些文件
- 整包和子包的翻译
- 区域设置/消息\u en\u US.properties
- 地区/消息\u en\u UK.properties
- 区域设置/消息\u en\u AU.properties
- 等等
我发现,但开发人员似乎并不关心它。测试位置,同样的事情。每个人在不同的地方都有。逻辑,如模板中的sql查询、WTF…没有一个真正的位置来放置资源文件;这通常是应用程序开发人员的决定。在所有体系结构中,将所有文件放在一个标准位置可能没有意义,因此规范不会添加不必要的约束 确切地说,您应该如何加载和引用资源包可能会受到您正在使用的框架的影响。例如,在JSTL应用程序中,可以使用标记;在JSF应用程序中,可以使用标记。其他视图技术将定义自己的机制 总的来说 从类路径加载资源,因此如果要使用目录,它或其父目录之一应该位于应用程序类路径上。在WAR中,捆绑包应该位于
WEB-INF/lib
目录或WEB-INF/classes
目录中的JAR文件中
所以,对于束集
/WEB-INF/classes/locale/messages.properties
/WEB-INF/classes/locale/messages_fr.properties
/WEB-INF/classes/locale/messages_de.properties
…您可以通过获取请求并调用以下命令来加载捆绑包:
ResourceBundle.getBundle("locale.messages", locale);
将bundle分配给单个静态变量是一个缺陷:
//BUG! this loads the properties file for the server default locale only!
private static ResourceBundle myResources = ResourceBundle.getBundle("messages");
必须获取用户的区域设置。静态分配只适用于客户端应用程序(如IDE)
请注意,通常最好提供一个根
messages.properties
base文件作为不受支持的区域设置的备用文件
撇开一般的本地化不谈,只有当密钥对于bundle是唯一的时,才可以使用原始字符串作为密钥。否则,如果相同的源字符串由于上下文的不同而被翻译,则会发生冲突。是否有一种基于源代码自动生成.properties文件的方法?类似于哪一个(gettext或ResourceBundle)是行业标准?