多语言覆盖
更新时间:
vivo 手表平台的能力会覆盖多个国家地区,平台支持多语言的能力后,可以做到让一个 vivo 手表产品(一个 RPK 文件)同时支持多个语言版本的切换,开发者无需开发多个不同语言的源码项目,避免给项目维护带来困难。
使用系统默认的语言,开发者配置多语言的方式非常简单,只需要定义资源
与引用资源
两个步骤即可;如果允许用户在 vivo 手表中修改地区语言,请参考第三步获取更新语言
;
定义资源文件
资源文件用于存放多个语言的业务信息定义,与其它技术平台类似(它们使用properties文件
或者xml文件
的格式),vivo 手表平台使用JSON文件
保存资源定义;
在项目源码src目录
下定义i18n文件夹
,内部放置每个语言地区下的资源定义文件即可;其中文件名定义为:zh-CN.json
、zh.json
;
每个 JSON 文件的内容格式如下:
{
"message": {
"pageA": {
"text": "pure-text-content",
"format": {
"object": "type-{name}",
"array": "type-{0}"
},
"plurals": {
"double": "car | cars",
"three": "no apples | one apple | {count} apples",
"format": {
"object": "type-{name}",
"array": "type-{0}"
}
}
}
}
}
复制代码
页面中通过message.pageA.text
类似的path
引用对应内容"pure-text-content"
;
页面中引用资源
页面中多语言的使用语法,主要体现在 ViewModel 的几个函数上,如:$t
,这些方法可以在<template
或<script>
中使用;
如下代码所示:
<template>
<div>
<text>{{ $t('message.pageA.text') }}</text>
<text>{{ $t('message.pageA.format.object', { name: 'arg-object' }) }}</text>
</div>
</template>
<script>
export default {
onInit() {
// 简单格式化:
this.$t('message.pageA.text')
this.$t('message.pageA.format.object', { name: 'arg-object' })
},
}
</script>
复制代码
简单格式化方法
属性 | 类型 | 参数 | 描述 |
---|---|---|---|
$t | Function | path: String 资源路径 arg0: object |
array 格式化参数,非必要参数,根据系统语言完成简单的替换:this.$t('message.pageA.text') |
比如:
// 示例:无额外参数的格式化
// 输出:"pure-text-content"
this.$t('message.pageA.text')
// 示例:额外参数为对象,替换引用内容中的绑定
// 输出:"type-arg-object"
this.$t('message.pageA.format.object', { name: 'arg-object' })
复制代码
单复数格式化方法
属性 | 类型 | 参数 | 描述 |
---|---|---|---|
$tc | Function | path: String 资源路径 count: number 要表达的值 |
根据系统语言完成单复数替换:this.$tc('message.plurals.double') ,注意:定义资源的内容通过 | 分隔为多个选项 |
比如:
// 示例:message的值为两个选项时,传递数值不为单数
// 输出:"cars"
this.$tc('message.pageA.plurals.double', 0)
// 示例:message的值为两个选项时,传递数值为单数
// 输出:"car"
this.$tc('message.pageA.plurals.double', 1)
// 示例:message的值为两个选项时,传递数值不为单数
// 输出:"cars"
this.$tc('message.pageA.plurals.double', 2)
// 示例:message的值为三个及以上的选项时,传递数值不为单数
// 输出:"no apples"
this.$tc('message.pageA.plurals.three', 0)
// 示例:message的值为三个及以上的选项时,传递数值为单数
// 输出:"one apple"
this.$tc('message.pageA.plurals.three', 1)
// 示例:message的值为三个及以上的选项时,传递数值不为单数
// 输出:"10 apples"
this.$tc('message.pageA.plurals.three', 10)
复制代码
manifest 中的 name 的国际化
此时可使用字符串模板声明,形如:${appName}
例如下面:
{
"package": "com.example.i18n",
"name": "${appName}",
"versionName": "1.0.0",
"versionCode": 1,
"minPlatformVersion": 1070
}
复制代码
此时 i18n 也必须有相应的配置信息
// en.json
{
"appName": "myApp"
}
复制代码
// zh-CN.json
{
"appName": "我的应用"
}
复制代码