【问题标题】:Android Localization from resources来自资源的 Android 本地化
【发布时间】:2015-12-28 13:21:39
【问题描述】:

我目前正在尝试本地化我的 android 应用程序,并且我已经设置了所有内容,但是每当我尝试更改语言时它都会加载相同的字符串资源。

我有以下字符串资源

values
values-am
values-om

SharedPreferences sharedPreferences = getSharedPreferences("MY_SHARED_PREF", MODE_PRIVATE);
String languageLocale = sharedPreferences.getString("SAVED_LANGUAGE_LOCALE", "am");

    Log.d(TAG,languageLocale);

    String languageToLoad  = languageLocale; // your language
    Locale locale = new Locale(languageToLoad);
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config,
            getBaseContext().getResources().getDisplayMetrics());

我还使用下面的代码在不同的活动中选择语言

RadioGroup.OnCheckedChangeListener radioGroupOnCheckedChangeListener =
        new RadioGroup.OnCheckedChangeListener(){

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {

                RadioButton checkedRadioButton = (RadioButton)mRadioGroup.findViewById(checkedId);
                int checkedIndex = mRadioGroup.indexOfChild(checkedRadioButton);
                //AppController languageSetting = (AppController)getApplication();
                SavePreferences(KEY_SAVED_RADIO_BUTTON_INDEX, checkedIndex);
                mLanguageId = checkedIndex + 1;
                languageSetting.setLanguageId(mLanguageId);
                switch (mLanguageId){
                    case 1:
                        SavePreferencesLocale(KEY_SAVED_LANGUAGE_LOCALE,"en");
                        mTest = "en";
                        break;
                    case 2:
                        SavePreferencesLocale(KEY_SAVED_LANGUAGE_LOCALE,"am");
                        mTest = "am";
                        break;
                    case 3:
                        SavePreferencesLocale(KEY_SAVED_LANGUAGE_LOCALE,"om");
                        mTest = "om";
                        break;
                }

            }};

现在的问题是,每当应用程序第一次启动时,它会加载正确的字符串资源,但是当我更改语言时,它会保留相同的字符串资源。这意味着例如。如果应用程序以 values-am 字符串资源开始,当我将其更改为 values-om 时,我仍然会看到 values-am 字符串,尽管为区域设置分配了正确的值(“om”)

【问题讨论】:

  • 通过“保持相同的字符串资源” - 你的意思是它没有将视图中的当前值更新为本地化的值?
  • @aelimill 是的,我就是这个意思。
  • 你需要手动更新所有需要的视图或者在activity中调用recreate()。可悲的是,但这是我知道让它自动工作的唯一方法

标签: android string localization resources


【解决方案1】:

这里有一些东西:

String languageLocale = sharedPreferences.getString("SAVED_LANGUAGE_LOCALE", "am");

由**

sharedPreferences.getString(""SAVED_LANGUAGE_LOCALE", "am");

** 你不需要字符串 "am"。这个"am"你只需要.putString()

应该是这样的

  String languageLocale = sharedPreferences.getString("KEY_SAVED_LANGUAGE_LOCALE");

【讨论】:

  • 我正在使用它来访问我在共享首选项中保存的内容。我已经使用 Log.d(TAG,languageLocale) 对其进行了测试,它给了我正是我所需要的。字符串“am”只是一个默认值
  • putString() 在哪里?
  • 如果您在我的第一篇文章中看到函数 SavePreferencesLocale() 被称为 private void SavePreferencesLocale(String key, String value){ SharedPreferences sharedPreferences = getSharedPreferences("MY_SHARED_PREF", MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(key, value); editor.commit(); }
【解决方案2】:

您需要在onCheckedChanged() 中的每个语言选择上调用以下代码。

Locale locale = new Locale("Selected language code comes here");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

设置Locale后,使用recreate()重启activity。

【讨论】:

  • 我已经尝试过了,但仍然没有运气。以下是我所做的更改
  • 我通过清除缓存和终止应用程序进程解决了这个问题。换句话说,我必须再次手动启动应用程序。我觉得我的解决方案并不完美,我认为还有更好的方法。
【解决方案3】:

意图刷新和调用

Locale locale = new Locale("ar"); 
Locale.setDefault(locale); 
Configuration config = new Configuration(); 
config.locale = locale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 

this.setContentView(R.layout.activity_main_category_page);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多