手动本地化应用程序

时间:2015-08-28 13:07:19

标签: android localization locale

任务包括以下内容:需要为用户提供应用程序界面(ru,en,uk,以及默认选择)的语言更改的可能性。为实现这一功能,我们完成了:

1)创建了资源文件夹:values,values - uk,values - ru,values - en,其中files.xml包含内容翻译。

2)通过Spinner获取并以SharedPreferences语言ID写下来。

3)在onCreate的应用程序开始时使用本地化:

SharedPreferences preferences = context.getSharedPreferences(Constants.APP_PREFERENCES, Context.MODE_PRIVATE);
String lang = preferences.getString(Constants.LANGUAGE, "default");
  if (lang.equals("default")) {
    lang=context.getResources().getConfiguration().locale.getCountry();
  }
  Locale locale = new Locale(lang);
  Locale.setDefault(locale);
  Configuration config = new Configuration();
  config.locale = locale;
  Log.i("Lang change", "Locale=" + locale);
  context.getResources().updateConfiguration(config,
  context.getResources().getDisplayMetrics());

几乎所有人都提出并适用,但不是全部。也就是说,在某些地方(在一些对话框和BaseAdapter中,NavigationDrawer)提取了与系统语言完全相同的本地化。例如,在设备上乌克兰语本地化,默认为英语,俄语在应用程序中选择,然后在较高指示位置的应用程序总数中提取除基本俄语之外的乌克兰语内容。

在onConfigurationChanged()中完成处理:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    locale = new Locale(lang);
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, null);
 }

并清除manifest.xml中的每个活动android:configChanges =“locale”。

没有帮助。

问题出在哪里?

1 个答案:

答案 0 :(得分:0)

我在你的代码中找不到问题。但这里是我如何改变app的语言。也许它可以帮助你。它工作正常;

//get sharedPreferences
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    //get default local for first initialization
    String defaultLanguage = this.getResources().getConfiguration().locale.getLanguage();
    Configuration configuration = new Configuration();
    //check language preference everytime onCreate of all activities, if there is no choise set default language
    Locale newLocaleLanguage = new Locale(sharedPreferences.getString("newLanguagePref",defaultLanguage));
    //finally setdefault language/locale according to newLocaleLanguage.
    Locale.setDefault(newLocaleLanguage);
    configuration.locale = newLocaleLanguage;
    getBaseContext().getResources().updateConfiguration(configuration, getBaseContext().getResources().getDisplayMetrics());

您应该将此代码写入onCreate方法中的所有活动。您应该在设置页面上使用newLanguagePref标记写入您的sharedPreferences。