Подтвердить что ты не робот

Локализация Android

Следующий код для изменения языка приложения на испанском языке работает нормально на некоторых устройствах, но на некоторых устройствах он увеличивает (масштабирует) представления в приложении. У кого-нибудь есть решение?

Configuration config = getResources().getConfiguration();

// change this to a different Locale than your device
Locale locale = new Locale("es", "es_ES"); 
config.locale = locale;
Locale.setDefault(locale);
getBaseContext().getResources().updateConfiguration(config, getResources().getDisplayMetrics());
Log.i("onSelected..", Locale.getDefault().getCountry());
startActivity(new Intent(getApplicationContext(), HomePage.class));
finish();   
4b9b3361

Ответ 1

Я использую этот метод, когда мне приходится использовать разные языки:

1) Установите int для всех поддерживаемых языков. 2) Используйте базовую функцию для установки Default Locale. 3) Используйте функцию для запуска на разных языках.

Это пример:

2)

public static void setDefaultLocale(Context context,String locale) 
{
    Locale appLoc = new Locale(locale);
    Locale.setDefault(appLoc);

    Configuration appConfig = new Configuration();
    appConfig.locale = appLoc;

    context.getResources().updateConfiguration(appConfig, context.getResources()
            .getDisplayMetrics());
}

где locale следует ISO 639-1

1)

private Language myLanguage;
public enum Language 
{
    Null,Spanish,English,Catalan
}

3)

    private void launchApplication(int language)
{
    // Set Language
    switch (language)
    {
        case 1:
            // Español
            setDefaultLocale(getApplicationContext(),"es");
            myLanguage = Language.Spanish;
            break;
        case 2:
            // English
            setDefaultLocale(getApplicationContext(),"en");
            myLanguage = Language.English;
            break;
        default:
            // Catalan
            setDefaultLocale(getApplicationContext(),"ca");
            myLanguage = Language.Catalan;
            break;
    }

    Intent intent = new Intent(this, MyActivity.class);
    startActivityForResult(intent, 2);
    // Finish the Activity when return from the other Activity
    finish();


}

Затем вызовите launchApplication (int selected); и должен быть работой!

Ответ 2

и вам нужно добавить "locale" к изменениям конфигурации для вашей активности в манифесте. Без этого моя активность иногда игнорировала изменения локали.

Ответ 3

//вы обновляете конфигурацию с помощью displaymetris

поэтому он внесет изменения в вашу конфигурацию

getBaseContext().getResources().updateConfiguration(config, getResources().getDisplayMetrics());