当 i18n.locale 更改时,在本机 android 上更改 Splash Image

Posted

技术标签:

【中文标题】当 i18n.locale 更改时,在本机 android 上更改 Splash Image【英文标题】:Change Splash Image on native android when i18n.locale changes 【发布时间】:2019-06-27 23:15:52 【问题描述】:

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

我正在使用 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;

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

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

【问题讨论】:

我只是在这里犯了一个错误。日语代码是ja。我用过jp。现在,在更改手机语言时,splash 和 app_name 正在更改。 i18n.locale更改时我没有找到更改手机语言的方法。我认为无法完成。是吗? 你是如何切换语言的?我在这部分苦苦挣扎?可以请指导吗? 【参考方案1】:

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

Localize your app

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

res/drawable/

包含默认图形。

res/drawable-small-land-stylus/

包含经过优化的图形,可用于需要手写笔输入并具有横向 QVGA 低密度屏幕的设备。

res/drawable-ja/

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

【讨论】:

以上是关于当 i18n.locale 更改时,在本机 android 上更改 Splash Image的主要内容,如果未能解决你的问题,请参考以下文章

kibana.yml配置i18n.locale汉化中文Kibana

kibana.yml配置i18n.locale汉化中文Kibana

如何在黄瓜的步骤定义中添加I18n功能?

使用vue进行国际化

如何在不重新加载 vue.js 页面的情况下翻译应用程序?

vue中使用vue-i18n 一个简单的国际化操作