Возникла проблема с мультиязычными настройками в моем приложении? - PullRequest
1 голос
/ 01 февраля 2012

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

public class MultiLanguage extends Activity implements OnClickListener {

    private Button germany, english, french;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.language);

        english = (Button) findViewById(R.id.english);
        english.setOnClickListener(this);

        germany = (Button) findViewById(R.id.germany);
        germany.setOnClickListener(this);

        french = (Button) findViewById(R.id.french);
        french.setOnClickListener(this);

    }

    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.english:
            setLocale("en");
            break;

        case R.id.germany:
            setLocale("de");
            break;

        case R.id.french:
            setLocale("fr");
            break;
        }
    }
    public void setLocale(String localStr) {

        Locale localeLang = new Locale(localStr);
        Locale.setDefault(localeLang);
        Configuration config = new Configuration();
        config.locale = localeLang;
        getBaseContext().getResources().updateConfiguration(config,
                getBaseContext().getResources().getDisplayMetrics());
        finish();
        Intent refreshActivity = new Intent(this, Home.class);
        refreshActivity.setAction(Intent.ACTION_CONFIGURATION_CHANGED);
        startActivity(refreshActivity);
    }

}

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

В файле манифеста я также упомянул следующую строку:

android:configChanges="locale"

Может ли любое тело исправить ошибку, которую я сделал здесь.

Ответы [ 3 ]

4 голосов
/ 01 февраля 2012

Проблема в том, что вы не сохраняете свой язык между запусками программы.Сохраните его, используя предпочтения и прочитайте их в своем onCreate.

1 голос
/ 01 февраля 2012

Проблема в том, что с вашим потоком вы заканчиваете свою деятельность, а затем начинаете новую с намерением, поэтому сделайте так:

    Intent refreshActivity = new Intent(this, Home.class);
    refreshActivity.setAction(Intent.ACTION_CONFIGURATION_CHANGED);
    startActivity(refreshActivity);
    finish();
1 голос
/ 01 февраля 2012

Не пытаетесь ли вы заново изобрести колесо?

Почему бы не использовать локаль по умолчанию, выбранную пользователем на его телефоне?Это предпочтительный способ в экосистеме Android.

Единственное, что вам нужно сделать, - это предоставить несколько версий (по одной для желаемой локали) ваших файлов ресурсов (например, values/strings.xml).Если языковой стандарт пользователя не найден в ресурсах вашего приложения, по умолчанию используется значение values/strings.xml.Иначе он будет использовать values-[locale]/strings.xml

Подробнее: http://developer.android.com/guide/topics/resources/localization.html

...