Mat*_*zuk 5 java enterprise directory-structure internationalization java-ee
我是Python Django devel
我想尝试Java一点点.
在django我曾经做过我的翻译,如下:
from django.utils.translation import ugettext_lazy as _
Run Code Online (Sandbox Code Playgroud)
然后,如果在locale/en/django.po文件中的.po文件中指定了转换
_("hello world")
Run Code Online (Sandbox Code Playgroud)
问题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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后
import static i18n._;
Run Code Online (Sandbox Code Playgroud)
问题2:但是在哪里放置messages.properties文件?
整个包和子包的翻译
问题3:这部分异常捕获似乎不起作用,你知道为什么吗?
问题4:i18n是否有JavaEE标准?
我认为java EE应该有一个标准化的app目录布局,i18和war目录内容,但是几天和java一起玩弄我发现它非常混乱.因此,我能够在Internet上找到的每个示例开源代码都是完全不同的.从Google Wave Protocol项目开始,以示例小应用程序结束.
问题5:是否有JavaEE编码理念或最佳实践?
我找到了Web应用程序策略,但开发人员似乎并不关心它.测试放置,同样的事情.每个人都有不同的地方.逻辑就像模板中的sql查询一样,WTF ......
McD*_*ell 11
放置资源文件没有一个真正的地方; 这通常是应用程序开发人员的决定.将所有文件放在一个标准位置可能在所有体系结构中都没有意义,因此规范不会添加不必要的约束.
究竟如何加载和引用资源包可能会受到您使用的框架的影响.例如,在JSTL应用程序中,您可以使用bundle标记; 在JSF应用程序中,您可以使用loadBundle标记.其他视图技术将定义自己的机制.
一般来说...
ResourceBundle.getBundle从类路径加载资源,因此如果要使用目录,它或其父项之一应该在应用程序类路径上.在WAR中,捆绑包应位于WEB-INF/lib目录或目录中的JAR文件中WEB-INF/classes.
所以,对于捆绑集......
/WEB-INF/classes/locale/messages.properties
/WEB-INF/classes/locale/messages_fr.properties
/WEB-INF/classes/locale/messages_de.properties
Run Code Online (Sandbox Code Playgroud)
...你会通过获取请求Locale并调用来加载bundle :
ResourceBundle.getBundle("locale.messages", locale);
Run Code Online (Sandbox Code Playgroud)
将bundle分配给单个静态变量是一个缺陷:
//BUG! this loads the properties file for the server default locale only!
private static ResourceBundle myResources = ResourceBundle.getBundle("messages");
Run Code Online (Sandbox Code Playgroud)
您必须从请求中获取用户的区域设置.静态分配仅适用于客户端应用程序(如IDE).
请注意,提供messages.properties根基文件作为不受支持的语言环境的回退通常是个好主意.
作为一般的本地化,如果密钥对于捆绑包是唯一的,那么使用原始字符串作为密钥的方法将是正常的.否则,如果由于上下文而导致相同的源字符串被翻译,则会发生冲突.
| 归档时间: |
|
| 查看次数: |
4510 次 |
| 最近记录: |