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.