Skip to content

本地化规范 ​

源码: src/i18n/


数字格式化 ​

Hook 实现 ​

typescript
export function useNumberFormat() {
  const { i18n } = useTranslation()
  
  return {
    integer: (value: number) =>
      new Intl.NumberFormat(i18n.language).format(value),
    
    decimal: (value: number, decimals = 2) =>
      new Intl.NumberFormat(i18n.language, {
        minimumFractionDigits: decimals,
        maximumFractionDigits: decimals,
      }).format(value),
    
    currency: (value: number, currency = 'USD') =>
      new Intl.NumberFormat(i18n.language, {
        style: 'currency',
        currency,
      }).format(value),
  }
}

格式化示例 ​

数值zh-CNenar
12345671,234,5671,234,567١٬٢٣٤٬٥٦٧
1234.561,234.561,234.56١٬٢٣٤٫٥٦
$1000US$1,000.00$1,000.00١٬٠٠٠٫٠٠ US$

日期格式化 ​

Hook 实现 ​

typescript
export function useDateFormat() {
  const { i18n } = useTranslation()
  
  return {
    date: (value: Date | number) =>
      new Intl.DateTimeFormat(i18n.language, {
        year: 'numeric',
        month: 'short',
        day: 'numeric',
      }).format(value),
    
    relative: (value: Date | number) => {
      const rtf = new Intl.RelativeTimeFormat(i18n.language, { numeric: 'auto' })
      const diff = Date.now() - new Date(value).getTime()
      
      if (diff < 60_000) return rtf.format(-Math.floor(diff / 1000), 'second')
      if (diff < 3600_000) return rtf.format(-Math.floor(diff / 60_000), 'minute')
      if (diff < 86400_000) return rtf.format(-Math.floor(diff / 3600_000), 'hour')
      return rtf.format(-Math.floor(diff / 86400_000), 'day')
    },
  }
}

日期格式示例 ​

格式zh-CNen
短日期2024/01/1501/15/2024
长日期2024年1月15日January 15, 2024
时间14:302:30 PM

相对时间示例 ​

时间差zh-CNen
< 1 分钟刚刚just now
5 分钟前5 分钟前5 minutes ago
1 小时前1 小时前1 hour ago
昨天昨天yesterday

术语对照表 ​

技术术语 → 用户友好表述 ​

技术术语用户友好表述英文
Mnemonic助记词Recovery Phrase
Private Key私钥Private Key
Gas Fee网络费用Network Fee
Block Confirmation交易确认中Confirming
Address钱包地址Wallet Address
Nonce交易序号Transaction Number
UTXO未花费输出Unspent Output
Smart Contract智能合约Smart Contract

状态术语 ​

英文中文使用场景
Pending处理中交易等待确认
Confirmed已确认交易完成
Failed失败交易失败
Cancelled已取消用户取消

操作术语 ​

英文中文使用场景
Send发送转账操作
Receive收款接收资产
Swap兑换代币兑换
Stake质押参与质押
Mint铸造跨链铸造
Burn销毁跨链销毁

翻译文件结构 ​

src/i18n/locales/
├── zh-CN/
│   ├── common.json      # 通用文案
│   ├── wallet.json      # 钱包相关
│   ├── transfer.json    # 转账相关
│   ├── settings.json    # 设置相关
│   └── error.json       # 错误消息
├── en/
│   └── ...
├── zh-TW/
│   └── ...
├── ja/
│   └── ...
├── ko/
│   └── ...
└── ar/
    └── ...

示例: common.json ​

json
{
  "confirm": "确认",
  "cancel": "取消",
  "back": "返回",
  "next": "下一步",
  "done": "完成",
  "save": "保存",
  "delete": "删除",
  "edit": "编辑",
  "copy": "复制",
  "copied": "已复制",
  "loading": "加载中...",
  "retry": "重试"
}

示例: error.json ​

json
{
  "network": {
    "timeout": "网络连接超时,请重试",
    "offline": "当前处于离线状态",
    "serverError": "服务器错误,请稍后再试"
  },
  "wallet": {
    "invalidMnemonic": "助记词格式不正确",
    "invalidAddress": "地址格式不正确",
    "insufficientBalance": "余额不足"
  },
  "auth": {
    "patternIncorrect": "图案不正确",
    "biometricFailed": "生物识别验证失败"
  }
}

行为约束 ​

MUST ​

  • 使用 Intl API 进行数字/日期格式化
  • 维护统一的术语对照表
  • 翻译文件按模块组织

SHOULD ​

  • 使用相对时间显示近期时间
  • 提供术语的上下文说明
  • 保持翻译文件结构一致

MUST NOT ​

  • 在代码中硬编码数字格式
  • 混用不同的日期格式

相关文档 ​

Released under the MIT License.