以编程方式设置语言环境无效?

6

我有一个活动,在其中以编程方式将区域设置为“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);  
}

尝试使用getApplicationContext()而不是getBaseContext()。 - TacB0sS
3个回答

6
你是否已经在res->value-de文件夹中添加了Strings.xml文件?
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);
    }

是的,我已经添加了它,并且在清单文件中也添加了android:configChanges="locale"。 - Smitha
我甚至尝试了上述方法。但是它只在我有一个活动的情况下才有效。从“LatestLocalizationActivity”中,我传递意图并启动“anotherActivity”,但它显示第二个活动的视图。 - Smitha
好的,那我得去谷歌一下,如果有更新会回复你。 - Mohammed Azharuddin Shaikh
我也在尝试解决问题。 - Smitha

4
这对我有效:
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());
}

请使用您的ACTIVITY CONTEXT而不是应用程序上下文。


3
请注意,尽管你可能可以通过一些方式来实现类似的功能,但Android目前不支持强有力地执行此操作。具体来说,框架会按照资源中的当前配置进行工作,并在认为适当时进行更新。你将与此进行抗争,很难避免配置恢复为系统语言环境的情况发生。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接