translate-pseudocn · git:20260913.a915692 · 2026-09-13 · sha256 2182241e60482bec
translate-pseudocn git:20260913.a915692A
Immutable. This exact content is served forever at /api/v1/blob/2182241e60482bec.
---
name: translate-pseudocn
description: 为文档撰写技能提供伪中国语(pcn)语言支持。以日语汉字词汇为基础、剥离平假名与片假名、保留日语语序的伪本地化。可被 write-project-docs 自动发现调用。
language_code: pcn
display_name: 偽中国語
base_language: ja
---
# 伪中国语翻译
为 NixKits 文档体系提供 pcn(伪中国语)语言。
## 自动发现契约
write-project-docs / write-maintenance-log 通过扫描 `skills/translate-*/SKILL.md` frontmatter 自动发现:
| 字段 | 值 | 用途 |
|------|-----|------|
| `language_code` | `pcn` | 目录名、文件扩展名 |
| `display_name` | `偽中国語` | 语言切换器标签 |
| `base_language` | `ja` | 源语言 |
## 设计原则
伪中国语是**日语文本剥离假名后的视觉结果**,不是中文翻译。
- **基于智能体自然语言理解进行转换**,不使用自动化脚本/正则替换。理解句子结构后再做转换。
- 语序转换为中文语序(SOV → SVO)
- 日文汉字名词保持原样
- 片假名外来语优先查词典映射为日本汉字,未命中则剥离
- **禁止使用简体中文或繁体中文汉字**(如「软件」「安装」「模块」)
## 替换规则
### 1. 剥离假名
去除**所有平假名**(あ-ん)。片假名(ア-ン)按以下优先级处理:
1. 查 [`dictionary.md`](dictionary.md) 映射为日本汉字
2. 未命中 → 剥离(仅保留上下文中的日文汉字)
### 2. 保留日文汉字
日文汉字名词**原样保留**,包括:
| 示例 | 保留形式 | 说明 |
|------|---------|------|
| 開発 | 開発 | 日文汉字,非「开发」 |
| 環境 | 環境 | 日文汉字 |
| 管理 | 管理 | 日文汉字 |
| 提供 | 提供 | 日文汉字 |
| 設定 | 設定 | 日文汉字 |
| 情報 | 情報 | 日文汉字 |
### 3. 保留日语语序
日语 SOV 语序转换为中文 SVO 语序(主-动-宾)。
### 4. 助词转换(最小化)
助词适当保留以增加文本丰富性,仅剥离无实义的语法标记:
| 日文 | 変換 | 条件 |
|------|------|------|
| の | 之 | 所有/所属 |
| と | 與 | 并列连接 |
| に | 於 | 方向/目标 |
| で | 以 | 手段/场所 |
| から | 自 | 起点 |
| まで | 至 | 终点 |
| は | (剥离) | 主题标记,无实义 |
| が | (剥离) | 主语标记,无实义 |
| を | (剥离) | 宾语标记,无实义 |
### 5. 标点
日文标点保持原样(`、` `。` 不转换)。
### 6. 代码块保护
- Nix 代码块:仅翻译 `#` 注释行
- Bash 代码块:全部不动
- 先按 ` ``` ` 边界提取代码块,仅对非代码区域应用规则
## 验证
翻译完成后,使用以下脚本检查输出文件是否残留假名:
```python
import re
def check_kana(path):
with open(path) as f:
text = f.read()
blocks = re.split(r'```', text)
outside = ''.join(blocks[i] for i in range(0, len(blocks), 2))
kata = re.findall(r'[\u30A0-\u30FF]{2,}', outside)
hira = re.findall(r'[\u3040-\u309F]{2,}', outside)
if kata: print(f'残片假名: {kata}')
if hira: print(f'残平假名: {hira}')
```
## 词典
片假名→日本汉字映射见 [`dictionary.md`](dictionary.md)。仅包含有对应日本汉字词的片假名外来语。
## 注意事项
- 伪中国语是视觉伪本地化,外观是「汉字+符号」的日文文本
- 禁止使用简体中文汉字(如「软件」「安装」「模块」「设置」)
- 语言切换器生成:从日文源提取路径逐个精确构造
- `日本語`→`[日本語]`(加链接),自身标签 `偽中国語`(纯文本)
- 验证发现的残留片假名应立即翻译并加入 [`dictionary.md`](dictionary.md),然后重新生成所有 pcn 文档
## 常见陷阱与修复(实战经验)
### 1. 片假名词典映射必须优先于剥离
所有片假名在剥离前**必须先查词典**。常见遗漏项及对应日文汉字:
| 片假名 | 日文汉字 | 常见出现问题 |
|--------|---------|-------------|
| タイプ | 種別 | 基本信息表格的类型行变为空列 |
| アイコン | 図標 | 图标行显示空值 |
| タイル | 磁貼 | 标题行丢失 |
| サービス | 服務 | 服务模块描述缺失主体 |
| リング | 環 | UI 环形用量指示缺失主体 |
| キー | 鍵 | 键名相关描述出现空格 |
| セッション | 会期 | 会话相关段落丢失主体 |
| プレフィル | 前置充填 | LLM 推论文档中推理阶段名残留英文 |
| ボトルネック | 隘路 | 性能分析段落残留英文 |
| トークン | 語彙 | LLM 文档中计量单位混用(既有文档用「語彙」,须一致) |
**验证方法**:翻译完成后,对所有 pcn 文件运行残留假名检查脚本(见上方「验证」节)。
同时额外检查表格中是否存在空列(`grep '^| |' docs/pcn/*.md`)。
### 2. 语言切换器必须双向更新
新增 pcn 文件后,**所有现有语言版本**的同一文档都需要追加 `[偽中国語]` 链接。
仅更新 pcn 文件自身的切换器是不够的——zh/en/ja 的切换器行同样需要新增条目。
### 3. 禁止使用简体中文汉字
日文汉字「開発」「環境」「設定」「情報」必须原样保留,绝不能替换为简体中文的「开发」「环境」「设置」「信息」。
### 4. 标点保持日文
日文标点 `、` `。` 不转换为中文 `,` `。`。
### 5. 子代理生成文件的切换器必须包含全部语言
子代理生成新语言文件时,容易只输出 **3 条目切换器**(如 `[中文] | [English] | [偽中国語]`),缺少其他已安装的扩展语言链接(如 `[日本語]`)。父代理在接收子代理输出后,**必须验证并补全**切换器至所有已发现语言。
验证命令:
```bash
# 检查切换器是否包含全部 5 语言
for f in docs/pcn/*.md; do
line=$(grep '^\[中文\]' "$f")
echo "$line" | grep -q "$expected" || echo "MISSING $expected in $f"
done
done
```
### 6. 本地化文档内链必须指向同语言版本
模块文档表格中的链接指向源语言文档。转换为 pcn 后必须改为指向 pcn 版。例如 `](ja/nginx.md)` → `](./nginx.md)`。同时注意顶层文档的跨深度链接调整(`../LICENSE` → `../../LICENSE`)。
### 7. 繁体/简体判定:先分类,再替换
清理既有 pcn 文档的简繁混用时,**不可对候选字表做无差别 `sed` 替换**——大量「简体形」字符同时也是**合法日文汉字**,改了就是破坏。
实测:对 55 字候选表做全量扫描,真正的简体专属字**仅 5 个**(`档` `径` `译` `说明` `实例`),其余多为一字多用的日文汉字。
| 类别 | 例 | 处理 |
|------|-----|------|
| **日文汉字(合法,勿改)** | `更新` `停止` `管理` `保存` `設定` `情報` `機能` `記録` `実測` | 保留 |
| **简体专属(须改)** | `与`→`與`、`档`→`檔`、`径`→`経`、`译`→`訳`、`说明`→`説明`、`实例`→`実例` | 替换 |
| **中文词,日语有对应字** | `端口`(ポート)、`制御台`(コンソール) | **保留并计入词典**,见下 |
**判定方法**:不要凭字形猜测,用「该字是否出现在日文汉字集内」过滤后再替换。简体专属字集与日文汉字集高度重叠,凭感觉必误。
### 8. 中文词 ≠ 违规:日语有对应字者应入词典
`端口`、`制御台` 这类词**看似**中文,但日语中存在对应汉字,故不应剥离或改写,而应**作为假名外来语的汉字化映射计入词典**:
| 假名 | 映射 | 理由 |
|------|------|------|
| ポート | 端口 | 日文「港」义 |
| コンソール | 制御台 | 管理/监控控制台 |
**反例(我犯过的错)**:曾把无词典映射的 `ポート` 按「未命中→剥离」处理,自创了 `港`。这既违反规则(剥离≠另造),又与既有文档不一致。**未命中时的正确动作是「查证并补入词典」,而非「自创映射」或「裸剥离」。**
### 9. 提交信息(commit subject)保持 verbatim
维护日志的 `| 提交 | 説明 |` 表中,**提交信息列必须原样保留**,即使是中文简体、即使 pcn 其它部分已伪中国语化。
依据:`docs/MAINTENANCE.ja.md` 的同一列同样保留中文原样——git 提交信息是**不可变的外部引用**,与 AGENTS.md 节标题同理。
判定方法(区分「摘要」与「提交」列):
```bash
# 提交行以 | `7位SHA` | 开头;摘要行以 **摘要** 开头
grep -nE '^\| `[0-9a-f]{7}` \|' docs/MAINTENANCE.pcn.md # 这些行豁免
grep -n '^\*\*摘要\*\*' docs/MAINTENANCE.pcn.md # 这些行须合规
```
> ⚠️ 实战:一次全仓清理中,扫描器报出 4 处简体字,逐一核对后确认**全部位于提交信息列**——属正确保留,非违规。若不加区分地替换,会篡改 git 历史引用。
### 10. 清理前先留基线,改后校验「内容无损」
批量替换易误伤。**动手前**对全部 pcn 文件留存快照,**改后**比对行数:
```bash
# 改前
mkdir -p /tmp/pcn-baseline
for f in $(find docs/pcn -name '*.md'); do
cp "$f" "/tmp/pcn-baseline/$(echo $f | tr '/' '_')"
done
# 改后:行数应逐一相同
for f in $(find docs/pcn -name '*.md' | sort); do
b="/tmp/pcn-baseline/$(echo $f | tr '/' '_')"
a=$(wc -l < "$b"); c=$(wc -l < "$f")
[ "$a" != "$c" ] && echo "DIFF $f: $a -> $c"
done
```
同长度替换(简→繁、词→词)应使行数**完全不变**;出现差异即说明误伤换行或内容。