Правильный способ сравнения локалей

В настоящее время я хочу узнать, какой файл свойств загружается в мое приложение.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package example0;

import java.util.Locale;

/**
 *
 * @author yccheok
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        //Locale.setDefault(Locale.SIMPLIFIED_CHINESE);     // Bundle_zh_CH.properties will be loaded.
        //Locale.setDefault(Locale.CHINA);                  // Bundle_zh_CH.properties will be loaded.
        //Locale.setDefault(Locale.TRADITIONAL_CHINESE);    // Bundle.properties will be loaded.
        //Locale.setDefault(Locale.CHINESE);                // Bundle.properties will be loaded.

        String Hello = java.util.ResourceBundle.getBundle("example0/Bundle").getString("HELLO");
        System.out.println(Hello);

        System.out.println("Locale.SIMPLIFIED_CHINESE language : " + Locale.SIMPLIFIED_CHINESE.getLanguage());
        System.out.println("Locale.CHINA language : " + Locale.CHINA.getLanguage());
        System.out.println("Locale.TRADITIONAL_CHINESE language : " + Locale.TRADITIONAL_CHINESE.getLanguage());
        System.out.println("Locale.CHINESE language : " + Locale.CHINESE.getLanguage());

        System.out.println("Locale.SIMPLIFIED_CHINESE country : " + Locale.SIMPLIFIED_CHINESE.getCountry());
        System.out.println("Locale.CHINA country : " + Locale.CHINA.getCountry());
        System.out.println("Locale.TRADITIONAL_CHINESE country : " + Locale.TRADITIONAL_CHINESE.getCountry());
        System.out.println("Locale.CHINESE country : " + Locale.CHINESE.getCountry());
    }

}

Ниже представлен вывод:

Hello
Locale.SIMPLIFIED_CHINESE language : zh
Locale.CHINA language : zh
Locale.TRADITIONAL_CHINESE language : zh
Locale.CHINESE language : zh
Locale.SIMPLIFIED_CHINESE country : CN
Locale.CHINA country : CN
Locale.TRADITIONAL_CHINESE country : TW
Locale.CHINESE country : 

Ранее, чтобы определить, будет ли загружен файл свойств Bundle_zh_CH.properties, я выполняю следующее сравнение.

if (Locale.getDefault() == Locale.SIMPLIFIED_CHINESE)

Однако некоторые Locale, кроме SIMPLIFIED_CHINESE, будут загружать Bundle_zh_CH.properties.

Какой надежный способ для меня сделать?

Должен ли я

if (Locale.getDefault() == Locale.SIMPLIFIED_CHINESE || Locale.getDefault() == Locale.China)

или

if (Locale.getDefault().equals("CN"))

Ответ 1

Не полагайтесь на сравнение операторов equals, поскольку вы можете создавать новые экземпляры Locale с его общедоступными конструкторами. В следующем коде:

Locale simpChinese = new Locale("zh","CN","");
System.out.println(simpChinese == Locale.SIMPLIFIED_CHINESE);
System.out.println(simpChinese.equals(Locale.SIMPLIFIED_CHINESE));

печатает:

false
true