localize

$npx mdskill add pixel-cellar/Claude-Code-Game-Studios/localize

当此技能被调用时:

SKILL.md
.github/skills/localizeView on GitHub ↗
---
name: localize
description: "运行本地化工作流:提取字符串、验证本地化就绪状态、检查硬编码文本,并生成可供翻译的字符串表。"
argument-hint: "[scan|extract|validate|status]"
user-invocable: true
allowed-tools: Read, Glob, Grep, Write, Bash
---

当此技能被调用时:

1. **解析子命令**参数:
   - `scan` — 扫描本地化问题(硬编码字符串、缺失键)
   - `extract` — 提取新字符串并生成/更新字符串表
   - `validate` — 验证现有翻译的完整性和格式
   - `status` — 报告整体本地化状态

2. **对于 `scan`**:
   - 搜索 `src/` 中的硬编码面向用户的字符串:
     - UI 代码中未被本地化函数包裹的字符串字面量
     - 应该参数化的拼接字符串
     - 使用位置占位符(`%s`、`%d`)而非命名占位符(`{playerName}`)的字符串
   - 搜索本地化反模式:
     - 未使用区域感知函数的日期/时间格式化
     - 未考虑区域设置的数字格式化
     - 嵌入在图片或纹理中的文本(标记资源文件)
     - 假设从左到右文本方向的字符串
   - 报告所有发现,包含文件路径和行号

3. **对于 `extract`**:
   - 扫描所有源文件中的本地化字符串引用
   - 与 `assets/data/` 中的现有字符串表(如有)进行对比
   - 为尚未有键的字符串生成新条目
   - 按照命名约定建议键名:`[category].[subcategory].[description]`
   - 输出要添加到字符串表的新字符串的差异

4. **对于 `validate`**:
   - 读取 `assets/data/` 中的所有字符串表文件
   - 检查每个条目的:
     - 缺失翻译(键存在但某区域没有翻译)
     - 占位符不匹配(源文本有 `{name}` 但翻译缺失)
     - 字符串长度违规(超过 UI 元素的字符限制)
     - 孤立键(翻译存在但代码中没有引用该键)
   - 按区域和严重级别分组报告验证结果

5. **对于 `status`**:
   - 统计可本地化字符串总数
   - 按区域:统计已翻译、未翻译和过时(源文本自翻译后已更改)的数量
   - 生成覆盖率矩阵:

```markdown
## 本地化状态
生成日期:[日期]

| 区域 | 总计 | 已翻译 | 缺失 | 过时 | 覆盖率 |
|------|------|--------|------|------|--------|
| en (源) | [N] | [N] | 0 | 0 | 100% |
| [区域] | [N] | [N] | [N] | [N] | [X]% |

### 问题
- 源代码中发现 [N] 个硬编码字符串
- [N] 个字符串超出字符限制
- [N] 个占位符不匹配
- [N] 个孤立键(可清理)
```

### 规则
- 英语 (en) 始终为源区域
- 每个字符串表条目必须包含解释上下文的翻译者注释
- 永远不要直接修改翻译文件 — 生成差异供审核
- 字符限制必须按 UI 元素定义并自动执行
- 从右到左 (RTL) 语言支持应从一开始就考虑,而非事后追加
More from pixel-cellar/Claude-Code-Game-Studios