首页 > 解决方案 > 当 i18n.locale 更改时,在本机 android 上更改 Splash Image

问题描述

我正在开发我的第一个反应原生应用程序。首先对我的长问题感到抱歉。

我正在使用i18n支持英语和日语(en,jp) 。我有一个设置屏幕,我们可以在这两种语言之间切换。在切换到另一种语言时,我正在使用react-native-restart 重新启动我的整个应用程序。在我的应用程序的所有屏幕中一切正常。

但是,我添加了本机 android 启动图像以避免启动 react-native-app 时出现白屏。现在,问题是,在更改i18n.locale = 'en'它时不会更改本机 android 语言环境。我有两个启动图像(一个用于' en' 和另一个用于 'jp')。我总是得到第一张图片(为“en”添加)作为我的启动画面。

我尝试过的解决方案

我将 splash.png 放在所有 mipmap-(mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi) 中作为“en”。并为“jp”创建了另一个文件夹 mipmap-jp-(mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi) 并放置另一个图像。

下面是我支持“jp”和“en”的文件夹结构。

资源:

->价值观

->价值观-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;

设置.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';

        }
}
...

字符串.xml

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

样式.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 中的 app_name ,而 styles.xml 具有相同的内容。

我已经尝试了我知道的方法。我想设置 android 语言环境,以便它会根据语言更改启动图像和 app_name。请帮助我!

标签: androidreact-nativesplash-screen

解决方案


你需要制作 . 不同的图像文件夹作为标准本地化,就像制作不同的 string.xml 文件一样

本地化您的应用

假设一个应用程序包含一组默认图形和另外两组图形,每组都针对不同的设备设置进行了优化:

资源/可绘制/

包含默认图形。

res/drawable-small-land-stylus/

包含针对需要手写笔输入并具有横向 QVGA 低密度屏幕的设备而优化的图形。

res/drawable-ja/

包含优化用于日语的图形。


推荐阅读