ワンクリックで
add-i18n
为项目添加国际化翻译。使用 vue-i18n 管理中文和英文翻译,包含翻译 key 设计、文件更新和使用方式。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
为项目添加国际化翻译。使用 vue-i18n 管理中文和英文翻译,包含翻译 key 设计、文件更新和使用方式。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
代码生成后执行自动化质量检查。运行 Prettier 格式化、ESLint 检查修复和 TypeScript 类型检查。
以持续追问的方式"拷问"用户的设计方案或计划,沿决策树逐一解决每个分支的依赖关系,直到达成共识。当用户想要压力测试方案、被"盘问"设计思路,或提到"拷问我"/"grill me"/"审查方案"/"盘问方案"/"帮我梳理"等表达时使用。
添加一个新的 Content Script,注入到过早客论坛页面中。包含脚本创建、Vue 应用挂载和在主入口注册的完整流程。
为项目端到端地添加一个完整的新功能。覆盖从需求分析到代码生成、测试验证的全部流程,涉及 Content Script、Vue 组件、选项配置、国际化等多个层面。
为过早客论坛页面添加新的 HTML 解析函数,从论坛 HTML 中提取结构化数据。遵循项目现有的正则解析模式。
在扩展的选项页面中添加一个新的子页面。包含路由配置、Vue 页面创建和侧边栏导航集成的完整流程。
| 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} 格式