OpenClaw 国际化 (I18N) 文档
概述
OpenClaw 仪表板支持多语言国际化,当前已实现:
- 中文 (zh) - 默认语言
- 英文 (en) - 备选语言
已汉化文件清单
后端文件
| 文件路径 |
汉化内容 |
src/openclaw/dashboard/app.py |
API 响应消息、警报标题、WebSocket 消息类型 |
src/openclaw/dashboard/models.py |
字段描述(docstrings) |
前端文件
| 文件路径 |
汉化内容 |
src/openclaw/dashboard/templates/index.html |
页面标题、导航、指标标签、图表标题、表格列头、状态文本 |
src/openclaw/dashboard/templates/config.html |
页面标题、导航、配置项标签、按钮文本、状态消息 |
src/openclaw/dashboard/static/config.js |
加载/保存状态消息、控制台日志、成功/错误提示 |
国际化工具
| 文件路径 |
说明 |
src/openclaw/dashboard/i18n.py |
国际化支持类,提供双语翻译字典 |
使用国际化工具
基础用法
from openclaw.dashboard.i18n import I18n, t
# 创建实例(默认中文)
i18n = I18n()
# 获取翻译
title = i18n.t("status.agent_bankrupt") # "代理破产"
# 切换语言
i18n.set_language("en")
title = i18n.t("status.agent_bankrupt") # "Agent Bankrupt"
字符串插值
# 支持变量替换
msg = i18n.t("alert.bankruptcy_msg", agent_id="bull_001")
# 中文: "代理 bull_001 已破产!"
# 英文: "Agent bull_001 has gone bankrupt!"
使用全局快捷函数
from openclaw.dashboard.i18n import t, set_language
# 使用默认实例
text = t("metrics.system_equity") # "系统权益"
# 切换全局语言
set_language("en")
text = t("metrics.system_equity") # "System Equity"
翻译键值参考
状态消息 (status)
| 键值 |
中文 |
英文 |
status.agent_bankrupt |
代理破产 |
Agent Bankrupt |
status.large_loss_detected |
检测到重大损失 |
Large Loss Detected |
status.config_saved |
配置已保存 |
Configuration Saved |
status.loading_config |
正在加载配置... |
Loading Configuration... |
status.confirm |
已确认 |
Confirmed |
status.not_found |
未找到 |
Not Found |
status.realtime |
实时 |
Realtime |
status.disconnected |
已断开 |
Disconnected |
导航 (nav)
| 键值 |
中文 |
英文 |
nav.dashboard |
仪表盘 |
Dashboard |
nav.config |
配置 |
Configuration |
nav.overview |
总览 |
Overview |
指标 (metrics)
| 键值 |
中文 |
英文 |
metrics.system_equity |
系统权益 |
System Equity |
metrics.total_pnl |
总盈亏 |
Total P&L |
metrics.active_agents |
活跃 Agent |
Active Agents |
metrics.total_trades |
总交易数 |
Total Trades |
metrics.avg_win_rate |
平均胜率 |
Avg Win Rate |
代理状态 (agent)
| 键值 |
中文 |
英文 |
agent.status |
状态 |
Status |
agent.balance |
余额 |
Balance |
agent.win_rate |
胜率 |
Win Rate |
agent.trades |
交易数 |
Trades |
agent.thriving |
🚀 繁荣 |
🚀 Thriving |
agent.stable |
💪 稳定 |
💪 Stable |
agent.struggling |
⚠️ 困难 |
⚠️ Struggling |
agent.critical |
🔴 危急 |
🔴 Critical |
agent.bankrupt |
💀 破产 |
💀 Bankrupt |
交易 (trade)
| 键值 |
中文 |
英文 |
trade.recent_trades |
最近交易 |
Recent Trades |
trade.time |
时间 |
Time |
trade.symbol |
交易对 |
Symbol |
trade.side |
方向 |
Side |
trade.buy |
买入 |
BUY |
trade.sell |
卖出 |
SELL |
trade.pnl |
盈亏 |
P&L |
警报 (alert)
| 键值 |
中文 |
英文 |
alert.title |
警报 |
Alert |
alert.critical |
严重 |
Critical |
alert.error |
错误 |
Error |
alert.warning |
警告 |
Warning |
alert.info |
信息 |
Info |
alert.bankruptcy_title |
代理破产 |
Agent Bankrupt |
alert.bankruptcy_msg |
代理 {agent_id} 已破产! |
Agent {agent_id} has gone bankrupt! |
alert.large_loss_title |
检测到重大损失 |
Large Loss Detected |
alert.large_loss_msg |
代理 {agent_id} 遭受重大损失: ${pnl:.2f} |
Agent {agent_id} suffered large loss: ${pnl:.2f} |
配置 (config)
| 键值 |
中文 |
英文 |
config.title |
配置管理 |
Configuration Management |
config.save |
保存配置 |
Save Configuration |
config.reset |
重置 |
Reset |
config.saving |
保存中... |
Saving... |
config.initial_capital |
初始资金 |
Initial Capital |
config.cost_structure |
成本结构 |
Cost Structure |
config.thresholds |
生存阈值 |
Survival Thresholds |
config.simulation |
模拟设置 |
Simulation Settings |
config.llm_providers |
LLM 提供商 |
LLM Providers |
WebSocket 消息 (ws)
| 键值 |
中文 |
英文 |
ws.status_update |
状态更新 |
Status Update |
ws.initial_state |
初始状态 |
Initial State |
ws.agent_update |
代理更新 |
Agent Update |
ws.trade_update |
交易更新 |
Trade Update |
ws.alert |
警报 |
Alert |
添加新语言
要添加新语言(如日语),请按以下步骤操作:
1. 更新 Language 枚举
# 在 i18n.py 中的 Language 类添加
class Language(str, Enum):
CHINESE = "zh"
ENGLISH = "en"
JAPANESE = "jp" # 新增
2. 添加翻译字典
# 在 _translations 字典中添加
"jp": {
"status": {
"agent_bankrupt": "エージェント破産",
"config_saved": "設定を保存しました",
# ... 更多翻译
},
# ... 其他分类
}
3. 更新 get_available_languages 方法
def get_available_languages(self) -> Dict[str, str]:
return {
"zh": "中文",
"en": "English",
"jp": "日本語", # 新增
}
4. 添加语言切换功能(前端)
如需前端语言切换,可添加 API 端点:
@app.post("/api/language/{lang}")
async def set_language_endpoint(lang: str) -> Dict[str, str]:
"""切换仪表板语言。"""
try:
i18n.set_language(lang)
return {"status": "success", "message": f"Language set to {lang}"}
except ValueError as e:
return {"status": "error", "message": str(e)}
扩展现有翻译
添加新的翻译键值:
from openclaw.dashboard.i18n import I18n
i18n = I18n()
# 添加中文翻译
i18n.add_translation("zh", "new.category.key", "新的值")
# 添加英文翻译
i18n.add_translation("en", "new.category.key", "New Value")
# 使用新键值
text = i18n.t("new.category.key")
最佳实践
-
键名规范
- 使用小写字母和下划线
- 采用
分类.子分类.键名 的层级结构
- 例如:
status.agent_bankrupt, trade.recent_trades
-
变量插值
- 使用
{variable} 语法
- 确保所有语言版本包含相同的变量名
- 示例:
"agent {agent_id} 已破产", "Agent {agent_id} has gone bankrupt"
-
语言回退
- 如果当前语言缺少翻译,自动回退到中文
- 确保中文翻译完整作为基准
-
前端集成
- 前端可直接通过 API 获取翻译
- 考虑将语言偏好存储在本地存储或用户配置中
集成示例
FastAPI 集成
from fastapi import FastAPI
from openclaw.dashboard.i18n import I18n
app = FastAPI()
i18n = I18n()
@app.get("/api/translations")
async def get_translations(lang: str = "zh"):
"""获取指定语言的完整翻译字典。"""
i18n.set_language(lang)
return i18n.get_all_translations()
@app.get("/api/translate/{key}")
async def translate(key: str, lang: str = "zh"):
"""翻译单个键值。"""
i18n.set_language(lang)
return {"key": key, "translation": i18n.t(key)}
WebSocket 消息汉化
# app.py 中使用示例
from openclaw.dashboard.i18n import t
# 使用国际化消息
alert = AlertMessage(
alert_type=AlertType.BANKRUPTCY,
level=AlertLevel.CRITICAL,
title=t("alert.bankruptcy_title"),
message=t("alert.bankruptcy_msg", agent_id=agent.agent_id),
)
更新日志
2024-02-25
- ✅ 创建 i18n.py 国际化工具类
- ✅ 完成 index.html 汉化
- ✅ 完成 config.html 汉化
- ✅ 完成 config.js 汉化
- ✅ 完成 app.py API 消息汉化
- ✅ 创建本文档
待办事项