繁体   English   中英

我想在运行时更改SWT应用程序的语言。 怎么做?

[英]I want to change the language of a SWT Application at Runtime. How to do that?

我正在为我的软件工程课开发一个应用程序,其中之一是接口中必须有2种或更多种语言。 我已经实现了。 另一方面,要求用户可以通过从组合框等中进行选择来自行更改语言。

当我使用AWT和Netbeans时,我无法编辑表单的initComponents方法,因为它是自动生成的。 我在心中有以下选择,但不知道它们是否还能工作,所以我正在寻求帮助。

-编辑类的构造函数,使其看起来像这样:

public JFmyConstructor() {
    initComponents(); //auto-generated
    myInitMethod();
}

我想我会发现的问题是,我需要在接口已经运行之后调用构造函数一次(因此,所有对象都实例化了。是否有解决方法?

可能我的答案来得有点晚(可惜您输入的标题错误)...

显然,您无需调用任何构造函数即可在运行时切换语言。 在Java Desktop应用程序中,它很简单:

Locale brazilian = new Locale("pt", "BR");
Locale.setDefault(brazilian);

当然,如果要通过JComboBox进行切换,则可能会有所不同。 我会做的是,实际上将创建一个模型(Swing提倡MVC设计模式)来保存数据(不同的语言环境),并在正确的ActionListener中设置默认语言环境。 不过这并不容易。

当然,我宁愿使用本地名称作为语言环境。 如果已构建它们,则可以通过简单地调用getDisplayName()并将其自身作为参数传递来轻松获得本地名称Locale名称:

String brazilianNativeName = brazilian.getDisplayName(brazilian);

对于某些语言环境,结果可能无法令人满意(我相信不幸的是巴西葡萄牙语是其中的一种),但是您对此无能为力(除非您使用自己的字符串)。

老实说,对于两种语言,我可能会改用一些链接。 您可以使用简单的JLabel来做到这一点,只需设置正确的字体属性和颜色并分配通用的ActionListener即可。 然后,您可以查询实际单击了哪一个,并适当地创建和设置Locale。 对于家庭作业来说应该足够了。

SWT和NetBeans是一个奇怪的组合。 如果您可以使用SWT以“正常”方式进行操作并使用Eclipse,那么将有一套强大的工具来管理本地化,所有这些工具都是内置的。例如,请参见本介绍。

最好的方法是对所有组件使用资源注入 (而不是在面板构建时从Bundle中获取i18n字符串)。

在许多开源库或框架中都可以使用资源注入。

由于使用NetBeans,因此您应该能够基于已经支持资源注入的Swing应用程序框架 (SAF)生成应用程序。

否则,那里也有图书馆可以做到这一点。 只需在Google上搜索“ swing”“资源注入”即可,例如Fuse库。

编辑:您还应该看看这个SO问题该问题恰好处理相同的问题,并且有更详细的答案(包括我自己的问题)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM