前端国际化全流程落地:TSF / TSP 翻译工具实战指南(Vue 版)

导读

本文详细讲解前端项目国际化翻译的全流程落地方案,涵盖「翻译平台配置→工具初始化→开发实现→发布上线→回滚操作」核心环节,重点介绍 TSF 翻译工具、TSP 平台的实操配置与最佳实践,解决翻译文件管理、多环境发布、缓存处理等核心问题,适配 Vue 技术栈的国际化开发场景。

一、整体概览

api请求服务

返回翻译文件

业务开发

业务开发

npx spc-tsf update

npx spc-tsf upload

npx spc-tsf export

终端

i18n, $gt, tsp 平台初始化,集成翻译

TSP 平台对 key 进行分环境版本管理,包括发布,回滚操作

短文案,不易变的文案,使用 $gt 函数,依靠翻译平台扫描生产 hash key,上传翻译平台

长文案,公共文案,使用明确的 key,上传到 transify 平台,使用 $t 进行翻译

上传到 transify 平台

导出新增 key,提供给业务翻译

业务翻译完成

1.1 核心流程

国际化翻译落地分为 5 个核心阶段,流程闭环如下:

翻译平台配置

翻译工具初始化

开发阶段($t / $gt 使用)

发布阶段(NonLive / Live)

回滚操作(仅 Live)

1.2 核心工具功能速览

功能所属工具核心作用
spc-tsf updateTSF 翻译工具扫描代码提取翻译 key,自动上传至翻译平台
spc-tsf upload / downloadTSF 翻译工具批量上传 / 下载翻译文件(JSON 格式)
spc-tsf exportTSF 翻译工具导出指定版本间的翻译 key(CSV 格式)
generateTransifyCommonTSF 翻译工具生成规范翻译函数 $gt(用于 key 扫描)
useSPCTransifyTSF 翻译工具页面显示翻译 key / 内容切换(调试用)
TSP SDK Create / SwitchLanguageTSP 平台初始化语言、切换语言、拉取翻译文件
TSP 发布 / 回滚TSP 平台翻译内容多环境发布、线上版本回滚

二、初始化准备:平台与工具配置

2.1 翻译平台(Transify)项目创建

步骤1:创建 Project 并获取 Resource ID

在翻译平台完成项目创建,生成唯一的 Resource ID(后续配置核心参数)。

步骤2:获取 Token

生成并保存 download/upload 对应的 Token(翻译工具鉴权使用)。

2.2 TSF 翻译工具初始化

TSF 工具用于扫描、上传、导出翻译 key,核心依赖两个包,初始化流程如下:

步骤2.2.1 安装依赖
npminstall @spcfe-common/utils-transify @spcfe-common/utils-transify-client 
步骤2.2.2 核心配置(transify.config.js)

执行初始化命令生成配置文件,替换占位符为实际值:

npx spc-tsf init 
// 项目根目录 transify.config.js - 翻译工具核心配置 module.exports ={project:'{projectName}',// 项目名(作为 key 前缀,不可随意修改)token:'***',// 翻译平台 TokenresourceId:'{resourceId}',// 翻译平台项目 ID// 上传 / 下载接口(替换 {resourceId} 为实际值)uploadUrl:'https://transify.seagroup.com/api/resources/{resourceId}/languagestoken/import/json',downloadUrl:'https://transify.seagroup.com/api/resources/{resourceId}/languagestoken/export/json',funName:['$gt'],// 需扫描的翻译函数名fileType:['*.js','*.vue'],// 需扫描的文件类型};
步骤2.2.3 Git Hook 配置(自动扫描key)

package.json 配置钩子,提交代码时自动扫描新增key并上传:

