Перевод на арабский язык (локализация) проблема

Я пытаюсь сделать так, чтобы мое приложение поддерживало арабский и английский языки
i сделал это, но он не работает в какой-то версии Android, idk какой из них ...


это работает хорошо


, но это не работает


Я использую следующий код для создания средней активности приложения.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    String localLanguage = MySingleton.getmInstance(this).getAppLang();
    if (localLanguage.equals(getString(R.string.settings_language_arabic_value))) {
        Locale localeAr = new Locale("ar");
        setLocale(localeAr, getString(R.string.settings_language_arabic_value));
    } else if (localLanguage.equals(getString(R.string.settings_language_english_value))) {
        Locale localeEn = new Locale("en");
        setLocale(localeEn, getString(R.string.settings_language_english_value));
    }
    setContentView(R.layout.activity_branches);
    .......
    .......
 }

 private void setLocale(Locale locale, String lang) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        if (lang.equals(getString(R.string.settings_language_arabic_value)))
            config.setLayoutDirection(new Locale("ar"));
        else config.setLayoutDirection(new Locale("en"));
        getApplicationContext().getResources().updateConfiguration(config, null);
    } else {
        Configuration config = new Configuration();
        config.locale = locale;
        if (lang.equals(getString(R.string.settings_language_arabic_value)))
            config.setLayoutDirection(new Locale("ar"));
        else config.setLayoutDirection(new Locale("en"));
        Locale.setDefault(config.locale);
        Resources resources = getResources();
        resources.updateConfiguration(config, resources.getDisplayMetrics());
    }
}

Если кто-нибудь может помочь мне, он сделает мой день
заранее спасибо

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

Hiren Rathod 02.05.2018 12:08

проблема не во всплывающем экране ... если вы заметили, что вкладки и заголовок активности тоже не переведены, а направление макета не изменилось @HirenRathod

Seif E. Attia 02.05.2018 12:34
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
338
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

наконец я нашел решение ..
поделится им, если кто-то захочет

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    String localLanguage = MySingleton.getmInstance(this).getAppLang();
    if (localLanguage.equals(getString(R.string.settings_language_arabic_value))) {
        setLocale("ar", this);
    } else if (localLanguage.equals(getString(R.string.settings_language_english_value))) {
        Locale localeEn = new Locale("en");
        setLocale("en", this);
    }
    setContentView(R.layout.activity_branches);
    .........
    .........
}

изменение кода здесь:

private void setLocale(String lang, Context context) {
    Configuration config = context.getResources().getConfiguration();
    Locale locale = new Locale(lang);
    Locale.setDefault(locale);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        config.setLocale(locale);
        getApplicationContext().getResources().updateConfiguration(config, null);
    } else {
        config.locale = locale;
        getApplicationContext().getResources().updateConfiguration(config, null);
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        config.setLocale(locale);
        config.setLayoutDirection(locale);
        context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
        context.createConfigurationContext(config);
    } else {
        context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
    }
}


Надеюсь, это кому-нибудь поможет

Другие вопросы по теме