乐于分享
好东西不私藏

Hermes Agent 源码-国际化与多语言支持

Hermes Agent 源码-国际化与多语言支持

Hermes Agent 源码解析

第 19 讲:国际化与多语言支持

基于 Hermes Agent v0.16.0 源码 · 2026-07-02

一、为什么需要国际化

Hermes Agent 是一个面向全球开发者的工具——从 CLI 到 Telegram/Discord 网关,从 TUI 到桌面应用,用户遍布世界各地。如果所有提示信息都是英文的,非英语用户的使用体验会大打折扣。

但 Hermes 的国际化策略非常克制:它只翻译 Hermes 自身产生的静态用户界面消息(如审批提示、网关命令回复),而不翻译 Agent 生成的回复、日志、工具输出或命令描述。这一设计选择背后有深刻的原因。

💡 设计哲学:薄切片(Thin Slice)

只翻译最高影响的静态字符串——审批提示、网关斜杠命令回复、重启排空通知。Agent 生成的内容、日志、工具输出保持英文。

二、i18n 模块架构总览

Hermes 的国际化系统集中在 agent/i18n.py(302 行),不依赖任何第三方 i18n 框架(如 Babel、gettext),而是用纯 Python + PyYAML 实现了一套轻量级翻译引擎。

用户调用 t("gateway.reset.header_default")

语言解析链

get_language() → 环境 → 配置 → 默认

目录加载

_load_catalog(lang) → YAML → 扁平化

键值查找 + 回退

t(key, lang, **kwargs) → 翻译结果

三、语言解析链:四级优先级

Hermes 的语言解析遵循严格的优先级链,确保测试、开发和生产环境都能正确获取用户语言偏好。

优先级 来源 说明
1(最高) t() 的 lang 参数 显式指定语言,覆盖一切
2 HERMES_LANGUAGE 环境变量 测试/快速切换用
3 config.yaml 的 display.language 用户配置,进程级缓存
4(默认) "en"(英文) 兜底默认值

📄 agent/i18n.py (第 241-249 行)

def get_language() -> str:
    """Resolve the active language using env > config > default order."""
    env_lang = os.environ.get("HERMES_LANGUAGE")
    if env_lang:
        return _normalize_lang(env_lang)
    cfg_lang = _config_language_cached()
    if cfg_lang:
        return cfg_lang
    return DEFAULT_LANGUAGE

注意 _config_language_cached() 使用了 @lru_cache(maxsize=1) 装饰器——因为 t() 在热路径上调用(每次审批提示、每次网关回复),反复读取 YAML 配置会浪费性能。当配置变更时(如设置向导后),调用 reset_language_cache() 即可刷新。

四、语言别名系统:50+ 种输入映射到 16 种语言

Hermes 支持 16 种语言目录,但用户输入的语言标识可以非常灵活。系统内置了 _LANGUAGE_ALIASES 映射表,将自然语言名、BCP-47 区域标签、甚至非拉丁字符都映射到标准语言代码。

语言 支持别名 目录文件
简体中文 chinese, mandarin, zh-cn, zh-hans zh.yaml
繁体中文 zh-tw, zh-hk, traditional-chinese zh-hant.yaml
日语 japanese, jp, ja-jp ja.yaml
德语 german, deutsch, de-de, de-at de.yaml
西班牙语 spanish, español, es-mx, es-ar es.yaml
法语 french, français, fr-fr, fr-ca fr.yaml
乌克兰语 ukrainian, українська, ua uk.yaml
俄语 russian, русский, ru-ru ru.yaml
韩语 korean, 한국어, ko-kr ko.yaml
葡萄牙语 portuguese, português, pt-br pt.yaml
土耳其语 turkish, türkçe, tr-tr tr.yaml
其他 意大利语、爱尔兰语、匈牙利语、南非语 it/ga/hu/af.yaml

📄 agent/i18n.py (第 43-82 行)

SUPPORTED_LANGUAGES: tuple[str, ...] = (
    "en", "zh", "zh-hant", "ja", "de", "es", "fr", "tr", "uk",
    "af", "ko", "it", "ga", "pt", "ru", "hu",
)

_LANGUAGE_ALIASES: dict[str, str] = {
    "english": "en", "en-us": "en", "en-gb": "en",
    "chinese": "zh", "mandarin": "zh", "zh-cn": "zh",
    "zh-tw": "zh-hant", "zh-hk": "zh-hant",
    "japanese": "ja", "jp": "ja", "ja-jp": "ja",
    "german": "de", "deutsch": "de",
    "spanish": "es", "español": "es",
    "french": "fr", "français": "fr",
    "ukrainian": "uk", "українська": "uk",
    "korean": "ko", "한국어": "ko",
    "russian": "ru", "русский": "ru",
    # ... 共 50+ 条映射
}

亮点:系统甚至支持非拉丁字符输入(如 українська한국어русский),用户可以直接用自己母语的语言名来设置。

