Android设置特定于区域的区域设置

时间:2015-08-01 15:01:04

标签: android locale

我想支持使用简单的微调器和按钮更改应用程序中的区域设置。重启应用程序后,在调试中,我看到语言环境已经改变,

String st = getResources().getConfiguration().locale.getLanguage(); // st = fr_ca

但应用程序不使用替代资源。我的代码:

public void onClickButtonSubmit(View view) {
        Spinner spinner = (Spinner)findViewById(R.id.spinnerLanguage);
        int id = spinner.getSelectedItemPosition();
        MyPreferences myPreferences = new MyPreferences(this);
        switch (id) {
            case 0:
                TruckerUtil.setLocale("en_CA", this);
                myPreferences.setValue("lang", "en_CA");
                break;
            case 1:
                TruckerUtil.setLocale("en_US", this);
                myPreferences.setValue("lang", "en_US");
                break;
            case 2:
                TruckerUtil.setLocale("fr_CA", this);
                myPreferences.setValue("lang", "fr_CA");
                break;
        }
    }

TruckerUtil类中的方法:

public static void setLocale(String lang, Context context) {
        Locale locale = new Locale(lang);
        locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        context.getResources().updateConfiguration(config, null);
    }

MyPreferense类中的方法:

public void setValue(String key, String val) {
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString(key, val);
        editor.commit();
    }

public String getLocale() {
        if (preferences.contains("lang")) {
            return preferences.getString("lang", null);
        }
        return null;
    }

在应用程序启动时设置新的语言环境:

public class App extends Application {


    @Override
    public void onCreate() {
        MyPreferences myPreferences = new MyPreferences(this);
        if (myPreferences.getLocale() != null) {
            TruckerUtil.setLocale(myPreferences.getLocale(), this);
        }
        //String st = getResources().getConfiguration().locale.getLanguage();
    }
}

我的资源:

/res/values/
/res/values-en-rCA/
/res/values-en-rUS/
/res/values-fr-rCA/

有什么想法吗? 附:如果使用无区域特定区域设置(例如'uk'或'ru'),它可以正常工作。

0 个答案:

没有答案