我的应用中有两种语言。 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());
当我选择语言时,会重新加载活动或应用程序。
答案 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);
更改本地配置后使用此代码。