Настройка языкового стандарта программно не работает? - PullRequest
5 голосов
/ 24 августа 2011

У меня есть действие, в котором я программно устанавливаю язык "de", он не работает должным образом и отображает язык по умолчанию (текст на английском языке), который установлен вручную. Пожалуйста, помогите

public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        //Programmatically sets the locale and language  
        Locale locale = new Locale("de");  
        Locale.setDefault(locale);  
        Configuration config = new Configuration();  
        config.locale = locale;   
        getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());   

       Toast.makeText(getApplicationContext(),Locale.getDefault().getDisplayLanguage(),Toast.LENGTH_LONG).show();  

        setContentView(R.layout.main);  
Intent intent=new Intent(LatestLocalizationActivity.this,AnotherActivity.class);  
       startActivity(intent);  
}

Ответы [ 3 ]

5 голосов
/ 24 августа 2011

если вы добавили файл Strings.xml в папку res-> value-de?

public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        //Programmatically sets the locale and language
                    setContentView(R.layout.main); 
                    config = getBaseContext().getResources().getConfiguration(); 
                    locale = new Locale("de");
                    Locale.setDefault(locale);
                    config.locale = locale;
                    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
                    refresh();



       Toast.makeText(getApplicationContext(),Locale.getDefault().getDisplayLanguage(),Toast.LENGTH_LONG).show();  


}



@Override
    public void onConfigurationChanged(Configuration newConfig) {
        Configuration config = getBaseContext().getResources().getConfiguration();
      // refresh your views here
        Locale.setDefault(locale);
        config.locale = locale;
      super.onConfigurationChanged(newConfig);
    }



private void refresh() {
        finish();
        Intent myIntent = new Intent(yourActivity.this, yourActivity.class);
        startActivity(myIntent);
    }
3 голосов
/ 24 августа 2011

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

2 голосов
/ 21 октября 2015

Это сработало для меня:

public static void changeLocale(Context context, Locale locale) {
    Configuration conf = context.getResources().getConfiguration();
    conf.locale = locale;
    Locale.setDefault(locale);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        conf.setLayoutDirection(conf.locale);
    }

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

используйте свой КОНТЕКСТ ДЕЯТЕЛЬНОСТИ, а не контекст приложения.

...