Почему текст android: label не меняется, когда пользователь меняет язык в моем приложении?

Итак, в моем приложении первое действие, которое видит пользователь, - это выбор языка.

Допустим, если пользователь выбирает французский, а затем переходит в ActivityB, затем в ActivityC.

Теперь решает изменить язык.

Итак, возвращается к ActivityB, а затем к самому первому Activity и выбирает испанский язык.

Теперь снова, когда пользователь переходит в ActivityB, весь остальной текст внутри фрагмента / активности изменяется на испанский, но android: label по-прежнему остается на французском языке. как это исправить?

Так выглядит мой ActivityA

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             final Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_choose_language, container, false);
        radioGroup = (RadioGroup) rootView.findViewById(R.id.lang_choice_radio);
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
        {
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch(checkedId){
                    case R.id.english_lang:
                        // do operations specific to this selection
                        setLocale("en_US");
                        Intent intentEng = new Intent(getActivity(), Choose_Country.class);
                        startActivity(intentEng);
                        break;

                    case R.id.indonesian_lang:
                        // do operations specific to this selection
                        setLocale("in");
                        Intent intent = new Intent(getActivity(), Choose_Country.class);
                        startActivity(intent);
                        break;
                }
            }
        });
        return rootView;
    }

    public void setLocale(String lang) {
        myLocale = new Locale(lang);
        Resources res = getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        Configuration conf = res.getConfiguration();
        conf.locale = myLocale;
        res.updateConfiguration(conf, dm);
        Locale.setDefault(myLocale);
        onConfigurationChanged(conf);
        Intent refreshIntent = new Intent(getActivity(), ChooseLanguage.class); // refresh the activity
        refreshIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        refreshIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(refreshIntent);
        getActivity().finish();
    }

person sofs1    schedule 11.10.2016    source источник
comment
добавьте строку ‹label› в строковые файлы соответствующего языка и используйте строковую ссылку. Пример {android: label = @ string / label} Это вам поможет.   -  person Ajith Pandian    schedule 11.10.2016
comment
Так оно и есть.   -  person sofs1    schedule 11.10.2016
comment
Вы завершаете действие в этой строке getActivity (). Finish (); тогда как пользователь может вернуться назад [от действия B] к этому действию [A]?   -  person Ajith Pandian    schedule 11.10.2016
comment
Шаг 1. ActivityA (выберите французский) - ›ActivityB -› ActivityC. Шаг 2: ActivityC - ›ActivityB -› ActivityA Шаг 3: ActivityA (выберите испанский) - ›ActivityB -› ActivityC. Теперь весь текст в ActivtyB и C на испанском языке. Но заголовки в ActivityB и ActivityC (который использует текст из strings.xml). Выше код ActivityA   -  person sofs1    schedule 11.10.2016


Ответы (2)


В моем случае приложение не изменит язык панели действий после изменения языкового стандарта. Это изменится, когда я удалю приложение из недавнего приложения, что сделает приложение полностью закрытым. Чтобы решить эту проблему, я использую setTitle(R.id.myapplabel), когда вы хотите обновить приложение или oncreate, поэтому перезапускать приложение не нужно. Переведите метку активности в string.xml, и она должна работать.

person K.Sopheak    schedule 11.10.2016
comment
Теперь у меня другая проблема. Выбрав французский в ActivityA, я перехожу в ActivityB и вижу все на французском. Но если я поверну свой телефон, весь фрагмент превратится в английский (что по умолчанию). Я искал ответы на Stackoverflow, например, используя android: confgChanges = direction | keyboard | locale. Но это не работает. - person sofs1; 11.10.2016
comment
Когда вы поворачиваете экран, ваше приложение снова перезагружается. Итак, чтобы справиться с этим, вы должны поместить свой метод setLocale, а затем setTitle в свою метку активности в oncreate - person K.Sopheak; 12.10.2016

Несколько шагов для решения проблемы.

  1. Переместите свое приложение на ToolBar, больше не на ActionBar

  2. Удалить ярлык из файла AndroidManifest.xml

    <activity
        android:name=".package.Activity"
        android:label=""
        android:configChanges="locale"
        android:screenOrientation="portrait"
        android:theme="@style/NoActionBar" />
    
  3. Восстановите свое приложение при изменении языкового стандарта activity.recreate ()

  4. Все заголовки действий должны быть в файле strings.xml.
person Amandeep Tomar    schedule 24.03.2020
comment
это не решение проблемы, это только препятствует тому, чтобы это происходило так сильно. - person Shark; 24.03.2020
comment
Мы уже написали логику для изменения локали, после этого названия наших действий не меняются. поэтому я просто следую этому подходу и получил решение. Если у вас есть лучшие решения, пожалуйста, поделитесь. @Акула - person Amandeep Tomar; 24.03.2020