如有更好的解决方法,欢迎大家评论和指正。
-
目前存在的问题
- IOS平台 默认启动图显示名称,会使用回退语言,没有实现国际化配置
- 还有目前没有涉及到的国际化,如:uniCloud和Android平台strings 等
-
项目根目录下 locale 文件夹
├── locale │ ├── en.json │ ├── index.js │ ├── // 如果有其他语言,如日语,则添加 ja.json │ ├── uni-app.en.json │ ├── // 如果有其他语言,如日语,则添加 uni-app.ja.json │ ├── uni-app.zh-Hans.json │ ├── uni-app.zh-Hant.json │ ├── zh-Hans.json │ └── zh-Hant.json这里做下简单说明:
uni-app.
*.json 这些文件,决定了手机系统桌面应用名称、默认启动图显示名称和系统默认tabbar定义的国际化。uni-app.
*.json 使用跟官方文档一致 如:%app.name%,%privacyDescription.NSBluetoothAlwaysUsageDescription%
-
index.js
import en from './en.json' import zhHans from './zh-Hans.json' import zhHant from './zh-Hant.json' // import ja from './ja.json' export default { en, 'zh-Hans': zhHans, 'zh-Hant': zhHant, // 如果有其他语言,如日语,则添加 ja } -
en.json
{ "tabbar.index": "Home", "tabbar.list": "List", "tabbar.me": "Me", // ... 其他字段 } -
zh-Hans.json
{ "tabbar.index": "首页", "tabbar.list": "列表", "tabbar.me": "我的", // ... 其他字段 } -
zh-Hant.json
{ "tabbar.index": "首頁", "tabbar.list": "清單", "tabbar.me": "我的", // ... 其他字段 }
配置应用名称和IOS平台配置隐私权限描述国际化,还有一种方式官方提供的 manifest.json国际化配置【本文章末尾】
注意:
我试过在uni-app.en.json中把隐私权限描述写到下面ios内打包,没有效果// 这里是错误说明,不要这样写,正确写法是下面的 uni-app.en.json 示例 { "common": { "app.name": "app name", "app.description": "app description", }, "ios": { "privacyDescription":{ "NSBluetoothAlwaysUsageDescription": "Requires access to your Bluetooth to function properly", "NSBluetoothPeripheralUsageDescription": "Requires access to your Bluetooth to function properly" } }, "android": {} }
-
uni-app.en.json
{ "common": { "app.name": "app name", "app.description": "app description", "privacyDescription.NSBluetoothAlwaysUsageDescription": "Requires access to your Bluetooth to function properly", "privacyDescription.NSBluetoothPeripheralUsageDescription": "Requires access to your Bluetooth to function properly" }, "ios": {}, "android": {} } -
uni-app.zh-Hans.json
{ "common": { "app.name": "应用名称", "app.description": "应用描述", "privacyDescription.NSBluetoothAlwaysUsageDescription": "需要访问您的蓝牙以正常工作", "privacyDescription.NSBluetoothPeripheralUsageDescription": "需要访问您的蓝牙以正常工作" }, "ios": {}, "android": {} } -
uni-app.zh-Hant.json
{ "common": { "app.name": "應用名稱", "app.description": "應用描述", "privacyDescription.NSBluetoothAlwaysUsageDescription": "需要訪問您的藍牙以正常工作", "privacyDescription.NSBluetoothPeripheralUsageDescription": "需要訪問您的藍牙以正常工作" }, "ios": {}, "android": {} }
-
-
manifest.json
-
配置 manifest.json 的默认语言 在 manifest.json 中设置 locale 为 "auto",这是跟随系统语言的关键。
{ "name": "%app.name%", "appid": "__your_appid__", "locale": "auto" // 设置为 auto,跟随系统 os 的语言 "fallbackLocale" : "en" // 默认回退语言 这个根据自己需求设置 // ... 其他配置 } -
配置 android 和 ios 原生平台支持的语言列表 (关键步骤) 这一步在标准基座下由 dcloud 预先完成,但你的应用必须自行配置,否则打包后系统无法识别你的应用支持哪些语言,通常会回退到默认语言 (如英文)【这里不提供详细示例,可以直接看官方文档中的示例】
{ "app-plus" : { "locales": { "en": {}, // 英文 "zh": {}, // 中文 (特别注意) "zh-Hans": {}, // 简体中文 "zh-Hant": {}, // 繁体中文 // 如果有其他语言,如日语,则添加 "ja": {} } } }关于
"zh": {}这个配置说明:- 如果这个
"zh": {}不配置,当系统语言是【简体中文】,应用名称和隐私权限描述会回退到【默认语言】,而不是使用【简体中文】-搞不懂为什么 - 虽然官方文档语言代码中提到locales下的键名(key)可以取值示例,没有
zh-Hans和zh-Hant两个键名,但是实际测试中,其可以正常工作,其他键名会回退到【默认语言】,而不是当前【系统语言】
- 如果这个