名称: localization-developer 描述: 上下文感知路由到Anytype iOS本地化系统。在使用.xcstrings文件、Loc常量、硬编码字符串或用户界面文本时使用。
本地化开发(智能路由)
目的
上下文感知路由到Anytype iOS本地化系统。帮助您导航3文件的.xcstrings结构并正确使用Loc常量。
自动激活时机
- 使用
.xcstrings文件时 - 使用
Loc常量时 - 讨论硬编码字符串或用户界面文本时
- 关键词: 本地化、字符串、文本、Loc.、.xcstrings
🚨 关键规则(永不违反)
- 永不使用硬编码字符串在UI中 - 始终使用
Loc常量 - 永不创建重复键跨越3个.xcstrings文件 - 破坏代码生成
- 永不编辑非英语翻译 - 仅更新英语(
en),Crowdin处理其他语言 - 始终先搜索现有键 - 重用之前创建新的
- 始终运行
make generate编辑.xcstrings文件后
📋 快速工作流程
- 搜索现有:
rg "您的搜索词" Modules/Loc/Sources/Loc/Generated/Strings.swift - 如果找到: 重用现有键
- 如果未找到: 添加到适当的.xcstrings文件(见下方决策树)
- 生成:
make generate - 使用:
AnytypeText(Loc.您的键, style: .uxCalloutMedium)
🗂️ 3文件系统
决策树
此文本用于认证/登录/保险库吗?
是 → Auth.xcstrings(86个键)
否 → 继续
此文本用于空间/对象/协作吗?
是 → Workspace.xcstrings(493个键)
否 → 继续
此文本用于设置/小部件/通用UI吗?
是 → UI.xcstrings(667个键)
文件位置
- Auth.xcstrings:
Modules/Loc/Sources/Loc/Resources/Auth.xcstrings - Workspace.xcstrings:
Modules/Loc/Sources/Loc/Resources/Workspace.xcstrings - UI.xcstrings:
Modules/Loc/Sources/Loc/Resources/UI.xcstrings
生成输出: 所有3个文件 → 单个Strings.swift(约5,000行,1,246个总键)
🎯 添加键
格式(添加到适当的.xcstrings文件)
"您的本地化键" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "您的英语文本在此"
}
}
}
}
键命名:
- 短键:
"尚无属性"✅ - 非完整句子:
"尚无属性。添加一些。"❌ - 分层:
"QR.join.title"→Loc.Qr.Join.title
🔢 动态本地化(参数)
✅ 正确 - 使用生成函数
// 字符串: "您已达到%lld个编辑者的限制"
Loc.SpaceLimit.Editors.title(4)
// 字符串: "欢迎,%@!"
Loc.welcomeMessage("John")
❌ 错误 - 永不使用String(format:)
String(format: Loc.limitReached, 10) // 不要这样做
为什么: SwiftGen自动生成带参数化函数的格式说明符(%lld, %d, %@)。
格式说明符:
%lld→ Int参数%d→ Int参数%@→ String参数%.1f→ Double参数
🗑️ 移除未使用键
- 搜索:
rg "键名" --type swift - 如果仅在Strings.swift: 键被孤立
- 移除从源.xcstrings文件
- 生成:
make generate
⚠️ 常见错误
硬编码字符串
// ❌ 错误
Text("删除")
// ✅ 正确
Text(Loc.delete)
跨文件重复键
// 在Auth.xcstrings中
"Settings" : { ... }
// 在UI.xcstrings中
"Settings" : { ... } // ❌ 重复!破坏生成
使用String(format:)
// ❌ 错误
String(format: Loc.limitReached, 10)
// ✅ 正确
Loc.limitReached(10)
编辑非英语
// ❌ 错误 - Crowdin将覆盖
"de" : { "value" : "我的翻译" }
// ✅ 正确 - 仅编辑英语
"en" : { "value" : "我的翻译" }
📚 完整文档
完整指南: Anytype/Sources/PresentationLayer/Common/LOCALIZATION_GUIDE.md
涵盖:
- 详细3文件系统解释
- 键命名模式和约定
- 所有格式说明符的动态本地化
- 与Crowdin的翻译工作流程
- 移除孤立键
- 生成文件结构
- 完整示例和故障排除
✅ 工作流程检查清单
- [ ] 搜索现有键(
rg在Strings.swift) - [ ] 添加到正确的.xcstrings文件(Auth/Workspace/UI)
- [ ] 无跨文件重复键
- [ ] 仅更新英语(
en) - [ ] 运行
make generate - [ ] 使用生成键:
Loc.您的键 - [ ] UI中无硬编码字符串
🔗 相关技能与文档
- ios-dev-guidelines →
IOS_DEVELOPMENT_GUIDE.md- 永不使用硬编码字符串 - code-generation-developer →
CODE_GENERATION_GUIDE.md- 理解make generate - design-system-developer → 在UI组件中使用Loc常量
导航: 这是一个智能路由。详细内容,请始终参考LOCALIZATION_GUIDE.md。