[英]Android: Change language programmatically
I have 3 buttons to change language. 我有3个按钮可以更改语言。 So I need to make method, where I could set listeners to buttons which could change language everytime they are pressed.
因此,我需要制作方法,在其中可以将侦听器设置为按钮,这些按钮可以在每次按下按钮时更改语言。 I tried this https://stackoverflow.com/a/2900144/1088229 but this way it changes locale only once and seems that this doesn't work any more (if i click again, it doesn't even respond).
我尝试了这个https://stackoverflow.com/a/2900144/1088229,但是这样,它仅更改一次语言环境,似乎不再起作用(如果我再次单击,它甚至都不会响应)。 So I added
changeLanguageListener()
in end of listener, so listener is refreshed. 因此,我在侦听器的末尾添加了
changeLanguageListener()
,从而刷新了侦听器。
So is it ok, how i solved it or there is another way? 那可以,我如何解决呢?还是有另一种方法呢?
private void changeLanguageListener() {
final Button butEn = (Button) findViewById(R.id.button_language_en);
final Button butLt = (Button) findViewById(R.id.button_language_lt);
final Button butRu = (Button) findViewById(R.id.button_language_ru);
OnClickListener listener = new OnClickListener() {
public void onClick(View v) {
Button but = (Button) v;
Resources res = getResources();
String current = res.getConfiguration().locale.getCountry();
Log.i("Current", current);
String localeString = new String(current);
if (but.equals(butEn)) {
localeString = "en";
} else if (but.equals(butLt)) {
localeString = "lt";
} else if (but.equals(butRu)) {
localeString = "ru";
}
Log.i("Clicked", localeString);
if (!current.equalsIgnoreCase(localeString) && localeString.length() > 0) {
// Change locale settings in the app.
DisplayMetrics dm = res.getDisplayMetrics();
android.content.res.Configuration conf = res.getConfiguration();
conf.locale = new Locale(localeString.toLowerCase());
res.updateConfiguration(conf, dm);
//refresh menu
setGridView();
//added this line to get refreshed listener
changeLanguageListener();
}
}
};
butEn.setOnClickListener(listener);
butLt.setOnClickListener(listener);
butRu.setOnClickListener(listener);
}
So, because of only two activities (two menu modes) where i let to change locale, I just restart Activity right after locale change, so everything is refreshed. 因此,由于只有两个活动(两个菜单模式)允许我更改语言环境,因此我仅在更改语言环境后立即重新启动“活动”,因此所有内容都会刷新。 Didn't find any other better solution
没有找到其他更好的解决方案
Resources res = context.getResources();
// Change locale settings in the app.
DisplayMetrics dm = res.getDisplayMetrics();
android.content.res.Configuration conf = res.getConfiguration();
conf.locale = new Locale(language_code.toLowerCase());
res.updateConfiguration(conf, dm);
If you have language specific content - you can change that base on the setting.## Heading ## 如果您有特定于语言的内容,则可以根据设置进行更改。##标题##
I would not recommend to change the language within your application. 我不建议在您的应用程序中更改语言。 A better solution would be a button that opens the systems locale settings.
更好的解决方案是打开系统区域设置的按钮。 You can use the following intent for this.
您可以为此使用以下意图。
startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCALE, 0);
For more info about the locale settings: http://developer.android.com/reference/android/provider/Settings.html#ACTION_LOCALE_SETTINGS 有关语言环境设置的更多信息: http : //developer.android.com/reference/android/provider/Settings.html#ACTION_LOCALE_SETTINGS
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.