Bạn có thể sử dụng mã dưới đây. Ví dụ, các chức năng được trình bày bên dưới có thể được đặt bên trong lớp mở rộng lớp Ứng dụng.
public class MyApplication extends Application {
...
public static String APP_LANG;
private Context ctx = getBaseContext();
private Resources res = ctx.getResources();
public SharedPreferences settingPrefs;
...
public void restoreAppLanguage(){
/**
*Use this method to store the app language with other preferences.
*This makes it possible to use the language set before, at any time, whenever
*the app will started.
*/
settingPrefs = getSharedPreferences("ConfigData", MODE_PRIVATE);
String lang = settingPrefs.getString("AppLanguage", "");
if(!settingPrefs.getAll().isEmpty() && lang.length() == 2){
Locale myLocale;
myLocale = new Locale(lang);
Locale.setDefault(myLocale);
Configuration config = new Configuration();
config.locale = myLocale;
res.updateConfiguration(config, res.getDisplayMetrics());
}
}
public void storeAppLanguage(int lang) {
/**
*Store app language on demand
*/
settingPrefs = getSharedPreferences("ConfigData", MODE_PRIVATE);
Editor ed = settingPrefs.edit();
Locale myLocale;
myLocale = new Locale(lang);
Locale.setDefault(myLocale);
Configuration config = new Configuration();
config.locale = myLocale;
res.updateConfiguration(config, res.getDisplayMetrics());
ed.putString("AppLanguage", lang);
ed.commit();
}
public void setAppLanguage(String lang){
/**
*Use this method together with getAppLanguage() to set and then restore
*language, whereever you need, for example, the specifically localized
*resources.
*/
Locale myLocale;
myLocale = new Locale(lang);
Locale.setDefault(myLocale);
Configuration config = new Configuration();
config.locale = myLocale;
res.updateConfiguration(config, res.getDisplayMetrics());
}
public void getAppLanguage(){
/**
*Use this method to obtain the current app language name
*/
settingPrefs = getSharedPreferences("ConfigData",MODE_PRIVATE);
String lang = settingPrefs.getString("AppLanguage", "");
if(!settingPrefs.getAll().isEmpty() && lang.length() == 2){
APP_LANG = lang;
}
else APP_LANG = Locale.getDefault().getLanguage();
}
}
Và rồi bất cứ nơi nào trong mã chính chúng ta có thể viết:
public class MainActivity extends ActionBarActivity {
...
MyApplication app;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
app = (MyApplication)getApplicationContext();
...
if(settingPrefs.getAll().isEmpty()){
//Create language preference if it is not
app.storeAppLanguage(Locale.getDefault().getLanguage());
}
//Restore previously used language
app.restoreAppLanguage();
...
}
...
void SomethingToDo(){
String lang = "en"; //"fr", "de", "es", "it", "ru" etc.
...
app.getAppLanguage();
app.setAppLanguage(lang);
...
//do anything
...
app.setAppLanguage(app.APP_LANG);
}
...
}
Trong trường hợp của bạn, bạn, trong thời gian ngắn, có thể sử dụng getAppLanguage()
và sau đó kiểm tra các biến công APP_LANG
để có được những gì ngôn ngữ hiện đang được sử dụng .
Nguồn
2015-04-24 11:55:47
Tôi đoán giải pháp này được cho là một phần của câu hỏi của bạn. –
@YaqubAhmad Tôi đã đến giải pháp này sau. Nhưng tôi vẫn đang chờ giải pháp tốt hơn. –
Tôi thích giải pháp này vì sau đó tôi được đảm bảo chỉ lấy mã miền địa phương nếu tài nguyên dịch thuật của tôi đang được sử dụng. Và đó là lần duy nhất tôi muốn nó. Nếu không, tôi có thể nhận ngày tháng bằng một ngôn ngữ và các tài nguyên chuỗi khác bằng ngôn ngữ khác nếu tôi phạm phải một số lỗi lầm khi nhận được ngôn ngữ. – Suragch