"scripts":{"diff":"npx spc-tsf update",// 扫描并上传新增 key},"husky":{"hooks":{"post-commit":"npm run diff"// 提交后执行扫描}}

2.3 TSP 平台配置(推荐)

TSP 平台通过 API 线上拉取翻译文件,支持多环境管理,替代本地打包翻译文件的方式,配置步骤:

步骤2.3.1 平台操作
  1. 创建 Permission Group(权限组);
  2. 添加 Resource(关联 Resource ID、权限组,配置自动发布规则);
步骤2.3.2 安装 TSP SDK
yarnadd [email protected] 

三、开发阶段:翻译功能实现

3.1 首次接入:核心能力集成(Vue 示例)

初始化 i18n、$gt 翻译函数、TSP SDK,实现翻译文件异步拉取:

import Vue from'vue';import VueI18n from'vue-i18n';import{ generateTransifyCommon }from'@spcfe-common/utils-transify-client';import{ Translator }from'@spcfe-common/tsp-sdk'; Vue.use(VueI18n);// 1. 初始化 i18nconst i18n =newVueI18n({locale:'en',// 默认语言fallbackLocale:'en',// 兜底语言messages:{},// 初始为空,通过 TSP 拉取});// 2. 初始化 TSP Translatorconst translator =newTranslator({projectId:'your-project-id',// TSP项目ID});// 核心参数配置const resourceId = xxx;// 翻译平台Resource IDconst env = process.env.NODE_ENV==='production'?'live':'nonLive';const currentLang ='en';// 3. 异步拉取翻译文件constfetchLocales=async()=>{try{const{ translation }=await translator.create({ env,// 环境:live / nonLivelocale: currentLang,// 目标语言(en / vi / th / zh-Hans 等)translation:{resources:[resourceId]},// 关联的 Resource ID}); i18n.mergeLocaleMessage(currentLang, translation);// 合并到 i18n}catch(e){ console.error('翻译文件拉取失败:', e);}};// 4. 生成 $gt 翻译函数(供 TSF 扫描)const $gt =generateTransifyCommon({t:(key, options)=> i18n.t(key, options),// 复用 i18n 的 t 函数project:'your-project-name',// 与 transify.config.js 的 project 一致});// 5. 全局挂载 + 应用初始化Vue.prototype.$gt = $gt;asyncfunctioninit(){awaitfetchLocales();// 先拉取翻译,再初始化 VuenewVue({el:'#app', i18n,render:h=>h(App),});}init();

3.2 翻译函数使用规范

3.2.1 $t 函数:适用于通用 / 易变文案

适用场景:统一提示文案、后台返回内容、需频繁修改的文案。
使用方式

  1. 执行 npx spc-tsf upload transify_keys.json 上传至翻译平台;

业务代码中使用:

console.log(this.$t('common.tips.success'));// 输出翻译后内容

手动维护 transify_keys.json 定义 key 和初始内容:

{"common.tips.success":"操作成功","common.tips.error":"操作失败"}
3.2.2 $gt 函数:适用于短 / 稳定文案

适用场景:简短固定文案(如按钮文字、标签)。
核心特性:自动生成 hash key(无需手动定义),TSF 扫描后上传至平台。
使用方式

// 基础使用 console.log(this.$gt('Hello!'));// 指定命名空间 console.log(this.$gt('Hello!','namespace'));// 带参数 console.log(this.$gt('Hello {name}!',null,{name:'lay'}));// 注意:第二个参数为命名空间,无则传null
3.2.3 $gt 避坑点

$gt 依赖异步拉取的翻译文件,禁止在常量 / 初始化代码中直接使用(会因翻译未加载导致失效),建议封装为函数:

// 错误示例:常量中直接使用(翻译未加载时返回原文案)constTITLE=$gt('首页');// 正确示例:封装为函数,按需执行constgetTitle=()=>$gt('首页');

四、发布阶段:多环境发布策略

4.1 废弃方案:本地打包翻译文件

原方案通过构建前拉取翻译文件打包进 bundle,缺点是无法实时更新、增大包体积,已废弃:

"scripts":{"build":"npm run transify && npm run build","transify":"npx spc-tsf download",}

4.2 推荐方案:TSP 平台发布

接入 TSP 后,翻译文件通过 API 线上拉取,发布操作在 TSP 平台完成:

步骤1:触发发布

在 TSP 平台的 Resource Detail 页面点击「发布」按钮,确认版本变更后提交。

步骤2:多环境发布规则
环境覆盖范围发布策略
NonLive开发 / 测试 / UAT / 预发每 2 小时自动发布(有变更时),也可手动发布
Live生产环境支持自动 / 手动发布,由专人负责(代码合入后执行)

4.3 缓存注意事项

  • TSP API 存在 5 分钟强缓存,发布后需强刷页面才能看到最新翻译;
  • TSP SDK ≥ xxx 版本时,会用 IndexedDB 缓存翻译文件,导致需刷新两次才能生效(开发环境建议用 < xxx 版本)。

五、回滚操作:Live 环境版本回退

5.1 回滚说明

仅支持 Live 环境回滚,基于已发布版本的 key 维度操作,最多回滚最近 4 个版本。

5.2 操作步骤

  1. 进入 TSP 平台 Resource Detail 页面;
  2. 点击「rollback」按钮,选择目标语言和回滚版本;
  3. 确认后完成回滚(自动发布功能会暂停,需手动重新开启)。

六、辅助功能:调试与导出

6.1 导出新增未翻译 key

导出指定版本间的新增 key(供业务翻译):

npx spc-tsf export--from<源分支 commitId>--to<开发分支 commitId># 导出文件:项目根目录 / transify-export-file.csv

6.2 ShowKey 调试功能

页面切换显示「翻译 key」/「翻译内容」,方便定位问题:

import{ useSPCTransify }from'@spcfe-common/utils-transify-client';// 初始化 ShowKeyuseSPCTransify((lang)=>{// 语言切换回调 i18n.locale = lang; location.reload();},()=> i18n.locale // 当前语言);

七、核心注意事项

  1. TSP 兜底机制:API 拉取失败 / 超时(默认 3s)时,自动拉取 CDN 翻译文件;
  2. IndexedDB 缓存:SDK ≥ xxx 版本启用;
  3. 发布后生效:Live 环境发布后需强刷页面,缓存 5 分钟后自动失效;
  4. 回滚影响:回滚后自动发布功能暂停,需手动重新发布。

八、总结与最佳实践

8.1 核心流程回顾

初始化 → 开发($t / $gt) → 发布(NonLive / Live) → 回滚(仅 Live) 

8.2 最佳实践

  1. 翻译函数选择:短 / 稳定文案用 $gt,通用 / 易变文案用 $t;
  2. 异步加载:翻译文件拉取完成后再渲染页面,避免 $gt 失效;
  3. 发布管控:NonLive 环境按需发布,Live 环境专人负责;
  4. 缓存处理:生产环境发布后提醒用户强刷,内部系统降级 SDK 版本。

Read more

计算机毕设java的高校教师指导的毕业论文查询系统 SpringBoot高校毕业论文选题与指导协同平台 基于Java Web的本科论文全流程跟踪与统计系统

计算机毕设java的高校教师指导的毕业论文查询系统 SpringBoot高校毕业论文选题与指导协同平台 基于Java Web的本科论文全流程跟踪与统计系统

计算机毕设java的高校教师指导的毕业论文查询系统838019(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 每到毕业季,学院走廊里贴满“哪位老师还有指导名额”的手写A4纸,学生拿着U盘到处找导师签字,教务办被“我的论文分给谁了”包围——这种原始场景仍在不少高校上演。把论文题目、师生双选、指导记录、成绩统计、公告通知全部搬到线上,让数据多跑路、师生少跑腿,成为教学管理数字化最迫切的“最后一公里”。于是用 SpringBoot+MySQL 做了一套高校教师指导毕业论文查询系统,B/S架构,浏览器即开即用,教师、管理员、学生三种角色同屏协同,从选题到归档全程留痕,一键导出统计报表,彻底告别纸质流转。 已落地的功能清单: * 个人中心:头像、密码、联系方式自助维护 * 教师:工号、姓名、性别、电话、头像、

快速上手视觉语言模型,GLM-4.6V-Flash-WEB太友好了

快速上手视觉语言模型,GLM-4.6V-Flash-WEB太友好了 你有没有试过:上传一张截图,问它“这个报错是什么意思”,三秒内就得到清晰解释?或者拖进一张产品图,直接让它写一段小红书风格的种草文案?不是靠人工翻文档、查资料,而是模型自己“看懂图+说人话”。 GLM-4.6V-Flash-WEB 就是这样一个能真正“睁眼看世界”的视觉语言模型——它不烧显卡、不用配环境、点开网页就能用。部署不用折腾 Dockerfile,推理不用写 API 调用,连 Jupyter 都给你预装好了。更关键的是,它不是 Demo 级玩具:中文理解扎实、响应快、支持多轮图文对话,而且所有代码、权重、界面全开源。 这篇文章不讲 ViT 是什么、不推公式、不列参数量。我们就从你打开终端那一刻开始,一步步跑通整个流程:下载、启动、

Qwen3-VL-WEBUI容灾备份:模型服务高可用部署

Qwen3-VL-WEBUI容灾备份:模型服务高可用部署 1. 引言:为何需要高可用的Qwen3-VL-WEBUI部署? 随着多模态大模型在智能客服、自动化办公、视觉代理等场景中的广泛应用,模型服务的稳定性与连续性已成为生产环境的核心诉求。Qwen3-VL-WEBUI作为阿里开源的视觉-语言交互平台,内置 Qwen3-VL-4B-Instruct 模型,支持图像理解、视频分析、GUI操作、代码生成等复杂任务,其服务中断将直接影响业务流程。 然而,单节点部署存在硬件故障、网络波动、资源耗尽等风险。因此,构建一套具备容灾备份能力的高可用部署方案,不仅是技术进阶的体现,更是保障用户体验和系统鲁棒性的关键举措。 本文将围绕 Qwen3-VL-WEBUI 的实际部署需求,深入探讨如何通过主备切换、负载均衡、持久化存储与健康检查机制,实现模型服务的高可用架构设计与工程落地。 2. Qwen3-VL-WEBUI 核心特性与部署挑战 2.1 Qwen3-VL-WEBUI 简介 Qwen3-VL —— 迄今为止 Qwen 系列中最强大的视觉-语言模型。该版本在多个维度实现了全面升级:

第十六届极客大挑战 web 复现

跟着大佬的文章复现 第十六届极客大挑战 web题型WP | CN-SEC 中文网 第16届极客大挑战-web - J_0k3r 可能还需要做的,学习sql注入脚本咋写的,phar深入理解 Expression 描述:这个程序员偷懒直接复制粘贴网上的代码连 JWT 密钥都不改..? 直接那jwt用爆破一下,发现是secret 但是没东西,发现显示用户名,可能有ssti,emm 从图中可以看到,该项目使用了 Node.js + Express 框架,而 EJS 是 Express 最常用的模板引擎之一(Express 默认支持 EJS) 第一次接触这个模板。 Ejs简介: EJS是一个javascript模板库,用来从json数据中生成HTML字符串 * 功能:缓存功能,能够缓存好的HTML模板; * <% code %>用来执行javascript代码 基础用法: 标签: