麻烦与活动标题语言

时间:2014-04-05 17:13:35

标签: android

我的应用中有两种语言。 values / strings.xml values-ru / strings.xml 当我以编程方式更改语言时,所有字符串都会进行翻译,但活动标题不会更改。我在所有活动中使用

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String languageToLoad  = prefs.getString("prefLanguage","en");
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
        getBaseContext().getResources().getDisplayMetrics());

当我选择语言时,会重新加载活动或应用程序。

3 个答案:

答案 0 :(得分:23)

我用另一种看似愚蠢的方式,但它的工作

每个活动中的

尝试从值文件

设置活动标题的操作栏标题

就我而言,我使用的是sherlockactionbar

所以我在oncreate活动的productdetails

中添加了此内容
    getSupportActionBar().setTitle(getResources().getString(R.string.title_activity_product_details));

答案 1 :(得分:6)

setTitle(R.string.activity_title)中添加onCreate()会更新活动标题以及内容本身在运行时中区域设置的更改。

以下是点击按钮时更新其内容和活动的韩国(ko-KR)标题的简单代码段:

public class MainActivity extends AppCompatActivity {

    Button btnReset;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Activity title will be updated after the locale has changed in Runtime
        setTitle(R.string.app_name);

        btnReset = (Button) findViewById(R.id.button);
        btnReset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Resources resources = getResources();
                DisplayMetrics dm = resources.getDisplayMetrics();
                Configuration conf = resources.getConfiguration();
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                    conf.setLocale(Locale.KOREA);
                } else {
                    conf.locale = Locale.KOREA;
                }
                resources.updateConfiguration(conf, dm);

                // Overwrite the default Locale
                Locale.setDefault(Locale.KOREA);

                // Clear the back stack then restarts the activity
                startActivity(new Intent(MainActivity.this, MainActivity.class)
                        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                                | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK));
            }
        });
    }
}

答案 2 :(得分:0)

我是按照以下方式做到的,并为我工作。

setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setTitle(resources.getString(R.string.app_name));
    setSupportActionBar(toolbar);

更改本地配置后使用此代码。