spring ----> ResourceBundle [message] not found for MessageSource: Can't find bundle for base name m...

本文介绍了解决 Spring 应用中出现的 ResourceBundle 未找到的问题,通过更换 MessageSource 类型并正确配置资源文件位置,实现了应用的国际化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:

idea 2018.1.3社区版,jdk8,spring4.2.0,maven3.5.2

主题:

spring国际化

出现的问题:

ResourceBundle [message] not found for MessageSource: Can't find bundle for base name message, local_zh

解决:

参考解决方法 https://stackoverflow.com/questions/25121392/resourcebundle-not-found-for-messagesource

使用 org.springframework.context.support.ResourceBundleMessageSource 配置会导致以上问题出现。

改用 org.springframework.context.support.ReloadableResourceBundleMessageSource。

放置资源文件:

xml文件配置如下:

 相关帖子:

https://stackoverflow.com/questions/11150869/resourcebundle-not-found-for-messagesource-when-placed-inside-a-folder

一个小发现:

导致使用配置 org.springframework.context.support.ResourceBundleMessageSource 国际化失败貌似是因为jsp不认识spring的spring标签库:spring.tld标签库,而对于spring-form.tld标签库是认识的。

当使用spring-form.tld标签库时,国际化文件可以放置在类根路径下,而且可以使用org.springframework.context.support.ResourceBundleMessageSource

配置国际化

备注:

有时间用thymeleaf或者FreeMarker试试

转载于:https://www.cnblogs.com/mrray1105/p/9068717.html