五、YAML 目录加载与扁平化

每个语言目录存放在 locales/<lang>.yaml,采用嵌套 YAML 结构提高可读性,但运行时会被扁平化为点号分隔的键值对。

📄 目录文件结构示例 (locales/en.yaml)

# 嵌套 YAML(人类可读)
approval:
  dangerous_header: "⚠️  DANGEROUS COMMAND: {description}"
  choose_long:     "      [o]nce  |  [s]ession  |  [a]lways  |  [d]eny"

gateway:
  model:
    switched:               "Model switched to `{model}`"
    provider_label:         "Provider: {provider}"
  agents:
    header:                 "🤖 **Active Agents & Tasks**"

加载时,<_flatten_into> 递归将嵌套结构扁平化:

📄 agent/i18n.py (第 200-207 行)

def _flatten_into(node: Any, prefix: str, out: dict[str, str]) -> None:
    if isinstance(node, dict):
        for key, value in node.items():
            child_key = f"{prefix}.{key}" if prefix else str(key)
            _flatten_into(value, child_key, out)
    elif isinstance(node, str):
        out[prefix] = node
    # Non-string, non-dict leaves are ignored -- catalogs are text-only.

扁平化后,gateway.model.switched 这样的点号路径可以直接在 t() 中查找。

目录位置解析:三级回退链

_locales_dir() 函数实现了三级回退链,确保在任何安装方式下都能找到语言目录:

HERMES_BUNDLED_LOCALES 环境变量

Nix 包管理器 / 密封安装包使用

↓ 不存在则回退

<repo-root>/locales

源码安装 / pip install -e

↓ 不存在则回退

sysconfig(data|purelib|platlib)/locales

pip wheel 安装

六、t() 翻译函数:三级回退机制

t() 是 i18n 模块的核心入口函数,实现了三级回退确保永远不会崩溃:

第 1 级:目标语言目录查找

在 zh.yaml 中查找 "gateway.reset.header_default"

↓ 未找到 → 回退

第 2 级:英文目录查找

在 en.yaml 中查找同一键

↓ 仍未找到 → 回退

第 3 级:返回原始键路径

返回 "gateway.reset.header_default" 本身

📄 agent/i18n.py (第 252-293 行)

def t(key: str, lang: str | None = None, **format_kwargs: Any) -> str:
    target = _normalize_lang(lang) if lang else get_language()
    catalog = _load_catalog(target)
    value = catalog.get(key)

    if value is None and target != DEFAULT_LANGUAGE:
        # Fall through to English rather than showing a key path.
        value = _load_catalog(DEFAULT_LANGUAGE).get(key)

    if value is None:
        # Last-ditch: return the key itself. A broken catalog
        # should not crash anything; it just looks ugly.
        logger.debug("i18n miss: key=%r lang=%r", key, target)
        value = key

    if format_kwargs:
        try:
            return value.format(**format_kwargs)
        except (KeyError, IndexError, ValueError) as exc:
            logger.warning("i18n format failed: %s", exc)
            return value
    return value

占位符格式化:翻译字符串中的 {placeholder} 通过 str.format() 替换。例如 t("gateway.draining", count=3) 会将 {count} 替换为 3

七、目录覆盖范围与实际使用

英文目录 en.yaml 是翻译的事实来源(source of truth),共 386 行,涵盖以下功能域:

功能域 键前缀 示例
审批提示 approval.* 危险命令确认、选择菜单
网关命令 gateway.* /reset、/model、/agents 等回复
模型切换 gateway.model.* 模型信息展示标签
代理状态 gateway.agents.* 活跃代理与任务列表
上下文压缩 gateway.compress.* 压缩状态与错误消息
对话分支 gateway.branch.* 分支创建与切换消息
调试与状态 gateway.debug.* 调试报告上传状态
MCP 重载 gateway.reload_mcp.* MCP 服务器重载通知

这些翻译在 gateway/run.pygateway/slash_commands.pytools/approval.py 中被大量调用。以 slash_commands.py 为例,/reset 命令就使用了 6 个不同的 i18n 键来处理不同场景(默认标题、新会话标题、AI 生成标题、标题错误等)。

八、测试保障:目录一致性测试

tests/agent/test_i18n.py(229 行)提供了完善的测试保障,确保翻译质量:

🔹 目录文件存在性测试:每个支持的语言必须有对应的 YAML 文件

🔹 键一致性测试:每个非英文目录必须与英文目录有完全相同的键集合(不能多也不能少)

🔹 占位符一致性测试:翻译文本中的 {placeholder} 必须与英文完全一致(防止拼写错误导致运行时 KeyError)

🔹 语言解析测试:验证别名映射、环境变量覆盖、默认回退等

🔹 目录回退链测试:验证三级回退机制(目标语言 → 英文 → 原始键)

