Android Локализация - PullRequest
12 голосов
/ 10 января 2012

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

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();   

Ответы [ 3 ]

14 голосов
/ 10 января 2012

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

1) Установите int для всех поддерживаемых языков.2) Используйте базовую функцию для установки локали по умолчанию.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());
}

, где языковой стандарт соответствует 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);и должно быть работа!

6 голосов
/ 15 марта 2012

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

3 голосов
/ 10 января 2012

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

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

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