i18n 多语言支持
BSV
内置多国语言支持,使用参考如下:
使用方法:
import i18n, { LanguageCode } from "/src/i18n";
i18n.setLanguageCode(LanguageCode["zh-CN"]);
// 获取 key 为 example.helloi18n.t("example.hello");
// 查找英语对应的值i18n.lt(LanguageCode["en"], "example.hello");
// 增加数据i18n.assign(LanguageCode["zh-CN"], { testi18n: "hello, {hi} {ma}" });// 有变量的获取模版数据const result = i18n.t("testi18n", { hi: "Jack", ma: "Ma" });// result: "hello, Jack Ma"
// 支持国际格式化参数, format: 'number' | 'currency' | 'list' | 'datetime' | 'relativetime'const result2 = i18n.lt( LanguageCode["zh-CN"], "testi18n", { hi: 1000, ma: 1654362035178 }, { hi: { format: "currency", currency: 'CNY' }, ma: { format: "datetime", dateStyle: "short", timeStyle: "short", }, });// result2: "hello world ¥1,000.00 2022/6/5 01:00"
格式化参数请参考 Intl 文档:
- Intl/NumberFormat(number|currency)
- Intl/ListFormat(list)
- Intl/DateTimeFormat(datetime)
- Intl/RelativeTimeFormat(relativetime)
服务端 i18n
服务端使用多语言需要使用 i18n.lt(req.lang, 'exhamge.hello')
这种指定语言的方式获取到对应语言的值,req.lang
是通过前端的 headers.language
得到。
前端 i18n
import i18n, { i18n, LanguageCode } from "/src/i18n";
// 设置指定语言i18n.setLanguageCode(LanguageCode["zh-CN"]);
// 再通过 $t 获取到值i18n.t("example.hello");
yup 校验 i18n
后端的参数校验代码和前端是共享的,所以写参数校验需要注意的事项,指定 label
:
import * as yup from "yup";
const schema = yup.object().shape({ title: yup.string().required().label("todo.title"), remark: yup.string().label("todo.remark"),});