Изменение заставки на родном андроиде при изменении i18n.locale - PullRequest
0 голосов
/ 04 февраля 2019

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

Я поддерживаю английский и японский языки (en, jp), используя i18n .У меня есть один экран настроек, на котором мы можем переключаться между этими двумя языками. Когда я переключаюсь на другой, я перезагружаю все свое приложение, используя response-native-restart . Все отлично работает на всех экранах моего приложения.

Но я добавил собственное изображение-заставку для Android, чтобы избежать появления белого экрана при запуске response-native-app. Теперь проблема в том, что при изменении i18n.locale = 'en' он не меняет родную локаль для Android.У меня есть два изображения-заставки (одно для «en» и другое для «jp»).Я всегда получаю первое изображение (добавлено для 'en') в качестве всплеска.

Решение, которое я пробовал

Я помещаю splash.png на все mipmap- (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi) для «en».И создал еще одну папку mipmap-jp- (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi) для «jp» и поместил другое изображение.

Ниже приведена структура моей папки для поддержки «jp» и «en».

res:

-> значения

-> значения-jp

-> mipmap-hdpi, mdpi, xhdpi, xxhdpi, xxxhdpi

-> mipmap-jp-hdpi, mdpi, xhdpi, xxhdpi, xxxhdpi

i18n.js

import RNLanguages from 'react-native-languages';
import i18n from 'i18n-js';

import en from './en';
import jp from './jp';

i18n.locale = RNLanguages.language;
i18n.fallbacks = true;
i18n.translations = {en,jp};

RNLanguages.addEventListener('change', ({ language }) => {
    i18n.locale = language
  })

export default i18n;

Settings.js

...
onChange(value){
if(value === 'USA English'){
            setLanguage('en').then().catch(err=>{
                console.log(err);
              });
              i18n.locale = 'en';
        }
        else{
            setLanguage('jp').then().catch(err=>{
                console.log(err);
            });
            i18n.locale = 'jp';

        }
}
...

strings.xml

<resources>
    <string name="app_name">appname in eng</string>
</resources>

styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:datePickerDialogTheme">@style/MyDialogTheme</item>
    </style>
    <style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@mipmap/splash</item>
        <item name="android:statusBarColor">@color/theme</item>
    </style>
    <style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">#00c786</item>
</style>

</resources>

В папке values-jpя только что изменил имя приложения в strings.xml и styles.xml имеют одинаковое содержимое.

Я попробовал известные мне способы. Я хочу настроить язык Android на изменение языка и, таким образом, он изменит заставкуи app_name в зависимости от языка. Кто-то, пожалуйста, помогите мне!

1 Ответ

0 голосов
/ 04 февраля 2019

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

Локализация вашего приложения

Предположим, что приложение включает в себя набор графики по умолчанию и два других набораграфики, каждая из которых оптимизирована для различных настроек устройства:

res / drawable /

Содержит графику по умолчанию.

res / drawable-small-land-stylus /

Содержит графику, оптимизированную для использования с устройством, которое ожидает ввода от стилуса, и имеет экран QVGA с низкой плотностью в горизонтальной ориентации.

res/ drawable-ja /

Содержит графику, оптимизированную для использования с японским языком.

...