前端国际化之痛点(三):上线后修改翻译内容

前言

VoerkaI18n是一款非常优秀的前端国际化解决方案,其开发的出发点是为了解决现存多语言的一些痛点,接下来几篇文章将分别进行分析

-->点击进入项目官网<--

现有痛点

在实际应用中,我们经常会在应用上线后,有没有经常碰到这样的问题:

  • 发现应用中的翻译错误
  • 不同的客户可能会一些用词提出不同的要求
  • 甚至有些客户要求能自定义一些显示用语

一般解决方案是重新打包应用重新发布,显然这是比较麻烦的解决方案。

解决痛点

voerkai18n的语言包补丁特性针对此问题,提供了完美的解决方案,您就可以随时修复翻译错误,而不需要重新打包应用。

基本思路:应用上线后发现翻译错误时,可以在服务器上约定位置放置语言包补丁,应用会自动进行更新修复,很实用的一个特性。

基本方法如下:

准备

为说明如何使用语言包补丁特性支持,我们将假设以下的应用:

应用chat,依赖于usermanagerlog等三个库,均使用了voerkiai18n作为多语言解决方案。

其拟支持zhende共三种语言。

当执行完voerkai18n compile后,项目结构大概如下:

javascript 复制代码
chat
  |-- languages
  | |-- index.js
  | |-- idMap.js   
  | |-- runtime.js
  | |-- settings.json                  
  | |-- zh.js
  | |-- en.js
  | |-- formatters
  |     |-- zh.js
  |     |-- en.js
  | |-- translates
  |       |-- default.json
  |-- index.js
  |-- package.json                  //name=chat

打开languages/index.js,大概如下:

javascript 复制代码
// ....
const scope = new i18nScope({
    id: "chat",                          // 当前作用域的id,自动取当前工程的package.json的name
    messages:{ 
        "en" : ()=>import("./en.js"),
        "de" : ()=>import("./de.js")
    },
    //.....
}) 
/// ....
  • 可以看到在languages/index.js中创建了一个以当前工程package.jsonnameidi18nScope实例,其会自动注册到全局voerkaI18n实例中。

第一步:注册默认的语言加载器

voerkiai18n是采用语言加载器来加载语言包的,为了从服务器上远程加载语言包补丁,需要注册一个加载器。

需要在应用中(例如app.jsmain.js等)导入i18nScope实例或者直接在languages/index.js中并注册一个默认的语言加载器。

javascript 复制代码
// 从当前工程导入`scope`实例
import { i18nScope } from "./languages"

// 注册默认的语言加载器
// 在此向服务器发起请求,请返回翻译后的其他语言文本
i18nScope.registerDefaultLoader(async (language,scope)=>{
    // language: 要切换到此语言
    // scope: 语言作用域实例   
    return await (await fetch(`/languages/${scope.id}/${language}.json`)).json()
})

第二步:编写语言包补丁文件

假设我们发现zh语言的翻译错误,这就需要在服务器上生成一个对应的zh语言包补丁文件。

方法很简单,打开languages/zh.js文件,该文件大概如下:

javascript 复制代码
module.exports = {
    "1": "支持的语言",
    "2": "默认语言",
    "3": "激活语言",
    "4": "名称空间s",
    ....
}

复制一份修改和更名为zh.json,其中仅保留需要修复的条目,内容大概如下:

javascript 复制代码
{
    "1": "支持的语言",       
}

然后将zh.json复制到languages/chat/zh.json即可。

同样地,我们如果要修复usermanagerlog等三个库的翻译错误,如法泡制,生成语言包文件languages/user/de.json,languages/manager/de.json,languages/log/de.json

第三步:组织语言包补丁文件

在上面中,我们通过fetch(/languages/${scope.id}/${language}.json)来读取语言包(您可以使用任意您喜欢的方式,如axios),这意味着我们需要在web服务器上根据此URL来组织语言包补丁,以便可以下载到语言包补丁。需要将语言包补丁保存在服务器的指定位置,如下:

javascript 复制代码
webroot
  |-- languages
    <chat>          
       |-- zh.json        
    <user>               
       |-- zh.json    
    <manager>                 
       |-- zh.json   
    <log>                 
       |-- zh.json               

完成:自动打语言包补丁

至此,语言包补丁功能已配置完毕。当应用启动时就会自动加载该补丁合并到线上应用的语言包中。

小结

利用VoerkaI18n的此特性,产品上线的翻译内容更新和修复变得非常容易,强列推荐。

-->点击进入项目官网<--

相关推荐
前端爆冲4 分钟前
项目中无用export的检测方案
前端
热爱编程的小曾32 分钟前
sqli-labs靶场 less 8
前端·数据库·less
gongzemin44 分钟前
React 和 Vue3 在事件传递的区别
前端·vue.js·react.js
Apifox1 小时前
如何在 Apifox 中通过 Runner 运行包含云端数据库连接配置的测试场景
前端·后端·ci/cd
树上有只程序猿1 小时前
后端思维之高并发处理方案
前端
庸俗今天不摸鱼2 小时前
【万字总结】前端全方位性能优化指南(十)——自适应优化系统、遗传算法调参、Service Worker智能降级方案
前端·性能优化·webassembly
黄毛火烧雪下2 小时前
React Context API 用于在组件树中共享全局状态
前端·javascript·react.js
Apifox2 小时前
如何在 Apifox 中通过 CLI 运行包含云端数据库连接配置的测试场景
前端·后端·程序员
一张假钞2 小时前
Firefox默认在新标签页打开收藏栏链接
前端·firefox
高达可以过山车不行2 小时前
Firefox账号同步书签不一致(火狐浏览器书签同步不一致)
前端·firefox