1k-i18n
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseInternationalization (i18n)
国际化(i18n)
Guidelines for internationalization and translation management in OneKey.
OneKey中的国际化与翻译管理指南。
Critical Restrictions
重要限制
ABSOLUTELY FORBIDDEN (auto-generated files):
typescript
// ❌ NEVER modify these files - they are AUTO-GENERATED
// @onekeyhq/shared/src/locale/enum/translations.ts
// @onekeyhq/shared/src/locale/json/*.json
// ❌ NEVER hardcode text strings
<Text>Confirm</Text>
// ✅ CORRECT - Always use translation keys
import { ETranslations } from '@onekeyhq/shared/src/locale';
intl.formatMessage({ id: ETranslations.global__confirm })Consequences of violation:
- Translation system corruption
- Loss of translation work
- Build failures in i18n pipeline
- Breaking localization for international users
绝对禁止(自动生成文件):
typescript
// ❌ 绝不要修改这些文件——它们是自动生成的
// @onekeyhq/shared/src/locale/enum/translations.ts
// @onekeyhq/shared/src/locale/json/*.json
// ❌ 绝不要硬编码文本字符串
<Text>Confirm</Text>
// ✅ 正确做法——始终使用翻译键
import { ETranslations } from '@onekeyhq/shared/src/locale';
intl.formatMessage({ id: ETranslations.global__confirm })违规后果:
- 翻译系统损坏
- 翻译工作成果丢失
- i18n流水线构建失败
- 国际用户的本地化功能失效
Quick Reference
快速参考
Using Translations in Components
在组件中使用翻译
typescript
import { useIntl } from 'react-intl';
import { ETranslations } from '@onekeyhq/shared/src/locale';
function MyComponent() {
const intl = useIntl();
return (
<SizableText>
{intl.formatMessage({ id: ETranslations.global__confirm })}
</SizableText>
);
}typescript
import { useIntl } from 'react-intl';
import { ETranslations } from '@onekeyhq/shared/src/locale';
function MyComponent() {
const intl = useIntl();
return (
<SizableText>
{intl.formatMessage({ id: ETranslations.global__confirm })}
</SizableText>
);
}Using formatMessage Outside Components
在组件外部使用formatMessage
typescript
import { appLocale } from '@onekeyhq/shared/src/locale/appLocale';
import { ETranslations } from '@onekeyhq/shared/src/locale';
const message = appLocale.intl.formatMessage({
id: ETranslations.global__cancel,
});typescript
import { appLocale } from '@onekeyhq/shared/src/locale/appLocale';
import { ETranslations } from '@onekeyhq/shared/src/locale';
const message = appLocale.intl.formatMessage({
id: ETranslations.global__cancel,
});Translation Workflow
翻译工作流
- Design provides translation key like
prime::restore_purchases - Run sync command:
yarn fetch:locale - Convert key format: →
prime::restore_purchasesETranslations.prime_restore_purchases - Use in code:
tsx
{intl.formatMessage({ id: ETranslations.prime_restore_purchases })}
- 设计团队提供翻译键,例如
prime::restore_purchases - 运行同步命令:
yarn fetch:locale - 转换键格式:→
prime::restore_purchasesETranslations.prime_restore_purchases - 在代码中使用:
tsx
{intl.formatMessage({ id: ETranslations.prime_restore_purchases })}
Translation Key Naming Pattern
翻译键命名规则
namespace__action_description
Examples:
- global__confirm
- global__cancel
- swap__select_token
- wallet__create_wallet
- settings__dark_mode命名空间__操作_描述
示例:
- global__confirm
- global__cancel
- swap__select_token
- wallet__create_wallet
- settings__dark_modeDetailed Guide
详细指南
For comprehensive i18n guidelines and examples, see i18n.md.
Topics covered:
- Translation management restrictions
- Using translations in components
- Translation key naming conventions
- Locale handling and fallbacks
- Code examples
- Workflow summary
如需全面的i18n指南和示例,请查看 i18n.md。
涵盖主题:
- 翻译管理限制
- 在组件中使用翻译
- 翻译键命名规范
- 区域设置处理与回退
- 代码示例
- 工作流总结
Key Files
关键文件
| Purpose | File Path |
|---|---|
| Translation enum (auto-generated) | |
| Locale JSON (auto-generated) | |
| App locale | |
| Default locale | |
| 用途 | 文件路径 |
|---|---|
| 翻译枚举(自动生成) | |
| 区域设置JSON(自动生成) | |
| 应用区域设置 | |
| 默认区域设置 | |
Related Skills
相关技能
- - Date formatting with locale support
/1k-date-formatting - - General coding patterns
/1k-coding-patterns
- - 支持区域设置的日期格式化
/1k-date-formatting - - 通用编码模式
/1k-coding-patterns