focbiz多语言方案

一.前言

以前原生dom时代,没有三大框架的时候。做多语言设计,你能想到怎么做?

1、通过变量直接刷新页面

2、 无非是对页面的dom结构进行标记,然后在遍历替换。

现代单页应用,也可以用前者。

但是我们对体验有更高的要求

1、首先我们需要切换无刷感

2、可以实时注册增减多语言

3、不想应用顶层包裹一个多语言的容器

4、 可以在任意地方注册多语言并全局生效

借助响应式的理念,可以满足产品需求

二.响应式库介绍

@focbiz/loong是inbiz团队打造的一个响应式库,可用于构建现代web架构的全局数据流。

首先安装

css 复制代码
npm i @focbiz/loong

然后定制代理对象

javascript 复制代码
import {loong} from '@focbiz/loong'const state=loong({count:0})

react组件内使用

javascript 复制代码
import {useLoong} from '@focbiz/loong'function Counter() {  const [data,setData] = useLoong(state);  return (    <div>      {data.count}      <button onClick={() => {           setData({count:++data.count})}>+1         }                        </button>     </div>  )}

三.基于响应式框架实现多语方案

有了loong一切都简单了。

1.首先定义多语言,语种标识要尽量参照于国际相关标准

css 复制代码
export const companent = {  'zh-CN': {a: '你好'}, 'en-US': {a: 'hello'}, 'ja': {a:'亚麻'};

2.提供全局多语言对象locales生成一个可以被监听loong对象,这里loong可以用其他库替换

javascript 复制代码
import {loong} from '@focbiz/loong';const locales= {};export const localesHander = loong(locales);

3.提供消费的hooks,根据对象路径进行查找

期间要对传入的 token做必须得校验,和查找。校验是必要的tokenstring格式验证已经存在验证等。查找是根据 token作为对象路径查找

kotlin 复制代码
const useMessage=(key:tokenstring)=>{const [data] = useLoong<typeof locales>(localesHander)   return data[nowLangKey][tokenstring]}

4.组件不做演示,组件就是使用hooks,封装一个基础的react组件即可

5.提供全局注册多语言的方法 mergeLocales方法就是对象的合并

javascript 复制代码
export const registerLocales=(...packages: Locales[])=> {   packages.forEach((locales) =>     mergeLocales(locales, locales)}) }
  1. 最后可以把这些方法挂着window上,可以实时查看以及注册调试等

四.结语

@focbiz/loong可以替换成其他的数据流方案,但是多语言的设计理念是相通的。在设计时要考虑是国际化还是本地化。

因为网页文字的显示往往是翻译即可,使用者能看懂。但是本地化还需要考虑当地的文化习俗,以及用户习惯,同时文字的翻译表达也应该更贴近当地人的日常。

相关推荐
子兮曰5 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰5 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万5 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝5 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋5 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁5 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄6 天前
JavaScript 隐式全局变量解析
javascript
汉堡大王95276 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大6 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师6 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端