بنقرة واحدة
add-i18n
为项目添加国际化翻译。使用 vue-i18n 管理中文和英文翻译,包含翻译 key 设计、文件更新和使用方式。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
为项目添加国际化翻译。使用 vue-i18n 管理中文和英文翻译,包含翻译 key 设计、文件更新和使用方式。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
代码生成后执行自动化质量检查。运行 Prettier 格式化、ESLint 检查修复和 TypeScript 类型检查。
以持续追问的方式"拷问"用户的设计方案或计划,沿决策树逐一解决每个分支的依赖关系,直到达成共识。当用户想要压力测试方案、被"盘问"设计思路,或提到"拷问我"/"grill me"/"审查方案"/"盘问方案"/"帮我梳理"等表达时使用。
添加一个新的 Content Script,注入到过早客论坛页面中。包含脚本创建、Vue 应用挂载和在主入口注册的完整流程。
为项目端到端地添加一个完整的新功能。覆盖从需求分析到代码生成、测试验证的全部流程,涉及 Content Script、Vue 组件、选项配置、国际化等多个层面。
为过早客论坛页面添加新的 HTML 解析函数,从论坛 HTML 中提取结构化数据。遵循项目现有的正则解析模式。
在扩展的选项页面中添加一个新的子页面。包含路由配置、Vue 页面创建和侧边栏导航集成的完整流程。
استنادا إلى تصنيف SOC المهني
| name | add-i18n |
| description | 为项目添加国际化翻译。使用 vue-i18n 管理中文和英文翻译,包含翻译 key 设计、文件更新和使用方式。 |
项目使用 vue-i18n 实现国际化,支持中文(zh)和英文(en)两种语言。翻译文件位于 src/i18n/locales/。
src/i18n/
├── index.ts # i18n 实例创建
└── locales/
├── zh.json # 中文翻译
└── en.json # 英文翻译
{
"common": {
"plzLogin": "请先登录",
"emptyData": "数据为空",
"networkError": "网络错误"
},
"settings": {
"basicSetting": "基本设置"
},
"resMessage": {
"alreadyLiked": "已经感谢过啦",
"canNotLikeYourTopic": "不能感谢自己的主题"
},
"navigation": {
"tech": "技术",
"create": "创造"
}
}
import { t } from '@/i18n';
// 简单翻译
ElMessage.success(t('common.plzLogin'));
// 带参数的翻译
ElMessage.success(t('base64Decode.copySuccess', { text: 'hello' }));
<template>
<span>{{ $t('settings.basicSetting') }}</span>
</template>
遵循已有的分组结构:
| 分组 | 用途 |
|---|---|
common | 通用文本(提示、错误信息等) |
settings | 选项页面的设置项名称和描述 |
resMessage | API 返回的错误消息映射 |
base64Decode | Base64 解码相关 |
navigation | 论坛节点名称翻译 |
| 新建分组 | 如果新功能翻译较多,创建新分组 |
{
"newFeature": {
"name": "新功能",
"description": "这是一个新功能的描述",
"success": "操作成功",
"failed": "操作失败:{reason}"
}
}
{
"newFeature": {
"name": "New Feature",
"description": "Description of the new feature",
"success": "Operation successful",
"failed": "Operation failed: {reason}"
}
}
import { t } from '@/i18n';
// 无参数
t('newFeature.name');
// 有参数(使用 {variableName} 占位)
t('newFeature.failed', { reason: '网络超时' });
路由标题通过 meta.title 自动映射翻译 key:
// 路由定义
{
name: OptionsRouteNames.MyFeature,
meta: {
title: OptionsRouteNames.MyFeature, // 'myFeature'
},
}
// zh.json
{
"options": {
"myFeature": "我的功能"
}
}
翻译 key 规则:options.{routeName} (小写,camelCase)
// src/constants/res-msg.ts - 定义原始消息常量
export const USER_NOT_LOGIN = '用户未登录';
// src/utils/index.ts - 消息映射
import { t } from '@/i18n';
const getResMessage = (msg: string): string => {
switch (msg) {
case USER_NOT_LOGIN:
return t('common.plzLogin');
default:
return msg; // 没有对应翻译时返回原文
}
};
{
"message": {
"unread": "你有 {count} 条未读消息"
}
}
t('message.unread', { count: 5 });
// 中文: "你有 5 条未读消息"
// 英文: "You have 5 unread messages"
新增翻译 key 必须按字母升序插入到合适位置,不要直接追加到末尾。
// ✅ 正确 - 按字母序插入
{
"common": {
"cancel": "取消",
"emptyData": "数据为空", // ← e 在 c 之后
"networkError": "网络错误",
"plzLogin": "请先登录",
"post": "发布" // ← p 在 n 之后
}
}
// ❌ 错误 - 直接追加到末尾
{
"common": {
"cancel": "取消",
"plzLogin": "请先登录",
"emptyData": "数据为空" // ← 乱序
}
}
新分组也按字母升序插入到顶级 key 中。
{variableName} 格式