我想用两种语言显示android应用程序,但我的应用程序不是以用户选择的语言开头。我的默认应用程序语言是“英语”,当用户更改“语言设置”时,我想用“缅甸语”启动应用程序。我该怎么办?
答案 0 :(得分:0)
据我所知,用户更改了设备语言,并且您希望应用程序遵循该语言
此行将为您提供设备语言,以便您的应用可以在支持的语言之间切换。
Locale.getDefault().getLanguage();
答案 1 :(得分:0)
我没有理解语言设置部分,用户是否可以从应用程序本身更改应用程序语言?
如果否 -
您可以按Locale.getDefault().getLanguage();
如果是 -
保存用户选择的语言在SharedPreference中,如果用户选择了英语显示英语内容,则使用Burmese。
答案 2 :(得分:0)
试试这个......
<强> LocalSharedManager.java 强>
public class LocalSharedManager {
Context context;
SharedPreferences sharedPreferences;
public LocalSharedManager(Context context) {
this.context = context;
sharedPreferences = context.getSharedPreferences("pref",
Context.MODE_PRIVATE);
}
public SharedPreferences getGcmPreferences() {
return sharedPreferences;
}
public String GetValueFromSharedPrefs(String KeyName) {
return sharedPreferences.getString(KeyName, "");
}
public String SaveValueToSharedPrefs(String KeyName, String value) {
Editor editor = sharedPreferences.edit();
editor.putString(KeyName, value);
editor.commit();
return true;
}
}
<强> MainActivity.java 强>
public class MainActivity extends Activity
{
private RadioGroup radioGroup;
private RadioButton english;
private RadioButton burmese;
private LocalSharedManager mgr;
private Configuration config;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mgr = new LocalSharedManager(MainActivity.this);
radioGroup = (RadioGroup) findViewById(R.id.radioChoice);
english=(RadioButton)findViewById(R.id.radioEnglish);
burmese=(RadioButton)findViewById(R.id.radioBurmese);
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(RadioGroup group, int checkedId)
{
// do whatever
if(english.isChecked())
{
// Do the UI changes for English.
Toast.makeText(MainActivity.this,"English", Toast.LENGTH_SHORT).show();
ChangeLocale();
}
else if(burmese.isChecked())
{
// Do the UI changes for Burmese.
Toast.makeText(MainActivity.this,"Burmese", Toast.LENGTH_SHORT).show();
ChangeLocale();
}
}
});
}
/**
* Method that use change locale type to English or Arabic.
*/
public void ChangeLocale() {
String lang = mgr.GetValueFromSharedPrefs("App_Locale");
if (lang.equalsIgnoreCase("")) {
//default
changeEnglish();
} else {
if (lang.equalsIgnoreCase("MY")) {
changeBurmese();
} else {
changeEnglish();
}
}
}
public void changeBurmese() {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
String app_locale = "my";
Locale locale = new Locale(app_locale);
Locale.setDefault(locale);
config = new Configuration();
config.locale = locale;
getResources().updateConfiguration(config,
getResources().getDisplayMetrics());
//save selected locale in preference
mgr.SaveValueToSharedPrefs("App_Locale", app_locale);
//refresh activity here.
Intent i = getActivity().getIntent();
startActivity(i);
getActivity().finish();
return null;
}
}.execute();
}
public void changeEnglish() {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
String app_locale = "en";
Locale locale = new Locale(app_locale);
Locale.setDefault(locale);
config = new Configuration();
config.locale = locale;
getResources().updateConfiguration(config,
getResources().getDisplayMetrics());
//save selected locale in preference
mgr.SaveValueToSharedPrefs("App_Locale", app_locale);
//refresh activity here.
Intent i = getActivity().getIntent();
startActivity(i);
getActivity().finish();
return null;
}
}.execute();
}
}