在Eclipse中配置字符串外部化以使用$ {key}作为字段名称

pol*_*nts 2 java eclipse internationalization string-externalization

假设我有一个像这样的简单代码:

public class ExternalizeStringDemo {
    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我想将问候外化,或许是为了促进国际化/本地化/等.使用Eclipse,我可以使用String Externalization向导(Source/Externalize Strings),并像这样配置它:

替代文字

我可以继续向导,它将提出这些更改:

  • 创建文件 Personal Toys/src/Messages.java
  • 创建文件 Personal Toys/src/messages.properties
  • 编辑 ExternalizeStringDemo.java
    • "Hello World"Messages.getString("DEMO_GREETING")

我的问题很简单:我可以要求Eclipse外部化访问权限以使用密钥作为字段名称吗?也就是说,我希望访问权限是例如Messages.DEMO_GREETING.

注意:如果这[Substitution pattern]很简单${key},那么生成的代码就是Messages."DEMO_GREETING"有效的Java代码.


如果这是不可能的,那么下一个最好的东西是什么?(我在想Eclipse正则表达式找到/替换?).

pol*_*nts 5

Eclipse有一个新的字符串外化机制,它正是这样做的; 它使用自己的新消息包而不是Java.您需要org.eclipse.osgi….jar在项目的构建路径中包含它以使用它.

help.eclipse.org - Java开发用户指南>参考>向导和对话框> Externalize Strings Wizard

  • 使用Eclipse的字符串外化机制
    • 如果未选中,则使用标准外部化机制,否则使用新的Eclipse字符串外部化机制.
    • 注意:仅在项目构建路径包含时才出现 org.eclipse.osgi.util.NLS

之前和之后的内容显示在功能文档中:

旧代码:

public class MyClass {
   public void myMethod() {
      String message;
      ...
      // no args
      message = Messages.getString("key.one"); //$NON-NLS-1$
      ...
      // bind one arg
      message = MessageFormat.format(
          Messages.getString("key.two"),
          new Object[] {"example usage"}
        ); //$NON-NLS-1$ //$NON-NLS-2$
      ...
   }
}
Run Code Online (Sandbox Code Playgroud)

新守则:

public class MyClass {
   public void myMethod() {
      String message;
      ...
      // no args
      message = Messages.key_one;
      ...
      // bind one arg
      message = NLS.bind(Messages.key_two, "example usage"); //$NON-NLS-1$
      ...
   }
}
Run Code Online (Sandbox Code Playgroud)

截图

设置:

替代文字

那么建议的改变:

替代文字

相关链接

  • 新的Eclipse外化在内存占用方面也更好.但只有一点需要注意.您无法动态更改语言环境,因为常量绑定到基于使用反射首次访问字段时所选语言环境的值.它还有助于识别未正确外化的字符串/常量,从而发出警告/错误.我记得我们必须修改NLS类以增加对此的支持,但总体而言,与在后端使用Maps的标准ResourceBundle本地化相比,它具有非常低的内存占用. (6认同)