阅读时间 2 分钟最后更新: 2025-12-31 12:12
语言和币种修改指南
本文档说明如何在系统中添加或修改支持的语言和币种。
语言配置
修改语言设置文件
文件位置: src/i18n/settings.ts
// 1. 修改默认语言(可选)
export const fallbackLng = 'en' // 默认语言代码
// 2. 添加新语言到支持列表
export const languages = [fallbackLng, 'zh-CN', 'ja', 'ko'] // 添加韩语示例
// 3. 更新语言选择映射
export const languagesSelectMap = {
'en': { name: 'English', short: 'EN' },
'zh-CN': { name: '中文', short: '中' },
'ja': { name: '日本語', short: '日' },
'ko': { name: '한국어', short: '한' } // 添加韩语示例
}
更新工具函数
文件位置: src/lib/utils.ts
更新币种-语言映射
在 getCurrencyLang() 函数中添加新的映射关系:
export function getCurrencyLang(currency: string): string {
const currencyLangMap: Record<string, string> = {
'usd': 'en',
'cny': 'zh-CN',
'jpy': 'ja',
'krw': 'ko', // 添加韩元对应韩语
}
return currencyLangMap[currency.toLowerCase()] || 'en'
}
更新价格格式化函数
在 formatPrice() 函数中添加新语言的 locale 映射:
export function formatPrice(price: number, currency: string, lang: string = 'en'): string {
// 添加新语言的 locale 映射
const locale = lang === 'zh-CN' ? 'zh-CN'
: lang === 'ja' ? 'ja-JP'
: lang === 'ko' ? 'ko-KR' // 添加韩语
: 'en-US'
const formatter = new Intl.NumberFormat(locale, {
style: 'currency',
currency: currency.toUpperCase(),
minimumFractionDigits: 0,
maximumFractionDigits: 2,
currencyDisplay: 'narrowSymbol',
})
return formatter.format(price / 100)
}
币种配置
更新系统设置页面
文件位置: src/app/[lang]/admin/system/settings/page.tsx
更新默认币种设置
在 defaultSettings 中修改默认币种:
const defaultSettings: SystemSettings = {
// ... 其他设置
defaultCurrency: 'usd', // 修改默认币种
}
添加币种选项
在语言设置部分添加新的币种选项:
<div>
<Label htmlFor="defaultCurrency">{t('system.defaultCurrency')}</Label>
<Select value={settings.defaultCurrency} onValueChange={(value) => handleChange('defaultCurrency', value)}>
<SelectTrigger>
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="usd">{t('system.currencyUSD')}</SelectItem>
<SelectItem value="cny">{t('system.currencyCNY')}</SelectItem>
<SelectItem value="jpy">{t('system.currencyJPY')}</SelectItem>
<SelectItem value="krw">{t('system.currencyKRW')}</SelectItem>
</SelectContent>
</Select>
</div>
更新 SEO 默认设置
在 defaultSEOSettings 中为新语言添加 SEO 默认值:
const defaultSEOSettings: SEOSettings = {
// ...
localized: {
'en': { /* ... */ },
'zh-CN': { /* ... */ },
'ja': { /* ... */ },
'ko': {
siteName: 'Hex2077 Starter',
siteDescription: '최고의 SaaS 템플릿.',
siteKeywords: 'hex2077,starter,saas,템플릿'
} // 添加新语言的 SEO 默认配置
}
}
多语言文件
创建新语言的翻译文件
为每个新语言创建完整的翻译文件目录:
public/locales/ko/
├── admin.json
├── auth.json
├── common.json
├── credits.json
├── email.json
├── home.json
├── privacy.json
├── profile.json
├── refund.json
├── subscription.json
├── terms.json
└── user.json
添加系统设置相关翻译
在 admin.json 中添加语言和币种相关的翻译键:
{
"system": {
"language": "语言",
"languageChinese": "中文",
"languageEnglish": "English",
"languageJapanese": "日本語",
"languageKorean": "한국어",
"defaultCurrency": "默认币种",
"currencyUSD": "美元 (USD)",
"currencyCNY": "人民币 (CNY)",
"currencyJPY": "日元 (JPY)",
"currencyKRW": "韩元 (KRW)"
}
}
完整示例:添加韩语和韩元支持
步骤 1: 修改 src/i18n/settings.ts
export const fallbackLng = 'en'
export const languages = [fallbackLng, 'zh-CN', 'ja', 'ko']
export const defaultNS = 'common'
export const languagesSelectMap = {
'en': { name: 'English', short: 'EN' },
'zh-CN': { name: '中文', short: '中' },
'ja': { name: '日本語', short: '日' },
'ko': { name: '한국어', short: '한' }
}
步骤 2: 修改 src/lib/utils.ts
// 更新币种-语言映射
export function getCurrencyLang(currency: string): string {
const currencyLangMap: Record<string, string> = {
'usd': 'en',
'cny': 'zh-CN',
'jpy': 'ja',
'krw': 'ko',
}
return currencyLangMap[currency.toLowerCase()] || 'en'
}
// 更新价格格式化
export function formatPrice(price: number, currency: string, lang: string = 'en'): string {
const locale = lang === 'zh-CN' ? 'zh-CN'
: lang === 'ja' ? 'ja-JP'
: lang === 'ko' ? 'ko-KR'
: 'en-US'
const formatter = new Intl.NumberFormat(locale, {
style: 'currency',
currency: currency.toUpperCase(),
minimumFractionDigits: 0,
maximumFractionDigits: 2,
currencyDisplay: 'narrowSymbol',
})
return formatter.format(price / 100)
}
步骤 3: 创建翻译文件
创建 public/locales/ko/ 目录及所有必需的 JSON 文件,并添加相应的韩语翻译。
步骤 4: 更新所有语言的 admin.json
在各语言的 admin.json 中添加:
{
"system": {
"languageKorean": "한국어",
"currencyKRW": "韩元 (KRW)"
}
}
注意事项
语言代码规范
- 使用标准的 BCP 47 语言标签
- 示例:
en(英语)、zh-CN(简体中文)、ja(日语)、ko(韩语)
币种代码规范
- 使用 ISO 4217 标准的三字母币种代码
- 示例:
USD(美元)、CNY(人民币)、JPY(日元)、KRW(韩元)
价格格式化
- 价格以分为单位存储(整数)
- 使用
Intl.NumberFormat进行本地化格式化 - 不同币种可能有不同的小数位数要求
翻译文件完整性
- 确保所有语言的翻译文件结构一致
- 新增翻译键时,需要在所有语言文件中添加
- 缺失的翻译键会回退到默认语言
测试建议
- 测试语言切换功能
- 测试币种显示格式
- 测试价格计算和显示
- 测试多语言内容的正确性
常见问题
Q: 如何修改默认语言?
A: 在 src/i18n/settings.ts 中修改 fallbackLng 的值。
Q: 如何添加不支持的币种?
A: 只要是 ISO 4217 标准的币种代码,Intl.NumberFormat 都能自动处理。只需在系统设置页面添加选项即可。
Q: 价格格式化不正确怎么办?
A: 检查 formatPrice() 函数中的 locale 映射是否正确,确保使用了正确的 locale 代码。
Q: 如何批量更新所有翻译文件?
A: 建议使用脚本或工具来管理翻译文件,确保所有语言文件的键值对保持一致。