update文档
This commit is contained in:
parent
ec398944ea
commit
be987ebd6e
@ -1,12 +1,12 @@
|
|||||||
# 远程加载语言包
|
# 远程加载语言包
|
||||||
|
|
||||||
## 前言
|
## 前言
|
||||||
`voerkai18n`默认将要翻译的文本内容经编译后保存在当`languages`文件夹下,当打包应用时会与工程一起进行打包进工程源码中。这会带来以下问题:
|
`voerkaI18n`默认将要翻译的文本内容经编译后保存在当`languages`文件夹下,当打包应用时会与工程一起进行打包进工程源码中。这会带来以下问题:
|
||||||
- 翻译语言包是源码工程的一部分,当要翻译的语种较多时,会增加源码包大小。
|
- 翻译语言包是源码工程的一部分,当要翻译的语种较多时,会增加源码包大小。
|
||||||
- 如果产品上线后发现翻译问题,则需要重新进行整个工程的打包
|
- 如果产品上线后发现翻译问题,则需要重新进行整个工程的打包
|
||||||
- 上线后要增加一种语言,同样需要再次进行走一次打包流程
|
- 上线后要增加一种语言,同样需要再次进行走一次打包流程
|
||||||
|
|
||||||
`voerkai18n`针对这些问题,支持了远程加载语言包的功能,可以支持线上`动态增加支持的语言`,`在线翻译补丁`等特性。
|
`voerkaI18n`针对这些问题,支持了远程加载语言包的功能,可以支持线上`动态增加支持语种`,`语言包在线补丁`等特性。
|
||||||
|
|
||||||
|
|
||||||
## 使用方法
|
## 使用方法
|
||||||
@ -43,7 +43,7 @@ const scope = new i18nScope({
|
|||||||
})
|
})
|
||||||
/// ....
|
/// ....
|
||||||
```
|
```
|
||||||
- 可以看到在`languages/index.js`中创建了一个以当前工程`package.json`的`name`为`id`的`i18nScope`实例,然后注册到全局`VoerkaI18n`实例中。
|
- 可以看到在`languages/index.js`中创建了一个以当前工程`package.json`的`name`为`id`的`i18nScope`实例,然后注册到全局`voerkaI18n`实例中。
|
||||||
- 为`en`语言创建了一个异步加载器,用来异步加载`en`语言包。
|
- 为`en`语言创建了一个异步加载器,用来异步加载`en`语言包。
|
||||||
- 当打包`chat`应用时,`cn.js`、`en.js`等语言包均作为源码的一部分打包,差别在于非默认语言`en.js`单独作为一个`chunk`打包以便能异步加载。
|
- 当打包`chat`应用时,`cn.js`、`en.js`等语言包均作为源码的一部分打包,差别在于非默认语言`en.js`单独作为一个`chunk`打包以便能异步加载。
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ i18nScope.registerDefaultLoader(async (language,scope)=>{
|
|||||||
在多包环境下,按照多包/库开发的规范,每一个库或包均具有一个**唯一的id**,默认会使用`package.json`中的`name`字段。
|
在多包环境下,按照多包/库开发的规范,每一个库或包均具有一个**唯一的id**,默认会使用`package.json`中的`name`字段。
|
||||||
**例如**:
|
**例如**:
|
||||||
- 应用`A`,依赖于包/库`X`、`Y`、`Z`,并且`A/X/Y/Z`均使用了`voerkiai18n`作为多语言解决方案
|
- 应用`A`,依赖于包/库`X`、`Y`、`Z`,并且`A/X/Y/Z`均使用了`voerkiai18n`作为多语言解决方案
|
||||||
- 当应用启动时,`A/X/Y/Z`均会创建一个`i18nScope`实例,其`id`分别是`A/X/Y/Z`,然后这些`i18nScope`实例会注册到全局的`VoerkaI18n`实例中(详见多库联动介绍)。
|
- 当应用启动时,`A/X/Y/Z`均会创建一个`i18nScope`实例,其`id`分别是`A/X/Y/Z`,然后这些`i18nScope`实例会注册到全局的`voerkaI18n`实例中(详见多库联动介绍)。
|
||||||
- 假如应用`A`配置支持`zh`、`cn`两种语言,当应用要切换到`de`语言时,那么不仅是`A`应用本身需要切换到`de`语言,所依赖的库也需要切换到`de`语言。但是库`X`、`Y`、`Z`本身可能支持`de`语言,也可以不支持。如果不支持,则同样需要向服务器请求该库的翻译语言。因此,在向服务器请求时就需要带上`scope.id`。
|
- 假如应用`A`配置支持`zh`、`cn`两种语言,当应用要切换到`de`语言时,那么不仅是`A`应用本身需要切换到`de`语言,所依赖的库也需要切换到`de`语言。但是库`X`、`Y`、`Z`本身可能支持`de`语言,也可以不支持。如果不支持,则同样需要向服务器请求该库的翻译语言。因此,在向服务器请求时就需要带上`scope.id`。
|
||||||
|
|
||||||
|
|
||||||
@ -119,7 +119,7 @@ webroot
|
|||||||
|-- de.json
|
|-- de.json
|
||||||
```
|
```
|
||||||
|
|
||||||
`VoerkaI18n`将编写**如何语言加载器**和**如何在服务器上组织语言包**交由开发者自行决定,您完全可以根据自己的喜好来决定如何加载。
|
`voerkaI18n`将编写**如何语言加载器**和**如何在服务器上组织语言包**交由开发者自行决定,您完全可以根据自己的喜好来决定如何加载。
|
||||||
|
|
||||||
|
|
||||||
### 第四步:生成语言包文件
|
### 第四步:生成语言包文件
|
||||||
@ -152,10 +152,10 @@ module.exports = {
|
|||||||
|
|
||||||
至此,我们已经实现了可以为应用动态添加语言支持的功能。但是默认语言加载器只是针对的未知的语言起作用,而对内置的语言是不起作用的。也就是说上例中的内置语言`cn`和`en`不能通过此方法来加载。
|
至此,我们已经实现了可以为应用动态添加语言支持的功能。但是默认语言加载器只是针对的未知的语言起作用,而对内置的语言是不起作用的。也就是说上例中的内置语言`cn`和`en`不能通过此方法来加载。
|
||||||
|
|
||||||
在实际应用中,我们经常会在应用上线的,发现应用中的某此语言翻译错误,此时就可以利用`voerkai18n`的语言包补丁特性来解决此问题。
|
在实际应用中,我们经常会在应用上线的,发现应用中的某此语言翻译错误,此时就可以利用`voerkaI18n`的语言包补丁特性来解决此问题。
|
||||||
利用`voerkai18n`的语言包补丁特性,您就可以随时修复翻译错误,而不需要重新打包应用。
|
利用`voerkaI18n`的语言包补丁特性,您就可以随时修复翻译错误,而不需要重新打包应用。
|
||||||
|
|
||||||
`voerkai18n`的语言包补丁特性的工作机制同样也是利用了默认语言加载器来加载语言包补丁。其工作原理很简单,如下:
|
`voerkaI18n`的语言包补丁特性的工作机制同样也是利用了默认语言加载器来加载语言包补丁。其工作原理很简单,如下:
|
||||||
- 按上例中的方式注册默认语言加载器
|
- 按上例中的方式注册默认语言加载器
|
||||||
- 当i18nScope注册到全局VoerkaI18n时,会调用默认的语言加载器,从服务器加载语言包,然后合并到本地语言包中,这样就很轻松地实现了动态言包的特性。
|
- 当i18nScope注册到全局VoerkaI18n时,会调用默认的语言加载器,从服务器加载语言包,然后合并到本地语言包中,这样就很轻松地实现了动态言包的特性。
|
||||||
|
|
||||||
@ -203,7 +203,7 @@ i18nScope.registerDefaultLoader(async (language,scope)=>{
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
- 为什么要应用自己编写语言加载器,而不是提供约定开箱即用?
|
- 为什么要应用自己编写语言加载器,而不是提供约定开箱即用?
|
||||||
主要原因是编写语言加载器很简单,但是如何组织在服务器上的保存,想让应用开发者自行决定。比如,开发者完全可以将语言包保存在数据库中等。 另外考虑安全、兼容性等原因,因此`voerkai18n`就将此交由开发者自行编写。
|
主要原因是编写语言加载器很简单,但是如何组织在服务器上的保存,想让应用开发者自行决定。比如,开发者完全可以将语言包保存在数据库中等。 另外考虑安全、兼容性等原因,因此`voerkaI18n`就将此交由开发者自行编写。
|
||||||
|
|
||||||
|
|
||||||
### 编写语言切换界面
|
### 编写语言切换界面
|
||||||
|
@ -245,7 +245,7 @@ i18nScope.registerDefaultLoader(async (language,scope)=>{
|
|||||||
2. 将语言包补丁文件保存在服务器上指定的位置`/languages/<应用名称>/<语言名称>.json`即可。
|
2. 将语言包补丁文件保存在服务器上指定的位置`/languages/<应用名称>/<语言名称>.json`即可。
|
||||||
3. 当应用启动后会自动从服务器上加载语言补丁包,从而实现动为语言包打补丁的功能。也可以实现动态增加临时支持一种语言的功能
|
3. 当应用启动后会自动从服务器上加载语言补丁包,从而实现动为语言包打补丁的功能。也可以实现动态增加临时支持一种语言的功能
|
||||||
|
|
||||||
更完整的说明详见[`动态加载语言包`](../advanced/remoteLoad.md)和[`语言包补丁`](../advanced/lngpatch.md)功能介绍。
|
更完整的说明详见[`动态加载语言包`](../advanced/remote-load.md)和[`语言包补丁`](../advanced/lngpatch.md)功能介绍。
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user