// ==UserScript== // @name OpenRouter 中文化增强版 // @namespace openrouter-chinese-plus // @description 中文化 OpenRouter 全站界面,并为模型价格追加人民币参考价。翻译引擎与词库基于 datou1996/openrouter-chinese (MIT);人民币价格为原创实现,设计思路参考 LynnGuo666/OpenRouter_Chinese // @version 1.3.3 // @author openrouter-chinese-plus // @license MIT // @icon https://openrouter.ai/favicon.ico // @match https://openrouter.ai/* // @noframes 页面内嵌 iframe 不注入,避免重复菜单命令与重复标注 // @run-at document-start // @grant GM_getValue // @grant GM_setValue // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @grant GM_xmlhttpRequest // @connect query1.finance.yahoo.com // @connect api.frankfurter.dev // @homepageURL https://github.com/3304711297/openrouter-chinese-plus // @supportURL https://github.com/3304711297/openrouter-chinese-plus/issues // @downloadURL https://raw.githubusercontent.com/3304711297/openrouter-chinese-plus/main/openrouter-chinese-plus.user.js // @updateURL https://raw.githubusercontent.com/3304711297/openrouter-chinese-plus/main/openrouter-chinese-plus.user.js // ==/UserScript== /** * 来源与取舍说明(Three-way merge): * * 1. 翻译引擎与全站词库 —— 取自 datou1996/openrouter-chinese (脚本头声明 MIT) * https://github.com/datou1996/openrouter-chinese * 选择理由:三者中覆盖面最广(20+ 页面类型)、迭代最活跃、排障菜单完善。 * 改动一:词库由 @require 外链改为单文件内联,消除 Tampermonkey 词库缓存 * 导致"更新后不生效"的问题(原项目 FAQ 的头号问题)。 * 改动二:本仓库通过 GitHub Actions 定时检测上游更新并自动重组, * 上游快照已完整保存在 sources/ 目录,即使上游项目消失也不影响使用与维护。 * 当前内联词库版本:v1.5.22 * * 2. 人民币价格增强 —— 本文件原创实现,仅设计思路参考 * LynnGuo666/OpenRouter_Chinese (PolyForm Noncommercial 1.0.0,未复制其任何代码) * https://github.com/LynnGuo666/OpenRouter_Chinese * 保留官方美元价,追加 ≈¥ 参考价;汇率 Yahoo Finance 优先、Frankfurter 兜底, * 缓存 30 分钟,最长回退 72 小时;支持手动汇率;/chat 与 /fusion 不启用, * SPA 路由进入后自动清除已显示的参考价标记。 * * 3. isdoge/openrouter-chinese (MIT) —— 经评估未并入: * 其页面覆盖为 datou 版子集,且无独有功能,近一个月无更新。 * https://github.com/isdoge/openrouter-chinese * * 本合并作品按 MIT 许可证发布;上游词库内容版权归原作者所有。 */ /* ==== 词库(内联自 datou1996/openrouter-chinese locals.js v1.5.22)==== */ /** * OpenRouter 汉化词库(简体中文) * * 实现方式参考 https://github.com/maboloshi/github-chinese * * 词库结构说明: * I18N.conf 全局配置(忽略规则等) * I18N['zh-CN'] 简体中文字典 * public 公共词条(所有页面通用) * home / models / model / chat / rankings / apps / docs / * settings / signin / blog / misc 按页面类型区分的词条 * * 词条格式: * static 静态词典,精确匹配(文本会先去除首尾空白、合并多余空白) * regexp 正则规则,格式为 [正则表达式, 替换文本] 的数组 * title 页面标题词条,同样分为 static 和 regexp * * 页面类型检测规则见 main.user.js 的 detectPageType() 函数。 */ 'use strict'; const I18N = { // 词库版本(与 main.user.js 的 @version 同步) version: '1.5.22', /* ============================ 全局配置 ============================ */ conf: { // 全局与页面特定忽略选择器:命中这些选择器的元素及其子树不参与翻译 ignoreSelectorPage: { '*': [ 'script', 'style', 'noscript', 'svg', 'img', 'canvas', 'video', 'audio', 'code', 'pre', 'kbd', 'samp', 'textarea', // 文本输入区域 '[contenteditable="true"]', // 可编辑内容 '[class*="font-mono"]', // 等宽字体(代码/密钥等) '[data-testid="composer-input"]', // 聊天输入框 ], chat: [ '[data-testid="playground-reasoning-panel"]', // 推理过程展示 ], docs: [ '[class*="code-block"]', '[class*="copy-code-button"]', ], }, // 仅当这些选择器内的 DOM 发生变化时忽略重新翻译(用于避免影响流式输出的内容) ignoreMutationSelectorPage: { '*': [], chat: [ '[data-testid="playground-chat-pane"]', // 聊天消息区域(AI 流式回复) ], }, // 这些页面的文本节点变化时也要进行翻译(React 原地更新文本的场景) characterDataPage: ['chat', 'model', 'docs', 'rankings', 'models', 'workspaces', 'settings', 'activity', 'logs', 'benchmarks'], }, /* ============================ 简体中文 ============================ */ 'zh-CN': { /* ---------------------------- 公共词条 ---------------------------- */ public: { static: { // 主导航 'Home': '首页', 'Models': '模型', 'Fusion': '融合', 'Chat': '聊天', 'Rankings': '排行榜', 'Apps': '应用', 'Docs': '文档', 'Discover': '发现', 'Providers': '提供商', 'Pricing': '定价', 'Enterprise': '企业版', 'Labs': '实验室', 'Search': '搜索', 'Sign Up': '注册', 'Sign up': '注册', 'Sign In': '登录', 'Sign in': '登录', 'Sign out': '退出登录', 'Skip to content': '跳转到内容', 'Skip to main content': '跳转到主要内容', 'Open navigation menu': '打开导航菜单', 'Notifications': '通知', // 登录后侧边栏(工作区导航) 'Personal': '个人', 'Default Workspace': '默认工作区', 'Overview': '概览', 'Guardrails': '护栏', 'BYOK': '自带密钥', 'Routing': '路由', 'Presets': '预设', 'Plugins': '插件', 'Observability': '可观测性', 'Classifiers': '分类器', 'Account': '账户', 'Profile': '个人资料', 'Logs': '日志', 'Management Keys': '管理密钥', 'Preferences': '偏好设置', 'Keys': '密钥', 'Workspaces': '工作区', 'Workspace': '工作区', 'Chatroom': '聊天室', 'Unknown': '未知', 'Explore': '探索', 'Spend': '花费', 'Total': '总计', 'TOTAL': '总计', // 独立标点节点(React 将句号/省略号拆为单独文本节点) '.': '。', '...': '…', 'Prompt': '提示词', 'Completion': '补全', 'Reasoning': '推理', // 模态分类标签(大写形式,出现在模型列表/排行榜页签) 'Text': '文本', 'Image': '图像', 'Embeddings': '向量嵌入', 'Audio': '音频', 'Video': '视频', 'Rerank': '重排序', 'Speech': '语音', 'Transcription': '转录', 'providers': '提供商', 'by': '来自', 'All models': '所有模型', 'Navigate': '导航', 'Select': '选择', 'FREE': '免费', 'Table settings': '表格设置', 'Columns': '列', 'Density': '密度', 'General': '常规', 'More\u2026': '更多…', 'More...': '更多…', 'Show deprecated': '显示已弃用', 'EU': '欧盟', 'mo': '月', 'from': '起', 'image': '图像', 'Artificial Analysis': '人工分析', 'Design Arena': '设计竞技场', 'new': '新', 'Token': 'Token 数', 'quantization': '量化', 'Requests': '请求数', 'requests': '请求数', 'Images': '图像', 'images': '图像', 'hours': '小时', 'Web Search': '联网搜索', 'Others': '其他', 'Weighted Avg Input Price': '加权平均输入价格', 'Weighted Avg Output Price': '加权平均输出价格', 'Duration': '时长', 'Voice': '音色', 'Seconds': '秒数', 'Size': '尺寸', 'Chars': '字符数', 'Preview': '预览', 'Supported': '已支持', 'Values': '值', 'Parameter': '参数', 'Model weights': '模型权重', 'Filter quantization': '筛选量化', 'Image Outputs': '图像输出', 'Image Inputs': '图像输入', 'Image References': '图像参考', 'Aspect Ratio': '宽高比', 'First Frame': '首帧', 'Last Frame': '尾帧', 'Audio output': '音频输出', 'Full size': '完整尺寸', 'Video + audio': '视频 + 音频', 'Video only': '仅视频', 'Transcribed Characters': '转录字符数', 'Generate an image': '生成图像', 'Use the dedicated Image API with': '使用专门的图像 API', 'Sign in to generate': '登录后生成', 'Sign in to Transcribe': '登录后转录', 'Transcribe with timestamps': '带时间戳转录', 'Transcribe with speaker labels': '带说话人标签转录', 'Summarize after transcribing': '转录后总结', 'Drop an audio file or click to browse': '拖入音频文件或点击浏览', 'Supports WAV, MP3, M4A, FLAC, OGG, WebM, AAC': '支持 WAV、MP3、M4A、FLAC、OGG、WebM、AAC', '(opens in new tab)': '(在新标签页中打开)', 'Supported Parameters': '支持的参数', 'Provider Passthrough Parameters': '提供商透传参数', 'Provider-specific keys accepted under': '接受的提供商特定键:', 'Arena Rank': '竞技场排名', 'Arena Appearances': '竞技场出场次数', 'Category Performance': '分类表现', 'Elo': 'Elo 积分', 'Overall Text to Video Arena': '整体文生视频竞技场', 'Overall Text to Speech Arena': '整体文生语音竞技场', 'Evaluation Results': '评测结果', 'Reasoning Performance': '推理性能', 'Blog Post': '博客文章', 'launch announcement': '发布公告', 'docs here': '此处文档', 'user guide': '用户指南', 'Learn more in our docs': '更多信息请参阅我们的文档', 'Learn more about image generation': '了解图像生成', 'Learn more about video generation': '了解视频生成', 'Learn more about reasoning tokens': '了解推理 Token', 'Click here to learn more about this model': '点击此处了解更多关于此模型的信息', 'Note that BYOK is required for this model. Set up here:': '注意:此模型需要使用自带密钥 (BYOK)。在此设置:', 'offline chat model': '离线聊天模型', 'online version': '在线版本', 'Read more on the': '更多信息请阅读', 'image_config API Parameter': 'image_config API 参数', 'Reasoning API parameter': '推理 API 参数', 'Throughput percentiles on OpenRouter': 'OpenRouter 上的吞吐量百分位数', 'Latency percentiles on OpenRouter': 'OpenRouter 上的延迟百分位数', 'End-to-End Latency percentiles on OpenRouter': 'OpenRouter 上的端到端延迟百分位数', 'This model is hosted by one provider. OpenRouter forwards every request to it directly — no routing decisions to make.': '此模型仅由一个提供商托管。OpenRouter 会将每个请求直接转发给它——无需做路由决策。', 'Enter to generate · Shift+Enter for a new line': '回车生成 · Shift+回车换行', 'Speech-to-text transcript characters returned by this model per day on OpenRouter.': '此模型每天在 OpenRouter 上返回的语音转文字转录字符数。', 'Total length of video generated by this model per day on OpenRouter, shown in hours.': '此模型每天在 OpenRouter 上生成的视频总时长,以小时显示。', 'Total number of API requests made to this model per day on OpenRouter.': '此模型每天在 OpenRouter 上的 API 请求总数。', 'Image inputs count visual attachments processed in prompts. Image outputs count generated images. Some requests may process or generate multiple images.': '图像输入统计提示词中处理的视觉附件数量。图像输出统计生成的图像数量。某些请求可能处理或生成多张图像。', 'Send a prompt and receive generated images as base64-encoded data.': '发送提示词,接收以 base64 编码返回的生成图像。', 'OpenRouter supports reasoning-enabled models that can show their step-by-step thinking process. Use the': 'OpenRouter 支持可显示逐步思考过程的推理模型。在请求中使用', 'parameter in your request to enable reasoning, and access the': '参数启用推理,并通过', 'array in the response to see the model\'s internal reasoning before the final answer. When continuing a conversation, preserve the complete': '数组查看最终回答前的模型内部推理。继续对话时,请保留完整的', 'when passing messages back to the model so it can continue reasoning from where it left off.': '消息传回模型,以便它可以从上次停下的地方继续推理。', 'Submits a video generation request and returns a polling URL to check status': '提交视频生成请求,并返回用于查询状态的轮询 URL', 'Submits an image generation request. Returns base64-encoded images or streams partial results via SSE.': '提交图像生成请求。返回 base64 编码的图像,或通过 SSE 流式返回部分结果。', 'Submits a rerank request to the rerank router': '向重排序路由器提交重排序请求', 'Submits an embedding request to the embeddings router': '向嵌入路由器提交嵌入请求', 'Transcribes audio into text. Accepts base64-encoded audio input and returns the transcribed text.': '将音频转录为文本。接受 base64 编码的音频输入,并返回转录文本。', 'Synthesizes audio from the input text. Returns a raw audio bytestream in the requested format (e.g. mp3, pcm, wav).': '根据输入文本合成音频。以请求的格式(如 mp3、pcm、wav)返回原始音频字节流。', 'OpenRouter provides a speech-to-text API that transcribes audio into text. Send base64-encoded audio with a model, and receive the transcribed text in JSON.': 'OpenRouter 提供将音频转录为文本的语音转文字 API。将 base64 编码的音频与模型一起发送,即可在 JSON 中收到转录文本。', 'The generation ID is returned in the': '生成 ID 会在', 'response header for tracking.': '响应头中返回,用于跟踪。', 'OpenRouter provides a text-to-speech API that converts text into natural-sounding audio. Send text and a voice selection, and receive raw audio bytes in your chosen format.': 'OpenRouter 提供将文本转换为自然语音的文本转语音 API。发送文本和音色选择,即可收到所选格式的原始音频字节。', 'The response is a raw audio stream (not JSON). The generation ID is returned in the': '响应是原始音频流(非 JSON)。生成 ID 会在', 'OpenRouter provides a rerank API that reorders documents by relevance to a query. Pass a query and a list of documents, and the model returns them ranked by relevance score.': 'OpenRouter 提供按与查询的相关性对文档重新排序的重排序 API。传入查询和文档列表,模型会按相关性得分返回排序结果。', 'OpenRouter provides an OpenAI-compatible embeddings API that you can call directly, or using the OpenAI SDK.': 'OpenRouter 提供兼容 OpenAI 的嵌入 API,您可以直接调用,或使用 OpenAI SDK。', 'This setting aims to control the repetition of tokens based on how often they appear in the input.': '此设置旨在根据 Token 在输入中出现的频率来控制重复。', 'Adjusts how often the model repeats specific tokens already used in the input.': '调整模型重复输入中已使用过的特定 Token 的频率。', 'Helps to reduce the repetition of tokens from the input.': '有助于减少输入中 Token 的重复。', 'Represents the minimum probability for a token to be considered, relative to the probability of the most likely token.': '表示 Token 被考虑的最低概率,相对于最可能 Token 的概率。', 'Accepts a JSON object that maps tokens (specified by their token ID in the tokenizer) to an associated bias value from -100 to 100.': '接受一个 JSON 对象,将 Token(由其分词器中的 Token ID 指定)映射到 -100 到 100 之间的偏置值。', 'Whether to return log probabilities of the output tokens or not.': '是否返回输出 Token 的对数概率。', 'An integer between 0 and 20 specifying the number of most likely tokens to return at each token position, each with an associated log probability.': '一个 0 到 20 之间的整数,指定在每个 Token 位置返回的最可能 Token 数量,每个都带有相应的对数概率。', 'Configures native web search options for models and providers that support web-connected answers.': '为支持联网回答的模型和提供商配置原生网络搜索选项。', 'If specified, the inferencing will sample deterministically, such that repeated requests with the same seed and parameters should return the same result.': '如果指定,推理将确定性采样,使用相同种子和参数的重复请求应返回相同结果。', // 视频竞技场分类 '3D animation': '3D 动画', 'Abstract': '抽象', 'Action': '动作', 'Animals': '动物', 'Buildings': '建筑', 'Cartoon and anime': '卡通与动漫', 'Fantasy': '奇幻', 'Fashion': '时尚', 'Food': '食物', 'Indoor': '室内', 'Long prompt': '长提示词', 'Moving camera': '移动镜头', 'Nature': '自然', 'Outdoor': '户外', 'People': '人物', 'Photorealistic': '写实', 'Physics': '物理', 'Sci Fi': '科幻', 'Screens': '屏幕', 'Short prompt': '短提示词', 'Specific lighting': '特定光照', 'Specific location or era': '特定地点或时代', 'Sports': '运动', 'Technology': '科技', 'Transport': '交通', 'Water': '水', 'Weather and effects': '天气与特效', // 退出登录(头像菜单) 'Sign Out': '退出登录', 'Log Out': '退出登录', 'Logout': '退出登录', 'Log out': '退出登录', // 通用界面元素 'View more': '查看更多', 'View more →': '查看更多 →', 'Model Filters': '模型筛选', 'Quick Start': '快速开始', 'Get your API key': '获取您的 API 密钥', 'Search models...': '搜索模型…', 'Search models…': '搜索模型…', 'Tokens processed in the last 7 days': '过去 7 天处理的 Token 数', 'This Week': '本周', 'This Month': '本月', 'This week': '本周', 'Top weekly': '本周热门', 'Top monthly': '本月热门', 'Top all time': '历史热门', 'Price (low to high)': '价格(从低到高)', 'Price (high to low)': '价格(从高到低)', 'Recent': '最近更新', 'Add attachment': '添加附件', 'Attach files': '附加文件', 'Limit: 8 attachments per message. Actual limit varies based on model and provider.': '限制:每条消息最多 8 个附件。实际限制因模型和提供商而异。', 'Frequently asked questions': '常见问题', 'Previous slide': '上一张', 'Next slide': '下一张', 'Sign in to try this model': '登录后试用此模型', 'Get Code': '获取代码', 'Raw': '原始', 'Quality': '质量', 'Budget': '预算', 'Fast': '快速', 'Custom': '自定义', 'Runs': '运行记录', 'beta': '测试版', 'Today': '今天', 'More models from': '更多模型来自', 'Parameters': '参数', // 页脚 'Product': '产品', 'Company': '公司', 'Developer': '开发者', 'Connect': '社区', 'About': '关于', 'Blog': '博客', 'Careers': '招聘', 'Hiring': '正在招聘', 'Privacy': '隐私', 'Terms of Service': '服务条款', 'Support': '支持', 'Works With OR': '与 OpenRouter 合作', 'Data': '数据', 'Documentation': '文档', 'API Reference': 'API 参考', 'Developer Platform': '开发者平台', 'Status': '状态', 'Dashboard': '仪表盘', // 通用操作 'Cancel': '取消', 'Close': '关闭', 'Confirm': '确认', 'OK': '确定', 'Continue': '继续', 'Done': '完成', 'Save': '保存', 'Save changes': '保存更改', 'Saved!': '已保存!', 'Submit': '提交', 'Apply': '应用', 'Update': '更新', 'Create': '创建', 'Add': '添加', 'Edit': '编辑', 'Delete': '删除', 'Remove': '移除', 'Rename': '重命名', 'Copy': '复制', 'Copied': '已复制', 'Copy code': '复制代码', 'Share': '分享', 'Download': '下载', 'Upload': '上传', 'Import': '导入', 'Export': '导出', 'Refresh': '刷新', 'Retry': '重试', 'Try again': '重试', 'Back': '返回', 'Previous': '上一页', 'Next': '下一页', 'View all': '查看全部', 'View': '查看', 'Open': '打开', 'Show more': '显示更多', 'Show less': '收起', 'Show all': '显示全部', 'Learn more': '了解更多', 'Read more': '阅读更多', 'Browse all': '浏览全部', 'Browse Models': '浏览模型', 'Go Home': '返回首页', 'New': '新', 'Reset': '重置', 'Clear': '清空', 'Enable': '启用', 'Disable': '禁用', 'Enabled': '已启用', 'Disabled': '已禁用', 'Loading...': '加载中…', 'Loading': '加载中', 'Error': '错误', 'Failed': '失败', 'Success': '成功', 'Something went wrong': '出现问题', 'Not Found': '未找到', 'Page not found': '页面未找到', '404: Not Found': '404: 未找到', 'Yes': '是', 'No': '否', // 通用表单 'Email': '邮箱', 'Email address': '邮箱地址', 'Password': '密码', 'Name': '名称', 'Date': '日期', 'Status': '状态', 'Type': '类型', 'Description': '描述', 'Amount': '金额', 'Actions': '操作', 'Search...': '搜索…', 'All': '全部', 'None': '无', 'Optional': '可选', 'Required': '必填', 'Filter': '筛选', 'Filters': '筛选条件', 'Reset Filters': '重置筛选', 'Compare': '对比', 'List': '列表', 'Table': '表格', 'Newest': '最新', 'Sort': '排序', 'Sort by': '排序方式', // 模型通用 'Model': '模型', 'Models': '模型', 'model': '模型', 'models': '模型', 'Provider': '提供商', 'Context': '上下文', 'Context length': '上下文长度', 'Input': '输入', 'Output': '输出', 'Price': '价格', 'Pricing': '定价', 'Latency': '延迟', 'Throughput': '吞吐量', 'Benchmarks': '基准测试', 'Tokens': 'Token 数', 'tokens': 'Token', 'Tokens used': 'Token 用量', 'Max output': '最大输出', 'Max tokens': '最大 Token 数', 'System prompt': '系统提示词', 'Tool Calling': '工具调用', 'Tool Calls': '工具调用', 'Tool calling': '工具调用', 'Structured Outputs': '结构化输出', 'Structured outputs': '结构化输出', 'JSON mode': 'JSON 模式', 'Architecture': '架构', 'License': '许可证', 'Open source': '开源', 'Quantization': '量化', 'Creator': '创建者', 'Params': '参数量', 'Release date': '发布日期', 'Released': '发布时间', 'Endpoint': '端点', 'API Key': 'API 密钥', 'API Keys': 'API 密钥', 'API key': 'API 密钥', 'Get API Key': '获取 API 密钥', 'Modalities': '模态', 'Input Modalities': '输入模态', 'Free': '免费', 'Beta': '测试版', 'Experimental': '实验性', 'Deprecated': '已弃用', 'Featured': '精选', 'Popular': '热门', 'Trending': '趋势', 'Weekly Trend': '周趋势', 'New chat': '新聊天', 'Untitled': '未命名', 'Select a model': '选择模型', 'Choose a model': '选择模型', 'Send': '发送', 'Stop': '停止', 'Regenerate': '重新生成', 'Reasoning': '推理', 'Assistant': '助手', // 设置/账户通用 'Settings': '设置', 'Account': '账户', 'Profile': '个人资料', 'Usage': '用量', 'Credits': '额度', 'Balance': '余额', 'Add credits': '添加额度', 'Buy credits': '购买额度', 'Keys': '密钥', 'Limits': '限制', 'Billing': '账单', 'Organization': '组织', 'Members': '成员', 'Activity': '活动记录', 'Security': '安全', 'Preferences': '偏好设置', 'Language': '语言', 'Theme': '主题', 'Light': '浅色', 'Dark': '深色', 'System': '跟随系统', 'Monthly': '每月', 'Daily': '每日', 'Yearly': '每年', 'Plan': '套餐', 'Pro': '专业版', 'Team': '团队版', 'Pay as you go': '按量付费', // 账户验证弹窗 'Verify your email': '验证您的邮箱', 'We could not find a primary email address on your account. Please contact support.': '我们无法在您的账户中找到主邮箱地址。请联系支持。', 'Send code': '发送验证码', 'Confirmation required': '需要确认', 'Please confirm the following to continue:': '请确认以下内容以继续:', 'You can review this anytime in': '您可以随时在', 'settings': '设置', 'Confirmed': '已确认', // 额度不足弹窗 'Insufficient credits': '额度不足', 'Add credits to continue using paid models.': '添加额度以继续使用付费模型。', 'Continue with free models': '继续使用免费模型', 'or': '或', // 设置页通用 'Create': '创建', 'Manage': '管理', 'User': '用户', 'Organization': '组织', 'New Key': '新建密钥', 'Create API Key': '创建 API 密钥', 'Expires': '过期时间', 'Expiration': '有效期', 'Last Used': '最后使用', 'No expiration': '永不过期', 'Never expires': '永不过期', 'Key usage': '密钥用量', 'Key limit': '密钥上限', 'Credit limit (optional)': '额度上限(可选)', 'Reset limit every...': '重置上限周期…', 'No guardrails': '无护栏', 'unlimited': '无限制', 'N/A': '不适用', 'Active': '生效中', 'Disabled': '已禁用', 'Hint': '提示', 'Name': '名称', 'Created': '创建时间', 'No prior data': '暂无数据', 'Active keys': '生效中的密钥', 'Disabled / expired': '已停用 / 已过期', 'Last created': '最近创建', 'Date Format': '日期格式', 'How dates appear in logs and activity tables.': '日志和活动记录表格中日期的显示方式。', 'Default Preset': '默认预设', 'Default preset for new messages in the chatroom.': '聊天室中新消息的默认预设。', 'Default': '默认', 'None': '无', 'Dismiss': '知道了', 'Show All': '显示全部', 'Show more': '显示更多', 'Less': '更少', 'More': '更多', 'Total available': '可用总额', 'Pay-as-you-go balance': '按量付费余额', 'Buy Credits': '购买额度', 'Add Credits': '添加额度', 'View Usage': '查看用量', 'View Activity': '查看活动记录', 'Redeem Promo Code': '兑换优惠码', 'Auto Top-Up': '自动充值', 'Auto Top Up': '自动充值', 'Never': '永不过期', 'runs': '次运行', 'Total spend': '总花费', 'Use crypto': '使用加密货币', 'Recent Transactions': '最近交易', 'History': '历史记录', 'Need enterprise billing options?': '需要企业账单选项?', 'Contact sales': '联系销售', 'Receipt': '收据', 'Refund': '退款', 'Get invoice': '获取发票', 'transaction': '交易', 'Enable auto top up': '启用自动充值', 'Payment Methods': '支付方式', 'Add Payment Method': '添加支付方式', 'Selected Payment Methods': '已选支付方式', 'Primary': '主要', 'When credits are below:': '当额度低于:', 'Purchase this amount:': '购买金额:', 'Automatically purchase credits when your balance is below a certain threshold. You can select multiple payment methods that will be tried in order if payment fails.': '当余额低于某个阈值时自动购买额度。您可以选择多个支付方式,如果支付失败将按顺序尝试。', 'Select up to 3 payment methods. The primary will be tried first, then backups in order if payment fails.': '最多选择 3 个支付方式。优先使用主支付方式,如果支付失败将按顺序尝试备用方式。', 'Create and manage your API keys.': '创建和管理您的 API 密钥。', 'Enable analytics cookies': '启用分析 Cookie', 'Allow analytics cookies to help us improve the user experience and site performance.': '允许使用分析 Cookie 帮助我们改进用户体验和网站性能。', 'Low Balance Alerts': '低余额提醒', 'Emails sent to': '邮件发送至', 'Chat Completion Notifications': '聊天完成通知', 'Browser notifications when chat responses complete (only when tab is not focused)': '聊天回复完成时的浏览器通知(仅在标签页未聚焦时)', 'Attestations': '声明', '18+ age confirmation': '18 岁以上确认', 'I confirm that I am 18 years of age or older.': '我确认我已年满 18 岁。', 'Your chat history in the': '您在', 'is always stored locally on your device.': '中的聊天历史始终存储在您的设备本地。', 'Manage your login credentials, security settings, or delete your account.': '管理您的登录凭据、安全设置或删除您的账户。', 'Create and manage your organization.': '创建和管理您的组织。', 'Account Type': '账户类型', 'Your current account tier.': '您当前的账户层级。', 'Self Serve': '自助服务', }, regexp: [ // 统计数字,如 "400+ Models" -> "400+ 模型"、"10M+ Users" -> "10M+ 用户" [/^(\d[\d.,]*\+?)\s*(models|users|providers|tokens)$/i, (match, num, unit) => { const unitMap = { models: '模型', users: '用户', providers: '提供商', tokens: 'Token' }; return num + ' ' + (unitMap[unit.toLowerCase()] || unit); }], // 带数量的标签,如 "2 keys"、"0 rooms"、"1 guardrail"、"1 management key" [/^(\d+)\s*keys?$/, '$1 个密钥'], [/^(\d+)\s*rooms?$/, '$1 个房间'], [/^(\d+)\s*guardrails?$/, '$1 个护栏'], [/^(\d+)\s*management keys?$/, '$1 个管理密钥'], [/^(\d+)\s*models?$/, '$1 个模型'], [/^(\d+)\s*workspaces?$/, '$1 个工作区'], // "Show 57 more" 等 [/^Show (\d+) more$/, '显示另外 $1 个'], [/^(\d+) featured models matched$/, '$1 个精选模型匹配'], // 邮箱验证弹窗,如 "Verify datou_1996@163.com to continue." [/^Verify (\S+@\S+) to continue\.$/, '验证 $1 以继续。'], // 时间窗口按钮 [/^1d$/, '1 天'], [/^1w$/, '1 周'], [/^1mo$/, '1 个月'], [/^3mo$/, '3 个月'], [/^6mo$/, '6 个月'], [/^1y$/, '1 年'], // 天数,如 "3 days" [/^(\d+)\s*days?$/, '$1 天'], // 日期,如 "Aug 11, 2026" -> "2026年8月11日" [/^([A-Z][a-z]{2}) (\d{1,2}), (\d{4})$/, (m, mon, day, year) => year + '年' + ({ Jan: 1, Feb: 2, Mar: 3, Apr: 4, May: 5, Jun: 6, Jul: 7, Aug: 8, Sep: 9, Oct: 10, Nov: 11, Dec: 12 }[mon] || mon) + '月' + day + '日'], // 完整月份日期,如 "September 30, 2025" [/^([A-Z][a-z]+) (\d{1,2}), (\d{4})$/, (m, mon, day, year) => year + '年' + ({ January: 1, February: 2, March: 3, April: 4, May: 5, June: 6, July: 7, August: 8, September: 9, October: 10, November: 11, December: 12 }[mon] || mon) + '月' + day + '日'], // 带时间的日期,如 "Aug 11, 2026, 11:01 AM" [/^([A-Z][a-z]{2}) (\d{1,2}), (\d{4}), (\d{1,2}:\d{2} [AP]M)$/, (m, mon, day, year, time) => year + '年' + ({ Jan: 1, Feb: 2, Mar: 3, Apr: 4, May: 5, Jun: 6, Jul: 7, Aug: 8, Sep: 9, Oct: 10, Nov: 11, Dec: 12 }[mon] || mon) + '月' + day + '日 ' + time], // 相对时间,如 "2d ago"、"1mo ago"、"3h ago"、"y ago" [/^(\d+(?:\.\d+)?)\s*(mo|y|w|d|h|m|s)\s*ago$/, (m, num, unit) => num + ({ mo: ' 个月前', y: ' 年前', w: ' 周前', d: ' 天前', h: ' 小时前', m: ' 分钟前', s: ' 秒前' }[unit])], // 完整单词相对时间,如 "2 months ago" [/^(\d+(?:\.\d+)?)\s*(years?|months?|weeks?|days?|hours?|minutes?|seconds?)\s*ago$/, (m, num, unit) => num + ({ years: ' 年前', year: ' 年前', months: ' 个月前', month: ' 个月前', weeks: ' 周前', week: ' 周前', days: ' 天前', day: ' 天前', hours: ' 小时前', hour: ' 小时前', minutes: ' 分钟前', minute: ' 分钟前', seconds: ' 秒前', second: ' 秒前' }[unit])], // 时长单位,如 "6 hours"、"45 minutes" [/^(\d+(?:\.\d+)?)\s*(years?|months?|weeks?|days?|hours?|minutes?|seconds?|chars?)$/, (m, num, unit) => num + ' ' + ({ years: '年', year: '年', months: '个月', month: '个月', weeks: '周', week: '周', days: '天', day: '天', hours: '小时', hour: '小时', minutes: '分钟', minute: '分钟', seconds: '秒', second: '秒', chars: '字符', char: '字符' }[unit])], // 排名提示,如 "Ranked at #22 in Science category" [/^Ranked at #(\d+) in (.+) category$/, '在$2类别中排名第 $1 位'], // 数字+单位,如 "5M UTF-8 bytes"、"1.2B characters"、"15M tokens" [/^(\d+(?:\.\d+)?[KMB]?)\s*(UTF-8 bytes|characters|chars|bytes|tokens|words)$/, (m, num, unit) => num + ' ' + ({ 'UTF-8 bytes': 'UTF-8 字节', characters: '字符', chars: '字符', bytes: '字节', tokens: 'Token', words: '词' }[unit])], // 数字被拆为独立节点时的单位片段,如 "5M" + " UTF-8 bytes"、"15" + "M tokens" [/^([KM]?)\s*(UTF-8 bytes|characters|chars|bytes|tokens|words)$/, (m, prefix, unit) => (prefix ? prefix + ' ' : '') + ({ 'UTF-8 bytes': 'UTF-8 字节', characters: '字符', chars: '字符', bytes: '字节', tokens: 'Token', words: '词' }[unit])], // 年龄/时长范围,如 "0-3 mo"、"6-12 y"、"12+ mo" [/^(\d+)-(\d+)\s*(mo|y|w|d|h|m|s)$/, (m, a, b, unit) => a + '-' + b + ' ' + ({ mo: '个月', y: '年', w: '周', d: '天', h: '小时', m: '分钟', s: '秒' }[unit])], [/^(\d+)\+\s*(mo|y|w|d|h|m|s)$/, (m, num, unit) => num + ' ' + ({ mo: '个月以上', y: '年以上', w: '周以上', d: '天以上', h: '小时以上', m: '分钟以上', s: '秒以上' }[unit])], [/^(\d+(?:\.\d+)?)\s*(mo|y|w|d|h|m|s)\+?$/, (m, num, unit) => num + ' ' + ({ mo: '个月', y: '年', w: '周', d: '天', h: '小时', m: '分钟', s: '秒' }[unit])], // 价格单位,如 "$0.10/hour"、"$4/M tokens"、"$0.04/image"、"0.02/M characters"、"$15/M UTF-8 bytes" [/^(\$?[\d.]+)\/M\s*(tokens|characters|chars|UTF-8 bytes|bytes)$/, (m, price, unit) => price + '/百万 ' + ({ tokens: 'Token', characters: '字符', chars: '字符', 'UTF-8 bytes': 'UTF-8 字节', bytes: '字节' }[unit])], // 带空格或小数变体,如 "$15 /M UTF-8 bytes"、"$15.00/M UTF-8 bytes" [/^(\$?[\d.]+)\s*\/\s*M\s*(tokens|characters|chars|UTF-8 bytes|bytes)$/, (m, price, unit) => price + '/百万 ' + ({ tokens: 'Token', characters: '字符', chars: '字符', 'UTF-8 bytes': 'UTF-8 字节', bytes: '字节' }[unit])], [/^(\$?[\d.]+)\/(hour|minute|second|image|song|megapixel|character|char|token|tokens|msec|ms|search|query|request|turn|page|day|week|month|video|audio|step)$/, (m, price, unit) => price + '/' + ({ hour: '小时', minute: '分钟', second: '秒', image: '图像', song: '首', megapixel: '百万像素', character: '字符', char: '字符', token: 'Token', tokens: 'Token', msec: '毫秒', ms: '毫秒', search: '次搜索', query: '次查询', request: '次请求', turn: '轮', page: '页', day: '天', week: '周', month: '月', video: '个视频', audio: '个音频', step: '步' }[unit])], // "from $0.04/image" [/^from \$([\d.]+)\/(image|second|minute|hour|song|megapixel)$/, (m, price, unit) => '起价 $' + price + '/' + ({ image: '图像', second: '秒', minute: '分钟', hour: '小时', song: '首', megapixel: '百万像素' }[unit])], // "from $0.10"(无单位后缀) [/^from \$([\d.]+)$/, (m, price) => '起价 $' + price], // 折扣徽章,如 "90% off"(数字与 "% off" 可能是独立节点) [/^(\d+)% off$/, '$1% 折扣'], // 容错变体:空格位置任意,如 "60 %off"、"60% off" [/^(\d+)\s*%\s*off$/, '$1% 折扣'], // 价格,如 "$0.95/M input"、"$4/M output"(与 "tokens" 拆分显示的情况) [/^\$[\d.]+\/M\s*(input|output)$/, (match, p) => match.replace(/(input|output)$/, p === 'input' ? '输入' : '输出')], // 上下文长度,如 "262K context"、"1M context" [/^([\d.]+[KM]?)\s*context$/, '$1 上下文'], // 模型分类标签,如 "Programming (#39)" [/^(Programming|Finance|Health|Science|Technology|General|Vision|Coding|Reasoning|Creative|Writing|Math|Language|Translation|Agentic|Audio|Image|Video|Knowledge|Roleplay|Travel|Legal|Medical|Data|Business|Trivia|Academia|SEO|Education|Gaming|Music|Social|News|Research|Sports|Marketing|Design|Engineering|Science Fiction|Entertainment|Productivity|Communication) \(#(\d+)\)$/, (match, cat, num) => ({ Programming: '编程', Finance: '金融', Health: '健康', Science: '科学', Technology: '科技', General: '通用', Vision: '视觉', Coding: '编码', Reasoning: '推理', Creative: '创意', Writing: '写作', Math: '数学', Language: '语言', Translation: '翻译', Agentic: '智能体', Audio: '音频', Image: '图像', Video: '视频', Knowledge: '知识', Roleplay: '角色扮演', Travel: '旅行', Legal: '法律', Medical: '医疗', Data: '数据', Business: '商业', Trivia: '常识问答', Academia: '学术', SEO: 'SEO', Education: '教育', Gaming: '游戏', Music: '音乐', Social: '社交', News: '新闻', Research: '研究', Sports: '体育', Marketing: '营销', Design: '设计', Engineering: '工程', 'Science Fiction': '科幻', Entertainment: '娱乐', Productivity: '效率', Communication: '沟通' }[cat] || cat) + ' (#' + num + ')'], // 额外分类数,如 "+7 categories" [/^\+(\d+) categories$/, '另外 $1 个类别'], // 提供商数量,如 "1 provider" [/^(\d+) providers?$/, '$1 个提供商'], // 分页,如 "1–20 of 60" [/^(\d+)[–-](\d+) of (\d+)$/, '$1–$2 / 共 $3 条'], // 运行次数,如 "0 runs" [/^(\d+)\s*runs?$/, '$1 次运行'], // 已选择数量,如 "3 selected"(或拆分形态 "3" + " selected") [/^(\d+)\s*selected$/, '$1 个已选择'], [/^selected$/, '个已选择'], [/^ selected$/, '个已选择'], // 示例数,如 "1 example" [/^(\d+)\s*examples?$/, '$1 个示例'], // 提供商数量,如 "+21 more providers" [/^\+(\d+) more providers$/, '另外 $1 个提供商'], // 竞技场排名,如 "Top 65%" [/^Top (\d+)%$/, '前 $1%'], // 竞技场对决数,如 "7274 matches" [/^([\d,]+)\s*matches$/, '$1 场对决'], // 请求量,如 "1.67M requests" [/^([\d.,]+[KMBT]?)\s*requests$/, '$1 次请求'], // 竞技场对战,如 "22,862 tournaments" [/^([\d,]+)\s*tournaments$/, '$1 场对战'], // 胜率,如 "51.0% Win" [/^([\d.]+)%\s*Win$/, '$1% 胜率'], // 平均时长,如 "66.5s Avg" [/^([\d.]+)s\s*Avg$/, '$1s 平均'], ], }, /* ------------------------------ 首页 ------------------------------ */ home: { static: { 'The Unified Interface For LLMs': '大语言模型统一接口', // hero 副标题被内联元素拆分为多个文本节点 'Better': '更优', 'prices': '价格', ', better': ',更优', 'uptime': '可用性', ', no subscriptions.': ',无需订阅。', // 统计数字碎片("400+ active models on 70+ providers" 的拆分节点) 'active models on': '个活跃模型,分布在', '250k+ apps using OpenRouter with 4.2M+ users globally': '全球 25 万+ 应用通过 OpenRouter 服务 420 万+ 用户', 'Credits can be used with any model or provider.': '额度可用于任何模型或提供商。', 'Discover Models': '发现模型', 'Monthly Tokens': '月度 Token 数', 'Global Users': '全球用户', 'One API for Any Model': '一个 API 接入所有模型', 'Access all major models through a single, unified interface. OpenAI SDK works out of the box.': '通过单一统一接口访问所有主流模型。OpenAI SDK 开箱即用。', 'Higher Availability': '更高的可用性', 'Reliable AI models via our distributed infrastructure. Fall back to other providers when one goes down.': '通过我们的分布式基础设施提供可靠的 AI 模型。当某个提供商宕机时,自动切换到其他提供商。', 'Price and Performance': '价格与性能', 'Keep costs in check without sacrificing speed. OpenRouter runs at the edge for minimal latency between your users and their inference.': '在不牺牲速度的前提下控制成本。OpenRouter 在边缘运行,最大限度缩短您的用户与推理之间的延迟。', 'Custom Data Policies': '自定义数据策略', 'Protect your organization with fine grained data policies. Ensure prompts only go to the models and providers you trust.': '通过细粒度的数据策略保护您的组织。确保提示词只发送给您信任的模型和提供商。', 'View docs': '查看文档', 'Featured Models': '精选模型', 'Featured Agents': '精选智能体', 'Featured Apps': '精选应用', 'The easiest way to go from idea to app': '从创意到应用的最简单方式', 'An autonomous agent that grows with you': '与您共同成长的自主智能体', 'Everything you need for agentic development': '智能体开发所需的一切', 'Signup': '注册', 'Create an account to get started. You can set up an org for your team later.': '创建账户开始使用。您之后可以为团队设置组织。', 'Create an account': '创建账户', 'Create an API key and start making requests.': '创建 API 密钥并开始发起请求。', 'Create an API key and start making requests.': '创建 API 密钥并开始发起请求。', 'Fully OpenAI compatible': '完全兼容 OpenAI', 'Recent Blog Posts': '最新博客文章', 'Enter your prompt': '输入您的提示词', }, regexp: [], }, /* ---------------------------- 模型列表页 ---------------------------- */ models: { static: { 'Discover Models': '发现模型', 'Compare AI Models': '对比 AI 模型', 'File': '文件', 'Prompt pricing': '提示词定价', 'Output pricing': '输出定价', 'Series': '系列', 'Categories': '类别', 'Distillable': '可蒸馏', 'Zero Data Retention': '零数据保留', 'In-Region Routing': '区域内路由', 'Model age': '模型年龄', 'Inactive Models': '非活跃模型', 'Model Authors': '模型作者', 'context': '上下文', 'input': '输入', 'output': '输出', 'Features': '功能', 'Filter by': '按条件筛选', 'Showing': '显示', 'of': '共', 'results': '条结果', 'No models found': '未找到模型', 'Try adjusting your filters': '尝试调整您的筛选条件', // 表格设置:行密度 'Compact': '紧凑', 'Regular': '常规', 'Expanded': '展开', // "+7 categories" 被拆分为 "+" + "7" + " categories" 三个文本节点 'categories': '个类别', // 排序选项 'Most Popular': '最受欢迎', 'Top Weekly': '本周热门', 'Pricing: Low to High': '价格:从低到高', 'Pricing: High to Low': '价格:从高到低', 'Context: High to Low': '上下文:从高到低', 'Throughput: High to Low': '吞吐量:从高到低', 'Latency: Low to High': '延迟:从低到高', 'Intelligence: High to Low': '智能指数:从高到低', 'Coding: High to Low': '编码指数:从高到低', 'Agentic: High to Low': '智能体指数:从高到低', 'Design Arena ELO: High to Low': '设计竞技场 ELO:从高到低', // 基准测试选择器 'Intelligence Index': '智能指数', 'Coding Index': '编码指数', 'Agentic Index': '智能体指数', 'Artificial Analysis Intelligence Index score (0-100)': '人工分析 智能指数得分 (0-100)', 'Artificial Analysis Coding Index score (0-100)': '人工分析 编码指数得分 (0-100)', 'Artificial Analysis Agentic Index score (0-100)': '人工分析 智能体指数得分 (0-100)', // 拆分片段(提示词中品牌名与指标名分离) 'Intelligence Index score (0-100)': '智能指数得分 (0-100)', 'Coding Index score (0-100)': '编码指数得分 (0-100)', 'Agentic Index score (0-100)': '智能体指数得分 (0-100)', 'DA ELO': '设计竞技场 ELO', // 通用片段:提示词为 "Design Arena" + 分类 + 该片段 的三段结构 'ELO from head-to-head arena battles': 'ELO(来自正面竞技场对战)', 'Intelligence': '智能', 'Coding': '编码', 'Agentic': '智能体', 'Design Arena Code Categories ELO from head-to-head arena battles': '设计竞技场 代码分类 ELO(来自正面竞技场对战)', 'Design Arena UI Component ELO from head-to-head arena battles': '设计竞技场 UI 组件 ELO(来自正面竞技场对战)', 'Design Arena Game Development ELO from head-to-head arena battles': '设计竞技场 游戏开发 ELO(来自正面竞技场对战)', 'Design Arena Data Visualization ELO from head-to-head arena battles': '设计竞技场 数据可视化 ELO(来自正面竞技场对战)', 'Design Arena 3D ELO from head-to-head arena battles': '设计竞技场 3D ELO(来自正面竞技场对战)', 'Design Arena Image ELO from head-to-head arena battles': '设计竞技场 图像 ELO(来自正面竞技场对战)', 'Design Arena Video ELO from head-to-head arena battles': '设计竞技场 视频 ELO(来自正面竞技场对战)', 'Design Arena SVG ELO from head-to-head arena battles': '设计竞技场 SVG ELO(来自正面竞技场对战)', // 无品牌前缀的拆分片段 'Code Categories ELO from head-to-head arena battles': '代码分类 ELO(来自正面竞技场对战)', 'UI Component ELO from head-to-head arena battles': 'UI 组件 ELO(来自正面竞技场对战)', 'Game Development ELO from head-to-head arena battles': '游戏开发 ELO(来自正面竞技场对战)', 'Data Visualization ELO from head-to-head arena battles': '数据可视化 ELO(来自正面竞技场对战)', '3D ELO from head-to-head arena battles': '3D ELO(来自正面竞技场对战)', 'Image ELO from head-to-head arena battles': '图像 ELO(来自正面竞技场对战)', 'Video ELO from head-to-head arena battles': '视频 ELO(来自正面竞技场对战)', 'SVG ELO from head-to-head arena battles': 'SVG ELO(来自正面竞技场对战)', 'UTF-8 bytes': 'UTF-8 字节', 'Code Categories': '代码分类', 'UI Component': 'UI 组件', 'Game Development': '游戏开发', 'Data Visualization': '数据可视化', // 筛选面板 'Filters for endpoints where processing is done entirely in a single region.': '筛选处理完全在单一区域内完成的端点。', 'Tool calling success rate (percentage of requests that complete with a tool_calls finish reason)': '工具调用成功率(以 tool_calls 结束原因完成的请求百分比)', 'Programming': '编程', 'Roleplay': '角色扮演', 'Marketing': '营销', 'Science': '科学', 'Translation': '翻译', 'Legal': '法律', 'Finance': '金融', 'Health': '健康', 'Trivia': '常识问答', 'Academia': '学术', // 表格表头与提示 'Weekly Tokens': '每周 Token 数', 'Model Name': '模型名称', 'Input Price': '输入价格', 'xx% off': 'xx% 折扣', // 数字被拆为独立节点时的折扣片段,如 "90" + "% off" '% off': '% 折扣', 'OpenRouter defaults to allowing prompts of "unlimited" length for this model, using a middle-out transform, which you can disable (and does not affect prompts of size less than the context length).': 'OpenRouter 默认允许此模型使用“无限”长度的提示词,采用 middle-out 变换,您可以禁用它(并且不影响小于上下文长度的提示词)。', // 拆分片段(middle-out 是链接,整句被 拆为三段) 'OpenRouter defaults to allowing prompts of "unlimited" length for this model, using a': 'OpenRouter 默认允许此模型使用“无限”长度的提示词,采用', 'transform, which you can disable (and does not affect prompts of size less than the context length).': '变换,您可以禁用它(并且不影响小于上下文长度的提示词)。', 'Median time-to-first-token across providers (p50, 30 min rolling window)': '各提供商的中位首 Token 时间(P50,30 分钟滚动窗口)', 'Median output throughput across providers (p50, 30 min rolling window)': '各提供商的中位输出吞吐量(P50,30 分钟滚动窗口)', '$/M tokens for text models. Audio/image/video models show their native unit (/minute, /second, etc.).': '文本模型以 $/M Token 计价。音频/图像/视频模型显示其原生单位(/分钟、/秒等)。', // 模态与计价单位 'Text Input': '文本输入', 'Image Output': '图像输出', 'Image Input': '图像输入', 'Image Output (style references)': '图像输出(风格参考)', 'Image Output (moodboards)': '图像输出(情绪板)', 'Song Generation': '歌曲生成', 'Video (with audio)': '视频(含音频)', 'Video (no audio)': '视频(无音频)', 'Video (with video input)': '视频(含视频输入)', 'Video Tokens (with audio)': '视频 Token(含音频)', 'Video Tokens (no audio)': '视频 Token(无音频)', 'Video Tokens (with video input)': '视频 Token(含视频输入)', 'second': '秒', 'Video Generation': '视频生成', 'Text to Video': '文本转视频', 'Image to Video': '图像转视频', 'Search units': '搜索单位', 'Input tokens': '输入 Token', 'Characters': '字符数', 'UTF-8 Bytes': 'UTF-8 字节', 'Audio Minutes': '音频分钟', 'minute': '分钟', 'Audio Seconds': '音频秒', 'Audio Minutes (Multilingual)': '音频分钟(多语言)', 'Audio Hours': '音频小时', 'hour': '小时', 'Performance': '性能', // 模态与参考输入 'Video Output': '视频输出', 'File Input': '文件输入', 'Audio Input': '音频输入', 'Video Input': '视频输入', 'Font Input': '字体输入', 'Super Resolution': '超分辨率', 'megapixel': '百万像素', 'font': '字体', 'reference': '参考', 'song': '首', 'Video Tokens': '视频 Token', }, regexp: [ // 价格行,如 "$0.95/M input tokens" -> "$0.95/M 输入 Token" [/^\$[\d.]+\/M\s*(input|output)\s*tokens$/, (match, p1) => match.replace(/(input|output)\s*tokens$/, p1 === 'input' ? '输入 Token' : '输出 Token')], // 引号变体(直引号/弯引号/实体的任意组合) [/^OpenRouter defaults to allowing prompts of ["\u201c\u201d\x27]*unlimited["\u201c\u201d\x27]* length for this model, using a middle-out transform, which you can disable \(and does not affect prompts of size less than the context length\)\.?$/, 'OpenRouter 默认允许此模型使用"无限"长度的提示词,采用 middle-out 变换,您可以禁用它(并且不影响小于上下文长度的提示词)。'], ], title: { static: { 'Compare AI Models: Pricing, Context & Benchmarks | OpenRouter': '对比 AI 模型:价格、上下文与基准测试 | OpenRouter', }, regexp: [], }, }, /* ---------------------------- 模型详情页 ---------------------------- */ model: { static: { 'Playground': '试玩台', 'Try this model': '试试这个模型', 'In / Out Price': '输入 / 输出价格', 'In / Out': '输入 / 输出', 'per 1M': '每 1M', 'Knowledge Cutoff': '知识截止日期', 'Performance': '性能', 'Uptime': '可用性', 'FAQ': '常见问题', 'Standard': '标准', 'Latency / throughput': '延迟 / 吞吐量', 'Cache read': '缓存读取', 'Weighted Average': '加权平均值', '/M tokens': '/M Token', 'Price History': '价格历史', 'Effective': '实际', 'Listed': '标价', '1W': '1 周', '3M': '3 月', '1Y': '1 年', 'Chart visibility': '图表显示', 'Effective in': '实际输入', 'Effective out': '实际输出', 'Listed in': '标价输入', 'Listed out': '标价输出', 'Cache hit rate': '缓存命中率', 'Token share': 'Token 占比', '1d': '1 天', '1 week': '1 周', 'Avg': '平均', 'E2E Latency': '端到端延迟', 'AutoExacto Benchmarks': 'AutoExacto 基准测试', 'auto-routing': '自动路由', 'Tool Call Error Rate': '工具调用错误率', 'Structured Output Error Rate': '结构化输出错误率', 'Cache Hit Rate': '缓存命中率', 'Avg. Provider Uptime (3d)': '提供商平均可用性 (3 天)', 'averaged across all endpoints': '所有端点平均值', 'Avg. OpenRouter Uptime (3d)': 'OpenRouter 平均可用性 (3 天)', 'averaged across all requests': '所有请求平均值', 'Endpoints API': '端点 API', 'How Design Arena works': 'Design Arena 工作原理', 'Ranking Distribution': '排名分布', 'Examples': '示例', 'Chat template': '聊天模板', 'Supports': '支持', 'Format': '格式', 'Image input': '图像输入', 'Temperature': '温度', 'Stop sequences': '停止序列', 'Seed': '随机种子', 'Stream': '流式输出', 'Add to chat': '添加到聊天', 'Run in playground': '在试玩台运行', 'Open in chat': '在聊天中打开', 'View less': '收起', 'The average price customers actually pay for this model, next to the prices providers post. Caching and discounts mean the price actually paid is often well below the listed one.': '这是客户实际支付的平均价格,旁边是提供商公布的价格。缓存与折扣意味着实际支付的价格通常远低于标价。', 'Throughput is how fast the model writes (tokens per second — higher is better). Latency is total round-trip time (lower is better). TTFT is time-to-first-token — how long before you see anything appear (lower is better).': '吞吐量是模型生成的速度(Token/秒,越高越好)。延迟是完整的往返时间(越低越好)。TTFT 是首 Token 时间,即看到内容出现前需要等待的时间(越低越好)。', 'Percent of requests that succeeded over the last 30 days. OpenRouter monitors every provider continuously and automatically retries on the next-best provider when one returns an error.': '过去 30 天请求成功的百分比。OpenRouter 持续监控每个提供商,当某个提供商返回错误时,会自动在下一个最佳提供商上重试。', 'When an error occurs in an upstream provider, we can recover by routing to another healthy provider, if your request filters allow it. You can access uptime data programmatically through the': '当上游提供商出错时,如果您的请求过滤条件允许,我们可以通过路由到其他健康的提供商来恢复。您可以通过以下 API 以编程方式访问可用性数据:', 'Scores on standardized evaluations. Higher percentages are better — and rank percentile shows where this model lands among all models on OpenRouter.': '标准化评测的得分。百分比越高越好,排名百分位显示该模型在 OpenRouter 所有模型中的位置。', 'Different companies host the same model. OpenRouter routes your request to one of them based on the routing mode you pick — Balanced (price + speed), Nitro (fastest), or Exacto (highest tool-calling accuracy).': '不同的公司托管同一个模型。OpenRouter 会根据您选择的路由模式,将请求路由到其中一个——Balanced(价格 + 速度)、Nitro(最快)或 Exacto(工具调用准确率最高)。', 'All quantizations': '所有量化', 'Floating point (4 bit)': '浮点数 (4 位)', 'Floating point (8 bit)': '浮点数 (8 位)', 'Floating point (16 bit)': '浮点数 (16 位)', 'Floating point (32 bit)': '浮点数 (32 位)', 'Balanced': '均衡', 'Routing mode': '路由模式', 'Nitro (fastest)': 'Nitro(最快)', 'Exacto (highest tool-calling accuracy)': 'Exacto(工具调用准确率最高)', 'Balanced (price + speed)': 'Balanced(价格 + 速度)', 'about our load balancing and customization options.': '了解我们的负载均衡和自定义选项。', // 基准测试版块 'Intelligence Index': '智能指数', 'Better than 54% of models compared': '优于所比较模型中 54% 的模型', 'Better than 62% of models compared': '优于所比较模型中 62% 的模型', 'Better than 56% of models compared': '优于所比较模型中 56% 的模型', 'Coding Index': '编码指数', 'Agentic Index': '智能体指数', 'Graduate-level scientific reasoning': '研究生级别的科学推理', 'Humanity\u2019s Last Exam': '人类最后的考试', 'Humanity\'s Last Exam': '人类最后的考试', 'Instruction-following benchmark': '指令遵循基准测试', 'Conversational AI agents in dual-control scenarios': '双控场景下的对话式 AI 智能体', 'Long context reasoning evaluation': '长上下文推理评测', 'Economically valuable tasks': '具有经济价值的任务', 'Research-level physics reasoning': '研究级别的物理推理', 'Coding': '编码', 'Python programming for scientific computing': '用于科学计算的 Python 编程', 'Agentic coding & terminal use': '智能体编码与终端使用', 'Knowledge': '知识', 'Proportion of correctly answered questions': '正确回答问题的比例', 'Rate of avoiding hallucination among non-correct responses': '非正确回复中避免幻觉的比例', 'Metrics sourced from': '指标数据来源', // 使用该模型的应用 'Public apps that send the most traffic to this model. Good signal for what real production workloads look like — and a hint at which use cases this model is best suited for.': '为这个模型带来最多流量的公开应用。这能反映真实的生产负载情况,也暗示了这个模型最适合哪些使用场景。', 'Token volume and request traffic to this model over time.': '该模型随时间变化的 Token 用量和请求流量。', 'Prompt tokens measure input size. Reasoning tokens show internal thinking before a response. Completion tokens reflect total output length.': '提示词 Token 衡量输入大小。推理 Token 显示响应前的内部思考。补全 Token 反映总输出长度。', // 快速开始 'Drop-in code to call this model. OpenRouter\u2019s API is OpenAI-compatible — most SDKs work by just swapping the base URL. The only thing that changes between models is the model slug below.': '直接复制代码即可调用此模型。OpenRouter 的 API 兼容 OpenAI——大多数 SDK 只需替换基础 URL 即可使用。不同模型之间唯一变化的是下面的模型标识。', 'Drop-in code to call this model. OpenRouter\'s API is OpenAI-compatible — most SDKs work by just swapping the base URL. The only thing that changes between models is the model slug below.': '直接复制代码即可调用此模型。OpenRouter 的 API 兼容 OpenAI——大多数 SDK 只需替换基础 URL 即可使用。不同模型之间唯一变化的是下面的模型标识。', 'Create an API key from your OpenRouter dashboard and set it as an environment variable:': '从您的 OpenRouter 控制台创建 API 密钥,并将其设置为环境变量:', 'Make your first request': '发起您的第一个请求', 'Use': '使用', 'with the OpenRouter API:': '与 OpenRouter API 一起使用:', 'OpenRouter provides an OpenAI-compatible completion API to 400+ models & providers that you can call directly, or using the OpenAI SDK. Additionally, some third-party SDKs are available.': 'OpenRouter 提供兼容 OpenAI 的补全 API,支持 400+ 模型和提供商,您可以直接调用,或使用 OpenAI SDK。此外还提供一些第三方 SDK。', 'In the examples below, the': '下面的示例中,', 'OpenRouter-specific headers': 'OpenRouter 专属请求头', 'are optional. Setting them allows your app to appear on the OpenRouter leaderboards.': '为可选项。设置它们可以让您的应用出现在 OpenRouter 排行榜上。', 'Using third-party SDKs': '使用第三方 SDK', 'For information about using third-party SDKs and frameworks with OpenRouter, please see our': '有关使用第三方 SDK 和框架与 OpenRouter 集成的信息,请参阅我们的', 'frameworks documentation': '框架文档', 'Enable streaming': '启用流式传输', 'to your request body to receive responses as server-sent events:': '添加到请求体中以接收服务器推送事件形式的响应:', 'Sends a request for a model response for the given chat conversation. Supports both streaming and non-streaming modes.': '为给定的聊天对话发送模型响应请求。支持流式和非流式模式。', 'optional — your site URL, for rankings': '可选 — 您的站点 URL,用于排行榜', 'optional — your site name, for rankings': '可选 — 您的站点名称,用于排行榜', 'Creates a streaming or non-streaming response using the OpenAI Responses API format.': '使用 OpenAI Responses API 格式创建流式或非流式响应。', 'Creates a message using the Anthropic Messages API format. Supports text, images, PDFs, tools, and extended thinking.': '使用 Anthropic Messages API 格式创建消息。支持文本、图像、PDF、工具和扩展思考。', 'This sets the upper limit for the number of tokens the model can generate in response.': '设置模型在响应中可以生成的最大 Token 数上限。', 'This setting influences the variety in the model\u2019s responses.': '此设置影响模型响应的多样性。', 'This setting influences the variety in the model\'s responses.': '此设置影响模型响应的多样性。', 'This setting limits the model\u2019s choices to a percentage of likely tokens: only the top tokens whose probabilities add up to P.': '此设置将模型的选择限制在一定百分比的候选 Token 中:仅选择概率之和达到 P 的顶部 Token。', 'This setting limits the model\'s choices to a percentage of likely tokens: only the top tokens whose probabilities add up to P.': '此设置将模型的选择限制在一定百分比的候选 Token 中:仅选择概率之和达到 P 的顶部 Token。', 'This limits the model\u2019s choice of tokens at each step, making it choose from a smaller set.': '这会限制模型每一步对 Token 的选择,使其从更小的集合中挑选。', 'This limits the model\'s choice of tokens at each step, making it choose from a smaller set.': '这会限制模型每一步对 Token 的选择,使其从更小的集合中挑选。', 'Stop generation immediately if the model encounter any token specified in the stop array.': '如果模型遇到停止数组中的任何 Token,立即停止生成。', 'Tool calling parameter, following OpenAI\u2019s tool calling request shape.': '工具调用参数,遵循 OpenAI 的工具调用请求格式。', 'Tool calling parameter, following OpenAI\'s tool calling request shape.': '工具调用参数,遵循 OpenAI 的工具调用请求格式。', 'Controls which (if any) tool is called by the model.': '控制模型调用哪个工具(如果有)。', 'Forces the model to produce specific output format.': '强制模型生成特定的输出格式。', // 延迟/吞吐量 'Cache Hit Rate by Provider': '各提供商的缓存命中率', 'Tool Call Error Rate by Provider': '各提供商的工具调用错误率', 'Structured Output Error Rate by Provider': '各提供商的结构化输出错误率', 'Rolling average over the past 32 days — the same lookback window used for quality-based routing': '过去 32 天的滚动平均值——与基于质量的路由使用的回溯窗口相同', 'Median End-to-End Latency on OpenRouter': 'OpenRouter 上的中位端到端延迟', 'Median Latency on OpenRouter': 'OpenRouter 上的中位延迟', 'Median Throughput on OpenRouter': 'OpenRouter 上的中位吞吐量', 'Latency / throughput percentile': '延迟 / 吞吐量百分位数', // 模型竞技场 'Models Arena': '模型竞技场', 'Agents Arena': '智能体竞技场', 'Rank': '排名', 'Asciiart': 'ASCII 艺术', 'Code Categories': '代码分类', 'Data Visualization': '数据可视化', 'Game Development': '游戏开发', 'UI Component': 'UI 组件', 'Website': '网站', 'Full Stack': '全栈', 'Mobile Apps': '移动应用', 'Webapps': 'Web 应用', // 相关模型 'Fast-mode variant of': '的快速模式变体', '- identical capabilities with higher output speed at 2x pricing relative to regular Opus 5.': '— 与常规 Opus 5 能力相同,输出速度更快,价格为 2 倍。', '- identical capabilities with higher output speed at 2x pricing relative to regular Opus 4.8.': '— 与常规 Opus 4.8 能力相同,输出速度更快,价格为 2 倍。', '- identical capabilities with higher output speed at premium 6x pricing.': '— 能力相同,输出速度更快,价格为 6 倍。', 'This model always redirects to the latest model in the Claude Fable family.': '此模型始终重定向到 Claude Fable 系列中的最新模型。', 'This model always redirects to the latest model in the Anthropic Claude Haiku family.': '此模型始终重定向到 Anthropic Claude Haiku 系列中的最新模型。', 'This model always redirects to the latest model in the Anthropic Claude Sonnet family.': '此模型始终重定向到 Anthropic Claude Sonnet 系列中的最新模型。', 'This model always redirects to the latest model in the Claude Opus family.': '此模型始终重定向到 Claude Opus 系列中的最新模型。', 'This model always redirects to the latest model in the DeepSeek V4 Flash family.': '此模型始终重定向到 DeepSeek V4 Flash 系列中的最新模型。', 'For users upgrading from earlier Opus versions, see our': '从早期 Opus 版本升级的用户,请参阅我们的', 'official migration guide here': '官方迁移指南', 'Read more at the': '更多信息请阅读', 'blog post here': '博客文章', 'See the launch announcement and benchmark results': '查看发布公告和基准测试结果', 'here': '此处', 'Learn more in Anthropic\u2019s docs:': '更多信息请参阅 Anthropic 的文档:', 'Learn more in Anthropic\'s docs:': '更多信息请参阅 Anthropic 的文档:', 'This model is currently pointing to': '此模型当前指向', 'It does not support image inputs.': '它不支持图像输入。', 'New Claude 3.5 Sonnet delivers better-than-Opus capabilities, faster-than-Sonnet speeds, at the same Sonnet prices. Sonnet is particularly good at:': '全新的 Claude 3.5 Sonnet 提供超越 Opus 的能力、快于 Sonnet 的速度,以及和 Sonnet 相同的价格。Sonnet 尤其擅长:', 'Responses are AI-generated. Verify before relying on them.': '回复由 AI 生成。使用前请核实。', 'Drop-in code to call this model with OpenRouter\u2019s OpenAI-compatible API.': '使用 OpenRouter 兼容 OpenAI 的 API 直接调用此模型的示例代码。', 'Drop-in code to call this model with OpenRouter\'s OpenAI-compatible API.': '使用 OpenRouter 兼容 OpenAI 的 API 直接调用此模型的示例代码。', }, regexp: [ // 吞吐量/延迟统计说明 [/^P50, best across providers$/, 'P50,各提供商最佳'], [/^P50, best provider$/, 'P50,最佳提供商'], [/^All locations$/, '所有地区'], // 价格历史标题,如 "Claude Sonnet 4.5 — Price History" [/^(.+) \u2014 Price History$/, '$1 — 价格历史'], ], title: { static: {}, regexp: [ // "模型名 - API Pricing & Benchmarks | OpenRouter" [/^(.+) - API Pricing & Benchmarks \| OpenRouter$/, '$1 - API 定价与基准测试 | OpenRouter'], ], }, }, /* ------------------------------ 融合页 ------------------------------ */ fusion: { static: { 'Model Fusion': '模型融合', 'New fusion': '新建融合', 'No runs yet.': '还没有运行记录。', 'Run multiple models side-by-side, run an analysis, and fuse into the best result.': '并排运行多个模型,进行分析,并融合出最佳结果。', 'Synthesizer': '合成器', 'Improve your prompt': '优化您的提示词', 'Analyzing your prompt...': '正在分析您的提示词…', 'Add Model': '添加模型', 'Claude Opus Latest': 'Claude Opus 最新版', 'OpenAI GPT Latest': 'OpenAI GPT 最新版', 'Google Gemini Pro Latest': 'Google Gemini Pro 最新版', 'Responses are AI-generated and can be inaccurate. Review all outputs before relying on them.': '回复由 AI 生成,可能不准确。在依赖之前请审查所有输出。', }, regexp: [], title: { static: { 'Model Fusion | OpenRouter': '模型融合 | OpenRouter', }, regexp: [], }, }, /* ------------------------------ 聊天页 ------------------------------ */ chat: { static: { 'Add Model': '添加模型', 'Add Model (⌘J)': '添加模型 (⌘J)', 'Flagship models': '旗舰模型', 'Best roleplay models': '最佳角色扮演模型', 'Best coding models': '最佳编程模型', 'Reasoning models': '推理模型', 'Multimodal models': '多模态模型', 'Chats': '聊天记录', 'Back to Home': '返回首页', 'Back to chats': '返回聊天列表', 'Open chats': '打开聊天', '0 rooms': '0 个房间', 'No matching rooms': '没有匹配的房间', 'Search rooms...': '搜索房间…', 'Server tools': '服务端工具', 'Server tools documentation': '服务端工具文档', 'Close server tools': '关闭服务端工具', 'Search the web for current information': '搜索网络获取最新信息', 'Auto · Medium': '自动 · 中', 'Web Fetch': '网页抓取', 'Retrieve content from URLs': '从 URL 获取内容', 'Auto': '自动', 'Image Generation': '图像生成', 'Generate images from text': '根据文本生成图像', 'Datetime': '日期时间', 'Current date and time info': '当前日期和时间信息', 'Multi-model consensus and analysis': '多模型共识与分析', '3 models': '3 个模型', 'Advisor': '顾问', 'Consult a stronger model for guidance': '咨询更强的模型获取指导', 'Subagent': '子智能体', 'Delegate tasks to smaller, faster models': '将任务委派给更小、更快的模型', 'Send message': '发送消息', 'Start recording': '开始录音', 'Add to message': '添加到消息', 'View mode': '视图模式', 'Room settings': '房间设置', 'Zero Data Retention settings': '零数据保留设置', 'Toggle Web Search': '切换联网搜索', 'Toggle Web Fetch': '切换网页抓取', 'Toggle Image Generation': '切换图像生成', 'Toggle Datetime': '切换日期时间', 'Toggle Fusion': '切换融合', 'Toggle Advisor': '切换顾问', 'Toggle Subagent': '切换子智能体', 'Select an Audio Input Model': '选择音频输入模型', 'Select a Video Input Model': '选择视频输入模型', 'Search models': '搜索模型', 'Ask anything': '输入任何问题', 'Ask anything\u2026': '输入任何问题…', 'Ask anything...': '输入任何问题…', 'What can I help with?': '有什么可以帮您?', 'How can I help you today?': '今天有什么可以帮您?', 'Responses are AI-generated and can be inaccurate. Review all outputs before relying on them.': '回复由 AI 生成,可能不准确。在依赖之前请审查所有输出。', 'Responses are generated using AI and may contain mistakes.': '回复由 AI 生成,可能包含错误。', 'Import Character': '导入角色', 'Click to upload': '点击上传', 'drag and drop': '拖放', 'your character card': '您的角色卡', 'JSON, WebP or PNG (both v1 and v2 are supported)': 'JSON、WebP 或 PNG(支持 v1 和 v2)', 'Conversation settings': '对话设置', 'Model settings': '模型设置', 'Clear chat': '清空聊天', 'Chat deleted': '聊天已删除', 'Delete message': '删除消息', 'Copy message': '复制消息', 'Edit message': '编辑消息', 'Message': '消息', 'Untitled chat': '未命名聊天', 'Stop generating': '停止生成', 'Stream': '流式输出', 'Sending': '发送中', 'Room': '房间', 'rooms': '房间', 'Disable Web Search': '禁用联网搜索', 'Reasoning Effort': '推理强度', 'Temperature': '温度', 'Weekly Tokens': '每周 Token 数', 'Hide Unavailable': '隐藏不可用', 'Hide models unavailable due to your privacy & guardrails settings': '隐藏因您的隐私与护栏设置而不可用的模型', 'Generate image': '生成图像', 'Create Artifact': '创建产物', 'Interactive App': '交互式应用', 'Landing Page': '落地页', '2D Game': '2D 游戏', '3D Game': '3D 游戏', 'Chat memory': '聊天记忆', 'Sends all messages from your conversation each request.': '每次请求都会发送您对话中的所有消息。', 'An audio input model is required.': '需要音频输入模型。', 'Add Audio Model': '添加音频模型', 'Side by side': '并排显示', 'Require Zero Data Retention': '要求零数据保留', 'Only route to endpoints that never retain your prompts or completions. Applies to all models in this chat, including ones added later.': '仅路由到永不保留您的提示词或补全内容的端点。适用于此聊天中的所有模型,包括之后添加的模型。', 'Get Markdown': '获取 Markdown', 'Share Models': '分享模型', 'Duplicate Room': '复制房间', 'Clear Models': '清空模型', 'Clear Chat': '清空聊天', 'Always expand messages': '始终展开消息', 'Show metrics inline': '内联显示指标', 'Message color': '消息颜色', 'Limit: 4 attachments per message. Actual limit varies based on model and provider.': '限制:每条消息最多 4 个附件。实际限制因模型和提供商而异。', 'Ask anything...': '输入任何问题…', 'Ask anything…': '输入任何问题…', 'Attachments': '附件', // 服务端工具设置面板 'Web Search Settings': '联网搜索设置', 'Web Fetch Settings': '网页抓取设置', 'Image Generation Settings': '图像生成设置', 'Datetime Settings': '日期时间设置', 'Fusion Settings': '融合设置', 'Advisor Settings': '顾问设置', 'Subagent Settings': '子智能体设置', 'Engine': '引擎', 'Native': '原生', 'Search Mode': '搜索模式', 'Instant': '即时', 'Deep Lite': '深度精简', 'Deep': '深度', 'Deep Reasoning': '深度推理', 'Context Size': '上下文大小', 'Low': '低', 'Medium': '中', 'High': '高', 'Results per search': '每次搜索的结果数', 'Total results limit': '结果总数上限', 'Default: 5, max 25': '默认:5,最大 25', 'Default: 50': '默认:50', 'Max searches': '最大搜索次数', 'No limit': '无限制', 'Max Characters': '最大字符数', 'Exact per-result char limit': '每条结果的精确字符上限', 'Additional settings': '其他设置', 'Allowed Domains': '允许的域名', 'e.g. docs.example.com, api.example.com': '例如:docs.example.com,api.example.com', 'Blocked Domains': '屏蔽的域名', 'e.g. ads.example, spam.example': '例如:ads.example,spam.example', 'Max Fetches': '最大抓取次数', 'Max Content Tokens': '最大内容 Token 数', 'Default: 10': '默认:10', 'Default: 100000': '默认:100000', 'BASICS': '基础', 'Background': '背景', 'Transparent': '透明', 'Opaque': '不透明', 'Output Format': '输出格式', 'Output Compression': '输出压缩', 'Default (0-100)': '默认(0-100)', 'SAFETY': '安全', 'Moderation': '审核', 'moderation': '审核', 'Timezone': '时区', 'Auto (e.g. America/New_York)': '自动(例如:America/New_York)', 'Analysis Models': '分析模型', 'Analyst Model': '分析师模型', 'Max Tool Calls': '最大工具调用次数', 'Max tool calls (optional)': '最大工具调用次数(可选)', 'Default: 8': '默认:8', 'Advisors': '顾问', 'Name (e.g. reviewer)': '名称(例如:reviewer)', 'Name (e.g. summarizer)': '名称(例如:summarizer)', 'Default model': '默认模型', 'Instructions (optional)': '指令(可选)', 'Add advisor': '添加顾问', 'Add subagent': '添加子智能体', 'advisor': '顾问', 'subagent': '子智能体', 'Subagents': '子智能体', 'room': '房间', 'Untitled Chat': '未命名聊天', 'Pin': '置顶', 'Duplicate': '复制', 'Toggle sidebar': '切换侧边栏', 'Select all': '全选', '(Copy)': '(复制)', 'Report feedback': '反馈问题', 'Metadata': '元数据', 'Expand': '展开', 'Scroll to top': '滚动到顶部', 'Scroll to bottom': '滚动到底部', 'Token count is estimated. Visit': 'Token 数量为估算值。请访问', 'your logs': '您的日志', 'for exact charges.': '查看精确费用。', 'Strategy': '策略', 'latest': '最新', 'Region': '区域', 'Tokens per second': '每秒 Token 数', 'Token count': 'Token 数量', 'Cost': '费用', 'Copy Code': '复制代码', 'Chat memory: all messages': '聊天记忆:所有消息', // 消息颜色选项 'Blue': '蓝色', 'Green': '绿色', 'Yellow': '黄色', 'Orange': '橙色', 'Pink': '粉色', 'Purple': '紫色', // 聊天菜单与高级设置 'Export Chat': '导出聊天', 'Import Chat': '导入聊天', 'Export Markdown': '导出 Markdown', 'Duplicate Chat': '复制聊天', 'Color label': '颜色标签', 'Reasoning is mandatory for this model': '此模型必须启用推理', 'Hide model': '隐藏模型', 'Advanced settings': '高级设置', 'Preset': '预设', 'Select Preset...': '选择预设…', 'Select Preset…': '选择预设…', 'Search providers': '搜索提供商', 'Sort By': '排序方式', 'Enable Streaming': '启用流式传输', 'File Parser Engine': '文件解析引擎', 'Select Engine': '选择引擎', 'Enable Reasoning': '启用推理', 'Disable reasoning': '禁用推理', 'Enable reasoning': '启用推理', 'Max': '最大', 'XHigh': '极高', 'Minimal': '极低', 'System Prompt': '系统提示词', 'Use OpenRouter\u2019s default system prompt or choose custom.': '使用 OpenRouter 的默认系统提示词或选择自定义。', 'Use OpenRouter\'s default system prompt or choose custom.': '使用 OpenRouter 的默认系统提示词或选择自定义。', 'e.g. You are a world-class pirate captain.': '例如:您是一位世界级的海盗船长。', 'Sampling Parameters': '采样参数', 'Max Tokens': '最大 Token 数', 'Frequency Penalty': '频率惩罚', 'Presence Penalty': '存在惩罚', 'Repetition Penalty': '重复惩罚', 'Apply to All': '全部应用', 'Find in conversation': '在对话中查找', 'Press': '按下', 'when the field is empty or its text is selected to use browser search': '在字段为空或文本被选中时使用浏览器搜索', // 批量聊天操作 'Bulk chat actions': '批量聊天操作', 'Export selected chats': '导出选中的聊天', 'Delete selected chats': '删除选中的聊天', }, regexp: [ // 工具启用数量,如 "Tools: 3 active" [/^Tools: (\d+) active$/, '工具:$1 个启用'], // 拆分形态:"Tools: " + 数字 + " active" [/^Tools: $/, '工具:'], [/^ active$/, ' 个启用'], ], title: { static: { 'AI Chat Playground - Compare AI Models Side by Side | OpenRouter': 'AI 聊天试玩台 - 并排对比 AI 模型 | OpenRouter', }, regexp: [], }, }, /* ------------------------------ 排行榜 ------------------------------ */ rankings: { static: { 'Top Models': '热门模型', 'Leaderboard': '排行榜', 'Top models by task': '按任务排名的热门模型', 'Cost per session': '每次会话成本', 'Market Share': '市场份额', 'Fastest models': '最快模型', 'Languages': '语言', 'Programming': '编程', 'Context Length': '上下文长度', 'Top Apps': '热门应用', 'AI Model Rankings': 'AI 模型排行榜', 'Live LLM rankings based on benchmarks and real data from millions of people using models through OpenRouter.': '基于基准测试和数百万用户通过 OpenRouter 使用模型的真实数据,实时更新的 LLM 排名。', 'text': '文本', 'embeddings': '向量嵌入', 'audio': '音频', 'video': '视频', 'rerank': '重排序', 'speech': '语音', 'transcription': '转录', 'Weekly usage of models across OpenRouter': 'OpenRouter 上各模型的每周用量', 'Linear': '线性', 'Log': '对数', 'LLM Leaderboard': 'LLM 排行榜', 'Compare the most popular models on OpenRouter': '对比 OpenRouter 上最受欢迎的模型', 'All Time': '全部时间', 'Each task\u2019s leading models, ranked by share of spend on OpenRouter': '各任务的领先模型,按在 OpenRouter 上的花费占比排名', 'spend': '花费', 'Share of spend': '花费占比', 'What one coding-agent session typically costs (paid usage), by session length': '按会话时长统计,一次编码智能体会话的典型费用(付费使用)', 'Absolute': '绝对', 'Percentage': '百分比', 'Rankings sections': '排行榜版块', 'Rankings page sections': '排行榜页面版块', 'Y-axis scale': 'Y 轴刻度', 'Shown are the sum of prompt and completion tokens per model, including reasoning tokens. Open models are those with publicly available weights.': '显示的是每个模型的提示词与补全 Token 总和,包括推理 Token。开放模型指权重公开的模型。', 'Filter models by openness': '按开放程度筛选模型', 'Filter by time window': '按时间窗口筛选', 'Information': '信息', 'Loading task rankings': '加载任务排名中', 'Median spend per session over the last 30 days, on a log scale. A session is attributed to a model when that model served at least 80% of its tokens.': '过去 30 天每次会话的中位花费(对数刻度)。当某个模型服务了至少 80% 的 Token 时,该会话归因于该模型。', 'Loading cost per session rankings': '加载每次会话成本排名中', 'Chart value display': '图表数值显示', 'Loading rankings chart and rows': '加载排名图表和行中', 'Loading benchmark rankings': '加载基准测试排名中', 'Loading performance rankings': '加载性能排名中', 'Loading app rankings': '加载应用排名中', 'Median cost': '中位费用', 'New entry': '新上榜', 'Position': '名次', 'Change': '变化', 'Rank': '排名', 'Total votes': '总票数', 'Weekly votes': '周票数', // 排名分类版块 'View all text models': '查看全部文本模型', 'Tasks are inferred by a classifier on a representative sample of prompts. Percentages show share of sample-corrected': '任务由分类器对代表性提示词样本推断得出。百分比显示样本校正后的', 'deltas compare to the prior window.': '份额,增量与上一周期比较。', 'Lowest → Highest Cost': '成本从低到高', 'Top models on OpenRouter by Design Arena SVG ELO': '按 Design Arena SVG ELO 排名的 OpenRouter 热门模型', 'Data sourced from Artificial Analysis': '数据来源于 Artificial Analysis', '(weighted avg input)': '(加权平均输入)', '(list input price)': '(标价输入价格)', 'Input List Price': '标价输入价格', 'Avg Price Per 100 Requests': '每 100 次请求平均价格', 'Coding Index Score': '编码指数得分', 'Agentic Index Score': '智能体指数得分', 'Code Categories ELO': '代码分类 ELO', 'UI Component ELO': 'UI 组件 ELO', 'Game Development ELO': '游戏开发 ELO', 'Data Visualization ELO': '数据可视化 ELO', 'Image ELO': '图像 ELO', 'The Pareto frontier traces the best score you can get at each price. Models on the line are the best deals; anything below is overpriced for the score it earns.': 'Pareto 前沿描绘了在每个价格下能获得的最佳得分。线上的模型是最划算的;线以下的模型相对于其得分而言定价过高。', 'Models with 100K+ requests in the last 24 hours': '过去 24 小时内请求量超过 10 万的模型', 'Lowest latency': '最低延迟', 'Calculations are approximate, with a representative 0.25% sample of all prompts classified.': '计算为近似值,对所有提示词中具有代表性的 0.25% 样本进行了分类。', 'New & Trending': '新品与趋势', 'In each tournament, 4 models generate outputs for the same prompt. Users vote on which is best. This chart shows how often this model placed 1st, 2nd, 3rd, or 4th.': '每场对战中有 4 个模型为同一提示词生成输出。用户投票选出最佳。此图表显示该模型获得第 1、2、3 或 4 名的频率。', 'Each task\u2019s leading models, ranked by share of': '各任务的领先模型,按', 'on OpenRouter': '在 OpenRouter 上的占比', 'Compare text request share by model author on OpenRouter.': '按模型作者比较 OpenRouter 上的文本请求份额。', 'Compare models by natural language on OpenRouter': '按自然语言比较 OpenRouter 上的模型', 'English': '英语', 'Compare models by programming language on OpenRouter': '按编程语言比较 OpenRouter 上的模型', 'Requests by prompt & completion length on OpenRouter': '按提示词与补全长度统计的请求量', 'Tool usage across models on OpenRouter': '各模型上的工具使用情况', 'Total images processed on OpenRouter': 'OpenRouter 处理的图像总数', '1K - 10K tokens': '1K - 10K Token', '1K - 100K tokens': '1K - 100K Token', // 任务分类 'Classification': '分类', // "Show 40 more" 被拆分为 "Show " + "40" + " more" 三个文本节点 'Show': '显示另外', 'more': '个', 'Content Writing': '内容写作', 'Q&A & Knowledge': '问答与知识', 'Roleplay & Fiction': '角色扮演与虚构', 'Research & Reports': '研究与报告', 'Conversation': '对话', 'Summarization': '摘要', 'Customer Support': '客户支持', 'Finance & Trading': '金融与交易', 'Math': '数学', 'Security Audit': '安全审计', 'Translation': '翻译', 'Workflow Execution': '工作流执行', 'Multi-step Planning': '多步规划', 'Tool Dispatch': '工具调度', 'Memory Extraction': '记忆提取', 'Code Generation': '代码生成', 'Debugging': '调试', 'File I/O': '文件读写', 'Shell Execution': 'Shell 执行', 'Code Review': '代码审查', 'Frontend & UI': '前端与界面', 'Repo Scanning': '仓库扫描', 'SQL & Database': 'SQL 与数据库', 'DevOps & Config': 'DevOps 与配置', 'DevOps': '运维', 'Data Extraction': '数据提取', 'Data Transformation': '数据转换', 'General': '通用', 'Agent': '智能体', 'Code': '代码', // 成本/吞吐量版块 'Highest → Lowest Cost': '成本从高到低', 'Compare model performance across providers on OpenRouter': '对比 OpenRouter 上各提供商的模型性能', 'Highest throughput': '最高吞吐量', 'fastest on': '最快运行于', // Artificial Analysis 图表 'Top models on OpenRouter by Artificial Analysis Intelligence Index': '按 Artificial Analysis 智能指数排名的 OpenRouter 热门模型', // 线上页面该句子被拆分为多个文本节点 'Top models on OpenRouter by': 'OpenRouter 上按', 'Artificial Analysis Intelligence Index': 'Artificial Analysis 智能指数排名的热门模型', 'Intelligence Index Score': '智能指数得分', 'Show Pareto': '显示 Pareto 图', 'TOP 20 PLOTTED · SEARCH TO PIN UP TO 5': '已绘制前 20 名 · 搜索可固定最多 5 个', 'Find a model…': '搜索模型…', // 应用版块 'Explore apps and agents': '探索应用和智能体', 'opting into usage tracking': '选择加入使用跟踪', 'by category': '按类别', 'Browse the new Apps & Agents directory to explore by category, discover trending tools, and see detailed usage stats.': '浏览全新的应用与智能体目录,按类别探索、发现热门工具,并查看详细的使用统计。', 'Browse apps': '浏览应用', // 二级分类排行榜 'Image Model Rankings': '图像模型排行榜', 'Live image generation rankings based on real usage data from millions of people using models through OpenRouter.': '基于数百万用户通过 OpenRouter 使用模型的真实使用数据,实时更新的图像生成排名。', 'Weekly image-generating request volume across OpenRouter': 'OpenRouter 上各模型的每周图像生成请求量', 'Image Leaderboard': '图像排行榜', 'Compare image models by image-generating request volume on OpenRouter.': '按图像生成请求量对比 OpenRouter 上的图像模型。', 'Compare image request share by model author on OpenRouter.': '按模型作者比较 OpenRouter 上的图像请求份额。', 'Embedding Model Rankings': '嵌入模型排行榜', 'Live rankings based on real usage data from people producing vector embeddings through OpenRouter.': '基于用户通过 OpenRouter 生成向量嵌入的真实使用数据的实时排名。', 'View all embedding models': '查看全部嵌入模型', 'Weekly embedding request volume across OpenRouter': 'OpenRouter 上各模型的每周嵌入请求量', 'Embedding Leaderboard': '嵌入排行榜', 'Compare embedding models by request count on OpenRouter.': '按请求数量对比 OpenRouter 上的嵌入模型。', 'Compare embedding request share by model author on OpenRouter.': '按模型作者比较 OpenRouter 上的嵌入请求份额。', 'Video Model Rankings': '视频模型排行榜', 'Live video generation rankings based on real usage data from millions of people using models through OpenRouter.': '基于数百万用户通过 OpenRouter 使用模型的真实使用数据的实时视频生成排名。', 'Weekly video request volume across OpenRouter': 'OpenRouter 上各模型的每周视频请求量', 'Video Leaderboard': '视频排行榜', 'Compare video models by request count on OpenRouter.': '按请求数量对比 OpenRouter 上的视频模型。', 'Compare video request share by model author on OpenRouter.': '按模型作者比较 OpenRouter 上的视频请求份额。', // 重排序/语音/转录排行榜 'Rerank Model Rankings': '重排序模型排行榜', 'Live rankings based on real usage data from people reranking query results through models on OpenRouter.': '基于用户通过 OpenRouter 模型重排序查询结果的真实使用数据的实时排名。', 'Weekly rerank request volume across OpenRouter': 'OpenRouter 上各模型的每周重排序请求量', 'documents': '文档', 'Rerank Leaderboard': '重排序排行榜', 'Compare rerank models by request count on OpenRouter.': '按请求数量对比 OpenRouter 上的重排序模型。', 'Compare rerank request share by model author on OpenRouter.': '按模型作者比较 OpenRouter 上的重排序请求份额。', 'Speech Model Rankings': '语音模型排行榜', 'Live speech generation rankings based on real usage data from millions of people using models through OpenRouter.': '基于数百万用户通过 OpenRouter 使用模型的真实使用数据的实时语音生成排名。', 'Weekly speech request volume across OpenRouter': 'OpenRouter 上各模型的每周语音请求量', 'Speech Leaderboard': '语音排行榜', 'Compare text-to-speech models by request count on OpenRouter.': '按请求数量对比 OpenRouter 上的文本转语音模型。', 'Compare text-to-speech request share by model author on OpenRouter.': '按模型作者比较 OpenRouter 上的文本转语音请求份额。', 'Transcription Model Rankings': '转录模型排行榜', 'Live transcript generation rankings based on real usage data from millions of people using models through OpenRouter.': '基于数百万用户通过 OpenRouter 使用模型的真实使用数据的实时转录生成排名。', 'Weekly transcription request volume across OpenRouter': 'OpenRouter 上各模型的每周转录请求量', 'characters': '字符数', 'Transcription Leaderboard': '转录排行榜', 'Compare speech-to-text models by request count on OpenRouter.': '按请求数量对比 OpenRouter 上的语音转文字模型。', 'Compare transcription request share by model author on OpenRouter.': '按模型作者比较 OpenRouter 上的转录请求份额。', }, regexp: [ // 花费占比,如 "9.4% of all spend" [/^([\d.]+)% of all spend$/, '$1% 的总花费'], // 会话轮数,如 "1 turn"、"2–9 turns"、"50+ turns" [/^(\d+) turn$/, '$1 轮'], [/^(\d+)[–-](\d+) turns$/, '$1–$2 轮'], [/^(\d+)\+ turns$/, '$1+ 轮'], [/^(\d+) turn: ([\s\S]*)$/, '$1 轮:$2'], [/^(\d+)[–-](\d+) turns: ([\s\S]*)$/, '$1–$2 轮:$3'], [/^(\d+)\+ turns: ([\s\S]*)$/, '$1+ 轮:$3'], ], title: { static: { 'LLM Rankings | OpenRouter': 'LLM 排行榜 | OpenRouter', 'Image Model Rankings | OpenRouter': '图像模型排行榜 | OpenRouter', 'Embedding Model Rankings | OpenRouter': '嵌入模型排行榜 | OpenRouter', 'Video Model Rankings | OpenRouter': '视频模型排行榜 | OpenRouter', 'Rerank Model Rankings | OpenRouter': '重排序模型排行榜 | OpenRouter', 'Speech Model Rankings | OpenRouter': '语音模型排行榜 | OpenRouter', 'Transcription Model Rankings | OpenRouter': '转录模型排行榜 | OpenRouter', }, regexp: [], }, }, /* ------------------------------ 应用页 ------------------------------ */ apps: { static: { 'Top Apps': '热门应用', 'Featured Agents': '精选智能体', 'Agent': '智能体', 'Agents': '智能体', 'Tools': '工具', 'Categories': '类别', 'Category': '类别', 'Launch': '启动', 'Visit': '访问', 'Source code': '源代码', 'Verified': '已验证', 'Created by': '创建者', 'Users': '用户', 'Monthly users': '月度用户', 'Weekly users': '周用户', 'Total users': '总用户', 'Popularity': '热度', 'Submitted': '已提交', 'Report': '举报', 'Submit app': '提交应用', 'App URL': '应用 URL', 'App name': '应用名称', 'App description': '应用描述', 'We\u2019ll review your submission': '我们将审核您的提交', // 应用排行榜版块 'App & Agent Rankings': '应用与智能体排行榜', 'Most Popular': '最受欢迎', 'Largest public apps and agents': '最大的公开应用和智能体', 'opting into': '选择加入', 'usage tracking on OpenRouter.': 'OpenRouter 上的使用跟踪。', 'Fastest growing this week': '本周增长最快', 'Top Coding Agents': '热门编码智能体', 'Top Productivity': '热门效率工具', 'Top Creative': '热门创意工具', 'Top Entertainment': '热门娱乐应用', 'Global Ranking': '全球排名', 'Personal Agents': '个人智能体', 'CLI Agents': 'CLI 智能体', 'IDE Extensions': 'IDE 扩展', 'General Chat': '通用聊天', 'Game': '游戏', 'Roleplay': '角色扮演', 'Creative Writing': '创意写作', 'Programming App': '编程应用', 'Token volume': 'Token 总量', // 应用分类页 'Coding Agents': '编码智能体', 'Cloud Agents': '云端智能体', 'Creative': '创意', 'Entertainment': '娱乐', 'Productivity': '效率', 'Writing Assistants': '写作助手', }, regexp: [], title: { static: { 'App & Agent Rankings | OpenRouter': '应用与智能体排行榜 | OpenRouter', 'Coding Agents Rankings | OpenRouter': '编码智能体排行榜 | OpenRouter', 'Creative Rankings | OpenRouter': '创意排行榜 | OpenRouter', 'Entertainment Rankings | OpenRouter': '娱乐排行榜 | OpenRouter', 'Productivity Rankings | OpenRouter': '效率排行榜 | OpenRouter', }, regexp: [], }, }, /* ------------------------------ 文档页 ------------------------------ */ docs: { static: { 'Documentation Index': '文档索引', 'Fetch the complete documentation index at:': '在此处获取完整文档索引:', 'Use this file to discover all available pages before exploring further.': '在深入探索之前,使用此文件发现所有可用页面。', 'Navigation': '导航', 'Quickstart': '快速开始', 'Client SDKs': '客户端 SDK', 'Agent SDK': '智能体 SDK', 'Cookbook': '示例集', 'Batch': '批量处理', 'Principles': '原则', 'Multimodal': '多模态', 'Authentication': '身份认证', 'Stripe Projects': 'Stripe 项目', 'Report Feedback': '反馈问题', 'Models & Routing': '模型与路由', 'Model Fallbacks': '模型回退', 'Provider Selection': '提供商选择', 'Private Models': '私有模型', 'Model Variants': '模型变体', 'Routers': '路由器', 'Workspace Budgets': '工作区预算', 'Switching Workspaces': '切换工作区', 'Single Sign-On (SSO)': '单点登录 (SSO)', 'SCIM Group Mappings': 'SCIM 组映射', 'Custom Classifiers': '自定义分类器', 'Response Caching': '响应缓存', 'Server Tools': '服务端工具', 'Message Transforms': '消息转换', 'Zero Completion Insurance': '零补全保障', 'App Attribution': '应用归因', 'Service Tiers': '服务层级', 'Sovereign AI': '主权 AI', 'Router Metadata': '路由元数据', 'Input & Output Logging': '输入与输出日志', 'Broadcast': '广播', 'Where Ori writes files': 'Ori 写入文件的位置', 'Data Collection': '数据收集', 'Provider Logging': '提供商日志', 'Best Practices': '最佳实践', 'Latency and Performance': '延迟与性能', 'Prompt Caching': '提示词缓存', 'Uptime Optimization': '可用性优化', 'Reasoning Tokens': '推理 Token', 'Community': '社区', 'For Providers': '面向提供商', 'Frameworks and Integrations Overview': '框架与集成概览', 'On this page': '本页目录', 'Copy page': '复制页面', 'Get started with OpenRouter': 'OpenRouter 快速入门', 'OpenRouter gives you access to hundreds of AI models through a single API endpoint. It handles fallbacks automatically and picks the most cost-effective option for each request.': '通过一个 API 端点,OpenRouter 让您可以访问数百个 AI 模型。它会自动处理回退,并为每个请求选择最具性价比的选项。', 'There are three ways to integrate with OpenRouter, depending on how much control you want:': '根据您想要的掌控程度,有三种方式集成 OpenRouter:', 'Approach': '方式', 'Best for': '适用场景', 'Full control, any language, no dependencies': '完全掌控,支持任何语言,无依赖', 'Type-safe model calls with minimal overhead': '类型安全的模型调用,开销最小', 'Building agents with tool use, loops, and state': '构建带工具调用、循环和状态的智能体', 'The most direct way to use OpenRouter. Send standard HTTP requests to the': '使用 OpenRouter 最直接的方式。向以下端点发送标准 HTTP 请求:', 'endpoint. It works with any language or framework.': '端点。它适用于任何语言或框架。', 'Request Builder': '请求构建器', 'to generate OpenRouter API requests in the language of your choice.': '以您选择的语言生成 OpenRouter API 请求。', 'The examples below use': '下面的示例使用', 'latest alias': '最新别名', 'that always resolves to the newest OpenAI flagship model, so your code keeps using the freshest version without redeploying. You can substitute any model slug here. Browse the full catalog at': '它始终解析为最新的 OpenAI 旗舰模型,让您的代码无需重新部署即可持续使用最新版本。您可以在此替换任何模型标识。在以下网址浏览完整目录:', 'or list every available slug programmatically via the': '或通过以下端点以编程方式列出所有可用模型标识:', 'The API also supports': 'API 还支持', 'streaming': '流式传输', 'You can also use the': '您还可以使用', 'pointed at OpenRouter as a drop-in replacement.': '指向 OpenRouter,作为即插即用的替代品。', 'wrap the OpenRouter API with full type safety, auto-generated types from the OpenAPI spec, and zero boilerplate. It\u2019s intentionally lean, a thin layer over the REST API.': '以完全类型安全的方式封装 OpenRouter API,自动从 OpenAPI 规范生成类型,零样板代码。它刻意保持精简,是 REST API 之上的薄层。', 'First, install the SDK:': '首先,安装 SDK:', 'install': '安装', 'add': '添加', 'Then use it in your code:': '然后在代码中使用:', 'See the full': '查看完整的', 'Client SDKs documentation': '客户端 SDK 文档', 'for streaming, embeddings, and the complete API reference.': '了解流式传输、向量嵌入和完整的 API 参考。', 'provides higher-level primitives for building AI agents. It handles multi-turn conversation loops, tool execution, and state management automatically via the': '为构建 AI 智能体提供更高级的原语。它通过以下方式自动处理多轮对话循环、工具执行和状态管理:', 'function.': '函数。', 'Install the package:': '安装软件包:', 'Build an agent with tools:': '使用工具构建智能体:', 'The SDK sends the prompt, receives a tool call from the model, executes': 'SDK 发送提示词,接收模型的工具调用,执行', 'feeds the result back, and returns the final response, all in one': '将结果回传,并在一次调用中返回最终响应。', 'Agent SDK documentation': '智能体 SDK 文档', 'for stop conditions, streaming, dynamic parameters, and more.': '了解停止条件、流式传输、动态参数等。', 'You can also use the OpenAI SDK pointed at OpenRouter as a drop-in replacement. This is useful if you have existing code built on the OpenAI SDK and want to access OpenRouter\u2019s model catalog without changing your code structure.': '您也可以将 OpenAI SDK 指向 OpenRouter,作为即插即用的替代品。如果您已有基于 OpenAI SDK 的代码,并且不想更改代码结构就能访问 OpenRouter 的模型目录,这将非常有用。', 'For information about using third-party SDKs and frameworks with OpenRouter, please': '有关将第三方 SDK 和框架与 OpenRouter 一起使用的信息,请', 'see our frameworks documentation.': '参阅我们的框架文档。', 'If you write code with an AI coding tool (Claude Code, Cursor, Codex, and others), connect the': '如果您使用 AI 编程工具(Claude Code、Cursor、Codex 等)编写代码,请连接', 'OpenRouter MCP server': 'OpenRouter MCP 服务器', 'It\u2019s a remote server hosted by OpenRouter, so there\u2019s nothing to install. Your assistant can pull live OpenRouter data (which models exist, what they cost, your credit balance, usage rankings) and search these docs while you build. That way its suggestions reflect current data instead of stale training knowledge. Add one URL to your MCP client and approve an OAuth login:': '它是由 OpenRouter 托管的远程服务器,无需安装任何东西。您的助手可以实时获取 OpenRouter 数据(有哪些模型、价格、您的余额、使用排名),并在您开发时搜索这些文档。这样它的建议反映的是最新数据,而不是过时的训练知识。向您的 MCP 客户端添加一个 URL 并批准 OAuth 登录:', 'See the': '参阅', 'MCP server guide': 'MCP 服务器指南', 'for per-client setup and the full tool list. To run models in your app, keep calling the OpenRouter API directly.': '了解各客户端的配置方法和完整工具列表。要在应用中运行模型,请继续直接调用 OpenRouter API。', 'Looking for information about free models and rate limits? Please see the': '想了解免费模型和速率限制?请参阅', 'Ask Assistant': '咨询助手', 'Was this page helpful?': '此页对您有帮助吗?', 'Edit this page': '编辑此页', 'Table of contents': '目录', 'Search documentation': '搜索文档', }, regexp: [], title: { static: { 'OpenRouter Quickstart Guide': 'OpenRouter 快速入门指南', 'OpenRouter Docs': 'OpenRouter 文档', }, regexp: [], }, }, /* ------------------------------ 设置页 ------------------------------ */ settings: { static: { 'Create new key': '创建新密钥', 'Key name': '密钥名称', 'Key ID': '密钥 ID', 'Secret': '密钥', 'Credit limit': '额度上限', 'Reveal': '显示', 'Hide': '隐藏', 'Revoke': '撤销', 'Top up': '充值', 'Rate limits': '速率限制', 'Roles': '角色', 'Admin': '管理员', 'Member': '成员', 'Owner': '所有者', 'Invite': '邀请', 'Invite member': '邀请成员', 'Pending': '待处理', 'Leave': '离开', 'Transfer ownership': '转让所有权', 'Errors': '错误数', 'Cost': '费用', 'Prompt tokens': '提示词 Token', 'Completion tokens': '补全 Token', 'Cache tokens': '缓存 Token', 'Total tokens': 'Token 总计', 'Method': '方法', 'Transactions': '交易记录', 'Payment method': '支付方式', 'Card': '银行卡', 'Crypto': '加密货币', 'Payments': '支付', 'Invoice': '发票', 'Tax ID': '税号', 'VAT': '增值税', 'Auto-recharge': '自动充值', 'Email notifications': '邮件通知', 'Usage alerts': '用量提醒', 'Spend limits': '消费上限', 'Month-to-date': '本月至今', 'Remaining credits': '剩余额度', 'Credit balance': '额度余额', 'Estimated cost': '预估费用', 'Two-factor authentication': '两步验证', 'API keys': 'API 密钥', 'No keys yet': '暂无密钥', 'Create your first key': '创建您的第一个密钥', 'Provider permissions': '提供商权限', 'Allow': '允许', 'Deny': '拒绝', 'Select all': '全选', 'Unselect all': '取消全选', 'Save settings': '保存设置', 'Settings saved': '设置已保存', 'Organization settings': '组织设置', 'Switch to': '切换到', // 个人资料页 'Usage summary': '用量摘要', 'Last 7 Days': '最近 7 天', 'View full activity': '查看完整活动记录', 'Daily · by model': '每日 · 按模型', 'this month': '本月', 'Top models': '热门模型', 'by spend': '按花费', 'Longest streak': '最长连续天数', 'day': '天', 'Avg / day': '日均', 'Avg / week': '周均', 'Change profile picture': '更换头像', 'PNG, JPEG, GIF, or WebP up to 5 MB.': '支持 PNG、JPEG、GIF 或 WebP,最大 5 MB。', 'Choose image': '选择图片', 'Ranked by spend over the selected window': '按所选时间窗口内的花费排名', // 管理密钥页 'Control your management API keys for administrative actions': '控制用于管理操作的管理 API 密钥', 'management key': ' 个管理密钥', 'Choose a clear and descriptive name.': '请选择一个清晰且具有描述性的名称。', 'Create a Management Key': '创建管理密钥', 'Edit Management Key': '编辑管理密钥', 'Disable Key': '停用密钥', 'Are you sure you want to disable this key? You can re-enable it later.': '确定要停用此密钥吗?您可以稍后重新启用。', 'Disable': '停用', 'Delete Key': '删除密钥', 'Are you sure you want to delete this key? This action cannot be undone.': '确定要删除此密钥吗?此操作无法撤销。', // 隐私设置页 'Restrictions to apply globally across the account. You can further restrict API keys with guardrails inside a workspace.': '应用于整个账户的全局限制。您还可以在工作区内使用护栏进一步限制 API 密钥。', 'Data Policies': '数据策略', 'Set data privacy and usage restrictions.': '设置数据隐私和使用限制。', 'Zero Data Retention': '零数据保留', 'Only route to provider endpoints that don\u2019t store your data. Reject requests that would require data retention. Only applies to provider routing, does not apply to plugins and tools you choose to enable.': '仅路由到不存储您数据的提供商端点。拒绝需要数据保留的请求。仅适用于提供商路由,不适用于您选择启用的插件和工具。', 'Non-frontier': '非前沿', 'All non-frontier model requests will require ZDR endpoints.': '所有非前沿模型请求都需要 ZDR 端点。', 'First-party Anthropic endpoints will be disabled. Bedrock and Vertex will still be enabled.': 'Anthropic 第一方端点将被停用。Bedrock 和 Vertex 仍然可用。', 'First-party OpenAI endpoints will be disabled. Azure will still be enabled.': 'OpenAI 第一方端点将被停用。Azure 仍然可用。', 'AI Studio endpoints will be disabled. Vertex will still be enabled.': 'AI Studio 端点将被停用。Vertex 仍然可用。', 'SpaceXAI endpoints that retain data will be disabled.': '保留数据的 SpaceXAI 端点将被停用。', 'Data Training': '数据训练', 'These settings are separate from Zero Data Retention. Each endpoint toggle controls routing to endpoints with a specific data policy: enabling allows requests to be routed to those endpoints, disabling excludes them from routing.': '这些设置与零数据保留相互独立。每个端点开关控制到特定数据策略端点的路由:启用允许请求路由到这些端点,停用则将其排除在路由之外。', 'Allow paid endpoints that train on request data': '允许在请求数据上训练的付费端点', 'Enable providers that may anonymously use data for training purposes.': '启用可能匿名使用数据用于训练目的的提供商。', 'Allow free endpoints that train on request data': '允许在请求数据上训练的免费端点', 'Enable providers serving free models that may retain and/or train on prompts and completions.': '启用可能保留和/或在提示词和补全上训练的免费模型提供商。', 'Allow free endpoints that publish prompts': '允许发布提示词的免费端点', 'Enable providers serving free models that may publish prompts and completions to public datasets.': '启用可能将提示词和补全发布到公共数据集的免费模型提供商。', 'Allow 1% data discount in workspaces': '允许工作区中的 1% 数据折扣', 'Allow workspaces to consent to OpenRouter using your inputs/outputs to improve the product. Each workspace consents separately.': '允许工作区同意 OpenRouter 使用您的输入/输出来改进产品。每个工作区单独同意。', 'Control which providers are used for routing. Leave empty to allow all.': '控制用于路由的提供商。留空则允许全部。', 'Allowed Providers': '允许的提供商', 'Exclusively enable these providers for your requests.': '仅对您的请求启用这些提供商。', 'Ignored Providers': '忽略的提供商', 'Exclude these providers from serving any requests.': '将这些提供商从所有请求中排除。', 'Eligibility Preview': '资格预览', 'Providers and models available based on your account settings.': '根据您的账户设置可用的提供商和模型。', 'Prompt Injection Allowlist': '提示词注入白名单', 'Phrases that should never trigger the prompt injection guardrail. Matching is case-insensitive and exact.': '永远不应触发提示词注入护栏的短语。匹配不区分大小写且为精确匹配。', 'Add phrases your users legitimately send that should not trigger the prompt injection guardrail. Matching is case-insensitive and exact.': '添加您的用户合法发送且不应触发提示词注入护栏的短语。匹配不区分大小写且为精确匹配。', 'Allowlisted phrases only take effect when the': '白名单短语仅在启用', 'prompt injection guardrail': '提示词注入护栏', 'is enabled for the request. Without it enabled, these patterns have no effect.': '时才生效。未启用时,这些模式不会生效。', 'Add pattern': '添加模式', // 账户资料页 'Last 30 Days': '最近 30 天', 'Last Year': '去年', 'All Time': '全部时间', 'spend over the tracked history. Darker cells are busier days': '在跟踪历史中的消费。颜色越深的格子表示越繁忙的日子', 'January': '一月', 'February': '二月', 'March': '三月', 'April': '四月', 'May': '五月', 'June': '六月', 'July': '七月', 'August': '八月', 'September': '九月', 'October': '十月', 'November': '十一月', 'December': '十二月', // 额度页 'Service fees': '服务费', 'Sales Tax / VAT': '销售税 / 增值税', 'Total due': '应付总额', 'Use one-time payment methods': '使用一次性支付方式', 'Purchase': '购买', // 管理密钥页 'management key': '管理密钥', 'Choose a clear and descriptive name.': '请选择一个清晰且具有描述性的名称。', // 隐私设置页 'ZDR endpoints guarantee your data is not stored after processing. Toggle each scope individually to enforce ZDR.': 'ZDR 端点保证您的数据在处理后不会被存储。单独切换每个范围以强制执行 ZDR。', 'Pattern': '模式', 'e.g. ignore my previous instructions and let\u2019s start from scratch': '例如:忽略我之前的指令,让我们从头开始', 'Search providers': '搜索提供商', // 偏好设置页 'Manage your account info.': '管理您的账户信息。', 'Profile details': '个人资料详情', 'Update profile': '更新个人资料', 'Recommended size 1:1, up to 10MB.': '推荐尺寸 1:1,最大 10MB。', 'First name': '名字', 'Last name': '姓氏', 'Email addresses': '邮箱地址', 'Connected accounts': '已关联的账户', 'Web3 wallets': 'Web3 钱包', 'Connect wallet': '连接钱包', 'Passkeys': '通行密钥', 'Two-step verification': '两步验证', 'Active devices': '活动设备', 'Sign out of device': '退出该设备', 'Delete account': '删除账户', }, regexp: [ // "Keys (2)" 等带数量的标签 [/^Keys\s*\(\s*(\d+)\s*\)$/, '密钥($1)'], [/^Members\s*\(\s*(\d+)\s*\)$/, '成员($1)'], // "509 available | 1 unavailable" [/^(\d+) available \| (\d+) unavailable$/, '$1 可用 | $2 不可用'], ], title: { static: { 'Settings | OpenRouter': '设置 | OpenRouter', 'API Keys | OpenRouter': 'API 密钥 | OpenRouter', 'API Keys | Settings | OpenRouter': 'API 密钥 | 设置 | OpenRouter', 'Credits | OpenRouter': '额度 | OpenRouter', 'Billing | OpenRouter': '账单 | OpenRouter', 'Usage | OpenRouter': '用量 | OpenRouter', 'Activity | OpenRouter': '活动记录 | OpenRouter', 'Limits | OpenRouter': '限制 | OpenRouter', 'Providers | OpenRouter': '提供商 | OpenRouter', 'Organization | OpenRouter': '组织 | OpenRouter', 'Account | OpenRouter': '账户 | OpenRouter', 'Management Keys | OpenRouter': '管理密钥 | OpenRouter', 'Privacy Settings | OpenRouter': '隐私设置 | OpenRouter', }, regexp: [], }, }, /* ------------------------------ 工作区 ------------------------------ */ workspaces: { static: { 'Manage your workspaces and their configurations.': '管理工作区及其配置。', 'New Workspace': '新建工作区', 'The initial workspace for your account. Includes all API Keys, Presets, and other configurations previously created.': '您账户的初始工作区。包含之前创建的所有 API 密钥、预设和其他配置。', // 工作区概览 'Introducing Workspaces!': '全新工作区功能!', 'Organize your OpenRouter usage into different environments with separate keys, configurations, budgets, and rules.': '将您的 OpenRouter 使用组织到不同的环境中,每个环境有独立的密钥、配置、预算和规则。', 'We created this workspace for you with all your existing API keys, routing rules, privacy settings, guardrails, and configurations.': '我们为您创建了这个工作区,包含您现有的所有 API 密钥、路由规则、隐私设置、护栏和配置。', 'This Week\u2019s': '本周', 'This Week\u2019s Spend': '本周花费', 'This Week\u2019s Usage': '本周用量', 'Edit workspace': '编辑工作区', 'View activity': '查看活动', 'Create Workspace': '创建工作区', 'New Workspace': '新建工作区', 'Budget Policies': '预算策略', 'Set spending limits for API keys. This budget will apply to each API key assigned.': '为 API 密钥设置消费上限。此预算将应用于每个已分配的 API 密钥。', 'This guardrail applies to each workspace key by default.': '此护栏默认应用于工作区中的每个密钥。', 'Credit Limit': '额度上限', 'Include BYOK spend': '包含自带密钥消费', 'every': '每', 'Month': '月', 'Leave blank for no limit.': '留空表示无限制。', 'This budget will apply individually to each key with this guardrail assigned. For example, if you set a budget of $100 weekly, each assigned key will have a $100 weekly budget.': '此预算将分别应用于每个分配了此护栏的密钥。例如,如果您设置每周 $100 的预算,每个已分配的密钥都将有每周 $100 的预算。', 'Confirm Eligibility Changes': '确认资格变更', 'Your changes will affect which providers and models are available for this guardrail.': '您的更改将影响此护栏可用的提供商和模型。', 'Confirm & Save': '确认并保存', 'Model & Provider Access': '模型与提供商访问', 'Control which models and providers are available.': '控制哪些模型和提供商可用。', 'Control which models and providers are available for this guardrail.': '控制此护栏可用的模型和提供商。', 'Prompt Injection': '提示词注入', 'Detect and respond to prompt injection attempts.': '检测并响应提示词注入尝试。', 'Detect and respond to prompt injection attempts in user inputs.': '检测并响应用户输入中的提示词注入尝试。', 'Sensitive Info Detection': '敏感信息检测', 'Identify and handle PII, credentials, and personal data.': '识别并处理 PII、凭据和个人数据。', 'Identify and handle sensitive data like PII, credentials, and personal information.': '识别并处理 PII、凭据和个人信息等敏感数据。', 'Data & Privacy': '数据与隐私', 'Access Policy': '访问策略', 'Restriction Mode': '限制模式', 'All providers and models are accessible unless explicitly blocked below.': '除非在下方明确阻止,否则所有提供商和模型都可访问。', 'New providers and models will be automatically allowed.': '新的提供商和模型将自动允许。', 'Allow All Except...': '除以下之外全部允许。。。', 'Add provider': '添加提供商', 'Add model': '添加模型', 'Current Eligibility': '当前资格', 'Based on the restrictions, data policies, and org/workspace policies above.': '基于上述限制、数据策略以及组织/工作区策略。', 'Hide ineligible': '隐藏不符合条件的', 'Eligible': '符合条件', 'Regex-based detection': '基于正则的检测', 'Free · No added latency': '免费 · 无额外延迟', 'Scan requests using': '使用', 'Scan requests using': '使用', '-inspired regex patterns for common injection techniques.': '启发的正则模式扫描常见注入技术。', 'See the full pattern list': '查看完整模式列表', '. To allow specific phrases that should never trigger this guardrail, manage your': '。要允许永远不会触发此护栏的特定短语,请在隐私设置中管理您的', 'allow list in Privacy settings': '允许列表', 'Patterns': '模式', 'Enable all': '全部启用', 'Phone number': '电话号码', 'Social Security number': '社会安全号码', 'Credit card number': '信用卡号', 'IP address': 'IP 地址', 'Person name': '姓名', 'Adds latency': '增加延迟', 'Address': '地址', 'Custom Patterns': '自定义模式', 'Add Pattern': '添加模式', 'No patterns configured. Add a regex pattern to redact or block matching content.': '未配置模式。添加正则模式以编辑或阻止匹配的内容。', 'Test Your Patterns': '测试您的模式', 'Enter sample input to preview what the LLM would receive (redaction) or whether the request would be blocked.': '输入示例内容以预览 LLM 将收到的内容(编辑后)或请求是否会被阻止。', 'Reset limit': '重置上限', 'Metadata': '元数据', 'Budgets': '预算', 'No budget limits configured.': '未配置预算上限。', 'Account Settings': '账户设置', 'Partial': '部分', 'Unavailable': '不可用', 'Configure': '配置', 'Unset': '未设置', 'No guardrails found.': '未找到护栏。', 'Search guardrails...': '搜索护栏。。。', 'Paid model training violation': '付费模型训练违规', 'Prevent this key from being used. You can re-enable it later.': '阻止此密钥被使用。您可以稍后重新启用。', 'Delete Key': '删除密钥', 'Permanently delete this key. This action cannot be undone.': '永久删除此密钥。此操作无法撤销。', 'guardrail': '护栏', 'I/O Logging Settings': '输入输出日志设置', 'Sampling': '采样', 'Control what percentage of requests have their inputs and outputs logged.': '控制记录输入和输出的请求百分比。', 'Rate': '比例', 'API Keys Filter': 'API 密钥筛选', 'Optionally filter I/O logging by API key.': '可选地按 API 密钥筛选输入输出日志。', 'Included API Keys (optional)': '包含的 API 密钥(可选)', 'All API keys': '所有 API 密钥', 'Excluded API Keys (optional)': '排除的 API 密钥(可选)', 'No excluded keys': '无排除的密钥', 'View supported models': '查看支持的模型', 'Provider Keys': '提供商密钥', 'Add and configure your API keys. Drag a key by its handle to reorder it within a section or move it between sections.': '添加并配置您的 API 密钥。拖动密钥的把手可在分区内重新排序或在分区之间移动。', 'Prioritized': '优先', 'Attempted in order, before falling back to OpenRouter endpoints.': '按顺序尝试,然后才回退到 OpenRouter 端点。', 'Add key': '添加密钥', 'Add a prioritized key': '添加优先密钥', 'Fallback': '回退', 'Tried only after attempting OpenRouter endpoints, in order.': '仅在尝试 OpenRouter 端点之后按顺序尝试。', 'Add a fallback key': '添加回退密钥', 'Unsaved changes': '未保存的更改', 'You have unsaved changes to your Anthropic keys. Are you sure you want to leave?': '您对 Anthropic 密钥的更改尚未保存。确定要离开吗?', 'Discard changes': '放弃更改', 'New key': '新密钥', 'Always use for this provider': '始终用于此提供商', 'Never fall back to OpenRouter endpoints.': '永不回退到 OpenRouter 端点。', 'Specific': '特定', 'Select model to test': '选择要测试的模型', 'Run Test': '运行测试', 'featured models matched': '个精选模型匹配', 'Search models': '搜索模型', 'File': '文件', 'Price (cheapest first)': '价格(从低到高)', 'Throughput (highest first)': '吞吐量(从高到低)', 'Latency (lowest first)': '延迟(从低到高)', 'Exacto (tool-call quality first)': 'Exacto(工具调用质量优先)', 'Prevent individual API requests from overriding this setting using the plugins parameter.': '使用 plugins 参数阻止单个 API 请求覆盖此设置。', 'Firecrawl provides web search and scraping capabilities for your OpenRouter requests. When enabled, models can search the web and extract content from URLs during inference.': 'Firecrawl 为您的 OpenRouter 请求提供网络搜索和抓取能力。启用后,模型可以在推理期间搜索网络并从 URL 提取内容。', 'Firecrawl Terms of Service accepted': '已接受 Firecrawl 服务条款', 'Add Destination': '添加目标', 'logs': '日志', // 新建工作区页 'Create workspace': '创建工作区', 'Workspaces let you organize API keys, guardrails, and settings.': '工作区让您组织 API 密钥、护栏和设置。', 'Slug': '标识', 'Used in URLs like /workspaces/. Lowercase letters, numbers, and hyphens only.': '用于 /workspaces/ 之类的 URL。仅限小写字母、数字和连字符。', '(optional)': '(可选)', // 新建分类器页 'New Classifier': '新建分类器', 'New classifier': '新建分类器', 'Start from a preset, or make your own from scratch.': '从预设开始,或从零创建自己的分类器。', 'Department': '部门', 'Tag every request with the business unit or function it came from \u2014 engineering, sales, marketing, legal, etc.': '为每个请求标记其来源的业务部门或职能——工程、销售、营销、法务等。', 'Audience': '受众', 'Tag every request by who the output is being prepared for \u2014 internal use, client-facing, regulators, or the public.': '按输出的准备对象标记每个请求——内部使用、面向客户、监管机构或公众。', 'Engineering work': '工程工作', 'Tag every request with the kind of engineering work it represents \u2014 feature dev, bug fixing, docs, refactoring, etc.': '按请求所代表的工程工作类型标记——功能开发、修复缺陷、文档、重构等。', 'Agent complexity': '智能体复杂度', 'Classify agent prompts by difficulty tier and task family \u2014 understand whether agents are doing rote work or frontier-level reasoning.': '按难度等级和任务族对智能体提示词分类——了解智能体是在做机械工作还是前沿推理。', 'Task type': '任务类型', 'Classify every request by what the model is doing \u2014 coding, agent workflows, data processing, content writing, and more. Mirrors OpenRouter\u2019s internal task-type taxonomy.': '按模型正在执行的任务对每个请求分类——编码、智能体工作流、数据处理、内容写作等。与 OpenRouter 内部的任务类型分类一致。', 'Capitalizable software expense': '可资本化的软件支出', 'Help accounting identify AI token spend on engineering work that qualifies as a capitalizable software development cost.': '帮助财务识别符合可资本化软件开发成本条件的工程工作上的 AI Token 支出。', 'Make your own': '自定义', 'Custom classifier': '自定义分类器', 'Start from scratch with your own dimensions': '从零开始,使用您自己的维度', 'Create and manage API keys in this workspace.': '在此工作区创建和管理 API 密钥。', 'Set budgets, model/provider restrictions, privacy, and content policies.': '设置预算、模型/提供商限制、隐私和内容策略。', 'Use your own provider API keys on OpenRouter.': '在 OpenRouter 上使用您自己的提供商 API 密钥。', 'Set routing policies for models and providers.': '为模型和提供商设置路由策略。', 'Save shortcuts for system prompts and request parameters.': '保存系统提示词和请求参数的快捷方式。', 'Configure plugin behavior for this workspace.': '配置此工作区的插件行为。', 'Connect monitoring tools like Langfuse or Datadog to track usage.': '连接 Langfuse 或 Datadog 等监控工具来跟踪用量。', 'Edit the workspace name and description.': '编辑工作区名称和描述。', // 工作区设置 'Enable 1% discount on all LLMs': '启用所有 LLM 的 1% 折扣', 'Consent to OpenRouter using your inputs/outputs to improve the product.': '同意 OpenRouter 使用您的输入/输出来改进产品。', 'Video Generation': '视频生成', 'Default Webhook URL': '默认 Webhook URL', 'Receives video generation delivery events for this workspace.': '接收此工作区的视频生成交付事件。', 'Webhook Signing Secret': 'Webhook 签名密钥', 'Used to verify webhook payload signatures.': '用于验证 Webhook 负载签名。', 'No signing secret configured.': '未配置签名密钥。', 'Generate Signing Secret': '生成签名密钥', 'This will generate a new signing secret for webhook signature verification. This change takes effect immediately.': '这将生成一个新的签名密钥用于 Webhook 签名验证。更改会立即生效。', 'Generate Secret': '生成密钥', 'Leave Workspace': '离开工作区', 'Leave workspace': '离开工作区', 'Are you sure you want to leave': '确定要离开', 'You will lose access to this workspace and its resources.': '您将失去对此工作区及其资源的访问权限。', // 护栏页 'Set spending limits, data privacy rules, and model/provider restrictions for API keys in this workspace.': '在此工作区为 API 密钥设置消费限制、数据隐私规则以及模型/提供商限制。', 'New Guardrail': '新建护栏', 'Policies': '策略', 'Workspace Guardrail': '工作区护栏', 'Default policy automatically applied to every key in this workspace.': '自动应用于此工作区每个密钥的默认策略。', 'No policies': '无策略', 'Discard new guardrail?': '放弃新护栏?', 'Your in-progress edits won\u2019t be saved.': '您进行中的编辑将不会被保存。', 'Keep editing': '继续编辑', 'Discard': '放弃', // BYOK 页 'Use your own provider API keys on OpenRouter': '在 OpenRouter 上使用您自己的提供商 API 密钥', 'Available': '可用', 'Not configured': '未配置', 'Key Priority and Fallback': '密钥优先级与回退', 'OpenRouter always prioritizes using your provider keys when available.': 'OpenRouter 始终优先使用您的提供商密钥。', 'By default, if your key encounters a rate limit or failure, OpenRouter will fall back to using shared OpenRouter endpoints.': '默认情况下,如果您的密钥遇到速率限制或失败,OpenRouter 将回退到使用共享的 OpenRouter 端点。', 'You can configure individual keys with "Always use this key" to prevent any fallback to OpenRouter endpoints. When this option is enabled, OpenRouter will only use your key for requests to that provider. This may result in rate limit errors if your key is exhausted, but ensures all requests go through your account.': '您可以为单个密钥启用“始终使用此密钥”以防止回退到 OpenRouter 端点。启用此选项后,OpenRouter 对该提供商的请求将只使用您的密钥。如果您的密钥额度耗尽,可能会导致速率限制错误,但可确保所有请求都通过您的账户。', 'If you wish to never use shared OpenRouter endpoints for a model, you must': '如果您希望某个模型永不使用共享的 OpenRouter 端点,则必须', 'both': '同时', 'specify "Always use this key" and pin the provider by specifying it as': '指定“始终使用此密钥”,并将提供商固定为', 'your only provider': '您唯一的提供商', 'when making the request.': '在发起请求时。', 'Always use this key': '始终使用此密钥', // 分类器页 'Tag every generation with structured metadata for AI usage reporting. View aggregated charts in the Activity page. Create up to 10 classifiers per workspace.': '为每次生成打上结构化元数据标签,用于 AI 使用报告。在活动记录页面查看汇总图表。每个工作区最多可创建 10 个分类器。', 'No classifiers configured': '尚未配置分类器', 'A classifier runs a cheap model over every generation and tags it with structured metadata you define \u2014 department, task type, sensitivity, etc. Tags power org-wide dashboards without exposing prompt content to leadership.': '分类器会对每次生成运行一个廉价模型,并用您定义的结构化元数据(部门、任务类型、敏感度等)打标签。标签支持组织级仪表板,而不会向管理层暴露提示词内容。', 'Create classifier': '创建分类器', // 可观测性页 'Input & Output Logging': '输入与输出日志', 'Show prompts and completions in your': '在您的日志中显示提示词和补全', 'for debugging, evaluating responses, and optimizing prompts.': '用于调试、评估回复和优化提示词。', 'Broadcast': '广播', 'Automatically send traces from your requests to external observability platforms without additional instrumentation.': '无需额外埋点,自动将请求的追踪数据发送到外部可观测性平台。', 'Add Destination': '添加目标', 'Send Feedback': '发送反馈', 'Let us know how we can improve!': '告诉我们如何改进!', // 插件页 'Default Plugin Settings': '默认插件设置', 'Configure default plugin behavior for your API requests.': '配置 API 请求的默认插件行为。', 'Augment LLM responses with real-time web search results': '使用实时网络搜索结果增强 LLM 回复', 'PDF Inputs': 'PDF 输入', 'Parse and extract content from uploaded PDF files': '解析并提取上传的 PDF 文件内容', 'Response Healing': '回复修复', 'Automatically fix malformed JSON responses from LLMs': '自动修复 LLM 返回的格式错误的 JSON', 'Pareto Router': 'Pareto 路由器', 'Set default coding quality tier for the Pareto code router': '为 Pareto 代码路由器设置默认编码质量等级', // 预设页 'Presets are shortcuts for your system prompts, model and provider configurations, and request parameters.': '预设是系统提示词、模型与提供商配置以及请求参数的快捷方式。', 'New Preset': '新建预设', 'No presets yet': '暂无预设', 'Create a preset to save your model + parameter configuration.': '创建预设以保存您的模型 + 参数配置。', // 路由页 'Auto Router': '自动路由器', 'Configure which models the Auto Router can route to.': '配置自动路由器可以路由到哪些模型。', 'Route to the best model for each request using': '使用以下模型为每个请求路由到最佳模型:', '. Saved settings also apply to': '。保存的设置同样适用于', 'Allowed Models': '允许的模型', 'Model patterns to filter which models the auto-router can route between. Separate patterns with commas or newlines. Supports wildcards (e.g., "anthropic/*" matches all Anthropic models). Leave empty to route across every model the auto-router ranks for your request.': '用于过滤自动路由器可在哪些模型之间路由的模型模式。用逗号或换行分隔模式。支持通配符(例如 “anthropic/*” 匹配所有 Anthropic 模型)。留空则可在自动路由器为您的请求排名的所有模型之间路由。', 'Cost / Quality Tradeoff': '成本 / 质量权衡', 'Cost': '成本', '0 = pure quality (best model regardless of cost), 10 = cheapest model wins. Intermediate values blend quality and cost signals.': '0 = 纯质量(不考虑成本的最佳模型),10 = 最便宜的模型获胜。中间值混合质量与成本信号。', 'Prevent overrides': '禁止覆盖', 'Default Provider Sort': '默认提供商排序', 'Choose how providers should be sorted for your requests.': '选择您的请求中提供商的排序方式。', 'Choose how providers should be sorted. Individual requests can override this setting.': '选择提供商的排序方式。单个请求可以覆盖此设置。', 'By default, OpenRouter balances low prices with high uptime.': '默认情况下,OpenRouter 在低价格与高可用性之间取得平衡。', 'Default (balanced)': '默认(均衡)', 'Default Model': '默认模型', 'Set the default model for apps and fallback routing.': '为应用和回退路由设置默认模型。', 'Apps will use this model by default, but they may override it if they choose to do so.': '应用默认使用此模型,但它们也可以选择覆盖。', 'This model will also be used as your default': '此模型也将用作您的默认', 'fallback model': '回退模型', 'No default': '无默认', }, regexp: [ // "Show 57 more" ], title: { static: { 'Workspaces | OpenRouter': '工作区 | OpenRouter', 'New Workspace | OpenRouter': '新建工作区 | OpenRouter', 'New Classifier | OpenRouter': '新建分类器 | OpenRouter', 'Workspace Overview | Settings | OpenRouter': '工作区概览 | 设置 | OpenRouter', 'Workspace Settings | OpenRouter': '工作区设置 | OpenRouter', 'Guardrails | OpenRouter': '护栏 | OpenRouter', 'BYOK | Settings | OpenRouter': '自带密钥 | 设置 | OpenRouter', 'Routing | Settings | OpenRouter': '路由 | 设置 | OpenRouter', 'Presets | Settings | OpenRouter': '预设 | 设置 | OpenRouter', 'Plugins | Settings | OpenRouter': '插件 | 设置 | OpenRouter', 'Observability | OpenRouter': '可观测性 | OpenRouter', 'Classifiers | OpenRouter': '分类器 | OpenRouter', }, regexp: [], }, }, /* ------------------------------ 活动记录 ------------------------------ */ activity: { static: { 'Your usage across models on OpenRouter': '您在 OpenRouter 上各模型的用量', 'Trends': '趋势', 'Token volume': 'Token 总量', 'Cache hit rate': '缓存命中率', 'Blended $/1M': '混合 $/1M', 'Top API Keys': '热门 API 密钥', 'Top Apps': '热门应用', 'Usage by model': '按模型用量', 'Usage type': '用量类型', 'OpenRouter Spend': 'OpenRouter 花费', 'Request volume by model': '按模型的请求量', 'Token breakdown': 'Token 构成', 'Prompt token caching': '提示词 Token 缓存', 'Uncached': '未缓存', 'Cached': '已缓存', 'Median': '中位数', 'Average': '平均值', 'Range': '范围', 'Router': '路由器', 'Region': '区域', 'App': '应用', 'Spend over time': '消费趋势', 'Expand': '展开', 'Collapse': '折叠', 'Show "Other"': '显示“其他”', 'Cumulative sum': '累计总和', 'Chart type': '图表类型', 'Download CSV': '下载 CSV', 'Download PDF': '下载 PDF', 'Save current chart': '保存当前图表', 'Download current view': '下载当前视图', 'Download usage summary': '下载用量摘要', 'Total Usage ($)': '总用量 ($)', 'Value': '数值', '% of Total': '占总量的百分比', 'Rank by:': '排名依据:', 'Current metric': '当前指标', 'Subgroup': '子分组', 'Rollup:': '汇总:', 'Set up Guardrails': '设置护栏', 'Protect your API usage with content filters, spending limits, and usage policies.': '通过内容过滤器、消费上限和使用策略保护您的 API 使用。', 'Once configured, enforcement stats will appear here.': '配置完成后,执行统计将显示在此处。', 'Configure': '配置', }, regexp: [], title: { static: { 'Activity | OpenRouter': '活动记录 | OpenRouter', }, regexp: [], }, }, /* ------------------------------ 日志 ------------------------------ */ logs: { static: { 'Generations': '生成记录', 'Upstream Requests': '上游请求', 'Sessions': '会话', 'Videos': '视频', 'Batches': '批处理', 'App': '应用', 'Usage Type': '用量类型', 'Speed': '速度', 'Routing Overhead': '路由开销', 'Time to First Token': '首 Token 时间', 'Finish Reason': '结束原因', 'Report Feedback': '反馈问题', 'Help us improve by reporting issues with this generation.': '通过报告本次生成的问题帮助我们改进。', 'Generation ID': '生成 ID', 'How to find your generation ID': '如何找到您的生成 ID', 'Category': '类别', 'Select a category': '选择一个类别', 'Comment': '评论', 'Generation details': '生成详情', 'Cost': '费用', 'Latency until the first token was received, in seconds.': '收到第一个 Token 之前的延迟,以秒为单位。', 'Routing overhead is OpenRouter time before the successful provider attempt starts. Time to first token is provider time after it starts, so the measurements are sequential and do not overlap.': '路由开销是成功提供商尝试开始之前的 OpenRouter 处理时间。首 Token 时间是开始后的提供商处理时间,因此两项测量是顺序进行的,不会重叠。', 'Routing of requests to upstream providers — does not include requests that failed prior to being sent upstream': '请求到上游提供商的路由——不包括在发送到上游之前就已失败的请求。', }, regexp: [], title: { static: { 'Logs | OpenRouter': '日志 | OpenRouter', }, regexp: [], }, }, /* ------------------------------ 模型对比 ------------------------------ */ compare: { static: { 'AI Model Comparison': 'AI 模型对比', 'Compare AI models by key metrics including benchmarks, price, context length, and other model features. Access hundreds of AI models through the': '按基准测试、价格、上下文长度等关键指标对比 AI 模型。通过', 'Flagship models': '旗舰模型', 'The latest top-tier model from major labs.': '来自主要实验室的最新顶级模型。', 'Most affordable': '最具性价比', 'Compact, lower-cost picks for high-throughput use.': '适合高吞吐场景的紧凑低成本选择。', 'Best for code': '最适合编码', 'Frequently chosen for programming and code generation tasks.': '常用于编程和代码生成任务。', 'Reasoning models': '推理模型', 'Designed for multi-step problem solving.': '专为多步问题求解设计。', 'Add model': '添加模型', 'Highlight best': '高亮最佳', 'Author': '作者', 'Input modalities': '输入模态', 'Output modalities': '输出模态', 'Cached input': '缓存输入', 'Weighted Average Input': '加权平均输入', 'Cache Creation (5min)': '缓存创建 (5 分钟)', 'Cache Read (5min)': '缓存读取 (5 分钟)', 'Cache Write': '缓存写入', 'Performance': '性能', 'Latency (p50)': '延迟 (P50)', 'Throughput (p50)': '吞吐量 (P50)', 'Visualize Performance': '可视化性能', 'Ready': '就绪', 'Output will appear here...': '输出将显示在此处…', 'Features': '功能', 'unknown': '未知', 'Max output tokens': '最大输出 Token', 'Stream cancellation': '流式取消', 'Tool use': '工具使用', 'No prompt training': '不进行提示词训练', 'Caching': '缓存', 'Variant': '变体', 'Intelligence': '智能', 'Coding': '编码', 'Agentic': '智能体', 'intelligence': '智能', 'coding': '编码', 'agentic': '智能体', 'data': '数据', 'has no': '暂无', }, regexp: [ // 无数据的说明,如 "* GPT-5.6 Sol Pro has no intelligence data"(可能拆分为多段) [/^\* (.+) has no (intelligence|coding|agentic) data$/, '* $1 暂无$2数据'], [/^\* (.+) has no$/, '* $1 暂无'], ], title: { static: { 'AI Model Comparison | OpenRouter': 'AI 模型对比 | OpenRouter', }, regexp: [ // 对比结果标题,如 "Qwen3.8 Max vs GPT-5.6 Sol Pro - AI Model Comparison | OpenRouter" [/^(.+) - AI Model Comparison \| OpenRouter$/, '$1 - AI 模型对比 | OpenRouter'], ], }, }, /* ------------------------------ 发现 ------------------------------ */ discover: { static: { 'Discover models': '发现模型', 'Practical starting points from real OpenRouter usage, production performance, and independent benchmarks.': '来自真实 OpenRouter 使用、生产性能和独立基准测试的实用起点。', 'Today\u2019s frontier': '今日前沿', 'Today\'s frontier': '今日前沿', 'Intelligence (0\u2013100)': '智能指数 (0–100)', '#1 on OpenRouter': 'OpenRouter 排名第一', 'Smartest open model': '最聪明的开放模型', 'Best value': '最佳性价比', 'Fastest': '最快', 'Smartest coding': '最擅长编码', 'coding index': '编码指数', 'Routers': '路由器', 'View all routers': '查看全部路由器', 'Auto Router (Beta)': '自动路由器 (测试版)', 'Note: Context limits are dependent on which models you select.': '注意:上下文限制取决于您选择的模型。', 'Pareto Code Router': 'Pareto 代码路由器', 'Free Models Router': '免费模型路由器', 'Auto Router': '自动路由器', 'Your prompt will be processed by a meta-model and routed to one of dozens of models (see below), optimizing for the best possible output.': '您的提示词将由元模型处理,并路由到数十个模型之一(见下文),以优化最佳输出。', 'Value leaders': '性价比领先', 'The most capability per dollar of list price.': '每美元标价提供最多能力。', 'Rank': '排名', 'Intel pctl': '智能百分位', 'Coding pctl': '编码百分位', 'Agentic pctl': '智能体百分位', 'Fastest models': '最快模型', 'Highest median output speed across multiple providers.': '跨多个提供商的最高中位输出速度。', 'TTFT p50': '首 Token 时间 P50', 'Always-latest aliases': '始终最新别名', 'Pin one model ID and always get the newest release in that family.': '固定一个模型 ID,始终获取该系列的最新版本。', 'Family tokens': '系列 Token 数', 'Free models': '免费模型', 'The most-used models with a free endpoint.': '拥有免费端点的最常用模型。', 'Tokens/wk': 'Token/周', 'Image models': '图像模型', 'Generate and edit images across the leading model providers.': '在领先的模型提供商中生成和编辑图像。', 'Video models': '视频模型', 'Generate videos from text and image prompts across the leading model providers.': '在领先的模型提供商中从文本和图像提示词生成视频。', 'Speech models': '语音模型', 'Hear voice samples from the leading speech models.': '试听领先语音模型的语音样本。', 'Explore every modality': '探索所有模态', 'Start with a focused set of models for the job you need to do.': '从适合您任务的一组精选模型开始。', 'Image understanding': '图像理解', 'Analyze screenshots, documents, charts, and photos.': '分析截图、文档、图表和照片。', 'See models': '查看模型', 'Image generation': '图像生成', 'Create and edit images from natural-language prompts.': '根据自然语言提示词创建和编辑图像。', 'Video generation': '视频生成', 'Turn text and reference images into video.': '将文本和参考图像转换为视频。', 'Speech to text': '语音转文字', 'Transcribe calls, meetings, voice notes, and media.': '转录通话、会议、语音笔记和媒体。', 'Text to speech': '文本转语音', 'Generate narration, voices, and spoken responses.': '生成旁白、声音和语音回复。', 'Audio generation': '音频生成', 'Create music, sound effects, and other audio.': '创建音乐、音效和其他音频。', 'Power semantic search, clustering, and RAG retrieval.': '为语义搜索、聚类和 RAG 检索提供支持。', 'Reranking': '重排序', 'Improve search and RAG by reordering retrieved results.': '通过对检索结果重新排序来改进搜索和 RAG。', 'Browse every model': '浏览每个模型', 'Search, filter, sort, and compare the complete catalog on the models page.': '在模型页面搜索、筛选、排序和对比完整目录。', 'Price in': '输入价格', 'Price out': '输出价格', 'View all in models': '在模型列表中查看全部', // 卡片描述与指标提示 'The model that served the most tokens on OpenRouter this week. If you want the popular pick, start here.': '本周在 OpenRouter 上提供 Token 服务最多的模型。如果您想要热门之选,从这里开始。', 'The highest-ranked open-weights model on the Artificial Analysis intelligence index: frontier-grade quality you can self-host.': 'Artificial Analysis 智能指数上排名最高的开放权重模型:您可以自托管的前沿级质量。', 'Scores in the top half of the independent Artificial Analysis benchmarks at the lowest combined rate for input and output tokens. The most capability per dollar spent.': '在独立的 Artificial Analysis 基准测试中位列前一半,同时输入和输出 Token 的综合费率最低。每一美元花销获得最多的能力。', 'Streams output at the highest sustained speed across real production requests and multiple providers. Best when users need answers quickly.': '在真实生产请求和多个提供商中以最高持续速度流式输出。最适合需要快速得到答案的用户。', 'Near the top of the Artificial Analysis coding index right now. If you are writing code and want a very strong model regardless of price, start here.': '目前接近 Artificial Analysis 编码指数榜首。如果您正在写代码,想要一个不计价格也非常强大的模型,从这里开始。', 'Benchmark performance per dollar. Scores come from the independent Artificial Analysis benchmarks; price is each model\u2019s combined rate for input and output tokens, weighted toward input to match typical usage. Only models scoring in the top half qualify.': '每美元的基准测试表现。分数来自独立的 Artificial Analysis 基准测试;价格是每个模型输入和输出 Token 的综合费率,按输入加权以匹配典型用法。只有得分在前一半的模型才符合条件。', 'Benchmark performance per dollar. Scores come from the independent Artificial Analysis benchmarks; price is each model\'s combined rate for input and output tokens, weighted toward input to match typical usage. Only models scoring in the top half qualify.': '每美元的基准测试表现。分数来自独立的 Artificial Analysis 基准测试;价格是每个模型输入和输出 Token 的综合费率,按输入加权以匹配典型用法。只有得分在前一半的模型才符合条件。', 'Percentile on the Artificial Analysis intelligence index, relative to the other frontier models it scores.': '在 Artificial Analysis 智能指数上的百分位,相对于其评分的其他前沿模型。', 'Percentile on the Artificial Analysis coding index, relative to the other frontier models it scores.': '在 Artificial Analysis 编码指数上的百分位,相对于其评分的其他前沿模型。', 'Percentile on the Artificial Analysis agentic index, relative to the other frontier models it scores.': '在 Artificial Analysis 智能体指数上的百分位,相对于其评分的其他前沿模型。', 'Tokens served on OpenRouter over the last 7 days.': '过去 7 天在 OpenRouter 上服务的 Token 数。', 'Median output speed across recent production traffic.': '近期生产流量的中位输出速度。', 'Median time to first token: how long the model takes to start responding.': '首 Token 中位时间:模型开始响应所需的时间。', 'How many providers currently serve this model.': '当前有多少提供商在服务此模型。', 'Weekly tokens served across every model in this family.': '该系列中每个模型的每周 Token 服务量。', 'List input price; native units are shown for non-token models.': '列表输入价格;非 Token 模型显示原生单位。', 'List output price when applicable to the model.': '适用于模型时的列表输出价格。', // 模态标题(discover 卡片) 'image models': '图像模型', 'video models': '视频模型', 'speech models': '语音模型', 'intelligence': '智能指数', }, regexp: [ // "Browse all 527 models"、"View all 527 models" [/^Browse all ([\d,]+) models$/, '浏览全部 $1 个模型'], [/^View all ([\d,]+) models$/, '查看全部 $1 个模型'], // 价格单位(public 正则可能被页面正则顺序遮挡,此处兜底) // 单位被拆分为独立节点时(如 "$0.04" + "/image") [/^\/(image|second|minute|hour|song|megapixel)$/, (m, unit) => '/' + ({ image: '图像', second: '秒', minute: '分钟', hour: '小时', song: '首', megapixel: '百万像素' }[unit])], ], title: { static: { 'Discover models | OpenRouter': '发现模型 | OpenRouter', }, regexp: [], }, }, /* ------------------------------ 基准测试 ------------------------------ */ benchmarks: { static: { 'AI Model Benchmarks': 'AI 模型基准测试', 'benchmarks': '基准测试', 'task evaluations': '任务评测', 'last run': '最近运行', 'Agents & tools': '智能体与工具', 'Benchmark': '基准测试', 'Value': '数值', 'Speed': '速度', 'Multi-turn service agents making tool calls under strict policy constraints.': '在严格策略约束下进行工具调用的多轮服务智能体。', 'Graduate-level science questions that resist retrieval and reward careful reasoning.': '抗拒检索、奖励缜密推理的研究生级科学问题。', 'Hard-to-locate facts on the live web, scored on persistent multi-step research.': '实时网络上难以查找的事实,基于持续的多步研究评分。', 'Questions whose answers are lists, scored for exhaustive retrieval with no padding.': '答案为列表的问题,按无冗余的穷尽检索评分。', 'Parallel': '并行', 'Humanity\u2019s Last Exam as a search benchmark: expert questions answered with live search.': '作为搜索基准的"人类最后的考试":通过实时搜索回答专家级问题。', 'Humanity\'s Last Exam as a search benchmark: expert questions answered with live search.': '作为搜索基准的"人类最后的考试":通过实时搜索回答专家级问题。', 'Full an entire table; answer-item accuracy scores partial matches.': '填满整个表格;答案条目准确率对部分匹配计分。', 'For usage-based views of the same models, see the': '如需查看相同模型的用量视图,请参阅', // 基准测试子页 'Last benchmark run': '最近基准运行', 'Model comparison': '模型对比', 'Leaderboard': '排行榜', 'Top-level rows use default routing where available; click a row to expand provider-pinned results.': '顶级行使用默认路由(如果可用);点击行可展开提供商固定的结果。', 'compared across configurations': '跨配置对比', 'search budgets and plugin mode': '搜索预算和插件模式', 'Search budget': '搜索预算', 'Search provider': '搜索提供商', 'Compare answer quality with average cost and typical time per question. The Pareto line shows the best quality available at each price or latency level.': '对比回答质量与每个问题的平均成本和典型时间。Pareto 线显示在每个价格或延迟水平上可用的最佳质量。', 'Every verified configuration for all models. Sort by quality, cost, speed, or question count.': '所有模型的每个已验证配置。按质量、成本、速度或问题数量排序。', 'Compare answer-item accuracy with cost and latency; complete tables and Pareto points appear in each chart.': '对比答案条目准确率与成本和延迟;每个图表中显示完整表格和 Pareto 点。', 'Task': '任务', 'every': '每个', 'search engine': '搜索引擎', // 基准测试子页导航 'All benchmarks': '全部基准测试', 'Paper': '论文', 'Cost efficiency': '成本效率', 'Leaderboard': '排行榜', 'Example problems': '示例问题', 'Why we run it': '为何运行', 'What scores tell you': '分数含义', 'Methodology': '方法论', 'API access': 'API 访问', // 亮点卡片 'Most Accurate': '最准确的', 'Most Capable': '能力最强', 'Best Value': '最佳性价比', 'Fastest': '最快', // 表格列头与说明 'Accuracy': '准确率', 'Representative-run accuracy, best first.': '代表性运行的准确率,最佳优先。', 'Cost per question': '每题成本', 'Average cost per question, cheapest first.': '每题平均成本,最低优先。', 'Time per question': '每题耗时', 'Average wall-clock time per question, fastest first.': '每题平均实际耗时,最快优先。', 'Accuracy vs. cost (Pareto frontier)': '准确率 vs 成本(Pareto 前沿)', 'Std dev': '标准差', 'Cost / question': '成本/题', 'Time / question': '耗时/题', 'Output tok / question': '输出 Token/题', 'Score': '得分', 'score': '得分', 'Most Accurate 0 items': '最准确的 0 项', 'items': '项', 'Need higher accuracy? Try configurations with larger search budgets or later cutoff dates.': '需要更高准确率?尝试使用更大搜索预算或更晚截止日期的配置。', 'Only rows that evaluate every question are shown.': '仅显示评估了每个问题的行。', 'Highest Effective Score': '最高有效得分', // 搜索类基准页:表格列与概览 'Plugin': '插件', 'Search providers': '搜索提供商', 'Question': '题目', 'Confidence': '置信度', 'Efficiency': '效率', 'Tool': '工具', 'Avg time': '平均时间', 'Avg cost': '平均成本', 'answers matched': '答案匹配', 'Top row': '顶部行', 'Top result': '最佳结果', 'Top configuration': '最佳配置', 'Model with best score': '得分最高的模型', 'Running': '运行中', 'Recommended': '推荐', 'Average': '平均', 'Median': '中位数', 'Best value': '最佳性价比', 'configurations': '配置', 'budget': '预算', 'cutoff': '截止', 'Turn': '轮', 'turn': '轮', 'turns': '轮', 'full leaderboard': '完整排行榜', 'question': '题', 'questions': '题', '5-turn search budget': '5 轮搜索预算', 'std dev': '标准差', 'Expand': '展开', // 搜索类基准页 '4 search providers': '4 个搜索提供商', 'Test configurations': '测试配置', 'Winning result': '获胜结果', 'Quality results': '质量结果', 'Price & speed': '价格与速度', 'Price and speed': '价格与速度', 'All configurations': '所有配置', 'All search configurations': '所有搜索配置', 'How tasks are scored': '任务评分方式', 'Highest quality': '最高质量', 'Perplexity': '困惑度', 'answers matched the reference': '答案与参考匹配', 'answers matched the full reference set': '答案与完整参考集匹配', '95% confidence range': '95% 置信区间', 'Winning result in detail': '获胜结果详情', 'Latency / question': '延迟/题', 'Fastest strong result': '最快强结果', 'OpenAI Native': 'OpenAI 原生', 'OpenAI Native search': 'OpenAI 原生搜索', 'Price versus quality': '价格与质量对比', 'Price versus quality, exact configuration values': '价格与质量对比,精确配置值', 'Latency versus quality': '延迟与质量对比', 'Latency versus quality, exact configuration values': '延迟与质量对比,精确配置值', 'Answer quality': '回答质量', 'On the efficiency and quality frontier': '在效率与质量前沿上', 'yes': '是', 'no': '否', '5-turn': '5 轮', '1-turn': '1 轮', '25-turn': '25 轮', 'plugin': '插件', 'Typical time': '典型耗时', 'Typical time / question': '每题典型耗时', 'Does more search improve answer accuracy?': '更多搜索会提高答案准确率吗?', 'Does more search improve complete answers?': '更多搜索会提高完整答案的比例吗?', 'Reasoning effort': '推理强度', 'Correct answers': '正确答案', 'Questions': '问题数', 'Why we run this benchmark': '为何运行此基准测试', 'configuration': '配置', 'What the scores can and can\u2019t tell you': '分数的能说与不能说', 'What the scores can and can\'t tell you': '分数的能说与不能说', 'empty or refused answers skip the judge and score 0': '空答案或被拒绝的答案跳过评判并计 0 分', 'Real run example': '真实运行示例', 'Reference': '参考', 'Quick search \u00b7 1 turn': '快速搜索 \u00b7 1 轮', 'Deep search \u00b7 25 turns': '深度搜索 \u00b7 25 轮', ', failed': ',失败', 'Incorrect': '不正确', 'Final answer': '最终答案', '[No final answer emitted.]': '[未生成最终答案。]', 'What happened': '发生了什么', 'Selected searches \u00b7 2 of 2 shown': '已选搜索 \u00b7 显示 2 个中的 2 个', 'web search server tool': '联网搜索服务端工具', 'web search plugin': '联网搜索插件', 'Engines use the same default configurations that serve production traffic.': '引擎使用与生产流量相同的默认配置。', 'Complete answers': '完整答案', 'Incomplete answers': '不完整答案', 'Dataset': '数据集', 'Finding one fact and finding': '找到一个事实与找到', '1-turn search budget': '1 轮搜索预算', '25-turn search budget': '25 轮搜索预算', 'all': '全部', // tau2-Bench(工具调用) 'Tool-call errors': '工具调用错误', 'Tool-call error rate': '工具调用错误率', 'Tool-call reliability': '工具调用可靠性', 'Invalid JSON': '无效 JSON', 'Schema mismatch': '架构不匹配', 'Unknown tool name': '未知工具名', 'Cost per task': '每任务成本', 'Time per task': '每任务耗时', 'Cost / task': '成本/任务', 'Time / task': '耗时/任务', 'Output tok / task': '输出标记/任务', // WideSearch / HLE Search 'Quality & completion': '质量与完成度', 'Quality and completion': '质量与完成度', 'Search budget': '搜索预算', 'answer-item accuracy': '答案项准确率', 'Complete tables': '完整表格', 'Incomplete tables': '不完整表格', 'Answer-item accuracy is primary; complete-table success is shown beneath.': '答案项准确率优先;完整表格成功率显示在下方。', 'How does search budget affect answer-item accuracy?': '搜索预算如何影响答案项准确率?', 'before & after': '启用前后', 'on models enrolled in': ',针对已注册', "OpenRouter's automatic provider optimization for tool-calling requests.": '即 OpenRouter 面向工具调用请求的自动提供商优化。', 'unparseable or empty tables score 0': '无法解析或为空的表格计 0 分', 'Does more search help on expert questions?': '更多搜索对专家级问题有帮助吗?', 'Incorrect answers': '不正确答案', ', ungraded': ',未评分', 'Reference answer withheld.': '参考答案已隐藏。', 'Official HLE dataset example': 'HLE 官方数据集示例', '1 turn': '1 轮', '5 turns': '5 轮', '25 turns': '25 轮', 'Exact Answer': '正确答案', 'Project': '项目', 'Task': '任务', 'Independent, reproducible measurements of the knobs you can actually set on an OpenRouter request: models, providers, search engines, and tool budgets. Every score links to the configuration, costs, and telemetry behind it.': '对您可以在 OpenRouter 请求中实际设置的各项旋钮(模型、提供商、搜索引擎和工具预算)进行独立、可复现的测量。每个分数都链接到其背后的配置、成本和遥测数据。', 'model rankings': '模型排行榜', 'and the': '和', 'full model list': '完整模型列表', 'high': '高', 'xhigh': '极高', 'medium': '中', 'low': '低', // 各基准测试页介绍段落 'GPQA Diamond is a graduate-level multiple-choice benchmark in biology, physics, and chemistry. Each question is written by a subject-matter expert and designed so that even domain specialists need careful reasoning to identify the correct answer. We run the same fixed question set across provider endpoints to compare model capability, routing, and the practical cost of solving difficult scientific problems.': 'GPQA Diamond 是涵盖生物学、物理学和化学的研究生级多选题基准测试。每个问题均由领域专家编写,设计上即使领域专家也需要仔细推理才能找到正确答案。我们在各提供商端点上运行同一组固定问题,以比较模型能力、路由以及解决困难科学问题的实际成本。', 'GPQA is a graduate-level multiple-choice benchmark in biology, physics, and chemistry. Each question is written by a subject-matter expert and designed so that even domain specialists need careful reasoning to identify the correct answer. We run the same fixed question set across provider endpoints to compare model capability, routing, and the practical cost of solving difficult scientific problems.': 'GPQA 是涵盖生物学、物理学和化学的研究生级多选题基准测试。每个问题均由领域专家编写,设计上即使领域专家也需要仔细推理才能找到正确答案。我们在各提供商端点上运行同一组固定问题,以比较模型能力、路由以及解决困难科学问题的实际成本。', 'τ²-Bench Airline tests whether a model can do an airline support agent\'s job: follow a policy manual, talk to a simulated customer, and call the right tools to search flights, change bookings, and issue refunds. The model doesn\'t need any domain knowledge; it\'s scored entirely on how well it executes tool calls across multi-step task trajectories. We run it continuously against the same provider endpoints that serve OpenRouter traffic, so a score reflects both the model and the provider running it. We use this benchmark because it has a high floor, so we can assess provider variance and not model capability. Our routing algorithm for tool call requests uses these same signals to send traffic to the best performing endpoints.': 'τ²-Bench Airline 测试模型能否胜任航空公司客服的工作:遵循政策手册、与模拟客户交谈,并调用正确的工具来搜索航班、更改预订和办理退款。模型不需要任何领域知识;评分完全取决于它在多步任务流程中执行工具调用的好坏。我们持续在服务 OpenRouter 流量的同一批提供商端点上运行该测试,因此分数同时反映模型和运行它的提供商。我们使用该基准是因为它的底线较高,可以评估提供商差异而非模型能力。我们的工具调用路由算法正是利用这些信号将流量发送到表现最佳的端点。', 'BrowseComp tests whether a model can find hard-to-locate facts on the live web. Its 1,266 questions are built to be unfindable in one search, so scoring rewards persistent, multi-step research. The model doesn\'t need stored knowledge; it\'s scored entirely on whether its final answer matches a reference after searching. We run it with the model held fixed and vary the search configuration: the search engine, request format, and maximum search budget. This shows how much the search setup contributes while the model stays the same.': 'BrowseComp 测试模型能否在实时网络上找到难以定位的事实。其 1,266 个问题被设计为一次搜索无法找到,因此评分奖励持续的多步研究。模型不需要储备知识;评分完全取决于搜索后最终答案是否与参考答案匹配。我们在模型固定的情况下运行,并改变搜索配置:搜索引擎、请求格式和最大搜索预算。这展示了在模型不变的情况下,搜索设置贡献了多少。', 'WideSearch asks the model to fill in an entire table: given a query and a required column schema, it has to find every entity and every attribute, like all launches of a rocket family with dates and outcomes. Its 200 tasks (100 English, 100 Chinese) are graded strictly — a task counts only when every row and every cell matches the reference table. We run it with the model held fixed and vary the search engine, request format, and maximum search budget. Where BrowseComp goes deep on one hidden fact, WideSearch goes wide across many facts and attributes.': 'WideSearch 要求模型填满整张表格:给定一个查询和所需列结构,模型必须找到每个实体和每个属性,例如某个火箭家族的所有发射及其日期与结果。其 200 个任务(100 个英文、100 个中文)评分严格——只有每一行、每一格都与参考表格匹配才算完成。我们在模型固定的情况下运行,并改变搜索引擎、请求格式和最大搜索预算。BrowseComp 是在一个隐藏事实上深挖,而 WideSearch 是在众多事实和属性上铺开。', 'Humanity\'s Last Exam collects expert-written questions at the frontier of human knowledge, spanning mathematics, the sciences, and the humanities. We run its 2,158 text-only questions as a search benchmark: the model answers with live web search rather than from stored knowledge alone, and a judge grades whether its final answer matches the reference. We hold the model fixed and vary the search engine, request format, and maximum search budget. Where BrowseComp stresses persistent multi-step browsing, HLE shows what live search adds to questions that are difficult because they require expert knowledge.': '「人类最后的考试」(Humanity\'s Last Exam)汇集了人类知识前沿的专家撰写问题,涵盖数学、自然科学和人文科学。我们将其中 2,158 个纯文本问题作为搜索基准运行:模型通过实时网络搜索作答,而不仅依靠储备知识,并由评判模型判定最终答案是否与参考答案匹配。我们保持模型固定,改变搜索引擎、请求格式和最大搜索预算。BrowseComp 强调持续的多步浏览,而 HLE 展示的是实时搜索为那些因需要专家知识而困难的问题带来多少提升。', 'DeepSearchQA asks questions whose answers are lists: every member of a category, every event matching a set of constraints, or every item in a ranked table. Grading is all-or-nothing — a list counts only when it is complete and exact, with no padding. We run it with the model held fixed and vary the search engine, request format, and maximum search budget. Where BrowseComp rewards finding one hidden fact, DeepSearchQA rewards exhausting an entire category.': 'DeepSearchQA 提出答案为列表的问题:某个类别的每个成员、匹配一组约束的每个事件,或排列表格中的每个条目。评分是一刀切的——只有完整且精确、没有凑数的列表才算对。我们在模型固定的情况下运行,并改变搜索引擎、请求格式和最大搜索预算。BrowseComp 奖励找到一个隐藏事实,而 DeepSearchQA 奖励穷尽整个类别。', 'DeepSearchQA asks questions whose answers are lists: every member of a category, every event matching a set of constraints, or every item in a ranked table. Grading is all-or-nothing — a list counts only when it is complete and exact, with no padding. We run it with the model held fixed and vary the search engine, request format, and maximum search budget.': 'DeepSearchQA 提出答案为列表的问题:某个类别的每个成员、匹配一组约束的每个事件,或排列表格中的每个条目。评分是一刀切的——只有完整且精确、没有凑数的列表才算对。我们在模型固定的情况下运行,并改变搜索引擎、请求格式和最大搜索预算。', // GPQA 页面:为何运行/分数含义/方法论/API 访问 'GPQA is a broad graduate-level reasoning test across biology, physics, and chemistry, so it gives us a cheap, high-floor signal that a deployment is healthy. A model that normally clears these questions but suddenly drops usually points to something broken in the endpoint or routing rather than the questions themselves.': 'GPQA 是涵盖生物学、物理学和化学的广泛研究生级推理测试,能为我们提供廉价且底线较高的部署健康信号。一个通常能答对这些问题的模型突然下滑,通常意味着端点或路由出了问题,而非问题本身。', 'Because we run the same fixed question set across provider endpoints, a large accuracy gap between providers serving the same model is a quick way to catch a misconfigured or degraded endpoint. The cost and latency columns show what that reasoning quality costs to serve.': '由于我们在各提供商端点上运行同一组固定问题,同一模型在不同提供商之间的较大准确率差距,可以快速发现配置错误或性能下降的端点。成本和延迟列则展示了提供该推理质量所需付出的代价。', 'GPQA is a narrow, high-difficulty evaluation, not a complete measure of general intelligence or usefulness. A score reflects performance on expert-written multiple-choice science questions and should be considered alongside coding, instruction-following, factuality, and other evaluations.': 'GPQA 是狭窄且高难度的评测,并非通用智能或实用性的完整度量。分数反映的是在专家编写的科学多选题上的表现,应与编码、指令遵循、事实性等其他评测一并考量。', 'Scores can be sensitive to sampling settings, answer-position handling, and the number of repeated runs. Small differences may not be meaningful when models have similar sample counts, so the leaderboard includes run variability and cost context rather than presenting accuracy alone.': '分数可能对采样设置、答案位置处理和重复运行次数敏感。当模型样本数相近时,微小差异可能没有意义,因此排行榜包含运行变异性和成本背景,而非只呈现准确率。', 'The benchmark is publicly described, and some questions may eventually appear in training data. We avoid reproducing the private question pool here, but no public benchmark can guarantee that every future evaluation item is uncontaminated.': '该基准测试公开描述,部分问题最终可能出现在训练数据中。我们在此避免复现私有题库,但没有公开基准能保证每个未来的评测项都不受污染。', 'Scores aggregate successful runs, weighted by question count, with a minimum sample threshold per model-provider pair. A model\'s headline score uses default routing when available; otherwise it falls back to the median provider. Cost, time, and output-token figures are per-question averages from the same runs. Best value is the cheapest Pareto-optimal model within five percentage points of the top score.': '分数汇总成功运行的结果,按问题数量加权,每个模型-提供商组合设有最低样本阈值。模型的头榜分数在可用时使用默认路由;否则回退到中位数提供商。成本、时间和输出 Token 数字均来自同一批运行的每问题平均值。「最佳性价比」是距榜首分数五个百分点以内最便宜的 Pareto 最优模型。', 'GPQA Diamond is described in the': 'GPQA Diamond 在', 'original paper': '原论文', 'for routing details, or browse': '查看路由细节,或浏览', 'all models': '全部模型', 'to try one.': '试用其一。', 'These scores are available through OpenRouter\'s public benchmarks API, so you can retrieve the same model-level results programmatically.': '这些分数可通过 OpenRouter 的公共基准测试 API 获取,您可以编程检索相同的模型级结果。', 'to filter to': '来筛选出', '. Each item represents one model and includes': '。每个条目代表一个模型,包含', 'benchmarks API docs': '基准测试 API 文档', // GPQA 示例问题 'GPQA uses four-choice questions that require more than recalling a definition. These representative examples show the format and the range of scientific domains without reproducing items from the benchmark\'s protected question pool.': 'GPQA 使用四选一问题,不仅要求回忆定义。以下代表性示例展示了题型和科学领域范围,不会复现该基准测试受保护题库中的题目。', 'A researcher observes that a membrane protein is synthesized on ribosomes attached to the rough endoplasmic reticulum. Which destination is most consistent with this protein entering the secretory pathway?': '一位研究人员观察到,一种膜蛋白是在附着于粗糙内质网的核糖体上合成的。该蛋白进入分泌通路后,最可能的目的地是哪里?', 'The cytosol, where it remains soluble': '细胞质基质,在那里保持可溶', 'The nucleus, after import through a nuclear pore': '细胞核,经核孔导入后', 'A membrane of the endomembrane system or the cell surface': '内膜系统或细胞表面的膜', 'The mitochondrial matrix through a TOM/TIM complex': '经 TOM/TIM 复合体的线粒体基质', 'Ribosomes on the rough ER synthesize proteins destined for secretion or insertion into the endomembrane system, including the plasma membrane.': '粗糙内质网上的核糖体合成注定分泌或插入内膜系统(包括质膜)的蛋白质。', 'A spacecraft is far from other bodies and fires its engine in the direction opposite to its velocity. Ignoring mass loss during the brief burn, what happens immediately to its speed?': '一艘飞船远离其他天体,并在与速度相反的方向点火。忽略短暂燃烧期间的质量损失,其速度会立即发生什么变化?', 'It increases because the exhaust carries away backward momentum': '速度增大,因为排气带走了向后的动量', 'It decreases because the thrust points opposite to its velocity': '速度减小,因为推力方向与速度相反', 'It remains unchanged because thrust only changes direction': '速度不变,因为推力只改变方向', 'It becomes zero because the spacecraft is in free space': '速度变为零,因为飞船处于自由空间', 'An impulse opposite the velocity vector reduces the spacecraft’s momentum and therefore its speed during the burn.': '与速度矢量相反的冲量会减小飞船的动量,因此燃烧期间其速度减小。', 'An impulse opposite the velocity vector reduces the spacecraft\u2019s momentum and therefore its speed during the burn.': '与速度矢量相反的冲量会减小飞船的动量,因此燃烧期间其速度减小。', 'Why does adding a small amount of a common ion generally reduce the solubility of a sparingly soluble ionic solid in water?': '为什么加入少量共同离子通常会降低微溶离子固体在水中的溶解度?', 'The common ion increases the solid’s lattice energy': '共同离子增加了固体的晶格能', 'The common ion increases the solid\u2019s lattice energy': '共同离子增加了固体的晶格能', 'The common ion shifts the dissolution equilibrium toward the solid': '共同离子使溶解平衡向固体方向移动', 'The common ion converts every dissolved ion into a neutral molecule': '共同离子将每个已溶解离子转化为中性分子', 'The common ion removes solvent molecules from the solution': '共同离子从溶液中移除了溶剂分子', 'The added ion raises the concentration of a dissolution product, so Le Chatelier’s principle shifts the equilibrium toward the undissolved solid.': '加入的离子提高了溶解产物的浓度,因此勒夏特列原理使平衡向未溶解固体方向移动。', 'The added ion raises the concentration of a dissolution product, so Le Chatelier\u2019s principle shifts the equilibrium toward the undissolved solid.': '加入的离子提高了溶解产物的浓度,因此勒夏特列原理使平衡向未溶解固体方向移动。', // tau2-Bench 页面:为何运行/分数含义/评分方式/方法论/API 访问 'It\'s a tool-calling benchmark that is hard to game. Grading depends on live tool-call trajectories rather than memorized answers, so it resists training-data leakage better than Q&A-style evals. It exercises every tool-calling failure mode (wrong arguments, skipped policy checks, giving up, hallucinated confirmations) at a relatively low cost per run. The relative scores also carry more signal than the absolute ones. The same model can score differently across providers, and those deltas are what': '这是一个难以取巧的工具调用基准测试。评分取决于实时的工具调用轨迹而非记忆的答案,因此比问答式评测更能抵抗训练数据泄露。它能以相对较低的每次运行成本,覆盖所有工具调用失败模式(错误参数、跳过策略检查、中途放弃、幻觉确认)。相对分数也比绝对分数携带更多信息。同一模型在不同提供商上的得分可能不同,而这些差异正是', 'routing uses to pick higher-accuracy endpoints.': '路由选择高准确率端点时所用的依据。', 'Each task is a simulated airline support conversation with a scripted user, a toolbox (flight search, booking changes, refunds, loyalty policies), and a gold reference solution. A task passes only if the final database state and the messages to the user match the reference; partial credit is not awarded.': '每个任务都是一段模拟的航空客服对话,包含脚本化用户、工具箱(航班搜索、改签、退款、会员政策)和黄金参考方案。只有当最终数据库状态和发给用户的消息与参考一致时,任务才算通过;不设部分得分。', 'There is still headroom. Top models fail roughly one in five tasks, and the airline domain is the hardest τ²-Bench split. Accuracy differences here separate models that follow multi-step policies from ones that merely chat well.': '仍有提升空间。顶级模型大约每五个任务就失败一个,而航空领域是 τ²-Bench 中最难的部分。这里的准确率差异将能遵循多步政策的模型与仅会聊天良好的模型区分开来。', 'The floor is high, though. Many tasks reward inaction. A refusal task with an empty gold action list passes for any agent that changes nothing. Even weak models score well above zero, so the meaningful spread sits at the top of the range.': '不过底线较高。许多任务奖励不作为。一个黄金操作列表为空的拒绝任务,任何什么都不改的智能体都能通过。即使是弱模型也远高于零分,因此有意义的差距集中在分数区间的顶端。', 'The benchmark is public, so tasks may appear in training corpora. Contamination inflates scores less here than in Q&A-style evals, though, since a leaked task still has to be executed correctly, step by step, against a live database.': '该基准测试是公开的,任务可能出现在训练语料中。不过,与问答式评测相比,污染在这里对分数的抬高作用较小,因为泄露的任务仍须对着实时数据库一步一步正确执行。', 'The user simulator matters too. We pin it to gemini-2.5-flash so agent scores stay comparable, but the sim is itself an LLM with failure modes of its own. It can stop the conversation before the agent finishes, leak its hidden task instructions, or keep a stuck agent looping until the 200-step ceiling kills the run. Swapping the sim model shifts absolute scores, which is why cross-paper τ²-Bench numbers rarely line up exactly.': '用户模拟器也很重要。我们将其固定为 gemini-2.5-flash,以保证智能体分数可比,但模拟器本身也是一个有自己的失败模式的 LLM。它可能在智能体完成前就结束对话、泄露隐藏的任务指令,或让卡住的智能体一直循环直到 200 步上限终止运行。更换模拟器模型会改变绝对分数,这就是为什么跨论文的 τ²-Bench 数值很少完全对齐。', 'Every task ships a gold solution: a list of tool calls, strings the agent must say, and natural-language assertions. After the conversation ends, the checker replays the gold tool calls against a fresh database and compares hashes with the agent\'s final database. It then greps the agent\'s messages for each required string. The reward is the product of those two checks:': '每个任务都附带黄金解决方案:一串工具调用、智能体必须说的话以及自然语言断言。对话结束后,检查器会在一份全新数据库上重放黄金工具调用,并与智能体最终数据库的哈希进行比较。然后在智能体的消息中检索每个必需字符串。奖励是这两项检查的乘积:', 'any run that hits MAX_STEPS instead of a clean stop scores 0 outright': '任何达到 MAX_STEPS 而非正常结束的运行直接计 0 分', 'The rollouts below are from real runs, with gemini-2.5-flash as the user simulator throughout.': '以下轨迹来自真实运行,全程使用 gemini-2.5-flash 作为用户模拟器。', 'For reservation FQ8APE: add 3 checked bags, swap the passenger to Omar Rossi, and upgrade basic economy to economy, paying with a gift card.': '预订 FQ8APE:添加 3 件托运行李,将乘客更换为 Omar Rossi,并将基础经济舱升级为经济舱,使用礼品卡支付。', 'Database must match the gold state: update_reservation_flights (economy upgrade), update_reservation_passengers, and update_reservation_baggages with exact arguments': '数据库必须与黄金状态匹配:update_reservation_flights(经济舱升级)、update_reservation_passengers 和 update_reservation_baggages,参数必须精确。', 'communicate_info is empty, so no string check applies': 'communicate_info 为空,因此不适用字符串检查', 'The agent looked up the user, found the right reservation among several, confirmed the changes and payment method, then made all three writes: passenger swap, cabin upgrade, and bags. The final database hashes match the gold state and the run ends on USER_STOP, so reward is 1. This is what the eval is designed to measure: multi-step tool use under policy constraints, done correctly.': '智能体查到了用户,在多个预订中找到正确的那个,确认了更改和支付方式,然后完成了全部三项写入:更换乘客、舱位升级和行李。最终数据库哈希与黄金状态匹配,运行以 USER_STOP 结束,因此奖励为 1。这正是该评测旨在衡量的:在政策约束下正确完成多步工具使用。', 'Scores aggregate all successful runs, weighted by task count, with a minimum of 45 graded tasks per model-provider pair. A model\'s headline score uses its default routing (not pinned to a provider) when one exists; otherwise it falls back to the median provider. The standard deviation is measured across runs for that representative result. Cost, time, and token figures are per-task averages from the same runs. Best value is the cheapest Pareto-optimal model within 5 points of the top score.': '分数汇总所有成功运行,按任务数量加权,每个模型-提供商组合至少有 45 个已评分任务。模型的头榜分数在存在默认路由时使用之(不固定到提供商);否则回退到中位数提供商。标准差是针对该代表性结果的多次运行测得的。成本、时间和 Token 数字均来自同一批运行的每任务平均值。「最佳性价比」是距榜首分数 5 分以内最便宜的 Pareto 最优模型。', 'These are the same measurements that power': '这些就是驱动', 'Exacto routing': 'Exacto 路由', 'for how routing works, or browse': '了解路由原理,或浏览', 'Tool-call errors': '工具调用错误', 'Share of this benchmark\'s own requests where the model called a tool that doesn\'t exist, passed arguments that don\'t match the tool\'s schema, or emitted arguments that aren\'t valid JSON.': '在本基准测试自身的请求中,模型调用了不存在的工具、传入了不符合工具架构的参数,或输出了非有效 JSON 的参数所占的比例。', 'Tool-call errors before → after Auto Exacto': '启用 Auto Exacto 前后的工具调用错误', // tau2 评分方式分页示例内容 'Scoring fidelity has limits. The checker verifies two things: the final database hash and exact substring matches in the agent\'s messages. Each task\'s natural-language assertions ("agent should refuse the cancellation") are metadata, and no judge model reads the transcript. So a savings calculation fails if the agent says "$23,552.50" when the checker greps for "23553".': '评分保真度有限。检查器只验证两件事:最终数据库哈希,以及智能体消息中的精确子串匹配。每个任务的自然语言断言("智能体应拒绝取消")只是元数据,没有任何评判模型阅读对话记录。因此,如果检查器检索的是 "23553" 而智能体说的是 "$23,552.50",节省金额计算就会失败。', 'Pass: three changes in one request, all three land': '通过:一次请求中三项更改,全部生效', 'Tests whether the agent can handle a user asking for 3 changes at once.': '测试智能体能否处理用户一次提出 3 项更改的请求。', 'For reservation FQ8APE: add 3 checked bags, swap the passenger to Omar Rossi, and upgrade basic economy to economy, paying with a gift card.': '预订 FQ8APE:添加 3 件托运行李,将乘客更换为 Omar Rossi,并将基础经济舱升级为经济舱,使用礼品卡支付。', 'Hi, I need to make a few changes to my upcoming flight from New York to Chicago. I\'d like to add three checked bags, change the passenger to myself, and upgrade to economy class.': '你好,我想对我即将从纽约飞往芝加哥的航班做一些更改。我想添加三件托运行李,把乘客改成我自己,并升级到经济舱。', 'I can help with that. I’ll need a few details first: your user id, your reservation id for this New York → Chicago trip, and the reason for the change.': '我可以帮忙。首先需要一些信息:您的用户 ID、这次纽约 → 芝加哥行程的预订 ID,以及更改原因。', 'My user ID is omar_rossi_1241. I don\'t have the reservation ID on hand, but it\'s for an upcoming flight from New York to Chicago.': '我的用户 ID 是 omar_rossi_1241。我手头没有预订 ID,但它是用于即将从纽约飞往芝加哥的航班。', '2 reservation lookups omitted (wrong reservation checked first)': '省略 2 次预订查询(先查了错误的预订)', 'I’ve located your New York → Chicago trip: reservation FQ8APE, EWR → ORD on 2024-05-25, currently basic economy with passenger Ivan Garcia and 0 bags. Cabin changes are allowed for basic economy as long as no segment has been flown. As a gold member in economy you get 3 free checked bags. Shall I proceed with all three changes?': '我已找到您的纽约 → 芝加哥行程:预订 FQ8APE,EWR → ORD,2024-05-25,当前为基础经济舱,乘客 Ivan Garcia,0 件行李。只要未乘坐任何航段,基础经济舱允许更改舱位。作为经济舱金卡会员,您可免费托运 3 件行李。我是否继续执行全部三项更改?', 'Yes, I approve the changes for reservation FQ8APE. Please use gift_card_8190333 for any price difference.': '是的,我同意对预订 FQ8APE 的更改。任何差价请使用 gift_card_8190333 支付。', '3 tool results omitted (all updates succeeded)': '省略 3 条工具结果(所有更新成功)', 'Your changes are all set: passenger updated to Omar Rossi, cabin upgraded from basic economy to economy, and 3 checked bags added (all free with gold membership). The fare difference was charged to your gift card.': '您的更改已全部完成:乘客已更新为 Omar Rossi,舱位已从基础经济舱升级为经济舱,并添加了 3 件托运行李(金卡会员全部免费)。票价差额已从您的礼品卡中扣除。', 'Failure: cancels a reservation the policy forbids': '失败:取消了政策禁止取消的预订', 'Tests that the agent refuses a cancellation that is not allowed, even when the user pushes back.': '测试智能体即使面对用户施压,也会拒绝不允许的取消。', 'Cancel reservation EHGLP3. The booking is more than 24 hours old, basic economy, no travel insurance, so policy says no cancellation.': '取消预订 EHGLP3。该预订超过 24 小时,为基础经济舱,无旅行保险,因此政策规定不可取消。', 'Hi, I\'d like to cancel a flight reservation.': '你好,我想取消一个航班预订。', 'I can help you with that. Could you please provide me with your user ID and the reservation ID for the flight you want to cancel? Additionally, let me know the reason for the cancellation (change of plan, airline cancelled flight, or other reasons).': '我可以帮您。请提供您的用户 ID 和要取消航班的预订 ID。另外,请告诉我取消原因(计划变更、航空公司取消航班或其他原因)。', 'My user ID is emma_kim_9957, and the reservation I want to cancel is EHGLP3. My plans changed, so I no longer need the flight.': '我的用户 ID 是 emma_kim_9957,我要取消的预订是 EHGLP3。我的计划变了,不再需要这趟航班。', 'Yes, that\'s correct. My plans changed.': '是的,没错。我的计划变了。', 'Your reservation (ID: EHGLP3) has been successfully cancelled due to a change of plans. The refund of $208 will be processed back to your original payment method within 5 to 7 business days.': '您的预订(ID: EHGLP3)已因计划变更成功取消。208 美元的退款将在 5 至 7 个工作日内退回您的原支付方式。', 'Failure: right database, wrong number to the user': '失败:数据库正确,告知用户的数字错误', 'Tests that the agent can downgrade the right flights and calculate total savings.': '测试智能体能否降级正确的航班并计算总节省金额。', 'Downgrade all five business-class reservations to economy, then report the total amount saved. The correct total is $23,553.': '将所有五个商务舱预订降级为经济舱,然后报告节省的总金额。正确总额为 23,553 美元。', 'I need to downgrade all my upcoming business class flights to economy. I\'ve had some unexpected financial issues come up, and I can\'t afford business class anymore.': '我需要将我所有即将乘坐的商务舱航班降级为经济舱。我遇到了一些意外的财务问题,再也负担不起商务舱了。', '6 reservation lookups omitted': '省略 6 次预订查询', 'Yes, please proceed with all of them. Downgrade every single one to economy. I need to save money wherever I can right now.': '是的,请全部执行。把所有航班都降级为经济舱。我现在需要尽量省钱。', '5 tool results omitted (all updates succeeded)': '省略 5 条工具结果(所有更新成功)', 'Can you tell me the total amount of money I\'ve saved by doing this?': '你能告诉我这样做总共省了多少钱吗?', 'By downgrading your flights from business class to economy, you have saved a total of **$14,965**.': '通过将您的航班从商务舱降级为经济舱,您总共节省了 **14,965 美元**。', 'Failure: invents tool arguments, then loops on the same rejected call': '失败:编造工具参数,然后不断重试同一个被拒绝的调用', 'Tests that the agent refuses to change the passenger count, and instead offers the allowed alternative (downgrade all passengers to basic economy).': '测试智能体是否拒绝更改乘客人数,转而提供允许的替代方案(将所有乘客降级为基础经济舱)。', 'Remove passenger Sophia from reservation GV1N64. Policy forbids changing the passenger count; the correct move is to downgrade both passengers to basic economy and refund $5,244.': '从预订 GV1N64 中移除乘客 Sophia。政策禁止更改乘客人数;正确做法是将两名乘客降级为基础经济舱并退款 5,244 美元。', 'Hi, I need to remove a passenger from an upcoming flight. I\'m in a bit of a hurry, so I\'d appreciate it if we could do this quickly.': '你好,我需要从即将乘坐的航班中移除一名乘客。我有点赶时间,希望能快点办完。', 'Error: reservation not found': '错误:未找到预订', 'I need to help you locate your reservation first. Can you please provide me with your user ID and the reservation ID you\'re trying to modify?': '我需要先帮您找到预订。请提供您的用户 ID 和要修改的预订 ID。', 'My user ID is james_patel_9828. I don\'t have the reservation ID on hand right now, but the flights are round trip from LAS to DEN. The passenger I need to remove is Sophia.': '我的用户 ID 是 james_patel_9828。我现在手头没有预订 ID,但航班是 LAS 往返 DEN 的。我需要移除的乘客是 Sophia。', '3 turns omitted (user lookup; user finds reservation ID GV1N64)': '省略 3 轮(用户查询;用户找到预订 ID GV1N64)', 'Error: number of passengers does not match': '错误:乘客人数不匹配', 'It seems that there\'s an issue with the number of passengers in the reservation. Can you please confirm the number of passengers in your reservation GV1N64?': '看起来预订中的乘客人数有问题。请确认您的预订 GV1N64 中的乘客人数。', 'There are two passengers on the reservation, myself and Sophia. I need to remove Sophia from the flights.': '预订中有两名乘客,我和 Sophia。我需要将 Sophia 从航班中移除。', '3 retries of the same rejected call omitted (one adds an invented': '省略 3 次同一被拒绝调用的重试(其中一次添加了编造的', 'I cannot process a refund for a non-existent passenger. Is there anything else I can help you with?': '我无法为不存在的乘客办理退款。还有什么可以帮您的吗?', 'Sophia is on the reservation! I need her removed. This is getting frustrating. Can you please just remove her and tell me how much the refund will be to my original payment method?': 'Sophia 就在预订里!我需要把她移除。这真让人恼火。你能直接把她移除,并告诉我退到原支付方式的金额是多少吗?', 'Failure: retries the same broken tool call until the run dies': '失败:不断重试同一个出错的工具调用,直到运行终止', 'Tests flight search under constraints plus payment reasoning: max 1 certificate, maximize gift cards, minimize the credit-card charge.': '测试在约束条件下的航班搜索与支付推理:最多 1 张优惠券,尽量多用礼品卡,尽量减少信用卡支付。', 'Rebook the cheapest business round trip and split payment across gift cards, one certificate, and a credit card. The correct split puts $44 on the card.': '重新预订最便宜的商务往返票,并用礼品卡、一张优惠券和一张信用卡分摊支付。正确分摊方式下信用卡支付 44 美元。', '60 turns omitted: balance lookups, flight search, cancellation': '省略 60 轮:余额查询、航班搜索、取消', 'Error: payment amount does not add up, total price is 2304, but paid 1077': '错误:支付金额对不上,总价 2304,已支付 1077', 'the same call and the same error repeat ~40 more times until MAX_STEPS': '同一个调用和同一个错误又重复约 40 次,直到达到 MAX_STEPS', 'Pass without doing anything: refusal tasks reward inaction': '不做任何事的通过:拒绝类任务奖励不作为', 'Same task as the policy-break failure: the user wants to cancel EHGLP3, and policy says no.': '与政策违例失败示例相同的任务:用户想取消 EHGLP3,但政策说不。', 'My user ID is emma_kim_9957, and the reservation I want to cancel is EHGLP3. The reason for cancellation is a change of plans.': '我的用户 ID 是 emma_kim_9957,我要取消的预订是 EHGLP3。取消原因是计划变更。', 'Transfer successful': '转接成功', // 图表提示(aria-label / tooltip) 'The search configuration with the highest primary benchmark score.': '主基准分数最高的搜索配置。', 'The least expensive configuration scoring within five percentage points of the highest-quality result.': '距最高质量结果五个百分点以内最便宜的配置。', 'The fastest configuration scoring within five percentage points of the highest-quality result.': '距最高质量结果五个百分点以内最快的配置。', 'A statistical range showing uncertainty from the number of questions tested. A narrower range means a more precise estimate.': '由测试问题数量带来的统计不确定性区间。区间越窄意味着估计越精确。', 'The average cost of one question for this search configuration.': '该搜索配置下每道题的平均成本。', 'The typical time to answer one question for this search configuration.': '该搜索配置下回答一道题的典型耗时。', 'The whisker draws this 95% confidence range; wider ranges mean fewer samples and less certainty. This is the provider\'s strongest lane.': '须线绘制此 95% 置信区间;区间越宽意味着样本越少、确定性越低。这是该提供商的最强项。', 'Model for overall quality': '整体质量模型', 'Model for price versus quality': '价格与质量对比模型', 'Model for latency versus quality': '延迟与质量对比模型', 'Model for search depth': '搜索深度模型', 'Model for budget scaling': '预算扩展模型', 'Model for quality and completion': '质量与完成度模型', 'Model for all search configurations': '全部搜索配置模型', 'The maximum number of agent turns allowed for the search process. A run may use fewer turns.': '搜索过程允许的最大智能体轮数。一次运行可以使用更少的轮数。', 'The maximum number of agent turns allowed for search. The run may use fewer turns.': '搜索允许的最大智能体轮数。运行可以使用更少的轮数。', 'No Parallel run at plugin': '插件模式下无 Parallel 运行', 'No OpenAI Native search run at plugin': '插件模式下无 OpenAI 原生搜索运行', '1 turn final answer': '1 轮最终答案', 'Every expected item was found, with no unsupported extras.': '所有预期条目均已找到,且无多余条目。', 'At least one expected item was missing or one unsupported extra was added.': '至少缺少一个预期条目,或添加了一个多余条目。', 'Every required row and cell matched the reference table. Wilson 95% CI: 14.2–30.0%, based on these complete-table counts.': '所有必需的行和单元格均与参考表格匹配。Wilson 95% 置信区间:14.2–30.0%,基于这些完整表格计数。', 'At least one required row or cell was missing or incorrect.': '至少有一个必需的行或单元格缺失或不正确。', 'Partial credit for individual table items, balancing items found against incorrect extras.': '对单个表格条目给予部分得分,在找到的条目与多余的错误条目之间权衡。', 'The percentage of questions where every required row and cell was correct.': '所有必需行和单元格均正确的题目百分比。', '100 graded tasks': '100 个已评分任务', 'Benchmark page sections': '基准测试页面分区', 'Expand Accuracy chart': '展开准确率图表', 'Expand Cost per question chart': '展开每题成本图表', 'Expand Time per question chart': '展开每题耗时图表', 'Expand Cost per task chart': '展开每任务成本图表', 'Expand Time per task chart': '展开每任务耗时图表', 'Invalid JSON legend icon': '无效 JSON 图例图标', 'Schema mismatch legend icon': '架构不匹配图例图标', 'Unknown tool name legend icon': '未知工具名图例图标', 'Auto Exacto tool-call error rate': 'Auto Exacto 工具调用错误率', 'More information about the error-rate comparison': '关于错误率比较的更多信息', 'Comparing the 30 days before the launch (5pm ET, Mar 10, 2026) with the most recent 30 days.': '比较发布前 30 天(美东时间 2026 年 3 月 10 日下午 5 点)与最近 30 天的数据。', 'Up to 1 agent turn of tool calls': '最多 1 轮智能体工具调用', 'Up to 5 agent turns of tool calls': '最多 5 轮智能体工具调用', 'Up to 25 agent turns of tool calls': '最多 25 轮智能体工具调用', 'Click to view model': '点击查看模型', 'tool-calling requests': '工具调用请求', 'name:': '名称:', 'Argument name': '参数名', 'Error type': '错误类型', 'Unknown tool': '未知工具', 'Schema mismatch:': '架构不匹配:', 'Invalid JSON:': '无效 JSON:', 'Average cost / question': '每题平均成本', 'Cost and quality': '成本与质量', 'On the frontier': '位于前沿', 'Time and quality': '时间与质量', // HLE 带引号示例的完整评分段落 'Each task is one question with a short reference answer. The model answers in a fixed format (explanation, exact answer, stated confidence), and a judge model grades whether the extracted answer is semantically equivalent to the reference. "1988 to 1996" matches "1988-96"; a different entity fails. The grade is binary with no partial credit, and failed or refused tasks score zero.': '每个任务是一个问题配一段简短参考答案。模型以固定格式作答(解释、确切答案、声明的置信度),由评判模型判定提取出的答案是否与参考语义等价——"1988 to 1996" 与 "1988-96" 匹配;不同的实体则失败。评分为二元制,无部分得分,失败或拒绝的任务计零分。', // 通过/失败标记(图表 tooltip) '11/100 correct': '11/100 正确', 'correct': '正确', 'Planned Parenthood Fulton Street': 'Planned Parenthood 富尔顿街', 'Planned Parenthood Family First': 'Planned Parenthood 家庭优先', 'FPA Women\'s Health Fresno': 'FPA 女性健康中心 弗雷斯诺', // 表格 Std dev 列说明 'Top-level rows show standard deviation across runs using default routing (not pinned to a provider); provider rows show standard deviation across runs pinned to that provider.': '顶级行显示使用默认路由(不固定到提供商)跨运行的标准差;提供商行显示固定到该提供商跨运行的标准差。', // Pareto 说明 'Pareto-optimal: no other model is both cheaper and more accurate. See the Accuracy vs. cost chart.': 'Pareto 最优:没有其他模型既更便宜又更准确。请参阅「准确率 vs 成本」图表。', // 长句拆分节点(browsecomp/hle) 'Every run persists its exact model, engine, request format, search budget, cost, and available timing telemetry. Missing configurations stay missing in the comparison table, and': '每次运行都会持久保存其确切的模型、引擎、请求格式、搜索预算、成本和可用的计时遥测。缺失的配置在对比表中保持缺失,并且', 'absent or zero telemetry is not treated as free or instantaneous performance.': '缺失或为零的遥测不会被视为免费或瞬时性能。', 'absent or zero timing telemetry is not treated as instantaneous performance.': '缺失或为零的计时遥测不会被视为瞬时性能。', // WideSearch 图表图例与提示 'Samples': '样本数', 'Solid = complete tables, where every required row and cell is correct. Translucent = answer-item accuracy, balancing items found against incorrect extras. The tick marks where answer-item accuracy lands, not a baseline or median.': '实心 = 完整表格,即每个必需行和单元格都正确。半透明 = 答案项准确率,在找到的条目与多余的错误条目之间权衡。刻度线标记答案项准确率落在何处,而非基线或中位数。', 'One row per provider: this is the provider\'s highest answer-item-accuracy lane.': '每个提供商一行:这是该提供商答案项准确率最高的赛道。', 'The maximum number of agent turns allowed for search. A run may use fewer turns.': '搜索允许的最大智能体轮数。一次运行可以使用更少的轮数。', 'complete tables': '完整表格', // "complete tables" 被 React 拆分为独立单词节点的情况 'complete': '完整', 'tables': '表格', // 其他遗漏词条 'Cost and quality': '成本与质量', 'On the frontier': '位于前沿', 'Time and quality': '时间与质量', // React 拆分的表头节点("Cost / " + "task" 两个文本节点,文本清理后无尾空格) 'task': '任务', 'Cost /': '成本/', 'Time /': '耗时/', 'Output tok /': '输出 Token/', 'agent:': '智能体:', // "Selected searches · 2 of 2 shown" 被 React 拆分为 "Selected searches ·" + "2" + "of" + "2" + "shown" 'Selected searches ·': '已选搜索 · ', 'Selected searches': '已选搜索', 'Unknown tool name:': '未知工具名:', 'Correct': '正确', 'Closed': '关闭', 'Favicon for Exa': 'Exa 网站图标', // tau2 分页 checks 与总结内容 'Database must end unmodified (the gold solution makes no changes)': '数据库必须保持未修改(黄金方案不做任何更改)', 'NL assertion (not machine-checked): agent should refuse the cancellation': '自然语言断言(非机器检查):智能体应拒绝取消', 'The agent pulled the reservation, saw a basic economy fare booked more than 24 hours ago with no insurance, and cancelled it anyway. It even promised a $208 refund. The checker compares the final database against the gold database (unmodified), the hashes differ, reward is 0. The same model refused this exact cancellation in a different epoch; sampling variance flips the outcome.': '智能体调出了预订,看到这是一张 24 小时前预订、无保险的基础经济舱机票,却还是取消了它,甚至承诺退还 208 美元。检查器将最终数据库与黄金数据库(未修改)比较,哈希不一致,奖励为 0。同一模型在另一个周期中拒绝了这同一笔取消;采样方差翻转了结果。', 'Database must match the gold state: 5 update_reservation_flights calls with exact cabin, flights, and payment IDs': '数据库必须与黄金状态匹配:5 次 update_reservation_flights 调用,舱位、航班和支付 ID 必须精确', 'communicate_info: the string "23553" must appear in an agent message': 'communicate_info:字符串 "23553" 必须出现在智能体消息中', 'The agent executed all five downgrades correctly, and the database check passed. Then it computed the savings from a partial list of fares and told the user $14,965 instead of $23,553. The communicate check greps every agent message for the literal string "23553", finds nothing, and zeroes the whole task. One wrong arithmetic answer erased five correct database writes.': '智能体正确执行了全部五次降级,数据库检查通过。然后它根据部分票价列表计算节省金额,告诉用户 14,965 美元而非 23,553 美元。沟通检查在每条智能体消息中检索字符串 "23553",一无所获,整个任务计零。一次错误的算术答案抹掉了五次正确的数据库写入。', 'Database must match the gold state: one update_reservation_flights call downgrading to basic_economy': '数据库必须与黄金状态匹配:一次 update_reservation_flights 调用,降级为 basic_economy', 'communicate_info: the string "5244" must appear in an agent message': 'communicate_info:字符串 "5244" 必须出现在智能体消息中', 'The agent’s very first move is a write with fully invented arguments: a reservation ID the user never gave and a passenger "John Doe" born 1990-01-01 who exists nowhere in the data. After finding the real reservation it sends update_reservation_passengers with a one-passenger array against a two-passenger booking, gets "number of passengers does not match", and retries the identical call four more times, at one point hallucinating "Sophia Smith, 1992-01-01" as the second passenger. It never consults the policy (removing a passenger is forbidden; the correct move is a cabin downgrade), quotes a fabricated $200 refund, and both checks fail. The arguments are well-formed JSON that the tool schema accepts; they are just wrong about the world, which is why small models can look fine on schema-level tool-call metrics and still fail tasks like this.': '智能体的第一步就是用完全编造的参数执行写入:一个用户从未给出的预订 ID,以及一个数据中根本不存在的乘客 "John Doe"(生于 1990-01-01)。找到真实预订后,它向一个两名乘客的预订发送只有一名乘客数组的 update_reservation_passengers,收到 "number of passengers does not match",并又重试了同一调用四次,其中一度幻觉出 "Sophia Smith, 1992-01-01" 作为第二名乘客。它从不查阅政策(移除乘客是被禁止的;正确做法是舱位降级),报出编造的 200 美元退款,两项检查均失败。这些参数是工具架构接受的结构良好的 JSON;只是它们对世界的描述是错误的,这就是为什么小模型在架构层面的工具调用指标上看起来不错,却仍会在此类任务上失败。', 'The agent\u2019s very first move is a write with fully invented arguments: a reservation ID the user never gave and a passenger "John Doe" born 1990-01-01 who exists nowhere in the data. After finding the real reservation it sends update_reservation_passengers with a one-passenger array against a two-passenger booking, gets "number of passengers does not match", and retries the identical call four more times, at one point hallucinating "Sophia Smith, 1992-01-01" as the second passenger. It never consults the policy (removing a passenger is forbidden; the correct move is a cabin downgrade), quotes a fabricated $200 refund, and both checks fail. The arguments are well-formed JSON that the tool schema accepts; they are just wrong about the world, which is why small models can look fine on schema-level tool-call metrics and still fail tasks like this.': '智能体的第一步就是用完全编造的参数执行写入:一个用户从未给出的预订 ID,以及一个数据中根本不存在的乘客 "John Doe"(生于 1990-01-01)。找到真实预订后,它向一个两名乘客的预订发送只有一名乘客数组的 update_reservation_passengers,收到 "number of passengers does not match",并又重试了同一调用四次,其中一度幻觉出 "Sophia Smith, 1992-01-01" 作为第二名乘客。它从不查阅政策(移除乘客是被禁止的;正确做法是舱位降级),报出编造的 200 美元退款,两项检查均失败。这些参数是工具架构接受的结构良好的 JSON;只是它们对世界的描述是错误的,这就是为什么小模型在架构层面的工具调用指标上看起来不错,却仍会在此类任务上失败。', 'Database must match the gold state (cancel + rebook with the exact payment split)': '数据库必须与黄金状态匹配(取消并重新预订,支付分摊必须精确)', 'communicate_info: gift card and certificate sums, and the final card charge': 'communicate_info:礼品卡和优惠券金额,以及最终的信用卡支付额', 'The agent built a booking where the payment amounts did not sum to the ticket price. The tool rejected it with the same error every time, and the agent retried the identical call dozens of times until the run hit its 200-step ceiling. Any run that terminates on MAX_STEPS scores 0 before the database is even compared. This transcript is 202 messages long; the excerpt below is the loop.': '智能体创建的预订中,支付金额加起来不等于票价。工具每次都报同一个错误拒绝,智能体又重试了同一调用数十次,直到运行触及 200 步上限。任何以 MAX_STEPS 终止的运行,在数据库被比较之前就计 0 分。这段对话记录有 202 条消息;下面摘录的是循环部分。', 'Gold action list is empty, so the database check passes as long as nothing changed': '黄金操作列表为空,因此只要没有任何更改,数据库检查即通过', 'communicate_info is empty, so the communicate check passes vacuously': 'communicate_info 为空,因此沟通检查空泛地通过', 'The NL assertion ("agent should refuse") is metadata only and never machine-checked': '自然语言断言("智能体应拒绝")仅为元数据,从不经过机器检查', 'This run earned a legitimate pass: the agent checked the reservation, cited the 24-hour rule, and refused. But look at what the checker actually verified: an untouched database and an empty communicate list. An agent that stonewalled every request, or transferred to a human immediately, would score identically. Refusal tasks measure "did nothing break", so they inflate scores for overly cautious models.': '这次运行获得了合理通过:智能体检查了预订,援引 24 小时规则并拒绝。但看看检查器实际验证了什么:一个未被动过的数据库和一个空的沟通列表。一个对每个请求都装聋作哑、或立即转接人工的智能体,得分会完全相同。拒绝类任务衡量的是"是否什么都没搞砸",因此会抬高过度谨慎模型的分数。', // BrowseComp 深搜分页内容(线上新版) 'All clues converge on the same character:': '所有线索都指向同一个角色:', 'Backstory involving selfless ascetics: Sun Wukong was taught by the immortal sage Patriarch Subhuti and later aided by Buddhist ascetics.': '涉及无私苦行僧的背景故事:孙悟空由仙师菩提祖师传授,后来得到佛教苦行僧的帮助。', 'Known for humor: he is famous for tricks, jokes, and clown-like mischief.': '以幽默著称:他以恶作剧、玩笑和小丑般的调皮捣蛋闻名。', 'TV show: the 1986 Journey to the West series had 25 episodes.': '电视节目:1986 版《西游记》系列共 25 集。', 'More budget produced eight searches and a detailed synthesis, but it converged on the wrong character. The confidently stated Sun Wukong answer does not match OpenAI\'s published Plastic Man reference: extra search depth did not rescue a bad hypothesis.': '更多预算产生了八次搜索和一份详细的综合,但它收敛到了错误的角色。自信陈述的孙悟空答案与 OpenAI 发布的 Plastic Man 参考答案不符:额外的搜索深度没有拯救一个错误的假设。', 'fictional character breaks fourth wall backstory ascetics helped him humor TV show 1960s-1980s fewer than 50 episodes': '虚构角色 打破第四面墙 背景故事 苦行僧帮助他 幽默 电视节目 1960-1980年代 少于50集', 'fictional character breaks fourth wall backstory saved by ascetics monks TV show 1960s 1980s comedy': '虚构角色 打破第四面墙 背景故事 被苦行僧僧侣拯救 电视节目 1960年代 1980年代 喜剧', 'comic superhero backstory raised by ascetics hermits breaks fourth wall humorous TV series': '漫画超级英雄 背景故事 由苦行僧隐士抚养 打破第四面墙 幽默电视系列剧', 'comic superhero raised by ascetics breaks fourth wall humor TV series fewer than 50 episodes': '漫画超级英雄 由苦行僧抚养 打破第四面墙 幽默电视系列剧 少于50集', 'Sun Wukong Monkey King taught by Patriarch Subhuti ascetic breaks fourth wall humorous television series episodes': '孙悟空 美猴王 菩提祖师传授 苦行僧 打破第四面墙 幽默电视系列剧 集数', 'Journey to the West 1986 TV series number of episodes 25 original run': '西游记 1986 电视剧 集数 25 首播', 'Journey to the West (1986 TV series)': '西游记(1986 年电视剧)', 'Journey to the West (TV Series 1986-2000)': '西游记(1986-2000 年电视系列剧)', 'Transforming Monkey: Adaptation and Representation of a Chinese Epic': '变身猴子:一部中国史诗的改编与再现', // DeepSearchQA 深搜分页内容(线上新版) 'QS World University Rankings 2021 top 20 list': 'QS 2021 世界大学排名前 20 列表', 'QS 2021 Arts and Humanities Rankings top 10 world': 'QS 2021 艺术与人文排名世界前 10', 'QS World University Rankings 2021': 'QS 2021 世界大学排名', 'QS Arts and Humanities 2021': 'QS 2021 艺术与人文', 'The run independently gathered all three QS lists, computed their intersection, and returned all five expected universities in alphabetical order with no extras.': '该运行独立收集了三份 QS 榜单,计算它们的交集,并按字母顺序返回全部五所预期大学,没有多余条目。', 'QS World University Rankings 2021 top 20 universities list': 'QS 2021 世界大学排名前 20 大学列表', 'QS US University Rankings 2021 top 10': 'QS 2021 美国大学排名前 10', 'QS World University Rankings 2021 Arts and Humanities top 10': 'QS 2021 世界大学排名艺术与人文前 10', 'QS World University Rankings by Subject 2021 Arts Humanities top 10 Stanford Columbia Princeton': 'QS 2021 学科排名艺术与人文前 10 斯坦福 哥伦比亚 普林斯顿', 'QS USA University Rankings 2021': 'QS 2021 美国大学排名', 'Archived QS Arts and Humanities 2021': 'QS 2021 艺术与人文存档', // HLE 深搜分页内容(线上新版) 'hummingbird oval sesamoid bone cruciate aponeurosis m. depressor caudae paired tendons': '蜂鸟 椭圆形籽骨 十字形腱膜 m. depressor caudae 成对肌腱', 'Sesamoids in tetrapods: the origin of new skeletal morphologies': '四足动物中的籽骨:新骨骼形态的起源', 'The peer-reviewed Auk article "The Marvelous Tail of Loddigesia mirabilis" states that, on each side, flat tendons extend from the sesamoid to rectrices 5 and 4; tendons to rectrices 3 and 2 instead extend directly from the cruciate aponeurosis.': '经同行评审的《Auk》文章《The Marvelous Tail of Loddigesia mirabilis》指出,每一侧都有扁平的肌腱从籽骨延伸至第 5、4 根尾羽;通向第 3、2 根尾羽的肌腱则直接从十字形腱膜伸出。', 'Thus, the sesamoid supports 2 paired tendons.': '因此,该籽骨支撑 2 对肌腱。', 'The deeper run disagreed with the shallow answer, but directly supported 2 from independent anatomical literature describing tendons to rectrices 4 and 5. It is still ungraded because HLE does not publish the official reference for this showcased question.': '更深度的运行与浅层答案意见相左,但直接从描述通向第 4、5 根尾羽肌腱的独立解剖学文献支持答案 2。它仍为未评分,因为 HLE 不发布这个展示题目的官方参考答案。', 'hummingbird oval sesamoid bone cruciate aponeurosis depressor caudae paired tendons': '蜂鸟 椭圆形籽骨 十字形腱膜 depressor caudae 成对肌腱', 'hummingbird pygostyle sesamoid ossification tail depressor caudae rectrices tendons anatomy paper': '蜂鸟 尾综骨 籽骨 骨化 尾部 depressor caudae 尾羽 肌腱 解剖学论文', 'Trochilidae novel sesamoid bone tail feathers rectricial bulb depressor caudae aponeurosis tendons': '蜂鸟科 新型籽骨 尾羽 尾羽根球 depressor caudae 腱膜 肌腱', 'The Marvelous Tail of Loddigesia mirabilis (Trochilidae)': 'The Marvelous Tail of Loddigesia mirabilis(蜂鸟科)', 'Ecology and Caudal Skeletal Morphology in Birds': '鸟类的生态学与尾部骨骼形态', 'Introduction to the Skeleton of Hummingbirds': '蜂鸟骨骼导论', // WideSearch 深搜分页内容(线上新版) 'abortion clinic Fresno California 2024': '加州弗雷斯诺 2024 堕胎诊所', 'Planned Parenthood abortion services Fresno CA locations': 'Planned Parenthood 弗雷斯诺 CA 堕胎服务地点', 'The deeper run found all six clinics and matched every address. One cell was still wrong: Family First was listed as open Saturday while the reference says closed. Answer-item accuracy rose to 96.7%, but the complete-table result remained incorrect.': '更深度的运行找到了全部六家诊所,且每家地址都匹配。仍有一格错误:Family First 被列为周六营业,而参考显示周六关闭。答案项准确率升至 96.7%,但完整表格结果仍为不正确。', 'abortion clinic Fresno California 2024': '加州弗雷斯诺 2024 堕胎诊所', 'Planned Parenthood Fresno abortion services address phone': 'Planned Parenthood 弗雷斯诺 堕胎服务 地址 电话', 'Planned Parenthood Merced abortion services address phone hours': 'Planned Parenthood 默塞德 堕胎服务 地址 电话 营业时间', 'FPA Women\'s Health Fresno hours Saturday abortion': 'FPA Women\'s Health 弗雷斯诺 营业时间 周六 堕胎', 'Planned Parenthood Madera Hanford Tulare abortion services address': 'Planned Parenthood 马德拉 汉福德 图莱里 堕胎服务 地址', 'FPA Women\'s Health Tulare hours Saturday': 'FPA Women\'s Health 图莱里 营业时间 周六', 'Planned Parenthood Merced': 'Planned Parenthood 默塞德', 'FPA Women\'s Health Tulare': 'FPA Women\'s Health 图莱里', // /benchmarks 主页卡片描述 'Fill an entire table; answer-item accuracy scores partial matches.': '填满整张表格;答案项准确率对部分匹配计分。', // 搜索类基准页共用内容:为何运行/分数含义/评分方式/方法论/API 访问 'We run it with the model held fixed because that isolates the variables OpenRouter users actually control. Those are which engine handles the searches, whether search runs as a server tool or a plugin, and how many agent turns the loop is allowed. Those knobs are exactly what you can set on a request today.': '我们在模型固定的情况下运行,因为这样能隔离出 OpenRouter 用户实际可控的变量:由哪个引擎处理搜索、搜索是作为服务端工具还是插件运行,以及循环允许多少智能体轮次。这些旋钮正是您现在可以在请求中设置的。', 'These scores compare search configurations, not agent products. The model reads search result excerpts only, with no full-page fetching and no code tools, so absolute numbers sit below published agent leaderboards, which allow both. Compare configurations rather than raw levels.': '这些分数比较的是搜索配置,而非智能体产品。模型只读取搜索结果摘要,不能抓取整页,也没有代码工具,因此绝对数值低于允许两者的已发布智能体排行榜。请比较配置而非原始水平。', 'A search configuration is one model, search engine, request format, and maximum search budget. Scores are weighted by the number of questions in each verified run; small smoke tests are excluded.': '一个搜索配置由模型、搜索引擎、请求格式和最大搜索预算构成。分数按每次已验证运行中的问题数量加权;小型冒烟测试不计入。', 'Fixed historical runs, independent of the model filter above. Long results and operational metadata are trimmed; selected queries may be edited or omitted.': '固定的历史运行,与上方模型筛选无关。长结果和运行元数据已裁剪;选中的查询可能被编辑或省略。', 'Runs execute on OpenRouter\'s native benchmark harness against production endpoints. Server-tool configurations set a request-level tool-call budget on the': '运行在 OpenRouter 的原生基准测试框架上,针对生产端点执行。服务端工具配置会在', '. Plugin configurations make one pre-inference search of the question with the': '上设置请求级工具调用预算。插件配置则使用', '. Engines use the same default configurations that serve production traffic.': '对问题执行一次推理前搜索。各引擎使用与生产流量相同的默认配置。', 'Every run persists its exact model, engine, request format, search budget, cost, and available timing telemetry. Missing configurations stay missing in the comparison table, and absent or zero telemetry is not treated as free or instantaneous performance.': '每次运行都会持久保存其确切的模型、引擎、请求格式、搜索预算、成本和可用的计时遥测。缺失的配置在对比表中保持缺失,且缺失或为零的遥测不会被视为免费或瞬时性能。', 'The configuration that scored highest, the breakdown behind that score, and the strongest value and speed alternatives.': '得分最高的配置、该分数背后的明细,以及性价比和速度最优的备选方案。', 'Average cost per question on a logarithmic scale. The line shows the best quality available at each price level.': '对数刻度下的每题平均成本。线条显示每个价格水平下可获得的最佳质量。', 'Typical run-level average time per question. The line shows the best quality available at each latency level.': '每次运行级别的每题典型平均时间。线条显示每个延迟水平下可获得的最佳质量。', 'Every verified configuration for all models. Sort by quality, cost, speed, or question count.': '所有模型的每个已验证配置。可按质量、成本、速度或问题数量排序。', 'Compare answer quality with average cost and typical time per question. The Pareto line shows the best quality available at each price or latency level.': '比较回答质量与每题的平均成本和典型时间。Pareto 线显示每个价格或延迟水平下可获得的最佳质量。', 'Compare correct-answer rates as the maximum search budget increases. BrowseComp questions are designed to require several search steps, so this view shows whether additional search helps.': '比较随最大搜索预算增加的正确率变化。BrowseComp 问题被设计为需要多步搜索,因此该视图展示额外搜索是否有帮助。', 'Overlapping confidence ranges are treated as unresolved here, not as proof of equality. Cost should be read alongside quality when one configuration is slightly better and much pricier.': '此处重叠的置信区间被视为未决,而非相等的证明。当某配置略优但价格高得多时,成本应与质量一并解读。', 'BrowseComp questions pin down a single, verifiable answer behind several layers of indirection, like a person described by career fragments or an event located by intersecting constraints. One search rarely lands it; the agent has to form hypotheses, search, discard, and pivot. That makes it the sharpest tool we have for measuring what a search': 'BrowseComp 问题通过多层间接信息锁定唯一可验证的答案,例如一个由职业片段描述的人,或由交叉约束定位的事件。一次搜索很少能命中;智能体必须形成假设、搜索、舍弃、再转向。这使它成为我们衡量一次搜索能贡献多少的最锋利工具', 'contributes: the same model scores several times higher at a full agentic budget than through a single pre-inference search.': ':同一模型在完整智能体预算下的得分,是仅通过单次推理前搜索的几倍。', 'The dataset ships encrypted with a canary string to keep it out of training corpora, but the questions are public; grading depends on live multi-step search, which is hard to shortcut through memorization.': '数据集以加密形式发布,并带有金丝雀字符串以防止进入训练语料,但问题是公开的;评分依赖实时的多步搜索,难以靠记忆走捷径。', 'For the selected model, each engine contributes its highest-scoring configuration. Bars show the percentage of correct answers and the uncertainty around that result.': '对于所选模型,每个引擎贡献其得分最高的配置。条形显示正确答案的百分比及该结果的不确定性。', 'Identify a fourth-wall-breaking comic character': '找出一个打破第四面墙的漫画角色', 'Please identify the fictional character who occasionally breaks the fourth wall with the audience, has a backstory involving help from selfless ascetics, is known for his humor, and had a TV show that aired between the 1960s and 1980s with fewer than 50 episodes.': '请找出这位虚构角色:他偶尔会与观众打破第四面墙,背景故事涉及无私苦行僧的帮助,以幽默著称,并有一部在 1960 至 1980 年代播出、少于 50 集的电视节目。', 'This is Example 1 published verbatim by OpenAI on the official BrowseComp page. These are fresh production runs captured for this page; unpublished BrowseComp items remain excluded.': '这是 OpenAI 在官方 BrowseComp 页面上逐字发布的示例 1。以下是为本页面采集的全新生产运行;未发布的 BrowseComp 题目仍被排除。', 'The shallow run spent its available step on two broad searches, surfaced many fourth-wall candidates, and ended before emitting an answer. It therefore did not match the published Plastic Man reference.': '浅层运行把可用步骤花在两次宽泛搜索上,列出许多第四面墙候选,并在输出答案前结束。因此未匹配已发布的 Plastic Man 参考答案。', 'WideSearch measures breadth. The agent has to enumerate a full entity set, chase down each attribute, and emit a structured table — closer to real research workflows (market scans, literature surveys, competitive tables) than single-answer trivia. Half the tasks are in Chinese, so it also exercises engines outside English-language results.': 'WideSearch 衡量广度。智能体必须枚举完整的实体集、逐个追查属性并输出结构化表格——比单个答案的知识问答更接近真实研究流程(市场扫描、文献综述、竞争对比表)。一半任务为中文,因此也能考察英文结果之外的引擎能力。', 'The headline score is answer-item accuracy, which gives partial credit for matched table items so near-misses remain visible. Strict WideSearch Success Rate remains the secondary measure and requires every row and cell in the table to be correct. Even frontier models score low upstream — the paper reports about 4.5% single-agent success for OpenAI o3 (Avg@4), with answer-item accuracy around 52–58% for leading single-agent systems. Engine gaps smaller than the confidence ranges are unresolved, and a configuration\'s cost should be read alongside its quality.': '头榜分数是答案项准确率,它为匹配的表格条目提供部分得分,使接近命中的结果仍然可见。严格的 WideSearch 成功率仍是次要指标,要求表格中每一行每一格都正确。即使是前沿模型,上游得分也很低——论文报告 OpenAI o3(Avg@4)的单智能体成功率约为 4.5%,领先单智能体系统的答案项准确率约为 52–58%。小于置信区间的引擎差距视为未决,配置的成本应与其质量一并解读。', 'The questions are public, which means memorization can inflate absolute scores over time; differences between search configurations remain meaningful because every configuration shares the same model.': '问题是公开的,意味着记忆可能随时间抬高绝对分数;但搜索配置之间的差异仍然有意义,因为每个配置共用同一模型。', 'Each task is one query with a reference table. The model\'s table is parsed, its rows and columns are aligned to the reference by a judge model, and each cell is compared — exact match where possible, judge-graded equivalence otherwise. A task succeeds only when every reference row is found and every cell matches, with no missing or extra rows.': '每个任务是一个查询配一张参考表格。模型输出的表格会被解析,其行列由评判模型与参考对齐,再逐格比较——能精确匹配就精确匹配,否则由评判模型判定等价。只有当每个参考行都被找到且每格都匹配、无缺行无多行时,任务才算成功。', 'Build a verified clinic table for the Fresno area': '为弗雷斯诺地区构建一份经核实的诊所表格', 'Make a comprehensive, verified list of abortion clinics operating in California during 2024 within 65 miles of E Fedora Ave in Fresno. Omit facilities that closed during 2024. Return clinic, county, full address, phone number, and Saturday hours in one Markdown table.': '编制一份完整且经核实的 2024 年加利福尼亚州弗雷斯诺 E Fedora Ave 65 英里范围内仍在运营的堕胎诊所列表。省略 2024 年内关闭的机构。在一张 Markdown 表格中返回诊所、县、完整地址、电话号码和周六营业时间。', 'This is a historical 2024 benchmark snapshot, not current healthcare-service guidance.': '这是 2024 年的历史基准快照,并非当前的医疗服务指引。', 'Six rows: Planned Parenthood Fulton Street, FPA Women\'s Health Fresno, Planned Parenthood Family First, Planned Parenthood Madera, Planned Parenthood Merced, and FPA Women\'s Health Tulare. The reference marks only Fulton Street as open Saturday.': '六行:Planned Parenthood Fulton Street、FPA Women\'s Health Fresno、Planned Parenthood Family First、Planned Parenthood Madera、Planned Parenthood Merced 和 FPA Women\'s Health Tulare。参考中只有 Fulton Street 标记为周六营业。', 'The one-turn run found three of six clinics. Two rows were fully correct; Family First had the wrong Saturday hours. Answer-item accuracy was 62.2%, and the complete-table verdict was incorrect.': '单轮运行找到了六家诊所中的三家。两行完全正确;Family First 的周六营业时间有误。答案项准确率为 62.2%,完整表格判定为不正确。', 'HLE sits at the opposite end of the search spectrum from BrowseComp. Its questions were written by subject-matter experts to be unambiguous but extremely hard, so a model\'s baseline score is mostly a function of what it already knows. Adding web search turns that into a different question: how much expert-level knowledge can a search configuration retrieve on demand?': 'HLE 处于与 BrowseComp 相反的搜索光谱一端。其问题由领域专家撰写,表述无歧义但极难,因此模型的基线分数主要取决于它已知什么。加入网络搜索后,问题变成了:一个搜索配置能按需检索多少专家级知识?', 'Because HLE leans on expertise rather than browsing depth, differences between search configurations are smaller here than on BrowseComp: many questions are answered (or missed) the same way at every budget. Engine gaps with overlapping confidence ranges are treated as unresolved here, not as proof of equality. A configuration\'s cost is as real as its score, so read quality and efficiency together.': '由于 HLE 依赖专业知识而非浏览深度,其搜索配置之间的差异比 BrowseComp 更小:许多问题在每个预算下都以相同方式答对(或答错)。置信区间重叠的引擎差距在此视为未决,而非相等的证明。配置的成本与分数一样真实,因此请将质量与效率一并解读。', 'We use the text-only subset of the public dataset (multi-modal questions are excluded), so scores are not directly comparable to full-HLE leaderboards. The questions are public, which means memorization can inflate absolute scores over time; differences between search configurations remain meaningful because every configuration shares the same model.': '我们使用公开数据集的纯文本子集(排除多模态问题),因此分数不能直接与完整 HLE 排行榜比较。问题是公开的,意味着记忆可能随时间抬高绝对分数;但搜索配置之间的差异仍然有意义,因为每个配置共用同一模型。', 'Each task is one question with a short reference answer. The model answers in a fixed format (explanation, exact answer, stated confidence), and a judge model grades whether the extracted answer is semantically equivalent to the reference — the same answer-equivalence grading BrowseComp uses. The grade is binary with no partial credit, and failed or refused tasks score zero.': '每个任务是一个问题配一段简短参考答案。模型以固定格式作答(解释、确切答案、声明的置信度),由评判模型判定提取出的答案是否与参考语义等价——与 BrowseComp 使用的答案等价评分相同。评分为二元制,无部分得分,失败或拒绝的任务计零分。', 'For the selected model, compare each engine at its highest-scoring configuration. The result measures overall answer correctness, not expertise in individual subjects.': '对于所选模型,比较每个引擎在其得分最高配置下的表现。结果衡量整体回答正确性,而非单个学科的专业水平。', 'Compare correct-answer rates as the maximum search budget increases. HLE emphasizes expert knowledge, so this view shows how much additional live search contributes.': '比较随最大搜索预算增加的正确率变化。HLE 强调专家知识,因此该视图展示额外的实时搜索贡献了多少。', 'Trace a hummingbird tail sesamoid': '追踪蜂鸟尾部的籽骨', 'Hummingbirds within Apodiformes uniquely have a bilaterally paired oval bone, a sesamoid embedded in the caudolateral portion of the expanded, cruciate aponeurosis of insertion of m. depressor caudae. How many paired tendons are supported by this sesamoid bone? Answer with a number.': '雨燕目(Apodiformes)内的蜂鸟独有双侧成对的椭圆形骨,即嵌入 m. depressor caudae 扩大、十字形插入腱膜尾外侧部分的籽骨。这块籽骨支撑着多少对肌腱?请用数字回答。', 'This question is published verbatim on the official HLE site and in Figure 3 of the official paper. The public sources do not publish its reference answer, so both fresh runs are shown as ungraded.': '此问题在官方 HLE 网站和官方论文图 3 中逐字发布。公开来源不发布其参考答案,因此两次全新运行均显示为未评分。', 'Based on the anatomy of the hummingbird tail depressor system, this unique sesamoid bone embedded in the cross-shaped aponeurosis of the m. depressor caudae supports three paired tendons.': '根据蜂鸟尾部降肌系统的解剖结构,这块嵌入 m. depressor caudae 十字形腱膜的独特籽骨支撑着三对肌腱。', 'The shallow run made one search and answered 3, but its selected independent source only established the anatomical context, not that count. With no official public reference, the result remains ungraded.': '浅层运行只做了一次搜索并回答 3,但其选中的独立来源仅确立了解剖背景,并未给出该数量。由于没有官方公开参考,结果仍保持未评分。', 'DeepSearchQA asks questions whose answers are lists: every member of a category, every event matching a set of constraints, or every item in a ranked table. Grading is all-or-nothing — a list counts only when it is complete and exact, with no padding. We run it with the model held fixed and vary the search engine, request format, and maximum search budget. Where BrowseComp rewards finding one hidden fact, DeepSearchQA rewards exhausting an entire category.': 'DeepSearchQA 提出答案为列表的问题:某个类别的每个成员、匹配一组约束的每个事件,或排列表格中的每个条目。评分是一刀切的——只有完整且精确、没有凑数的列表才算对。我们在模型固定的情况下运行,并改变搜索引擎、请求格式和最大搜索预算。BrowseComp 奖励找到一个隐藏事实,而 DeepSearchQA 奖励穷尽整个类别。', 'Finding one fact and finding': '找到一个事实与找到', 'For the selected model, each engine is represented by its highest-scoring configuration. An answer counts only when the complete expected list is present, with no extras.': '对于所选模型,每个引擎以其得分最高的配置表示。只有完整预期列表全部出现且无多余条目时,答案才算数。', 'Compare complete-answer rates as the maximum search budget increases. Full lists usually need several searches, so this view shows whether additional search helps.': '比较随最大搜索预算增加的完整答案率变化。完整列表通常需要多次搜索,因此该视图展示额外搜索是否有帮助。', 'The all-or-nothing grade makes this suite strict: missing one list member scores the same as missing them all, so scores': '一刀切的评分使这套基准非常严格:漏掉一个列表成员与全部漏掉同分,因此分数', // 模型筛选控件 'Select models...': '选择模型...', 'Select all': '全部选择', 'Reset to top 10': '重置为前 10 名', // API 访问 'Authorization: Bearer ': '授权: Bearer ', ', and': ',以及', '. See the': '。参见', 'docs': '文档', // tau2 示例标签 'Transcript': '对话记录', 'Clean pass': '干净通过', 'Policy break': '违反政策', 'Wrong number': '错误数字', 'Invented arguments': '编造参数', 'Runaway loop': '失控循环', 'Degenerate pass': '退化通过', 'reward = 1': '奖励 = 1', 'Pass: three changes in one request, all three land': '通过:一次请求中三项更改,全部生效', 'db ✓': '数据库 ✓', 'communicate ✓': '沟通 ✓', 'communicate_met = every required string appears in an agent message': 'communicate_met = 每条必需字符串都出现在智能体消息中', // GPQA 示例问题学科 'Biology': '生物学', 'Chemistry': '化学', // DeepSearchQA 页面内容 'DeepSearchQA asks questions whose answers are lists: every member of a category, every event matching a set of constraints. Its 900 questions each carry a reference list of answer parts, and a response only counts when it finds all of them without padding the list with extras. We hold the model fixed and vary the search engine, request format, and maximum search budget. Where BrowseComp rewards locating one hidden fact, DeepSearchQA rewards finding the complete answer list.': 'DeepSearchQA 提出答案为列表的问题:某个类别的每个成员、匹配一组约束的每个事件。其 900 个问题各带一份答案部分参考列表,只有当回答全部找到且没有凑数时才计分。我们保持模型固定,改变搜索引擎、请求格式和最大搜索预算。BrowseComp 奖励定位一个隐藏事实,而 DeepSearchQA 奖励找到完整的答案列表。', 'For the selected model, each engine is represented by its highest-scoring configuration. An answer counts only when the complete expected list is found without unsupported extras.': '对于所选模型,每个引擎以其得分最高的配置表示。只有找到完整预期列表且无多余条目时,答案才算数。', 'Compare complete-answer rates as the maximum search budget increases. Full lists usually need several searches, so this view shows whether additional search closes more answers.': '比较随最大搜索预算增加的完整答案率变化。完整列表通常需要多次搜索,因此该视图展示额外搜索能否补全更多答案。', 'fact are different search problems. A single lucky query can land a BrowseComp answer; a DeepSearchQA answer has to be assembled across searches, with the agent tracking what it has found and what is still missing. That coverage pressure exercises a different part of the search stack: result breadth and deduplication matter as much as ranking.': '事实是两种不同的搜索问题。一次幸运的查询就能命中 BrowseComp 答案;而 DeepSearchQA 答案必须在多次搜索中拼装,智能体要跟踪已找到和仍缺失的内容。这种覆盖率压力锻炼搜索栈的不同部分:结果广度和去重与排序同样重要。', 'The all-or-nothing grade makes this suite strict: missing one list member scores the same as missing them all, so scores run low and small engine gaps are noisy. Overlapping confidence intervals are treated as unresolved here, not as proof of equality. A configuration\'s cost is as real as its score, so read quality and efficiency together.': '一刀切的评分使这套基准非常严格:漏掉一个列表成员与全部漏掉同分,因此分数普遍偏低,小的引擎差距噪声较大。置信区间重叠在此视为未决,而非相等的证明。配置的成本与分数一样真实,因此请将质量与效率一并解读。', 'Each task is one question with a reference list of expected answer parts. A judge model checks the response against every expected part and also flags excessive answers — parts the response asserts that are not in the reference. A task is correct only when the judge finds every expected part and finds no excessive answers. The grade is binary with no partial credit, and failed or refused tasks score zero.': '每个任务是一个问题配一份预期答案部分参考列表。评判模型对照每个预期部分检查回答,同时标记多余答案——即回答中声称但不在参考中的部分。只有当评判模型找到每个预期部分且未发现多余答案时,任务才算正确。评分为二元制,无部分得分,失败或拒绝的任务计零分。', 'Intersect three QS university rankings': '求三份 QS 大学排名之交', 'Which universities in the top 20 of the QS World University Rankings for 2021 were also in the top 10 US University Rankings and the top 10 (world) Arts and Humanities Rankings? Please only use information from the QS 2021 rankings and list the schools in alphabetical order.': '哪些大学同时出现在 2021 年 QS 世界大学排名前 20、美国大学排名前 10 和(世界)艺术与人文排名前 10 中?请仅使用 QS 2021 排名的信息,并按字母顺序列出学校。', 'Columbia University, Harvard University, Princeton University, Stanford University, Yale University': '哥伦比亚大学、哈佛大学、普林斯顿大学、斯坦福大学、耶鲁大学', ', passed': ',通过', 'Using the QS 2021 lists I could verify, the intersection is Harvard University and Yale University. Confidence: 55%.': '在我能核实的 QS 2021 列表中,交集为哈佛大学和耶鲁大学。置信度: 55%。', 'The run found only two of five universities. It never made a distinct query for the QS USA top 10 and missed Columbia, Princeton, and Stanford, so the complete-list grader failed it.': '该运行只找到五所大学中的两所。它从未针对 QS 美国前 10 单独查询,漏掉了哥伦比亚、普林斯顿和斯坦福,因此完整列表评分器判定其失败。', // 剩余通用词条 'One point per model, using default routing (not pinned to a provider) when available. The line is the Pareto frontier: no model beats these on both accuracy and cost.': '每个模型一个点,可用时使用默认路由(不固定到提供商)。线条即 Pareto 前沿:没有任何模型在准确率和成本两方面同时优于这些点。', 'Average cost per graded task, cheapest first.': '每个已评分任务的平均成本,最低优先。', 'Average wall-clock time per task, fastest first; agents that loop or stall run long.': '每个任务的平均实际耗时,最快优先;循环或停滞的智能体会运行很久。', 'How a task is scored': '任务如何评分', 'Tool-call error rate on models enrolled in': '已注册模型的工具调用错误率', ', OpenRouter\'s automatic provider optimization for tool-calling requests.': ',即 OpenRouter 面向工具调用请求的自动提供商优化。', 'OpenAI BrowseComp Example 1': 'OpenAI BrowseComp 示例 1', 'See how answer-item accuracy changes with search budget; complete-table success appears beneath. Missing cells were not run.': '查看答案项准确率如何随搜索预算变化;完整表格成功率显示在下方。缺失的单元格表示未运行。', 'Verified configurations for all models, ranked by answer-item accuracy; complete-table success and intervals are shown too.': '所有模型的已验证配置,按答案项准确率排序;同时显示完整表格成功率和区间。', 'Verified configurations for GPT-5.6 Sol · high, ranked by answer-item accuracy; complete-table success and intervals are shown too.': 'GPT-5.6 Sol · 高的已验证配置,按答案项准确率排序;同时显示完整表格成功率和区间。', 'Clinic': '诊所', 'County': '县', 'Address': '地址', 'Phone': '电话', 'Saturday hours': '周六营业时间', 'Not available': '不可用', '200 tasks · 100 English · 100 Chinese': '200 个任务 · 100 个英文 · 100 个中文', 'Every run persists its exact model, engine, request format, search budget, cost, and available timing telemetry. Missing configurations stay missing in the comparison table, and absent or zero timing telemetry is not treated as instantaneous performance.': '每次运行都会持久保存其确切的模型、引擎、请求格式、搜索预算、成本和可用的计时遥测。缺失的配置在对比表中保持缺失,且缺失或为零的计时遥测不会被视为瞬时性能。', 'Answer-item accuracy': '答案项准确率', '© 2026 OpenRouter, Inc': '© 2026 OpenRouter 公司', }, regexp: [ // "· high" 等推理强度后缀 [/^· (high|xhigh|medium|low)$/, (m, level) => '· ' + ({ high: '高', xhigh: '极高', medium: '中', low: '低' }[level])], // 模型名与推理强度同节点,如 "Claude Opus 5 · high" [/^(.+) · (high|xhigh|medium|low)$/, (m, name, level) => name + ' · ' + ({ high: '高', xhigh: '极高', medium: '中', low: '低' }[level])], // "Most Accurate 42 items" 等数量标签 [/^(Most Accurate|Best Value|Fastest|Most Capable) (\d+) items$/, (m, label, num) => ({ 'Most Accurate': '最准确的', 'Best Value': '最佳性价比', 'Fastest': '最快', 'Most Capable': '能力最强' }[label]) + ' ' + num + ' 项'], // "35.8% correct" 等正确率 [/^([\d.]+)% correct$/, '$1% 正确'], // React 拆分:"35.8" 与 "% correct" 为独立文本节点 [/^% correct$/, '% 正确'], // "342 of 447" 等数量占比 [/^(\d+) of (\d+)$/, '$1 / 共 $2'], // "4 search providers" [/^(\d+) search providers$/, '$1 个搜索提供商'], // "80.0% answer-item accuracy"、"21.0% complete tables" [/^([\d.]+)% answer-item accuracy$/, '$1% 答案项准确率'], // React 拆分:"80.0" 与 "% answer-item accuracy" 为独立文本节点 [/^% answer-item accuracy$/, '% 答案项准确率'], [/^([\d.]+)% complete tables$/, '$1% 完整表格'], // React 拆分:"13.0" 与 "% complete tables" 为独立文本节点 [/^% complete tables$/, '% 完整表格'], [/^% complete tables,$/, '% 完整表格,'], // 兼容 % 后混入零宽字符或异常空格的形态 [/^([\d.]+)%[\s\u200b\u200c\u200d\ufeff\u00a0]*complete tables$/, '$1% 完整表格'], // 兼容 complete 与 tables 之间也混入零宽字符/空格的形态 [/^([\d.]+)%[\s\u200b\u200c\u200d\ufeff\u00a0]*complete[\s\u200b\u200c\u200d\ufeff\u00a0]*tables$/i, (m, n) => n + '% 完整表格'], // "Answer-item accuracy 62.2%" [/^Answer-item accuracy ([\d.]+)%$/, '答案项准确率 $1%'], // "3 Confidence: 45%"、"2 Confidence: 80%"(数字+置信度组合) [/^(\d+) Confidence: ([\d.]+)%$/, '$1 置信度: $2%'], // "Sun Wukong (the Monkey King), protagonist of Journey to the West Confidence: 82%"(内容+置信度组合) [/^(.*?) Confidence: (\d+)%$/, '$1 置信度: $2%'], // "Columbia University, ..., Yale University. Confidence: 95%."(结尾带句点) [/^(.*?)\. Confidence: ([\d.]+)%\.$/, '$1。置信度: $2%。'], // "Ungraded · answer 3" [/^Ungraded \u00b7 answer (\d+)$/, '未评分 \u00b7 答案 $1'], // "Confidence: 45%" [/^Confidence: ([\d.]+)%$/, '置信度: $1%'], // "Selected searches · 1 of 1 shown" [/^Selected searches \u00b7 (\d+) of (\d+) shown$/, '已选搜索 \u00b7 显示 $1 个中的 $2 个'], // "1.9m / question"、"48s / question" [/^([\d.]+[a-z]?) \/ question$/, '$1/题'], // "$0.99 / question"、"$0.063 / question"(带美元符号) [/^(\$[\d.]+) \/ question$/, '$1/题'], // "$0.090/task"、"$0.028/question"(无空格) [/^\$([\d.]+)\/(task|question)$/, (m, val, unit) => val + '/' + (unit === 'task' ? '任务' : '题')], // "5-turn search budget ·"、"25-turn search budget" [/^(\d+)-turn search budget/, '$1 轮搜索预算'], // "GPT-5.6 Sol · high · 25-turn"、"GPT-5.6 Luna · xhigh · 25-turn" [/^(.+) \u00b7 (xhigh|high|medium|low) \u00b7 (\d+)-turn$/, (m, model, lvl, n) => model + ' \u00b7 ' + ({ xhigh: '极高', high: '高', medium: '中', low: '低' }[lvl] || lvl) + ' \u00b7 ' + n + ' 轮'], // "Claude Opus 4.8 · 1 turn" [/^(.+) \u00b7 (\d+) turn$/, '$1 \u00b7 $2 轮'], // "Exact Answer: 3" [/^Exact Answer: (.+)$/, '正确答案: $1'], // "21.0% · 21 of 100" [/^([\d.]+)% \u00b7 (\d+) of (\d+)$/, '$1% \u00b7 $2 / 共 $3'], // 日期,如 "Last benchmark run Aug 12, 2026, 3:14 AM UTC" [/^Last benchmark run ([A-Z][a-z]{2}) (\d{1,2}), (\d{4}), (\d{1,2}):(\d{2}) (AM|PM) UTC$/, (m, mon, d, y, h, min, ap) => '最近基准运行 ' + y + ' 年 ' + ({ Jan: '1', Feb: '2', Mar: '3', Apr: '4', May: '5', Jun: '6', Jul: '7', Aug: '8', Sep: '9', Oct: '10', Nov: '11', Dec: '12' }[mon]) + ' 月 ' + d + ' 日 ' + (ap === 'AM' ? '上午 ' : '下午 ') + h + ':' + min + ' UTC'], // 独立日期节点,如 "Aug 11, 2026, 9:00 PM UTC" [/^([A-Z][a-z]{2}) (\d{1,2}), (\d{4}), (\d{1,2}):(\d{2}) (AM|PM) UTC$/, (m, mon, d, y, h, min, ap) => y + ' 年 ' + ({ Jan: '1', Feb: '2', Mar: '3', Apr: '4', May: '5', Jun: '6', Jul: '7', Aug: '8', Sep: '9', Oct: '10', Nov: '11', Dec: '12' }[mon]) + ' 月 ' + d + ' 日 ' + (ap === 'AM' ? '上午 ' : '下午 ') + h + ':' + min + ' UTC'], // 月份缩写,如 "Aug" [/^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)$/, (m, mon) => ({ Jan: '1月', Feb: '2月', Mar: '3月', Apr: '4月', May: '5月', Jun: '6月', Jul: '7月', Aug: '8月', Sep: '9月', Oct: '10月', Nov: '11月', Dec: '12月' }[mon])], // "Answer: C" [/^Answer: ([ABCD])$/, '答案: $1'], // 运行示例的任务标签,如 "Task 17 · agent: openai/gpt-5.1" [/^Task (\d+) \u00b7 agent: ([\w./-]+)$/, '任务 $1 · 智能体: $2'], // "Perplexity, 25-turn: GPT-5.6 Luna · xhigh, 83.4% answer-item accuracy, 22.0% complete tables, $0.17, on the efficiency and quality frontier" [/^(.+), (\d+)-turn: (.+? \u00b7 (?:high|xhigh|medium|low)), ([\d.]+)% answer-item accuracy, ([\d.]+)% complete tables, \$([\d.]+), on the efficiency and quality frontier$/, (m, eng, n, model, acc, comp, cost) => eng + ',' + n + ' 轮: ' + model + ',答案项准确率 ' + acc + '%,完整表格 ' + comp + '%,' + cost + ' 美元,位于效率与质量前沿'], // "Perplexity, 25-turn: GPT-5.6 Luna · xhigh, 83.4% answer-item accuracy, 22.0% complete tables, $0.17"(无 frontier 后缀) [/^(.+), (\d+)-turn: (.+? \u00b7 (?:high|xhigh|medium|low)), ([\d.]+)% answer-item accuracy, ([\d.]+)% complete tables, \$([\d.]+)$/, (m, eng, n, model, acc, comp, cost) => eng + ',' + n + ' 轮: ' + model + ',答案项准确率 ' + acc + '%,完整表格 ' + comp + '%,' + cost + ' 美元'], // "11/100 correct" 等 title 提示 [/^(\d+)\/(\d+) correct$/, '$1/$2 正确'], // "Selected searches · 2 of 2 shown" 拆分节点:数字间独立 "of" 与尾部 "shown" [/^of$/, ' / 共 '], [/^shown$/, ' 个已显示'], // "3.9% → 2.6%" 等错误率对比 [/^([\d.]+%) → ([\d.]+%)$/, '$1 → $2'], // "Verified configurations for <模型> · <级别>, ranked by..." 动态变体 [/^Verified configurations for (.+? \u00b7 (?:high|xhigh|medium|low)), ranked by answer-item accuracy; complete-table success and intervals are shown too\.$/, '$1 的已验证配置,按答案项准确率排序;同时显示完整表格成功率和区间。'], // 基准测试页标题,如 "GPQA Diamond Leaderboard | OpenRouter" [/^(.+) Leaderboard \| OpenRouter$/, '$1 排行榜 | OpenRouter'], ], title: { static: { 'AI Model Benchmarks | OpenRouter': 'AI 模型基准测试 | OpenRouter', }, regexp: [], }, }, /* ------------------------------ 定价页 ------------------------------ */ pricing: { static: { 'Plans for indie hackers, AI native startups, and enterprises': '面向独立开发者、AI 原生初创企业和企业的方案', 'Get Started': '开始使用', 'Talk To Sales': '联系销售', 'Feature': '功能', 'Platform Fees': '平台费用', 'Explore all models →': '探索所有模型 →', '25+ free models': '25+ 个免费模型', '4 free providers': '4 个免费提供商', 'Chat and API Access': '聊天与 API 访问', 'Try chat now →': '立即试用聊天 →', 'Activity Logs & Export': '活动日志与导出', 'Auto-routing, preferred vendor selections': '自动路由、首选供应商选择', 'Learn more →': '了解更多 →', 'Budgets & Spend Controls': '预算与消费控制', 'Prompt Caching': '提示词缓存', 'Management API key': '管理 API 密钥', 'Admin Controls': '管理控制', 'Enterprise features →': '企业功能 →', 'Data Policy-Based Routing': '基于数据策略的路由', 'Model & provider policies': '模型与提供商策略', 'Managed Policy Enforcement': '托管策略执行', 'Contractual SLAs': '合同 SLA', 'Payment options': '支付选项', 'BYOK Limits': '自带密钥限制', 'Rate limits': '速率限制', '50 reqs/day': '每天 50 次请求', 'Token Pricing': 'Token 定价', 'Free models only': '仅限免费模型', 'Community Support': '社区支持', 'Get Started For Free': '免费开始使用', 'Fee discounts available': '可享费用折扣', '400+ models': '400+ 个模型', '70+ providers': '70+ 个提供商', 'Credit card, crypto & more': '信用卡、加密货币等', 'Invoicing options': '发票选项', 'High global limits': '高全球限额', 'Optional dedicated limits': '可选专属限额', 'No minimum spend. Prices based on models': '无最低消费。价格基于模型', 'Volume commitments. Prices based on models': '批量承诺。价格基于模型', 'Email Support': '邮件支持', 'Support SLA with Shared Slack Channel': '含共享 Slack 频道的支持 SLA', 'Contact Sales': '联系销售', 'Frequently Asked Questions': '常见问题', 'Billing and Pricing': '账单与定价', 'How are tokens billed?': 'Token 如何计费?', 'Do you mark up provider pricing?': '你们会对提供商定价加价吗?', 'How is billing structured for BYOK, Pay‑As‑You‑Go vs Enterprise?': '自带密钥、按量付费与企业版的计费结构有何不同?', 'Are failed or fallback attempts billed?': '失败的或回退的尝试会收费吗?', 'Do you offer volume discounts or annual plans?': '你们提供批量折扣或年度方案吗?', 'Are streaming responses billed differently?': '流式响应计费方式不同吗?', 'What payment methods do you accept?': '你们接受哪些支付方式?', 'Are taxes (VAT/GST) included in prices?': '价格包含税费(VAT/GST)吗?', 'Is there a minimum spend or lock‑in on': '有最低消费或锁定要求吗', 'Usage and Rate Limits': '用量与速率限制', 'Do you enforce rate limits?': '你们会强制执行速率限制吗?', 'Can I separate environments (dev/staging/production)?': '我可以分离环境(开发/预发布/生产)吗?', 'Do you enforce platform rate limits?': '你们会强制执行平台速率限制吗?', 'Routing and Latency': '路由与延迟', 'Can I make sure to send API requests in specific regions?': '我可以确保 API 请求发送到特定区域吗?', 'Does routing affect latency?': '路由会影响延迟吗?', 'What happens if a model is deprecated or pricing changes?': '如果模型被弃用或定价变化会怎样?', 'Can I pin specific model versions?': '我可以固定特定的模型版本吗?', 'Privacy and Security': '隐私与安全', 'Do you train on customer data?': '你们会用客户数据训练吗?', 'Do you support SSO?': '你们支持 SSO 吗?', 'Models and Features': '模型与功能', 'How do I migrate from OpenAI/Anthropic?': '如何从 OpenAI/Anthropic 迁移?', 'Do you support function calling/tools?': '你们支持函数调用/工具吗?', 'Reliability and Uptime': '可靠性与可用性', 'What happens if a provider is down or a model errors?': '如果提供商宕机或模型出错会怎样?', 'Where can I check uptime and incidents?': '在哪里可以查看可用性和事件?', 'Ready To Get Started?': '准备好开始了吗?', 'Join thousands of developers building with OpenRouter': '加入数千名使用 OpenRouter 开发的开发者', 'Sign Up For Free': '免费注册', }, regexp: [], title: { static: { 'Pricing | OpenRouter': '定价 | OpenRouter', }, regexp: [], }, }, /* ------------------------------ 提供商页 ------------------------------ */ providers: { static: { '80 of 80 providers': '80 个提供商中的 80 个', 'Trains': '训练', 'Retention': '保留', 'Headquarters': '总部', 'Terms of service': '服务条款', 'Privacy policy': '隐私政策', 'Daily tokens': '每日 Token 数', 'Monthly tokens': '每月 Token 数', 'Zero retention': '零保留', 'Retains prompts': '保留提示词', '30 day retention': '保留 30 天', '55 day retention': '保留 55 天', 'Terms': '条款', 'Provider Filters': '提供商筛选', 'Training': '训练', 'Trains on prompts': '在提示词上训练', 'Does not train': '不训练', 'Limited retention': '有限保留', 'Policies': '策略', 'Has terms of service': '有服务条款', 'Has privacy policy': '有隐私政策', 'Access': '访问', 'Supports BYOK': '支持自带密钥', 'Moderation required': '需要审核', // 提供商对比页 'Compare providers': '对比提供商', 'Compare model providers on OpenRouter side by side — catalog size and throughput, data handling and retention policies, BYOK support, and their terms of service and privacy policies.': '并排对比 OpenRouter 上的模型提供商——目录规模与吞吐量、数据处理与保留策略、自带密钥支持,以及它们的服务条款和隐私政策。', 'Select a provider': '选择一个提供商', 'Add provider': '添加提供商', 'Highlight best': '高亮最佳', 'Free models': '免费模型', 'Tokens (24h)': 'Token 数 (24 小时)', 'Tokens (30d)': 'Token 数 (30 天)', 'Privacy and data handling': '隐私与数据处理', 'Prompt retention': '提示词保留', 'Access and documents': '访问与文档', 'provider comparison': '提供商对比', }, regexp: [ [/^(\d+) of (\d+) providers$/, '共 $2 个提供商,显示 $1 个'], // 提供商对比标题,如 "Compare OpenAI vs Tencent Cloud | OpenRouter" [/^Compare (.+) vs (.+) \| OpenRouter$/, '对比 $1 与 $2 | OpenRouter'], // 对比页标题,如 "OpenAI vs Tencent Cloud: provider comparison" [/^(.+) vs (.+): provider comparison$/, '$1 与 $2 提供商对比'], // 对比页副标题 [/^(.+) vs (.+)$/, '$1 对比 $2'], ], title: { static: { 'Providers | OpenRouter': '提供商 | OpenRouter', 'Compare AI Providers | OpenRouter': 'AI 提供商对比 | OpenRouter', }, regexp: [], }, }, /* ------------------------------ 实验室 ------------------------------ */ labs: { static: { 'Labs - Experimental Features': '实验室 - 实验功能', 'Explore experimental features and tools. These are works in progress and may change or be removed at any time.': '探索实验性功能和工具。这些功能仍在开发中,可能随时更改或移除。', 'Experiments': '实验', 'Model Fusion': '模型融合', 'Run multiple models side-by-side, analyze their strengths, and fuse the best answer.': '并排运行多个模型,分析它们的优势,并融合出最佳答案。', 'Cost Simulator': '成本模拟器', 'See what your recent generations on one model would have cost on another, using effective pricing.': '使用有效定价查看您最近在一个模型上的生成在另一个模型上会花费多少。', 'Deploy any AI coding agent on any cloud provider with a single command. No Terraform, no YAML — just pick an agent and a cloud.': '只需一条命令即可在任何云提供商上部署任何 AI 编码智能体。无需 Terraform、无需 YAML——只需选择一个智能体和一个云。', 'Compare what your last 100 generations on one model would cost on other models, using median endpoint pricing.': '使用中位端点定价,对比您最近在一个模型上的 100 次生成在其他模型上会花费多少。', 'Source model': '源模型', 'Select from recent models': '从最近使用的模型中选择', 'Compare against': '对比对象', 'Run Simulation': '运行模拟', }, regexp: [], title: { static: { 'Labs - Experimental Features | OpenRouter': '实验室 - 实验功能 | OpenRouter', 'Cost Simulator | OpenRouter': '成本模拟器 | OpenRouter', }, regexp: [], }, }, /* ------------------------------ Spawn ------------------------------ */ spawn: { static: { 'Spawn AI Coding Agents on any Cloud': '在任何云上部署 AI 编码智能体', 'any': '任何', 'agent,': '智能体,', 'on any': '在任何', 'cloud': '云上', 'Pick an Agent': '选择智能体', 'Missing an agent?': '缺少某个智能体?', 'Request it here': '在此申请', 'Under the Hood': '工作原理', 'Every agent + cloud combination is a self-contained script.': '每个智能体 + 云的组合都是一个独立的脚本。', 'Provision': '配置', 'Spins up a fresh VM on your cloud provider. No Terraform, no YAML.': '在您的云提供商上启动全新的虚拟机。无需 Terraform、无需 YAML。', 'Install': '安装', 'Sets up the agent and dependencies automatically.': '自动设置智能体和依赖项。', 'Authenticate': '身份认证', 'Injects your OpenRouter and cloud credentials into the agent via a CLI OAuth flow.': '通过 CLI OAuth 流程将您的 OpenRouter 和云凭据注入智能体。', 'Configure': '配置', 'Configure your agent for your cloud environment — credentials, endpoints, and model routing handled automatically.': '为您的云环境配置智能体——凭据、端点和模型路由自动处理。', 'Opens an SSH session. You are in.': '打开 SSH 会话。您已进入。', 'Why Spawn?': '为什么选择 Spawn?', 'The fastest way to deploy AI agents on your infrastructure': '在您的基础设施上部署 AI 智能体的最快方式', 'Agent Agnostic': '智能体无关', 'Explore and experiment with every agent in one place. Switch between them with a single command.': '在一个地方探索和试验每个智能体。一条命令即可在它们之间切换。', 'Bring Your Own Cloud': '自带云', 'Deploy on any cloud provider. Run on infrastructure you already have. Your keys, your data, your rules.': '部署在任何云提供商上。在您已有的基础设施上运行。您的密钥、您的数据、您的规则。', 'Fully Sandboxed': '完全沙箱化', 'Aside from local, every agent runs in an isolated environment. No cross-contamination, no side effects.': '除本地外,每个智能体都在隔离环境中运行。无交叉污染、无副作用。', 'OpenRouter Inference': 'OpenRouter 推理', 'Inference powered by OpenRouter with automatic fallbacks, load balancing, and rate limit handling.': '由 OpenRouter 提供推理支持,自动回退、负载均衡和速率限制处理。', 'Install Spawn': '安装 Spawn', 'Made by agents, for agents': '由智能体打造,为智能体而生', }, regexp: [], title: { static: { 'Spawn AI Coding Agents on any Cloud | OpenRouter': '在任何云上部署 AI 编码智能体 | OpenRouter', }, regexp: [], }, }, /* ------------------------------ 登录页 ------------------------------ */ signin: { static: { 'Use passkey instead': '改用密钥', 'Don\u2019t have an account?': '没有账户?', 'Have an account?': '已有账户?', 'Continue with Google': '使用 Google 继续', 'Continue with GitHub': '使用 GitHub 继续', 'Continue with MetaMask': '使用 MetaMask 继续', 'Create account': '创建账户', 'Enter your email': '输入您的邮箱', 'Enter your password': '输入您的密码', 'Wrong email or password': '邮箱或密码错误', 'Too many attempts. Please try again later.': '尝试次数过多,请稍后再试。', }, regexp: [], title: { static: { 'Sign In | OpenRouter': '登录 | OpenRouter', 'Sign Up | OpenRouter': '注册 | OpenRouter', 'Sign in | OpenRouter': '登录 | OpenRouter', 'Sign up | OpenRouter': '注册 | OpenRouter', }, regexp: [], }, }, /* ------------------------------ 博客 ------------------------------ */ blog: { static: { 'Announcements': '公告', 'Tutorials': '教程', 'Insights': '洞察', 'Related Posts': '相关文章', 'Share this post': '分享这篇文章', 'Back to Blog': '返回博客', }, regexp: [], }, /* ------------------------------ 其他页面 ------------------------------ */ misc: { static: { 'Page Not Found': '页面未找到', 'The page you were looking for could not be found.': '您查找的页面不存在。', 'About Us': '关于我们', 'Terms': '条款', 'Cookie Settings': 'Cookie 设置', 'Trust Center': '信任中心', 'Contact': '联系我们', 'Contact us': '联系我们', 'Help': '帮助', 'FAQ': '常见问题', 'Changelog': '更新日志', 'Roadmap': '路线图', }, regexp: [], }, }, }; /* ==== 翻译引擎(取自 datou1996/openrouter-chinese main.user.js)==== */ /** * OpenRouter 中文化插件 * * 实现方式参考 github-chinese(https://github.com/maboloshi/github-chinese): * 1. 词库文件(locals.js)与主脚本分离,便于更新词库 * 2. 通过 URL 识别页面类型,加载对应的页面词条 * 3. 使用 MutationObserver 监听 DOM 变化,自动翻译动态加载的内容 * 4. 使用 TreeWalker 遍历节点,仅修改文本节点,避免破坏 React 组件结构 * 5. 静态词典精确匹配 + 正则规则模糊匹配,未命中则跳过 * 6. 通过忽略规则保护代码块、输入框、用户内容等不应翻译的区域 */ (function (window, document, undefined) { 'use strict'; /* =========================== 全局配置常量 =========================== */ const CONFIG = { LANG: 'zh-CN', // 默认语言 DEV: false, // 默认不开启开发者模式 OBSERVER_CONFIG: { // MutationObserver 配置 childList: true, subtree: true, characterData: true, attributeFilter: ['placeholder', 'aria-label', 'title', 'value'], }, }; /* =========================== 状态管理器 =========================== */ const State = { // 功能开关(通过 GM_setValue 持久化) featureSet: { enable_RegExp: GM_getValue('enable_RegExp', true), enable_dev: GM_getValue('enable_dev', false), }, // 当前运行时状态 pageConfig: null, // 当前页面配置 currentURL: window.location.href, // 当前页面 URL mutationObserver: null, // DOM 变化观察器 urlChangeHandler: null, // URL 变化处理器 menuIds: {}, // 菜单 ID 记录 }; /* =========================== 安全检查 =========================== */ /** * 检查词库文件是否加载 — 未加载则提示并中止 */ function checkI18NLoaded() { if (typeof I18N === 'undefined') { alert('OpenRouter 汉化插件:词库文件 locals.js 未加载,脚本无法运行!\n请检查 @require 引用的词库地址是否正确。'); throw new Error('[OpenRouter 中文化插件] 词库文件 locals.js 未加载'); } } /** * 错误边界 — 包裹关键函数,避免异常阻断页面正常使用 */ function safe(fn, label) { return function (...args) { try { return fn.apply(this, args); } catch (e) { console.error(`[OpenRouter 中文化插件] ${label} 出错:`, e); } }; } /* =========================== 初始化入口 =========================== */ function init() { checkI18NLoaded(); // 输出版本信息,便于确认是否加载了最新词库 // 脚本版本从 @version 动态读取,避免硬编码过期 const scriptVersion = (typeof GM_info !== 'undefined' && GM_info.script && GM_info.script.version) || 'unknown'; console.info('[OpenRouter 中文化插件] 脚本 v' + scriptVersion + ' / 词库 v' + I18N.version + ' / 公共词条数: ' + Object.keys(I18N['zh-CN'].public.static).length); initLangEnv(); setupMenuCommands(); setupInitTrans(); setupUrlChangeListener(); } /** * 设置中文语言环境 */ function initLangEnv() { document.documentElement.lang = CONFIG.LANG; } /** * 设置初始翻译 * 即使 @run-at document-start,脚本注入也可能晚于 DOMContentLoaded, * 因此根据 readyState 决定立即执行还是等待事件。 */ function setupInitTrans() { function doInitTrans() { updatePageConfig('首次载入'); if (State.pageConfig) { safe(traverseNode, '首次遍历')(document.body); safe(transTitle, '标题翻译')(); } setupMutationObserver(); // 设置 DOM 变化观察器 setupLazyContentSweep(); // 设置懒加载内容清扫 } if (document.readyState === 'interactive' || document.readyState === 'complete') { doInitTrans(); } else { window.addEventListener('DOMContentLoaded', doInitTrans, { once: true }); } } /** * 设置懒加载内容清扫 * * OpenRouter 为 Next.js 应用,大量内容(排行榜分区、图表等)通过滚动/观察器 * 懒加载挂载,且 React 重渲染会恢复英文原文。仅依赖 MutationObserver 可能 * 漏掉部分节点(如 body 被替换、mutation 批量处理中断等),因此: * 1. 监听滚动(防抖)后整页重扫 —— 覆盖滚动懒加载的内容 * 2. 周期性整页重扫 —— 覆盖其他时机挂载/被 React 恢复的内容 * 3. 检测 body 被替换 —— 替换后重建观察器,避免观察失效 * 4. 主动查询兜底 —— 直接遍历文本节点搜索已知模式,确保不遗漏 */ function setupLazyContentSweep() { // 滚动防抖重扫(800ms) let scrollTimer = null; window.addEventListener('scroll', () => { if (scrollTimer) clearTimeout(scrollTimer); scrollTimer = setTimeout(() => { if (State.pageConfig) { safe(traverseNode, '滚动重扫')(document.body); safe(transTitle, '标题翻译')(); safe(patchMissedNodes, '兜底扫描')(); } }, 800); }, { passive: true }); // 周期性重扫(6 秒,基准页额外 2.5 秒快速重扫防 React 重渲染回退)与 body 替换检测 setInterval(() => { // body 被替换时重建观察器 if (State.mutationObserver && !document.contains(State.mutationObserver.target)) { console.warn('[OpenRouter 中文化插件] 检测到 body 被替换,重建观察器'); State.mutationObserver.disconnect(); State.mutationObserver = null; setupMutationObserver(); // body 被替换后延迟执行兜底扫描,等 React 渲染完成 setTimeout(() => { if (State.pageConfig) safe(patchMissedNodes, '兜底扫描(body替换)')(); }, 1500); } if (State.pageConfig) { safe(traverseNode, '周期重扫')(document.body); safe(transTitle, '标题翻译')(); safe(patchMissedNodes, '兜底扫描')(); } }, 6000); // 基准测试页快速重扫:每 2.5 秒整页重扫,对抗 React 重渲染回退 if (State.pageConfig?.currentPageType === 'benchmarks') { setInterval(() => { if (State.pageConfig?.currentPageType === 'benchmarks') { safe(traverseNode, '基准页快速重扫')(document.body); safe(patchMissedNodes, '基准页兜底扫描')(); } }, 2500); } } /** * 主动查询兜底:直接遍历 body 下所有文本节点搜索已知模式的顽固未翻译项, * 这些节点可能因虚拟列表复用、React Portal 等复杂原因从未被 TreeWalker 访问 */ function patchMissedNodes() { let hit = 0; try { const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT); let node; while ((node = walker.nextNode())) { const text = node.data; // 限制长度,避免处理 AI 回复等长文本 if (!text || text.length > 500) continue; // 基准测试页内容动态渲染,对所有英文文本尝试翻译;其他页仅处理已知顽固模式 const isBenchmarks = State.pageConfig?.currentPageType === 'benchmarks'; if (isBenchmarks || /selected/i.test(text)) { hit++; const result = transText(text); if (result) node.data = result; } } } catch (e) { console.error('[OpenRouter 中文化插件] 兜底扫描 异常:', e); } // React 可能在此次翻译后立即重渲染回退英文,1s/2.5s 后追加两次快速重扫 if (hit > 0) { setTimeout(() => safe(patchMissedNodes, '兜底重扫1'), 1000); setTimeout(() => safe(patchMissedNodes, '兜底重扫2'), 2500); } } /* =========================== URL 变化监听 =========================== */ /** * 设置 URL 变化监听器 * Tampermonkey 环境使用 onurlchange 事件,其他环境回退到 MutationObserver URL 检测 */ function setupUrlChangeListener() { if (window.onurlchange === null) { State.urlChangeHandler = function () { handleUrlChange(); }; window.addEventListener('urlchange', State.urlChangeHandler); } } /** * 处理 URL 变化(Next.js 客户端路由跳转) */ function handleUrlChange() { const currentURL = window.location.href; if (currentURL === State.currentURL) return; State.currentURL = currentURL; updatePageConfig('URL 变化'); if (State.mutationObserver) { State.mutationObserver.disconnect(); } if (State.pageConfig) { safe(traverseNode, 'URL 变化遍历')(document.body); safe(transTitle, '标题翻译')(); } setupMutationObserver(); } /* =========================== 页面配置管理 =========================== */ /** * 更新页面配置 — 页面类型变化时重建 State.pageConfig */ function updatePageConfig(trigger) { const newType = detectPageType(); if (!newType) { State.pageConfig = null; } else if (newType !== State.pageConfig?.currentPageType) { State.pageConfig = buildPageConfig(newType); } if (CONFIG.DEV) console.log(`【Debug】${trigger}触发,页面类型为 ${State.pageConfig?.currentPageType}`); } /** * 构建页面配置对象 */ function buildPageConfig(pageType) { const pageI18n = I18N[CONFIG.LANG][pageType] || {}; return { currentPageType: pageType, // 当前页面类型 titleStaticDict: pageI18n.title?.static || {}, titleRegexpRules: pageI18n.title?.regexp || [], staticDict: { // 合并公共和页面特定的静态词典 ...I18N[CONFIG.LANG].public.static, ...(pageI18n.static || {}) }, regexpRules: [ // 合并页面特定和公共的正则规则(页面优先) ...(pageI18n.regexp || []), ...(I18N[CONFIG.LANG].public.regexp || []) ], ignoreMutationSelectors: [ // 忽略的突变选择器 ...(I18N.conf.ignoreMutationSelectorPage['*'] || []), ...(I18N.conf.ignoreMutationSelectorPage[pageType] || []) ].join(', '), ignoreSelectors: [ // 忽略的选择器 ...(I18N.conf.ignoreSelectorPage['*'] || []), ...(I18N.conf.ignoreSelectorPage[pageType] || []) ].join(', '), characterData: (I18N.conf.characterDataPage || []).includes(pageType), // 是否监视文本节点变化 maxTextLength: pageType === 'benchmarks' ? 2000 : 500, // 文本节点长度上限(基准测试页含长段落介绍) }; } /* =========================== 页面类型检测 =========================== */ /** * 检测当前页面类型 * @returns {string|boolean} 页面类型或 false(如果无法识别) */ function detectPageType() { const { pathname } = window.location; let pageType; if (pathname === '/' || pathname === '/workspaces' || pathname.startsWith('/workspaces/')) { pageType = pathname.startsWith('/workspaces') ? 'workspaces' : 'home'; } else if (pathname === '/models') { pageType = 'models'; } else if (pathname.startsWith('/models/')) { pageType = 'model'; } else if (pathname === '/chat' || pathname.startsWith('/chat/')) { pageType = 'chat'; } else if (pathname === '/rankings' || pathname.startsWith('/rankings/')) { pageType = 'rankings'; } else if (pathname === '/apps' || pathname.startsWith('/apps/')) { pageType = 'apps'; } else if (pathname === '/providers' || pathname.startsWith('/providers/')) { pageType = 'providers'; } else if (pathname === '/pricing') { pageType = 'pricing'; } else if (pathname === '/benchmarks' || pathname.startsWith('/benchmarks/')) { pageType = 'benchmarks'; } else if (pathname === '/labs' || pathname.startsWith('/labs/')) { pageType = 'labs'; } else if (pathname === '/spawn') { pageType = 'spawn'; } else if (pathname === '/fusion') { pageType = 'fusion'; } else if (pathname === '/discover') { pageType = 'discover'; } else if (pathname === '/activity' || pathname.startsWith('/activity/')) { pageType = 'activity'; } else if (pathname === '/logs' || pathname.startsWith('/logs/')) { pageType = 'logs'; } else if (pathname === '/compare' || pathname.startsWith('/compare/')) { pageType = 'compare'; } else if (pathname === '/docs' || pathname.startsWith('/docs/') || pathname === '/developers') { pageType = 'docs'; } else if (pathname.startsWith('/settings')) { pageType = 'settings'; } else if (/^\/(signin|signup|login|register|auth)/.test(pathname)) { pageType = 'signin'; } else if (pathname.startsWith('/blog')) { pageType = 'blog'; } else if (/^\/[a-z0-9-]+\/[a-z0-9.\-]+$/.test(pathname)) { // 厂商/模型 形式的模型详情页,如 /sakana/sakana-namazu、/deepseek/deepseek-v4-flash-0731 pageType = 'model'; } else { pageType = 'misc'; } // 验证页面类型是否有效 if (!I18N[CONFIG.LANG]?.[pageType]) { console.warn('[OpenRouter 汉化] 词库中缺少 "' + pageType + '" 页面的翻译', { url: window.location.href, pathname, }); return false; } return pageType; } /* =========================== MutationObserver =========================== */ /** * 设置 DOM 变化观察器 */ function setupMutationObserver() { // 缓存当前页面的 URL let previousURL = window.location.href; if (State.mutationObserver) { State.mutationObserver.disconnect(); } State.mutationObserver = new MutationObserver( safe((mutations) => { const currentURL = window.location.href; // 当没有 onurlchange 支持时,通过观察器检测 URL 变化 if (!State.urlChangeHandler && currentURL !== previousURL) { previousURL = currentURL; State.currentURL = currentURL; updatePageConfig('URL 变化 (MutationObserver)'); } // 处理 DOM 变化 if (State.pageConfig) { processMutations(mutations); } }, 'MutationObserver') ); // 开始观察页面主体 State.mutationObserver.observe(document.body, CONFIG.OBSERVER_CONFIG); } /** * 判断节点是否应忽略突变处理 */ function shouldIgnoreMutationNode(node) { const element = node?.nodeType === Node.ELEMENT_NODE ? node : node?.parentElement; if (!element) return true; const ignoredSelectors = State.pageConfig?.ignoreMutationSelectors; if (ignoredSelectors && element.closest?.(ignoredSelectors)) return true; return false; } /** * 处理 MutationObserver 检测到的变化 * 收集突变节点、过滤忽略选择器、对祖先-后代关系去重,仅遍历顶层节点 */ function processMutations(mutations) { const nodesToProcess = new Set(); // 收集需要处理的节点 mutations.forEach(({ target, addedNodes, type }) => { if (type === 'childList' && addedNodes.length > 0) { // 处理新增节点 addedNodes.forEach(node => { if (!shouldIgnoreMutationNode(node)) { nodesToProcess.add(node); } }); } else if (type === 'attributes') { // 处理属性变化,target 就是元素 if (!shouldIgnoreMutationNode(target)) { nodesToProcess.add(target); } } else if (type === 'characterData' && State.pageConfig.characterData) { // 处理文本变化,target 是文本节点,取其父元素 if (!shouldIgnoreMutationNode(target)) { nodesToProcess.add(target); } } }); // 过滤掉祖先已在集合中的后代节点,避免重复遍历 const topNodes = new Set(); nodesToProcess.forEach(node => { let ancestor = node.parentElement; while (ancestor) { if (nodesToProcess.has(ancestor)) return; ancestor = ancestor.parentElement; } topNodes.add(node); }); // 仅遍历顶层节点 topNodes.forEach(node => { traverseNode(node); }); } /* =========================== DOM 遍历与节点处理 =========================== */ /** * 遍历节点树并进行翻译 * @param {Node} rootNode - 要遍历的根节点 */ function traverseNode(rootNode) { if (!rootNode) return; // 文本节点直接处理 if (rootNode.nodeType === Node.TEXT_NODE) { handleTextNode(rootNode); return; } if (rootNode.nodeType !== Node.ELEMENT_NODE) return; // 根节点自身先处理属性(不受忽略规则限制,保证 placeholder/aria-label 等仍可翻译) handleElementNode(rootNode); // 若根节点命中忽略规则,则不再遍历其子树(如代码块、输入框等) if (State.pageConfig?.ignoreSelectors && rootNode.matches(State.pageConfig.ignoreSelectors)) return; // 创建 TreeWalker 遍历节点树 const treeWalker = document.createTreeWalker( rootNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT, { acceptNode(node) { if (node.nodeType === Node.ELEMENT_NODE && State.pageConfig?.ignoreSelectors && node.matches(State.pageConfig.ignoreSelectors)) { // 被忽略的元素仍翻译其属性(如 textarea 的 placeholder、按钮的 aria-label), // 但其子树(如代码块、输入内容)不参与翻译 handleElementNode(node); return NodeFilter.FILTER_REJECT; } return NodeFilter.FILTER_ACCEPT; // 接受其他节点 } } ); let currentNode; while ((currentNode = treeWalker.nextNode())) { if (currentNode.nodeType === Node.ELEMENT_NODE) { handleElementNode(currentNode); } else if (currentNode.nodeType === Node.TEXT_NODE) { handleTextNode(currentNode); } } } /** * 处理文本节点 * @param {Node} node - 文本节点 */ function handleTextNode(node) { if (node.length > State.pageConfig.maxTextLength) return; // 跳过长文本节点(AI 回复等) transTextNode(node); } /** * 处理元素节点 * @param {Element} node - 元素节点 */ function handleElementNode(node) { const tag = node.tagName; if (!tag) return; // 翻译 aria-label(OpenRouter 大量使用图标按钮,依赖 aria-label 提供提示) if (node.hasAttribute('aria-label')) { transElementAttr(node, 'aria-label'); } if (tag === 'INPUT' || tag === 'TEXTAREA') { // 输入框和文本域 if (['button', 'submit', 'reset'].includes(node.type)) { transElementAttr(node, 'value'); // 按钮类输入框的值 } else { transElementAttr(node, 'placeholder'); // 占位符 } return; } if (tag === 'OPTGROUP') { transElementAttr(node, 'label'); return; } if (tag === 'BUTTON') { transElementAttrs(node, ['title', 'cancelConfirmText']); transElementAttrs(node.dataset, [ 'confirm', // 确认文本 'confirmText', // 确认按钮文本 'confirmCancelText', // 取消按钮文本 'disableWith', // 禁用提示 'visibleText', ]); } if (tag === 'A' || tag === 'SPAN') { transElementAttr(node, 'title'); transElementAttr(node.dataset, 'visibleText'); } } /* =========================== 翻译功能 =========================== */ /** * 翻译页面标题 */ function transTitle() { const text = document.title; let result = State.pageConfig.titleStaticDict[text] || ''; // 尝试静态翻译 if (!result) { // 尝试正则表达式翻译 for (const [pattern, replacement] of State.pageConfig.titleRegexpRules) { result = text.replace(pattern, replacement); if (result !== text) break; } } // 应用翻译结果 if (result) { document.title = result; } } /** * 翻译单个文本节点 * @param {Node} node - 文本节点 */ function transTextNode(node) { const text = node.data; const result = transText(text); if (result) { node.data = result; } } /** * 翻译元素的单个属性 * 注意:元素属性需使用 getAttribute/setAttribute(带连字符的属性名如 aria-label * 无法通过 element['aria-label'] 属性访问),data-* 数据集则使用属性访问 * @param {Object} target - 元素对象或元素数据集(dataset) * @param {string} attrName - 要翻译的属性名 */ function transElementAttr(target, attrName) { const isElement = typeof target.getAttribute === 'function'; const text = isElement ? target.getAttribute(attrName) : target[attrName]; if (!text || text.length > 500) return; const result = transText(text); if (result) { if (isElement) { target.setAttribute(attrName, result); } else { target[attrName] = result; } } } /** * 批量翻译元素的多个属性 */ function transElementAttrs(target, attrs) { const attrList = Array.isArray(attrs) ? attrs : [attrs]; attrList.forEach(attrName => transElementAttr(target, attrName)); } /** * 翻译文本内容 * @param {string} text - 要翻译的文本 * @returns {string|boolean} 翻译后的文本或 false */ function transText(text) { // 跳过不需要翻译的文本: // 1. 空文本(含空白字符)或纯数字 // 2. 纯中文字符 // 3. 不包含英文字母和 , . 符号的文本 if (typeof text !== 'string') return false; if (/^[\s0-9]*$/.test(text) || /^[\u4e00-\u9fa5]+$/.test(text) || !/[a-zA-Z,.]/.test(text)) { return false; } // 清理文本:去除首尾空格和多余空白,并剥离零宽字符(React 渲染常混入 \u200b 等) const trimmedText = text.trim(); const cleanedText = trimmedText .replace(/\xa0|[\s]+/g, ' ') .replace(/[\u200b\u200c\u200d\ufeff]/g, ''); // 获取翻译 const result = fetchTransResult(cleanedText); if (result && result !== cleanedText) { return text.replace(trimmedText, result); } return false; } /** * 从词库获取翻译 * @param {string} text - 要翻译的文本 * @returns {string|boolean} 翻译结果或 false */ function fetchTransResult(text) { if (!State.pageConfig) return false; // 静态词典查找(精确匹配) const staticResult = State.pageConfig.staticDict[text]; if (typeof staticResult === 'string') { return staticResult; } // 正则规则查找 if (State.featureSet.enable_RegExp) { for (const [pattern, replacement] of State.pageConfig.regexpRules) { const result = text.replace(pattern, replacement); if (result !== text) { return result; } } } // 开发者模式下记录未命中词条,便于完善词库 if (State.featureSet.enable_dev) { recordMissedTerm(text); } return false; } /* =========================== 未命中词条记录 =========================== */ /** * 记录未命中的英文词条(仅开发者模式) */ function recordMissedTerm(text) { if (text.length < 2 || text.length > 100) return; if (/[\u4e00-\u9fa5]/.test(text)) return; // 含中文则跳过 const list = JSON.parse(GM_getValue('missed_terms', '[]')); if (list.length >= 500) list.shift(); const entry = { text, page: State.pageConfig.currentPageType, url: window.location.pathname }; if (!list.some(item => item.text === text)) { list.push(entry); GM_setValue('missed_terms', JSON.stringify(list)); console.log('[OpenRouter 汉化] 未翻译词条:', text, '(', State.pageConfig.currentPageType, ')'); } } /* =========================== 菜单命令 =========================== */ /** * 设置菜单命令(Tampermonkey 菜单) */ function setupMenuCommands() { // 先注销旧菜单,避免重复注册 Object.values(State.menuIds).forEach(id => { if (id) GM_unregisterMenuCommand(id); }); State.menuIds = {}; State.menuIds.toggleRegexp = GM_registerMenuCommand( (State.featureSet.enable_RegExp ? '✓ ' : '') + '正则翻译(切换)', () => { State.featureSet.enable_RegExp = !State.featureSet.enable_RegExp; GM_setValue('enable_RegExp', State.featureSet.enable_RegExp); setupMenuCommands(); // 刷新菜单显示 } ); State.menuIds.toggleDev = GM_registerMenuCommand( (State.featureSet.enable_dev ? '✓ ' : '') + '开发者模式(记录未翻译词条)', () => { State.featureSet.enable_dev = !State.featureSet.enable_dev; GM_setValue('enable_dev', State.featureSet.enable_dev); setupMenuCommands(); } ); State.menuIds.diag = GM_registerMenuCommand( '诊断:扫描未翻译词条', () => { diagScan(); } ); } /** * 诊断扫描:查找页面上疑似未翻译的文本节点 * 输出节点的精确内容(含字节码)与词库匹配结果,用于排查词条不命中的原因 */ function diagScan() { const patterns = [/%\s*off/i, /UTF-8/i, /unlimited/i, /middle-out/i, /head-to-head/i]; const hits = []; const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT); let node; while ((node = walker.nextNode())) { const text = node.data; if (!text || text.length > 200) continue; if (patterns.some(p => p.test(text))) { const trimmed = text.trim(); const cleaned = trimmed.replace(/\xa0|[\s]+/g, ' ').replace(/[\u200b\u200c\u200d\ufeff]/g, ''); const result = fetchTransResult(cleaned); hits.push({ text, hex: Array.from(text).map(c => c.charCodeAt(0).toString(16)).join(' '), cleaned, matched: result && result !== cleaned ? result : null, parent: node.parentElement ? node.parentElement.tagName + '.' + String(node.parentElement.className).slice(0, 60) : '' }); } } console.info('[OpenRouter 中文化插件] 诊断扫描完成,发现 ' + hits.length + ' 个相关节点:'); hits.slice(0, 30).forEach(h => { console.info('节点: ' + JSON.stringify(h.text), '| 字节: ' + h.hex, '| 匹配: ' + (h.matched || '无'), '| 位置: ' + h.parent); }); if (!hits.length) console.info('未发现 % off/UTF-8/unlimited/middle-out/head-to-head 相关节点'); } /* =========================== 启动 =========================== */ if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init, { once: true }); } else { init(); } })(window, document, undefined); /* =========================== 人民币价格模块 =========================== */ /** * 人民币价格增强(原创实现) * * 设计思路参考 LynnGuo666/OpenRouter_Chinese,代码为全新编写: * 1. 保留官方美元价原文,在价格文本节点后追加带 data-openrouter-cny 标记的 * "≈¥xx" 参考价 span 节点——不改写原节点数据,避免与上方翻译引擎的词典/正则 * 处理互相干扰;SPA 路由进入 /chat、/fusion 时自动清除本模块全部标记 * 2. 汇率来源:Yahoo Finance 优先,失败回退 Frankfurter,再回退本地缓存或手动值 * 3. 行情缓存 30 分钟;请求失败时可继续使用最多 72 小时内的旧汇率 * 4. 纯本地换算,不发送任何页面数据;/chat 与 /fusion 用户内容区不启用 */ (function (window, document, undefined) { 'use strict'; const CNY_VERSION = '1.0.0'; const DEFAULT_RATE = 7.2; const RATE_TTL_MS = 30 * 60 * 1000; // 汇率缓存有效期 30 分钟 const RATE_STALE_MS = 72 * 60 * 60 * 1000; // 过期缓存最长回退时限 72 小时 const RESCAN_INTERVAL_MS = 6000; // 周期重扫,与主引擎节奏一致 const SCAN_DEBOUNCE_MS = 400; const MARK = '≈¥'; // 本模块生成节点的唯一标识:清理时只删带此属性的节点, // 绝不按"长得像 ≈¥数字"全页匹配,避免误删页面原生同形文本 const MARK_ATTR = 'data-openrouter-cny'; // 不启用价格增强的页面(对话与生成结果属于用户内容区) const DISABLED_PATH_PREFIXES = ['/chat', '/fusion']; // 不参与换算的容器:输入类元素与代码块中的 $ 示例不做价格标注 const SKIP_SELECTOR = 'input, textarea, select, script, style, code, pre, [contenteditable="true"], [contenteditable=""]'; // 匹配美元金额:$3、$0.15、$1,250、from $3 等。 // 单位后缀(/M、/K、tokens 等)不参与匹配——无论按什么计价单位,数字本身都是美元金额 const USD_PRICE_RE = /\$\s?([\d,]+(?:\.\d+)?)/; // 全局版:同一文本节点可能含多个价格("$3 /M input · $15 /M output"),逐个标注 const USD_PRICE_RE_GLOBAL = /\$\s?([\d,]+(?:\.\d+)?)/g; const storedManualRate = Number(GM_getValue('cny_manual_rate', DEFAULT_RATE)); const state = { enabled: GM_getValue('cny_enabled', true), rateMode: GM_getValue('cny_rate_mode', 'auto'), // 'auto' | 'manual' // 存量存储值可能是历史 bug 写入的非数字:非法时回退默认值, // 否则 manualRate=NaN 会让手动汇率静默失效,用户以为设了汇率实际一直用默认值 manualRate: Number.isFinite(storedManualRate) && storedManualRate > 0 && storedManualRate < 100 ? storedManualRate : DEFAULT_RATE, rate: DEFAULT_RATE, rateSource: '默认', menuIds: {}, scanTimer: null, rescanInterval: null, observer: null, }; /* ---------- 汇率获取与缓存 ---------- */ function loadCachedRate() { try { const cache = JSON.parse(GM_getValue('cny_rate_cache', 'null')); if (cache && Number.isFinite(cache.usdCny) && cache.usdCny > 0) return cache; } catch (e) { /* 缓存损坏则视为无缓存 */ } return null; } function saveRateCache(usdCny) { GM_setValue('cny_rate_cache', JSON.stringify({ usdCny, ts: Date.now() })); } function applyRate(usdCny, source) { if (!Number.isFinite(usdCny) || usdCny <= 0 || usdCny >= 100) return false; state.rate = usdCny; state.rateSource = source; return true; } function initRate() { if (state.rateMode === 'manual') { // 手动值非法时静默回退自动流程,而不是卡在无效手动汇率 if (applyRate(state.manualRate, '手动')) return; } const cache = loadCachedRate(); if (cache) { const age = Date.now() - cache.ts; if (age <= RATE_TTL_MS) { applyRate(cache.usdCny, '缓存'); return; // 新鲜缓存,不发请求 } if (age <= RATE_STALE_MS) { applyRate(cache.usdCny, '过期缓存'); // 先用旧值兜底,后台继续刷新 } } fetchRate(); } function gmFetchJson(url, cb) { try { GM_xmlhttpRequest({ method: 'GET', url, timeout: 8000, onload: (res) => { try { cb(JSON.parse(res.responseText)); } catch (e) { cb(null); } }, onerror: () => cb(null), ontimeout: () => cb(null), }); } catch (e) { cb(null); } } function fetchYahoo(done) { gmFetchJson('https://query1.finance.yahoo.com/v8/finance/chart/CNY=X?interval=1d&range=1d', (data) => { const price = data && data.chart && data.chart.result && data.chart.result[0] ? data.chart.result[0].meta.regularMarketPrice : null; if (applyRate(Number(price), 'Yahoo')) { saveRateCache(state.rate); rescanAll(); done(true); } else { done(false); } }); } function fetchFrankfurter(done) { gmFetchJson('https://api.frankfurter.dev/v1/latest?base=USD&symbols=CNY', (data) => { const price = data && data.rates ? data.rates.CNY : null; if (applyRate(Number(price), 'Frankfurter')) { saveRateCache(state.rate); rescanAll(); done(true); } else { done(false); } }); } function fetchRate() { fetchYahoo((ok) => { if (!ok) { fetchFrankfurter((ok2) => { if (!ok2) console.warn('[OpenRouter 中文化增强版] 汇率获取失败,继续使用', state.rateSource, '汇率', state.rate); }); } }); } /* ---------- 价格识别与格式化 ---------- */ function parseUsd(text) { const m = text.match(USD_PRICE_RE); if (!m) return null; const value = Number(m[1].replace(/,/g, '')); if (!Number.isFinite(value) || value <= 0) return null; return value; } function formatCny(usd) { const cny = usd * state.rate; if (!(cny > 0)) return null; let text; if (cny >= 1000) text = String(Math.round(cny)); else if (cny >= 100) text = cny.toFixed(1); else if (cny >= 1) text = cny.toFixed(2); else text = String(parseFloat(cny.toPrecision(3))); // 小额价格保留 3 位有效数字 return MARK + text; } /* ---------- DOM 扫描与标注 ---------- */ /* ---------- 标记节点(带 data-openrouter-cny 的 span)---------- */ function isElementMark(el) { return !!(el && el.nodeType === 1 && typeof el.hasAttribute === 'function' && el.hasAttribute(MARK_ATTR)); } function isMarked(node) { return isElementMark(node.nextSibling); } function createMark(label) { const span = document.createElement('span'); span.setAttribute(MARK_ATTR, ''); span.textContent = ' ' + label; if (typeof span.title === 'string') { span.title = '人民币参考价 (1 USD ≈ ' + state.rate.toFixed(2) + ' CNY,来源: ' + state.rateSource + ')'; } if (span.style) { span.style.opacity = '0.85'; span.style.fontSize = '0.92em'; span.style.fontWeight = '500'; span.style.letterSpacing = '-0.01em'; span.style.fontFeatureSettings = '"tnum"'; } return span; } function refreshMark(markEl, label) { const want = ' ' + label; if (markEl.textContent !== want) markEl.textContent = want; if (typeof markEl.title === 'string') { markEl.title = '人民币参考价 (1 USD ≈ ' + state.rate.toFixed(2) + ' CNY,来源: ' + state.rateSource + ')'; } } function annotateNode(node) { const text = node.data; if (!text || text.length > 300) return; if (node.parentElement && node.parentElement.closest(SKIP_SELECTOR)) return; // 情形一:$ 与金额在同一文本节点(可能含多个价格,如 "$3 /M input · $15 /M output") if (text.indexOf('$') !== -1) { if (/\$\s?[\d,]/.test(text)) { annotateWithUsdAll(node); return; } // 情形二:React 渲染把价格拆成多个文本节点,"$" 单独成节点, // 紧随的兄弟文本节点以金额开头(如 [$]["0.044"]["/M input tokens"])。 // 标注追加到父元素末尾,保证显示在完整价格串(含单位)之后 if (/^\s?\$\s?$/.test(text)) { const parent = node.parentElement; const numNode = node.nextSibling; if (!parent || !numNode || numNode.nodeType !== Node.TEXT_NODE || numNode.data.length > 300) return; const m = numNode.data.match(/^\s?([\d,]+(?:\.\d+)?)/); if (!m) return; const numUsd = Number(m[1].replace(/,/g, '')); if (!(numUsd > 0)) return; const label = formatCny(numUsd); if (!label) return; if (isElementMark(parent.lastChild)) { // 已标注:价格数字被 React 更新时同步刷新参考价 refreshMark(parent.lastChild, label); return; } parent.appendChild(createMark(label)); } } } /** * 在 hostNode 之后维护人民币参考价标记串:文本节点含几个美元价就保持几个 * 连续标记(React 更新数字时逐个刷新;价格数量变少时移除多余标记) */ function annotateWithUsdAll(hostNode) { const matches = []; let m; USD_PRICE_RE_GLOBAL.lastIndex = 0; while ((m = USD_PRICE_RE_GLOBAL.exec(hostNode.data)) !== null) { const usd = Number(m[1].replace(/,/g, '')); if (Number.isFinite(usd) && usd > 0) matches.push(usd); } if (matches.length === 0) return; // 收集紧随 hostNode 的连续标记(可能是一次标注多个价格的结果) const marks = []; let node = hostNode.nextSibling; while (isElementMark(node)) { marks.push(node); node = node.nextSibling; } for (let i = 0; i < matches.length; i++) { const label = formatCny(matches[i]); if (!label) break; if (i < marks.length) { refreshMark(marks[i], label); } else { const mark = createMark(label); const ref = marks.length ? marks[marks.length - 1].nextSibling : hostNode.nextSibling; hostNode.parentNode.insertBefore(mark, ref); marks.push(mark); } } for (let i = marks.length - 1; i >= matches.length; i--) marks[i].remove(); } function priceEnabledHere() { if (!state.enabled) return false; const path = window.location.pathname; return !DISABLED_PATH_PREFIXES.some((p) => path.startsWith(p)); } function scanRoot(root) { if (!root || !priceEnabledHere()) return; const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null); let node; while ((node = walker.nextNode())) { annotateNode(node); } } function rescanAll() { try { // SPA 路由切换进入 /chat、/fusion 时,旧页面残留的参考价标记不会 // 随组件卸载必然消失(共享侧栏等持久 DOM),必须主动清除; // 路由切回启用页后,下一次扫描自然恢复标注 if (!priceEnabledHere()) { removeAllMarks(); return; } pruneOrphanMarks(); scanRoot(document.body); } catch (e) { /* 忽略单次扫描异常 */ } } function scheduleScan() { if (state.scanTimer) return; state.scanTimer = setTimeout(() => { state.scanTimer = null; rescanAll(); }, SCAN_DEBOUNCE_MS); } function removeAllMarks() { if (!document.body) return; // 只移除本模块生成的标记节点,页面原生文本一律不动 document.querySelectorAll('[' + MARK_ATTR + ']').forEach((el) => el.remove()); } /** * 回收孤儿标记:React 重渲染可能直接移除/替换作为锚点的价格文本节点, * 但它不知道标记 span 的存在,删除后标记残留,同页随后会再标一次, * 出现双份 ≈¥ 直到路由切换才被清除。每次扫描前校验每个标记的前驱兄弟 * 仍是锚点——价格文本(情形一/二),或同一价格产生的连续标记链中的前一个 * 标记(多价格标注);链条头失锚被移除后,后续标记的前驱自动还原为价格 * 文本或同样失锚,逐次扫描自愈。失锚标记移除后,扫描会在正确位置重新标注。 */ function pruneOrphanMarks() { document.querySelectorAll('[' + MARK_ATTR + ']').forEach((el) => { const prev = el.previousSibling; let anchored = false; if (prev && prev.nodeType === Node.TEXT_NODE && typeof prev.data === 'string' && prev.data.length <= 300) { anchored = parseUsd(prev.data) !== null || /^\s?[\d,]+(?:\.\d+)?/.test(prev.data); } else if (isElementMark(prev)) { anchored = true; // 多价格标记链的链内节点,由链条头决定去留 } if (!anchored) el.remove(); }); } /* ---------- 菜单命令 ---------- */ function setupMenu() { Object.values(state.menuIds).forEach((id) => { if (id) GM_unregisterMenuCommand(id); }); state.menuIds = {}; state.menuIds.toggle = GM_registerMenuCommand( (state.enabled ? '✓ ' : '') + '人民币价格显示(切换)', () => { state.enabled = !state.enabled; GM_setValue('cny_enabled', state.enabled); if (!state.enabled) removeAllMarks(); else rescanAll(); setupMenu(); } ); state.menuIds.manual = GM_registerMenuCommand( (state.rateMode === 'manual' ? '✓ ' : '') + '设置手动汇率', () => { const input = prompt('输入 USD/CNY 汇率\n(当前' + state.rateSource + '汇率:' + state.rate + ')', String(state.manualRate)); if (input === null) return; const value = Number(input); if (Number.isFinite(value) && value > 0 && value < 100) { state.manualRate = value; state.rateMode = 'manual'; GM_setValue('cny_manual_rate', value); GM_setValue('cny_rate_mode', 'manual'); applyRate(value, '手动'); setupMenu(); rescanAll(); } else { alert('汇率无效,请输入 0-100 之间的数字'); } } ); state.menuIds.auto = GM_registerMenuCommand( (state.rateMode === 'auto' ? '✓ ' : '') + '恢复自动汇率(Yahoo/Frankfurter)', () => { state.rateMode = 'auto'; GM_setValue('cny_rate_mode', 'auto'); const cache = loadCachedRate(); if (cache) applyRate(cache.usdCny, '缓存'); fetchRate(); setupMenu(); rescanAll(); } ); } /* ---------- 启动 ---------- */ function initCny() { initRate(); setupMenu(); const start = () => { rescanAll(); state.observer = new MutationObserver(scheduleScan); // characterData 必须监听:React 会事后修正价格数字(如四舍五入), // 否则已追加的参考价会与更新后的美元价不一致,最长滞后一个重扫周期 state.observer.observe(document.body, { childList: true, subtree: true, characterData: true }); state.rescanInterval = setInterval(rescanAll, RESCAN_INTERVAL_MS); }; if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', start, { once: true }); } else { start(); } console.info('[OpenRouter 中文化增强版] 价格模块 v' + CNY_VERSION + ' / 汇率(' + state.rateSource + '):' + state.rate); } /* ---------- 测试导出(Node 单元测试专用)---------- */ // 仅在 CommonJS 环境(Node)下导出内部函数供单元测试; // 浏览器/userscript 环境没有 module,此分支永远不生效。 // Node 下 document 为 undefined,下方自动启动逻辑整体跳过, // 不会创建 MutationObserver/setInterval,也不会发起汇率请求。 if (typeof document !== 'undefined' && document) { if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initCny, { once: true }); } else { initCny(); } } if (typeof module !== 'undefined' && module.exports) { module.exports = { state, MARK_ATTR, parseUsd, formatCny, applyRate, loadCachedRate, saveRateCache, isMarked, priceEnabledHere, removeAllMarks, pruneOrphanMarks, rescanAll, }; } })( typeof window !== 'undefined' ? window : globalThis, typeof document !== 'undefined' ? document : undefined, undefined );