相关疑难解决方法(0)

如何在java swing中运行时更改语言

我尝试在swing应用程序中运行时更改Locale.
但我无法弄清楚它应该如何运作,或者没有总体规划?

我只能想到两个选择:
1.重新启动应用程序,而不是最好的用户体验.
2.创建一个可以注册/取消注册组件的本地化管理器,在更改时它只是迭代所有组件并更改文本.

1和2都感觉很尴尬.

其他信息:
目前,方向不是目标.
该应用程序是混淆的.

例:

LocRes_en.properties:


    text1 = English text

LocRes_ja.properties


    text1 = Japanese text

ChangeLocale.java:


    import java.awt.EventQueue;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Locale;
    import java.util.ResourceBundle;

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;

    public class ChangeLocale {

        private JFrame frame;

        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        ChangeLocale window = new ChangeLocale();
                        window.frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }

        public ChangeLocale() { …

java swing locale localization runtime

13
推荐指数
2
解决办法
1万
查看次数

Swing国际化-如何在运行时更新语言

我一直遵循Google的Window Builder Pro扩展指南,以使我的应用程序国际化。现在,将在标签中显示的字符串存储在由“外部字符串”向导创建的属性文件中(我使用了经典的日食消息文件)。

在我的initialize方法内部,所有标签都被初始化,其文本设置如下:

JLabel lblLanguage = new JLabel(Messages.getString("App.lblLanguage.text")); //$NON-NLS-1$
Run Code Online (Sandbox Code Playgroud)

我在类中创建了一个App包含GUI 的枚举类型:

private enum Lang { German(Locale.GERMAN), English(Locale.ENGLISH);

    private Locale loc;
    Lang (Locale l) {
        loc = l;
    }

    Locale getLocale() {
        return loc;
    }
}
Run Code Online (Sandbox Code Playgroud)

将使用组合框设置语言,该组合框使用枚举类型Lang来显示可用的语言:

    JComboBox cboLanguage = new JComboBox();
    cboLanguage.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            JComboBox cb = (JComboBox)e.getSource();
            Lang l = (Lang)cb.getSelectedItem();
            // TODO: update language
        }
    });
    cboLanguage.setModel(new DefaultComboBoxModel(Lang.values()));
Run Code Online (Sandbox Code Playgroud)

我发现了许多其他的howto和教程,它们涵盖了swing应用程序的国际化,但是它们都没有涉及如何更新所有标签(以及可能包含文本的其他控件)。SO上有这个答案,如果链接没有死的话,可能会有所帮助。
因为我是Java GUI编程的新手,所以我现在真的不知道该做什么,这是我的问题:

  • 如果设置了新语言,最好的方法是在运行时更改所有控件的语言?
  • 是否可以(建议)将所有控件声明为App类的私有成员,以让方法更新其text属性(-> updateLanguage …

java swing internationalization

5
推荐指数
1
解决办法
5337
查看次数