Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EE i18n和默认项目结构_Java_Internationalization_Jakarta Ee_Enterprise_Directory Structure - Fatal编程技术网

Java EE i18n和默认项目结构

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

我是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;
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
    • 等等
问题3:这部分异常捕捉似乎不起作用,你知道为什么吗

问题4:i18n是否有JavaEE标准

我原以为JavaEE应该有一个标准化的应用程序目录布局、i18和war目录内容,但在玩java的几天里,我发现它非常混乱。因此,我能在互联网上找到的每一个开放源代码样本都是完全不同的。从GoogleWave协议项目开始,以示例小应用程序结束

问题5:是否有JavaEE编码理念或最佳实践


我发现,但开发人员似乎并不关心它。测试位置,同样的事情。每个人在不同的地方都有。逻辑,如模板中的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)是行业标准?