2015-04-16 5 views
0

Я делаю многоязычный для моего проекта андроида. Все идеально. За исключением случаев, когда я закрываю приложение и запускаю его снова, он возвращается к предыдущему языку. Пример: У меня есть 2 языка вьетнамский и английский. Когда я начинаю, это вьетнамский. Затем я выбираю английский. Но когда я закрываю и начинаю его снова, он возвращается к вьетнамцам?Ошибка с многоязычным в android?

Мой код:

public class setting extends Fragment { 

/** 
* @param args 
*/ 
private Spinner spinnerctrl; 
private Locale myLocale; 
public View onCreateView(LayoutInflater inflater, 
     @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    View settingView = inflater.inflate(R.layout.setting, container, false); 
    spinnerctrl = (Spinner) settingView.findViewById(R.id.spinner1); 
    spinnerctrl.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
      if (arg2 == 1) { 
       Toast.makeText(arg0.getContext(), "You have selected English", Toast.LENGTH_SHORT).show(); 
       setLocale("en"); 
      } else if (arg2 == 2) { 
       Toast.makeText(arg0.getContext(), "You have selected VietNam", Toast.LENGTH_SHORT).show(); 
       setLocale("vi"); 
      } 
     } 

     private void setLocale(String lang) { 
      // TODO Auto-generated method stub 
      myLocale = new Locale(lang); 
      Resources res = getResources(); 
      DisplayMetrics dm = res.getDisplayMetrics(); 
      Configuration conf = res.getConfiguration(); 
      conf.locale = myLocale; 
      res.updateConfiguration(conf, dm); 
      Intent refresh = new Intent(getActivity(), MainActivity.class); 
      startActivity(refresh); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 
      // TODO Auto-generated method stub 

     } 

    }); 
    return settingView; 
} 
+0

ли вы найти ответ на этот вопрос? – Aiapaec

+0

Я все еще пытаюсь, но не работает – user3513645

ответ

1

При переопределении локали это только до тех пор активно, как текущий процесс запущен. После закрытия приложения процесс будет убит, а ваш параметр Locale будет потерян.

Если вы хотите сохранить пользовательскую локаль, вам может потребоваться ее постоянное сохранение, например. в SharedPreferences, как описано в этом ответе: https://stackoverflow.com/a/18563447/559745 Затем каждый раз, когда вы запускаете приложение, вам нужно проверить, какой язык был сохранен.

1

Вы не сохраняете это значение, поэтому при закрытии приложения все значения снова устанавливаются, и приложение выбирает язык с устройства. попробуйте использовать sharedPreferences для достижения этой цели:

SharedPreferences prefs = this.getSharedPreferences(
     "com.example.app", Context.MODE_PRIVATE); 

Чтобы прочитать предпочтения:

//use this when you start your activty 
String lan = prefs.getString("language", Locale.getDefault().getLanguage()); 
setlocale(lan); 

Для редактирования и сохранения настроек

//so when the users pick from the list you change the "en" with other language 
prefs.edit().putString("language", "en").apply(); 
+0

getSomeDate() не работает во фрагменте. Я использую getActivity, но он тоже не работает – user3513645

+0

@ user3513645 см. Мое редактирование. GetSomeDate() был из моего кода, не имеет значения здесь. Прости. – Aiapaec

Смежные вопросы