当前位置: 首页 > 面试题库 >

自定义Spring Boot入门程序:如何将i18n消息贡献给MessageSource?

谭嘉歆
2023-03-14
问题内容

我正在编写一个自定义的Spring Boot入门程序,其他开发人员将其放入他们的应用程序中,并且该入门程序包含开箱即用的控制器和UI屏幕。

这些UI屏幕已经国际化,并且i18n键/值在打包文件中:com/foo/wherever/i18n.properties

我想确保在启动时加载启动程序时,这些i18n.properties可以MessageSource自动在应用程序中使用,以便我的UI页面可以工作(通过常规Spring
Controller + ViewResolver + View实现呈现), 而无需应用程序开发人员指定此自己归档

换句话说,他们应该能够将我的启动器添加到其运行时类路径中,并且一切都“正常运行”而无需进行任何配置。

现在,我发现应用程序开发人员可以创建自己的src/main/resources/messages.properties文件 并在中
手动配置其他消息文件application.properties

spring.messages.basename = messages, com.foo.wherever.i18n

这将起作用。

但是,这需要满足以下两个条件:

  1. 他们必须手动配置spring.messages.basename属性-这不是自动的。和
  2. 他们必须messages.properties在其应用程序类路径中具有自己的文件。如果messages.properties文件不存在,spring.messages.basename则什至不起作用。即使他们不关心i18n,这仍然是必需的-不理想。

我想我 可以
将我的i18n.properties文件移动到启动程序.jar中的classpath:/messages.properties文件中,但这似乎不是一个好的解决方案:如果应用程序开发人员拥有自己的messages.properties文件,则其中只有一个它们将被读取,从而导致缺少消息值。

看起来好像春天启动MessageSourceAutoConfiguration应该有一个概念CompositeMessageSource是在一个或多个迭代MessageSource实例可用(并且Order在Spring的ApplicationContext
ED)和
所使用的DispatcherServlet的。这将使任何入门者只需MessageSource在其自动配置中声明一个即可为可用消息做出贡献

我可以按照我的要求去做吗?对于应用程序开发人员来说,最“轻松”的解决方案是什么?


问题答案:

也许这是一个远景,但是您可以尝试使用BeanFactoryPostProcessor。

想法如下:

  1. 从应用程序上下文中取出“ messageSource” bean。请注意,如果例如开发人员想要使用自己的实现并且不使用spring boot自动配置,则可能但不一定是spring boot的。

  2. 将其替换为您自己的尝试解析“您的键”的实现,其余的委托给原始消息源。反之亦然,如果您想让开发人员覆盖您的翻译(如果原始消息源没有为未知键抛出异常,则可能会出现问题)。

但是,也许有更好的方法可以做到这一点。



 类似资料:
  • 我正在编写一个自定义的 Spring 启动启动器,其他开发人员将放入他们的应用程序中,这个启动器包含开箱即用的控制器和 UI 屏幕。 这些UI屏幕是国际化的,i18n键/值在一个包文件中:< code > com/foo/where/i18n . properties 。 我想确保当我的starter在启动时加载时,这些i18n.properties在应用程序的< code>MessageSour

  • 文档更新 如果修改了组件代码,需要在组件目录的metas.yml加上changes,直接使用next作为版本号(如果已经存在该版本号,则直接添加变更条目即可)。 中括号内为变更类型,可选值 fix enhance feature change 比如: changes: next: en: - '[fix] fix *** bug #issueId' - '[fe

  • 在 Github 上 Fork 项目到自己的仓库。 将 fork 后的项目拉到本地: git clone https://github.com/<user-name>/kubernetes-handbook。 新建一个分支,并添加或编辑内容:git checkout -b new-branch。 提交并推送到 github:git commit -am "comments"; git push。

  • 我们非常欢迎您的贡献和加入,无论是微不足道的清理或大的新功能。我们希望为每个编程语言提供高质量、有良好文档的代码。 这也不是代码是唯一有贡献项目的方式。我们非常重视文档、与其他项目的集成,并欣然接受这些方面的改进。 联系我们 Nacos Gitter-https://gitter.im/alibaba/nacos Nacos 微博-https://weibo.com/u/6574374908 Na

  • 在Github上Fork到自己的仓库 将fork后的项目拉到本地: git clone https://github.com/<user-name>/sdn-handbook 新建一个分支,并添加或编辑内容:git checkout -b new-branch 提交并推送到github:git commit -am "comments"; git push 在Github上提交Pull Reque

  • 此贡献流程适用于所有的Nacos社区内容,包括但不限于Nacos、Nacos wiki/doc、Nacos SDK。 以下以贡献Nacos为例,详细说明贡献流程。 1. fork Alibaba/Nacos 项目到您的github库 2. 克隆或下载您fork的Nacos代码仓库到您本地 git clone ${your fork nacos repo address} cd nacos 3.