uni-app国际化中文系统下启动图和IOS权限弹窗中英混杂问题

发布于 1周前 作者 phonegap100 来自 Uni-App

uni-app国际化中文系统下启动图和IOS权限弹窗中英混杂问题

信息类别 详细信息
产品分类 uniapp/App
PC开发环境 Windows
PC版本号 windows10
HBuilderX 正式
HBuilderX版本 3.96
手机系统 iOS
手机版本号 iOS 16
手机厂商 苹果
手机机型 iphone Xs Max
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

多语言相关的代码和配置都是按照官方文档来的。见截图。

操作步骤:

跟应用代码无关

预期结果:

如果manifest默认语言=跟随系统,回退语言=en,框架组件显示内容应该与手机os语言保持一致,不应该出现多语言混杂。

实际结果:

启动图和框架提示语都应该跟OS语言一致

bug描述:

IOS语言=en,一切正常。框架组件提示语和启动图都是英文。

IOS语言=中文,出现异常。启动图的app名字是英文,IOS用户跟踪和相册读取权限NSUserTrackingUsageDescription和NSPhotoLibraryUsageDescription的提示语是中英混杂。其它框架弹窗提示都正确显示了中文。

尝试过几种manifest设置组合,但同样问题。

默认语言=跟随系统;回退语言=en
默认语言=回退语言(全部是en,或者全部是zh-Hans)






13 回复

是不是设置了manifest.json 的国际化英文


没太明白您的问题。app是支持国际化的,包括了英文、中文简体和中文繁体。manifest的配置就是按照官方文档来的,选的是 “locale”: “auto” “fallbackLocale”: “en”
目前测试,如果手机的os语言=en,那么启动图片(含APP名字)和框架组件提示语都是英文;如果手机的os语言改成中文,那么启动图片的app名字还是英文,框架组件的提示语是中英混杂(如我上传的截图)

{ “name” : “%app.name%”, “appid” : “”, “description” : “”, “versionName” : “1.0.0”, “versionCode” : “100”, “locale”: “zh-Hans” // 设置默认语言, } manifest.json里可以设置国际化

“locale”: “auto” “fallbackLocale”: “en”

你的这个设置,是uniapp x的,你是uniappx还是uniapp 啊

uniapp,不是uniapp x。
manifest设置是按照官方的国际化文档设置的(在manifest图形化界面勾选的,没有手工修改源码视图)。
“locale”: “auto”
“fallbackLocale”: “en”
目前问题是:手机OS语言设置英文,就全部显示英文。如果手机OS语言设置中文简体,部分框架组件(比如启动图中的app名字、NSUserTrackingUsageDescription权限弹窗(标题是中文,副标题是英文)。

启动图和框架权限弹窗的中英文混杂问题,能否烦请官方回复一下可能的原因?
app名字、权限字符串都已经在manifest里面按照官方文档设置并检查确认了多次,仍然有这个问题。
目前是英文状态下都正常,中文状态下出现中英混杂(只发现了启动图和NSUserTrackingUsageDescription权限弹窗有这个问题)。
比较急,谢谢帮助!

能否请官方、或者成功上线过IOS英文版的同学提供一下帮助和经验分享,如何解决中文状态下启动图splash和IOS NSUserTrackingUsageDescription弹窗提示语都是中英混杂的问题?

大佬解决了吗?我这边也出类看下似的情况。帮忙看下:https://ask.dcloud.net.cn/question/190343

你好,可以尝试 配置完应用的语言后, 需要重新提交打包自定义基座

反馈的bug是新版hbuilderx已经修复了?还是不确定,只是让重新试试?

你好,请问 IOS权限弹窗中英混杂 这个问题解决了吗

uni-app 中,国际化(i18n)是一个常见的需求,尤其是在多语言环境下。如果你在中文系统下遇到启动图和 iOS 权限弹窗中英混杂的问题,可能是由于以下原因导致的:

1. 启动图问题

启动图通常是在 manifest.json 中配置的,默认情况下,启动图是静态图片,无法根据语言动态切换。如果你希望根据语言显示不同的启动图,可以通过以下方式解决:

解决方案:

  • 动态设置启动图:在 App.vueonLaunch 生命周期中,根据当前语言动态设置启动图。你可以使用 uni.setNavigationBarTitle 或其他相关 API 来动态设置启动图。
onLaunch: function() {
  const lang = uni.getSystemInfoSync().language;
  if (lang === 'zh-Hans') {
    // 设置中文启动图
    uni.setNavigationBarTitle({
      title: '中文启动图'
    });
  } else {
    // 设置英文启动图
    uni.setNavigationBarTitle({
      title: 'English Splash Screen'
    });
  }
}
  • 使用多套启动图:在 manifest.json 中配置多套启动图,根据语言动态选择。
{
  "app-plus": {
    "splashscreen": {
      "autoclose": true,
      "waiting": true,
      "images": {
        "zh-Hans": "/static/splash-zh.png",
        "en": "/static/splash-en.png"
      }
    }
  }
}

2. iOS 权限弹窗中英混杂问题

iOS 权限弹窗的内容通常是由系统根据应用的 Info.plist 文件中的描述信息生成的。如果出现中英混杂的情况,可能是由于 Info.plist 中的描述信息没有正确配置。

解决方案:

  • 配置 Info.plist 文件:在 manifest.json 中配置 plus 节点的 iOS 权限描述信息,确保使用正确的语言。
{
  "plus": {
    "iOS": {
      "infoPlist": {
        "NSPhotoLibraryUsageDescription": "请允许访问相册以保存图片",
        "NSCameraUsageDescription": "请允许访问相机以拍摄照片",
        "NSMicrophoneUsageDescription": "请允许访问麦克风以录制音频"
      }
    }
  }
}
  • 使用多语言配置:如果你需要支持多语言,可以在 Info.plist 中使用多语言配置。uni-app 支持在 manifest.json 中配置多语言描述信息。
{
  "plus": {
    "iOS": {
      "infoPlist": {
        "NSPhotoLibraryUsageDescription": {
          "zh-Hans": "请允许访问相册以保存图片",
          "en": "Please allow access to the photo library to save pictures"
        },
        "NSCameraUsageDescription": {
          "zh-Hans": "请允许访问相机以拍摄照片",
          "en": "Please allow access to the camera to take photos"
        },
        "NSMicrophoneUsageDescription": {
          "zh-Hans": "请允许访问麦克风以录制音频",
          "en": "Please allow access to the microphone to record audio"
        }
      }
    }
  }
}

3. 检查语言设置

确保你的应用正确获取了系统语言,并根据语言动态切换内容。你可以使用 uni.getSystemInfoSync().language 来获取系统语言。

const lang = uni.getSystemInfoSync().language;
if (lang === 'zh-Hans') {
  // 中文逻辑
} else {
  // 英文逻辑
}

4. 使用 uni-i18n 插件

uni-app 提供了 uni-i18n 插件,可以帮助你更好地管理多语言资源。你可以通过 uni-i18n 插件来动态切换语言,并确保所有 UI 元素都根据当前语言显示。

import Vue from 'vue';
import VueI18n from 'vue-i18n';
import en from './lang/en.json';
import zh from './lang/zh.json';

Vue.use(VueI18n);

const i18n = new VueI18n({
  locale: uni.getSystemInfoSync().language, // 设置默认语言
  messages: {
    en,
    zh
  }
});

export default i18n;
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!