Используйте пользовательский язык для множественного числа

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

Вот мой код:

<application
    android:name=".xxx"
    android:allowBackup="true"
    android:icon="@drawable/logo"
    android:label="@string/app_name"
    android:theme="@style/Theme.mystyle"
    android:configChanges="locale"
    >

В приложении:

String lang = settings.getString("cs", "");
locale = new Locale(lang);
        Locale.setDefault(locale);
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

2 ответа

Решение

В конце концов я нашел правильное решение. Решение Серого Волка у меня почему-то не сработало. Возможно, все дело в уровне API, для которого вы разрабатываете свое приложение.

Это рабочий код. Кроме того, необходимо также добавить configChanges:locale в AndroidManifest. Это должно работать на Android 4.0.1 и выше.

public class MyApplication extends Application
{
private Locale locale = null;

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    if (locale != null)
    {
        newConfig.locale = locale;
        Locale.setDefault(locale);
        getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
    }
}

@Override
public void onCreate()
{
    super.onCreate();
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
    Configuration config = getBaseContext().getResources().getConfiguration();

    String lang = "cs";
    if (!"".equals(lang) && !config.locale.getLanguage().equals(lang))
    {
        locale = new Locale(lang);
        Locale.setDefault(locale);
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    }
}
}

Я выложил на GitHub просто LocaleAssistant класс, который я только что протестировал с множественным числом для словацкого, а также чешского языка, и он работал на устройстве с default locale установлен в EN, Просто вызовите эти два метода из вашего пользовательского приложения на экземпляре члена LocaleAssistant,

Другие вопросы по тегам