如何本地化JOptionPane消息标题?

时间:2011-04-22 17:19:59

标签: java localization

是否可以本地化JOptionPane消息标题,即“消息”?我使用

本地化了确定和取消按钮文本
UIManger.put("Ok","localtext");

由于

4 个答案:

答案 0 :(得分:2)

当您调用show * Dialog方法时,可以为JOptionPane提供的所有对话框设置标题。它通常是第三个方法参数。例如:

JOptionPane.showMessageDialog(Component parentComponent, Object message, String title, int messageType)

通常,从资源包中读取本地化字符串(例如对话框标题),并将其作为参数传递给show * Dialog调用。

答案 1 :(得分:1)

使用java.util.ResourceBundle

使用它,您可以将特定键下的本地化值存储在.properties文件中,然后通过以下方式获取它们:ResourceBundle.getBundle("messages", locale).get("messageKey")

.properties个文件由basename_locale.properties组成。例如,messages_en.properties

关于JOptionPanesee here如何自定义文本。至于标题 - 您可以将其作为参数传递。

答案 2 :(得分:1)

你不会期待这个答案......

在JDK安装目录下,您将能够找到名为src.zip的文件。只需解压缩并导航到javax / swing / JOptionPane.java即可。它包含以下可能回答您问题的方法:

public static String showInputDialog(Component parentComponent,
    Object message) throws HeadlessException { 
    return showInputDialog(parentComponent, message, UIManager.getString(
        "OptionPane.inputDialogTitle", parentComponent), QUESTION_MESSAGE);
}

正如您所看到的,OptionPane.inputDialogTitle可能正是您所寻找的......虽然有更简单的方法来设置标题。但是,如果你想以同样的方式做所有事情,你也可以使用UIManager 我写这个,因为你肯定需要这个方法用于其他对话,即JFileChooser。通过这样做,您可能会发现桌面文件夹名称在Windows Vista +上的Java 6中是硬编码的(它被解析为磁盘上的实际文件夹名称,它总是“桌面”)。

答案 3 :(得分:0)

本地化JoptionPane标题,消息和选项(YES,NO,OK,CANCEL):

资源包允许我们设置不同的语言。 Bellow示例说明了如何使用中文消息和选项创建消息对话框...

import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;

import javax.swing.JOptionPane;

public class LocalizeMessagePane {

    private static ResourceBundle resourceBundle = null;    
    //Language Property location
    private static final String PROPERTY_LOCATION = "resource"; 

    public static void main(String[] args) {        

        resourceBundle = getLanguageBundle(); //try to get Chinese bundle       

        // Get Yes/No option text from bundle

        Object[] options = { resourceBundle.getObject("Yes").toString(),
                             resourceBundle.getObject("No").toString() };

        int option = JOptionPane.showOptionDialog(null, resourceBundle
                .getObject("sureDo").toString(),                                
                resourceBundle.getObject("title").toString(),
                JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
                options, options[1]);

        if(option==JOptionPane.YES_OPTION){
            // do stuff
        }       
    }   

    public static ResourceBundle getLanguageBundle() {
        try {
            /* The Property file should be placed under 'resource' directory. */
            resourceBundle = new PropertyResourceBundle(new InputStreamReader(
                    new FileInputStream(PROPERTY_LOCATION
                            + "/Bundle_zh_CN.properties"),
                    Charset.forName("UTF-8")));

        } catch (Exception e) {
            // do stuff
        }
        return resourceBundle;
    }