🔹 安装路径回退测试:验证 Nix、pip wheel、源码安装三种场景下的目录解析

📄 tests/agent/test_i18n.py (第 44-74 行)

@pytest.mark.parametrize("lang", [l for l in SUPPORTED_LANGUAGES if l != "en"])
def test_catalog_keys_match_english(lang: str):
    """Every non-English catalog must have exactly the same key set."""
    en_keys = set(_flatten(_load_raw("en")).keys())
    lang_keys = set(_flatten(_load_raw(lang)).keys())
    missing = en_keys - lang_keys
    extra = lang_keys - en_keys
    assert not missing, f"{lang}.yaml missing keys: {sorted(missing)}"
    assert not extra, f"{lang}.yaml has keys not in en.yaml: {sorted(extra)}"

@pytest.mark.parametrize("lang", list(SUPPORTED_LANGUAGES))
def test_catalog_placeholders_match_english(lang: str):
    """Every translated value must use the same {placeholder} tokens."""
    placeholder_re = re.compile(r"\{([a-zA-Z_][a-zA-Z0-9_]*)\}")
    for key, en_value in en_flat.items():
        en_placeholders = set(placeholder_re.findall(en_value))
        lang_placeholders = set(placeholder_re.findall(lang_flat.get(key, "")))
        assert en_placeholders == lang_placeholders

九、配置与用户设置

用户可以通过 config.yamldisplay.language 字段设置界面语言:

📄 config.yaml 配置示例

display:
  language: zh          # 简体中文
  # 支持: en, zh, zh-hant, ja, de, es, fr, tr, uk,
  #       af, ko, it, ga, pt, ru, hu
  # 未知值回退到 en

也可以通过环境变量快速切换(测试/临时使用):

📄 环境变量方式

# 临时切换为日语
export HERMES_LANGUAGE=ja
hermes chat

# 或直接指定
HERMES_LANGUAGE=zh hermes tools

十、设计亮点与不足

亮点

🔹 零外部依赖:不依赖 Babel/gettext,只用 PyYAML,减少安装包体积

🔹 三级回退:目标语言 → 英文 → 原始键,确保永不崩溃

🔹 50+ 别名映射:支持自然语言名、BCP-47 标签、非拉丁字符输入

🔹 进程级缓存:目录和配置都做了缓存,热路径不影响性能

🔹 目录一致性测试:强制所有语言目录与英文保持键一致

🔹 三级安装路径回退:Nix / pip wheel / 源码安装都能正确找到目录

不足

🔹 覆盖范围有限:只翻译静态消息,Agent 生成的内容仍是英文

🔹 无复数形式支持:没有 clDRule 或 nplurals 机制,复数通过占位符手动处理

🔹 无 RTL 支持:没有阿拉伯语/希伯来语等从右到左语言的目录

🔹 手动翻译维护:没有 CI 自动检测新键,需要开发者手动同步所有目录

十一、总结

Hermes Agent 的国际化系统是一个克制但精妙的设计。它不追求全面翻译,而是聚焦在最影响用户体验的静态界面上,用 302 行代码实现了 16 种语言的支持。三级回退机制确保系统在任何情况下都不会崩溃,而完善的测试保障则维护了翻译质量。

下一讲我们将进行 Hermes Agent 系列的总结与实战指南,回顾整个系列的核心要点。

📦 本讲核心文件

agent/i18n.py(302 行)— i18n 引擎

locales/(16 个 YAML 文件)— 语言目录

tests/agent/test_i18n.py(229 行)— 一致性测试

hermes_cli/config.py(display.language)— 语言配置

← 第 18 讲:Hermes Agent 源码-TUI、Dashboard 与桌面应用

第 20 讲:Hermes Agent 总结与实战指南 →

关注公众号获取更多技术干货

源码:https://github.com/NousResearch/hermes-agent

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-23 03:02:08 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/828400.html
  2. 运行时间 : 0.304013s [ 吞吐率:3.29req/s ] 内存消耗:4,682.99kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=e081616363c833224dc7c997600a4e45
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001165s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001752s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000760s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000759s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001252s ]
  6. SELECT * FROM `set` [ RunTime:0.000515s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001370s ]
  8. SELECT * FROM `article` WHERE `id` = 828400 LIMIT 1 [ RunTime:0.000952s ]
  9. UPDATE `article` SET `lasttime` = 1784746928 WHERE `id` = 828400 [ RunTime:0.012617s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000365s ]
  11. SELECT * FROM `article` WHERE `id` < 828400 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000599s ]
  12. SELECT * FROM `article` WHERE `id` > 828400 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.006975s ]
  13. SELECT * FROM `article` WHERE `id` < 828400 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.009498s ]
  14. SELECT * FROM `article` WHERE `id` < 828400 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.019094s ]
  15. SELECT * FROM `article` WHERE `id` < 828400 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.067810s ]
0.305727s