Skip to content

标准消息解析器

那么 StandardMessageResolver 是如何查找特定模板中请求的消息的呢?

若模板名称为 home,且其路径为 /WEB-INF/templates/home.html,同时请求的区域设置为 gl_ES,那么该解析器会按以下优先级顺序查找消息文件,找到第一个匹配的文件后停止查找:

  1. /WEB-INF/templates/home_gl_ES.properties(精确匹配:语言+地区)
  2. /WEB-INF/templates/home_gl.properties(降级匹配:仅语言)
  3. /WEB-INF/templates/home.properties(默认匹配:无语言/地区)

有关完整的消息解析机制的工作原理,可参考 StandardMessageResolver 类的 JavaDoc 文档以获取更多细节。

关键细节解析

  1. 路径关联规则: 消息文件的基础路径与模板文件的路径完全一致(上例中模板在 /WEB-INF/templates/ 下,消息文件也优先在该目录查找),无需额外配置路径映射,实现「模板与对应消息文件同目录管理」。

  2. Locale 匹配逻辑: 遵循「精确→降级→默认」的顺序:

    • 先匹配「语言_地区」(如 gl_ES);
    • 匹配不到则降级到「仅语言」(如 gl);
    • 最后匹配无 Locale 后缀的默认文件(如 home.properties)。
  3. 扩展说明: 若需了解完整的消息解析机制(如 Locale 为空、模板路径含多级目录等场景),可参考 StandardMessageResolver 类的 JavaDoc 文档,其中包含所有边界场景的处理规则。

总结

  1. StandardMessageResolver 按「模板同目录 + Locale 精准度递减」的顺序查找消息文件;
  2. 查找优先级:模板名_语言_地区.properties > 模板名_语言.properties > 模板名.properties
  3. 消息文件与模板文件同目录存放,简化了国际化消息的管理,是 Thymeleaf 国际化的核心实现方式之一。