【问题标题】:Spring rest internationalization弹簧休息国际化
【发布时间】:2015-04-20 12:28:13
【问题描述】:

如果我想在从特定用户票证解析的参数上设置本地化,有没有办法将 Spring 国际化实现到休息服务中?

工作流程如下所示:用户点击一个链接。服务获取用户特定的票证和设置。服务解析票证并获取区域设置,此区域设置应相应设置,然后服务以特定语言返回响应。

我发现的只是简单地将语言环境与请求一起传输的示例。另外,我不明白 Spring 是如何映射所有这些名称的。我必须给他变量,然后他将这些名称与给定的语言源映射吗?

【问题讨论】:

    标签: spring rest internationalization


    【解决方案1】:

    您必须创建应用程序本地化属性文件并将它们放入类路径中,例如你有两个文件:

    application_en.properties
    application_lt.properties
    

    一个用于英语,另一个用于立陶宛语。 假设它们包含一个属性:

    en:
    application.name=Example
    
    lt:
    application.name=Pavyzdys
    

    然后你必须在你的spring配置文件中定义一个消息源:

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="application"/>
    </bean>
    

    请注意,basename 是 application 以及下划线之外的内容:在我们的例子中,enlt 是您需要提供给消息源以获取本地化属性的语言环境。

    例如:

    假设您在某个 bean 中成功地自动装配了 spring 的消息源:

    @Autowired
    private MessageSource messageSource;
    

    你有一个方法:

    public String getMessage(String code, String locale) {
        return messageSource.getMessage(code, null, new Locale(locale));
    }
    

    所以当你打电话时:

    getMessage("application.name", "en") - 它会为您返回英语的“示例”。

    getMessage("application.name", "lt") - 它会为您返回立陶宛语的“Pavyzdys”。

    希望这是有道理的。

    【讨论】:

    • 数据结构呢?如果我发送 json 对象,通常它们具有键值对。是否有可能实现这一点,或者我需要做额外的映射来获得单独的变量。例子。 DatePreset [{ id:“昨天”,标题:“昨天”},{ id:“lastWeek”,标题:“上周”}]。
    • 在这种情况下,一切由您决定。您可以在本地化属性中映射您的 json id,例如 Yesterday=yesterday 并调用 getMessage("Yesterday", "en");如果您的 json 不是动态的,那么它非常简单。或者即使是,你也必须知道你的属性的关键。
    • 是的,我想我明白了。我的想法有点不同,我只需要遍历我的结构。感谢本地人的帮助
    • 如何在spring配置文件中配置消息源?我用启动器创建了一个项目:web、rest services 和 devtools,但我没有看到任何配置文件。我什至没有 WEB-INF 文件夹
    【解决方案2】:

    如果您能够在您的休息控制器中获取语言环境(据我所知),您可以使用消息源。要检索特定语言环境的消息,只需将其传递给 getMessage()。

    【讨论】:

      猜你喜欢
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 2018-07-13
      • 2016-11-04
      • 2020-03-19
      • 2020-05-16
      相关资源
      最近更新 更多