Java 如何在使用org.eclipse.osgi.util.NLS方法时设置不同的语言环境

Java 如何在使用org.eclipse.osgi.util.NLS方法时设置不同的语言环境,java,eclipse,locale,Java,Eclipse,Locale,在我们的eclipse应用程序中,我们使用该方法通过一个专用的nls包、messages.java和本地化的messages_xx_xx.properties文件提供本地化。这通常非常好:当在德语窗口上运行时,我们会得到德语字符串,英语窗口上的英语字符串等等 现在的请求是,用户可以切换到不同的语言。因此,即使他的Windows设置为德语,他也应该能够使用英语字符串等来运行我们的软件 这看起来并不太难,因为有几个文档描述了为Java应用程序切换语言环境的各种方法。例如,通过使用命令行开关-Duse

在我们的eclipse应用程序中,我们使用该方法通过一个专用的nls包、messages.java和本地化的messages_xx_xx.properties文件提供本地化。这通常非常好:当在德语窗口上运行时,我们会得到德语字符串,英语窗口上的英语字符串等等

现在的请求是,用户可以切换到不同的语言。因此,即使他的Windows设置为德语,他也应该能够使用英语字符串等来运行我们的软件

这看起来并不太难,因为有几个文档描述了为Java应用程序切换语言环境的各种方法。例如,通过使用命令行开关-Duser.language和-Duser.country。或者使用本文中概述的方法:

eclipse的另一种方法应该是使用eclipse的-nl开关,例如“eclipse.exe-nl-en”

Noow:这些方法都不管用!无论您在德国Windows系统上做什么,无论您使用哪种方法,您都会得到德国字符串

深入研究我发现的问题,绑定到各个messages_xx_xx.properties文件的过程发生在“buildVariants”方法中的NLS.class中。在该方法中,调用“Locale.getDefault”,并从返回值中提取国家代码和语言代码,并用于组合相应的.properties文件的名称

不幸的是,在显示语言设置为德语的Windows系统上,Locale.getDefault始终返回de_de(请参阅)。因此,无论您做什么,似乎都无法使用上述任何方法更改java应用程序的默认语言环境

还是有办法


如果我们知道如何以编程方式重置org.eclipse.osgi.util.NLS中的nlSuffixes字段,那么它还将帮助我们尝试重新加载翻译属性文件。

我自己找到了解决方案:

  • 相当棘手:它不能在调试模式下与eclipse内部的eclipse应用程序一起工作。您需要导出应用程序,然后通过eclipse可执行文件运行它
  • 影响NLS方法的语言环境的设置取自eclipse框架属性“osgi.nl”
  • 它对我的工作方式是,将这个属性放入eclipse导出向导编写的相应的.ini文件中,作为-Dosgi.nl=
  • 示例.ini文件部分:

    -vmargs
    -Xmx1024m
    -Xms256m
    -XX:NewRatio=3
    -Dosgi.nl=en_US
    -Dorg.eclipse.ecf.provider.filetransfer.retrieve.connectTimeout=30000
    -Dorg.eclipse.ecf.provider.filetransfer.retrieve.closeTimeout=15000
    

    这篇文章[Java 7中的默认语言环境更改]()有帮助吗?