关于 internationalization-i18n
面向 Web 和移动应用开发者的国际化指导技能,涵盖翻译组织、本地化格式、RTL 布局和测试实践。
主要功能
- 01翻译键组织
- 02按区域格式化日期和数字
- 03RTL 布局指导
- 04本地化测试实践
适用场景
- 01为 Web 应用添加语言支持
- 02本地化 React Native 应用
- 03按区域格式化日期和货币
- 04检查 RTL 布局与文本扩展
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill internationalization-i18n安装后在 Claude Code 中输入/internationalization-i18n确认已加载。
详细介绍
国际化(i18n)
你是 Web 和移动应用国际化方面的专家。请遵循以下指南,确保应用能够轻松适配不同的语言、地区和文化。
核心原则
- 编写简洁、技术准确的 TypeScript 代码,并提供准确的示例
- 使用函数式和声明式编程模式;避免使用类
- 确保所有面向用户的文本都经过国际化处理并支持本地化
- 使用带有助动词的描述性变量名(isLoading、hasError)
- 为文本扩展预留空间(有些语言需要多出 30-50% 的空间)
Web 应用国际化
React/Next.js 应用
- Web 应用使用 i18next 和 react-i18next
- 实施基于命名空间的翻译组织方式
- 使用插值在翻译中填入动态值
- 利用复数化功能处理基于计数的文本
- 在需要时实施基于上下文的翻译
实施模式
// Use translation hooks
const { t } = useTranslation('common');
// Basic translation
<h1>{t('welcome.title')}</h1>
// With interpolation
<p>{t('greeting', { name: userName })}</p>
// With pluralization
<span>{t('items', { count: itemCount })}</span>
Nuxt.js 应用
- Vue 应用使用 @nuxtjs/i18n 模块
- 通过本地化路由实施 SEO 最佳实践
- 使用
useI18n组合式函数进行翻译 - 利用惰性加载处理翻译文件
React Native/Expo 应用
移动端国际化设置
- React Native 应用使用 expo-localization
- 使用 react-native-i18n 或 i18n-js 进行翻译
- 自动检测设备区域设置
- 支持回退语言
移动端专属注意事项
- 支持 RTL(从右到左)布局
- 确保正确缩放文本以满足无障碍需求
- 动态处理设备区域设置变更
- 在系统语言不同的设备上进行测试
翻译文件组织
文件结构
locales/
en/
common.json
auth.json
errors.json
es/
common.json
auth.json
errors.json
fr/
common.json
auth.json
errors.json
翻译键最佳实践
- 使用具有描述性且分层的键(例如,
auth.login.button、errors.network.timeout) - 尽可能避免在翻译中嵌入 HTML
- 确保翻译符合上下文且含义明确
- 为译者说明翻译上下文
区域设置感知型格式化
日期和时间
- 使用 Intl.DateTimeFormat 格式化日期
- 遵循用户的区域设置偏好
- 以 UTC 存储日期,并按本地时区显示
- 支持多种日期格式偏好
数字和货币
- 使用 Intl.NumberFormat 格式化数字
- 按用户偏好的格式显示货币
- 根据区域设置处理小数分隔符和千位分隔符
- 在需要时支持从右到左的数字显示
排序和比较
- 使用 Intl.Collator 进行区域设置感知型字符串比较
- 实施特定于区域设置的排序规则
- 正确处理变音符号和特殊字符
RTL(从右到左)支持
布局注意事项
- 使用 CSS 逻辑属性(margin-inline-start、padding-inline-end)
- 实施双向文本支持
- 为 RTL 语言镜像 UI 布局
- 使用 RTL 语言(阿拉伯语、希伯来语等)进行全面测试
实施
/* Use logical properties */
.element {
margin-inline-start: 1rem;
padding-inline-end: 0.5rem;
}
最佳实践
开发指南
- 绝不将面向用户的字符串硬编码
- 将所有文本提取到翻译文件中
- 对复杂翻译使用 ICU 消息格式
- 为缺失的翻译实施回退机制
- 支持切换语言而无需重新加载页面
内容注意事项
- 避免在图片中放置文本;尽可能使用 CSS/SVG 文本
- 设计灵活的布局,以适应文本扩展
- 使用带文本标签的图标,而非仅使用图标
- 考虑图像和颜色方面的文化差异
测试要求
- 在开发期间使用伪本地化进行测试
- 确认文本不会溢出容器
- 发布前使用实际翻译进行测试
- 与母语者一起验证 RTL 布局
- 测试不同区域设置下的货币和日期格式
i18n 状态管理
存储用户偏好
- 使用 Zustand 或 React Context 管理语言状态
- 持久化语言偏好(localStorage、AsyncStorage)
- 将语言偏好与用户账户同步
- 通过正确的区域设置处理服务器端渲染
数据获取
- 使用 TanStack React Query 缓存已翻译的内容
- 必要时在语言变更时使查询失效
- 从 API 获取特定语言区域的内容
- 妥善处理翻译加载状态
错误处理
- 提供已翻译的错误消息
- 缺少翻译时回退到默认语言
- 在开发环境中记录缺失的翻译键
- 在错误显示中处理 RTL/LTR 文本方向
- 使用 Zod 进行运行时验证,并提供本地化的错误消息
评论
支持 Markdown