<think>好的,我现在需要解决用户在Eclipse中启动Web服务时遇到的错误:“can’t find bundle for base name zxx.LogResourceBundle, locale ja_JP”。首先,我得理解这个错误的原因。 错误信息显示系统找不到指定的资源包,特别是针对基本名称zxx.LogResourceBundle和区域设置ja_JP。资源包通常用于国际化(i18n),所以问题可能出在缺少对应的属性文件或者配置不正确。 首先,用户可能正在使用JavaResourceBundle类来加载本地化资源。当请求ja_JP区域时,系统会查找名为LogResourceBundle_ja_JP.properties的文件。如果这个文件不存在,就会抛出MissingResourceException。 接下来,我需要考虑可能的原因:资源文件是否存在于正确的目录中?命名是否正确?比如,是否遵循了基名加上语言和国家代码的格式?另外,检查类路径配置是否正确,确保Eclipse将资源目录包含在构建路径中。 用户可能在代码中使用了类似ResourceBundle.getBundle("zxx.LogResourceBundle", new Locale("ja", "JP"))的方法。如果资源文件的位置在项目中不正确,比如不在src目录下的zxx包内,或者没有正确导出到WEB-INF/classes,就会导致找不到文件。 另外,需要注意Eclipse的构建过程是否自动复制资源文件到输出目录。有时候,清理项目并重新构建可能解决问题。此外,检查属性文件的编码是否与区域设置匹配,比如使用UTF-8保存文件,避免乱码问题。 还有可能用户错误地配置了区域设置,比如请求了ja_JP但实际上只有默认的LogResourceBundle.properties文件存在。这时候需要确认是否需要支持该区域,或者是否有拼写错误。 总结可能的原因和解决步骤: 1. 确认资源文件存在且命名正确。 2. 检查文件路径和包结构是否符合预期。 3. 确保资源文件被包含在类路径中。 4. 清理和重建项目。 5. 检查区域设置是否正确,或是否需要添加默认资源文件。 在回答时,需要结构清晰,分步骤指导用户检查每个可能性,并提供具体的操作示例,比如如何检查文件位置,如何配置构建路径等。同时,提醒用户注意常见错误点,比如文件名格式、编码问题等,以及如何通过Eclipse的功能进行验证和修复。</think>--- ### **错误原因分析** 错误 `can’t find bundle for base name zxx.LogResourceBundle, locale ja_JP` 表示 **资源包(Resource Bundle)缺失**,具体原因如下: 1. **资源文件未找到** - Java 的 `ResourceBundle` 尝试加载名为 `zxx.LogResourceBundle_ja_JP.properties` 的本地化文件(或对应的 `.java` 类),但文件不存在。 - 可能路径错误、文件名拼写错误,或未正确配置资源目录。 2. **本地化层级不匹配** - 如果系统默认语言环境为 `ja_JP`,但仅有默认资源文件(如 `LogResourceBundle.properties`),未提供特定语言版本时,可能触发此错误。 3. **类路径(Classpath)未包含资源文件** - 资源文件未正确放置在 `src` 目录或 `WEB-INF/classes` 下,导致编译后未打包到类路径。 --- ### **解决步骤** #### **1. 检查资源文件是否存在** - **文件命名规则** - 基础名称:`LogResourceBundle` - 目标区域:`ja_JP` - 正确文件名应为: ``` LogResourceBundle_ja_JP.properties ``` - 确保文件存放在包 `zxx` 对应的目录中(如 `src/zxx/` 或 `resources/zxx/`)。 - **验证路径** 在项目中定位文件路径,例如: ``` ProjectRoot ├── src │ └── zxx │ ├── LogResourceBundle_ja_JP.properties │ └── LogResourceBundle.properties(默认文件) ``` #### **2. 配置资源文件到类路径** - **Eclipse 操作** 1. 右键项目 → `Build Path` → `Configure Build Path` → `Source` 标签。 2. 确认资源目录(如 `src` 或 `resources`)被包含在类路径中。 3. 检查 `Output folder` 是否正确(通常为 `target/classes` 或 `bin`)。 - **Maven 项目** 若使用 Maven,资源文件应放在 `src/main/resources/zxx/` 下,确保编译后文件复制到 `target/classes/zxx/`。 #### **3. 清理并重新构建项目** - **强制刷新资源** - 右键项目 → `Clean` → 选择 `Clean projects selected below` → 重新启动 Tomcat。 - 手动删除 `target` 或 `bin` 目录,触发完整重建。 #### **4. 检查区域设置回退逻辑** - **添加默认资源文件** 如果不需要支持 `ja_JP`,可添加默认文件 `LogResourceBundle.properties`,内容与 `ja_JP` 版本一致(或作为兜底)。 - **代码中指定回退区域** 修改资源加载代码,显式指定默认区域: ```java // 示例:优先加载 ja_JP,失败后回退到默认 ResourceBundle bundle = ResourceBundle.getBundle("zxx.LogResourceBundle", new Locale("ja", "JP")); ``` #### **5. 验证文件编码** - **属性文件编码需为 ISO-8859-1** `.properties` 文件默认需使用 `ISO-8859-1` 编码。若包含非 ASCII 字符(如中文),需用 Unicode 转义(如 `\u4E2D\u6587`)。 - **Eclipse 设置**:右键文件 → `Properties` → `Resource` → `Text file encoding` → 选择 `ISO-8859-1`。 --- ### **常见错误排查表** | **问题现象** | **可能原因** | **解决方案** | |----------------------------|-----------------------------|------------------------------------------| | 文件名正确但依然报错 | 文件未部署到类路径 | 检查 `WEB-INF/classes/zxx/` 下是否有编译后的 `.properties` 文件 | | 多模块项目资源不可见 | 子模块资源未暴露给主模块 | 在父 POM 中配置 `<resources>` 包含子模块资源目录 | | 日志显示乱码 | 文件编码错误 | 转换文件编码为 `ISO-8859-1` 并使用 `native2ascii` 工具处理 | --- ### **示例:完整修复流程** 1. **创建资源文件** - 在 `src/main/resources/zxx/` 下新建 `LogResourceBundle_ja_JP.properties`。 - 添加内容(示例): ```properties greeting=こんにちは ``` 2. **配置 Maven 打包资源** ```xml <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> </includes> </resource> </resources> </build> ``` 3. **清理并重启服务** - 执行 `mvn clean install`。 - 在 Eclipse 中重启 Tomcat。 --- ### **总结** - **核心问题**:资源文件未按命名规则放置或未包含在类路径中。 - **关键操作**:检查文件名、路径、编码,清理构建缓存,确保资源部署到 `WEB-INF/classes`。 - **扩展建议**:使用 `ResourceBundle.Control` 自定义资源加载逻辑,或切换到 Spring 的 `MessageSource` 以增强灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值