@seayoo-web/i18n
v1.1.0
Published
utils of i18n
Readme
i18n
// 定义语言包数据类型
interface LanguagePackData {
someKey: string,
dataKey: {
payload: string,
count: number
}
}
// 定义语言包配置类型
// 配置类型会添加 Record<`api_${string}`, string> 的联合类型用以支持 api 响应的翻译
import type { DefineLanguagePack } from "@seayoo-web/i18n"
type LanguagePack = DefineLanguagePack<LanguagePackData>;
// 定义配置文件
const pack: LanguagePack = {
someKey: "....",
dataKey: "...."
}
// 创建语言包管理器
import { createLangPackManager } from "@seayoo-web/i18n"
// 可以直接内联加载默认语言包
import { pack as zhCnPack } from "./packs/zh-cn.ts";
const languagePack = createLangPackManager<LanguagePackData>([
{
id: "zh-CN",
name: "简体中文",
isDefault: true,
// 需要导出包含 pack 字段的模块
load: () => Promise.resolve({ pack: zhCnPack })
},
{
id: "en-US",
name: "English",
load: () => import("./packs/en-US.ts")
}
])
// 读取支持的语言列表
languagePack.supportLanguages;
// 读取当前语言包编号,初始化 lang 为空字符串
languagePack.lang;
// 可以从 url 的 lang 参数读取语言编号
await languagePack.loadWithDefault(queryString("lang"))
// 使用 t 函数进行翻译,
languagePack.t("someKey", "这是默认值")
languagePack.t("dataKey", { payload: "这是动态填充内容", count: 1 }, "可以继续设置默认值")
// t 函数做了 bind 处理,可以直接引用到需要的地方
// 比如设置到 vue 全局静态属性
app.config.globalProperties.t = languagePackage.t;
// 同时给予类型定义
declare module "vue" {
interface ComponentCustomProperties {
t: typeof languagePackage.t;
}
}
