Как я могу изменить язык своего приложения?

В моем приложении у меня есть выбор выбора языка.

Существует три языка: английский, немецкий и испанский. Когда я выбираю параметр, весь язык приложения должен быть изменен.

Как я могу сделать это возможным?

Ответ 1

Вы хотите, чтобы вы использовали другой язык, чем язык по умолчанию в телефоне? У меня это в одном приложении, и это то, что я должен был сделать.

Добавьте это в объявление своей деятельности в AndroidManifest.xml

<activity
    android:name=".ui.SomeActivity"
    android:configChanges="locale"
    :
    :
</activity>

А затем вызовите в своей работе такой метод из onCreate:

public static void setLanguage(Context context, String languageToLoad) {
    Log.d(TAG, "setting language");
    Locale locale = new Locale(languageToLoad); //e.g "sv"
    Locale systemLocale = SystemLocale.getInstance().getCurrentLocale(context);
    if (systemLocale != null && systemLocale.equals(locale)) {
       Log.d(TAG, "Already correct language set");
       return;
    }
    Locale.setDefault(locale);
    android.content.res.Configuration config = new android.content.res.Configuration();
    config.locale = locale;
    context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
    Log.d(TAG, "Language set");
}

Ответ 2

Вы просто добавляете папку значений в соответствии с языком. Например, я добавил 3 языка: английский, арабский и хинди. В папке res создайте values-ar для арабского и values-hi для хинди для хранения всех строк, используемых в приложении. Теперь у меня есть список языков. Поэтому, когда пользователь нажимает на один из языков, язык приложения будет изменен, и язык телефона останется таким же. Вот код.

  listview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // When clicked, show a toast with the TextView text
            String language = ((TextView) view).getText().toString();
            if (language.equals("English")) {
                Locale locale = new Locale("en");
                Locale.setDefault(locale);
                Configuration config = new Configuration();
                config.locale = locale;
                getBaseContext().getResources()
                        .updateConfiguration(
                                config,
                                getBaseContext().getResources()
                                        .getDisplayMetrics());
                Toast.makeText(ChangeLanguage.this, "Locale in English",
                        Toast.LENGTH_LONG).show();

            } else if (language.equals("Arabic")) {

                Locale locale = new Locale("ar");
                Locale.setDefault(locale);
                Configuration config = new Configuration();
                config.locale = locale;
                getBaseContext().getResources()
                        .updateConfiguration(
                                config,
                                getBaseContext().getResources()
                                        .getDisplayMetrics());
                Toast.makeText(ChangeLanguage.this, "Locale in Arabic",
                        Toast.LENGTH_LONG).show();
            }else if (language.equals("Hindi")) {

                Locale locale = new Locale("hi");
                Locale.setDefault(locale);
                Configuration config = new Configuration();
                config.locale = locale;
                getBaseContext().getResources()
                        .updateConfiguration(
                                config,
                                getBaseContext().getResources()
                                        .getDisplayMetrics());
                Toast.makeText(ChangeLanguage.this, "Locale in Hindi",
                        Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(ChangeLanguage.this,
                        "Locale in not changed!", Toast.LENGTH_LONG).show();
            }
            /*
             * Toast.makeText(getApplicationContext(), language,
             * Toast.LENGTH_SHORT) .show();
             */

            GetterSetter.getInstance().setLanguage(changelanguage);
            startActivity(new Intent(ChangeLanguage.this,
                    MainSettings.class));
            main.tabhost.setCurrentTab(3);
        }
    });