从message.properties获取消息代码列表

通常,通过键(即消息代码)从消息属性中获取消息,如果我们想选择多个消息属性(如列表),该怎么办。 要从message.properties获取选择消息代码的列表,我们需要自定义messageSource bean。 为此,让我们创建一个“ CustomizedPluginAwareResourceBundleMessageSource”类,该类应该扩展“ PluginAwareResourceBundleMessageSource”类。

要获取所有属性,我们将使用getMergedProperties()。

import org.codehaus.groovy.grails.context.support.PluginAwareResourceBundleMessageSource

class CustomisedPluginAwareResourceBundleMessageSource extends PluginAwareResourceBundleMessageSource {
    List listMessageCodes(Locale locale, String lookupMessageCode) {
        Properties properties = getMergedProperties(locale).properties
        List listOfCodes = []
        properties.each {
            if (it.key.toString().matches(/^[\w.]*${lookupMessageCode}[.\w]*$/))
                listOfCodes.add(it.key)
        }
        return listOfCodes
    }
}

在这里,“ listMessageCodes()”具有两个参数,第一个是我们正在查找的“语言环境”,第二个是我们正在搜索的“字符串”; 并返回包含该字符串的代码列表。

接下来,我们需要在资源文件中重新定义“ messageSource” bean:

import com.ig.demoApp.CustomisedPluginAwareResourceBundleMessageSource

beans = {
    messageSource(CustomisedPluginAwareResourceBundleMessageSource)  {
        basenames = "WEB-INF/grails-app/i18n/messages"
    }
}

而已!

我们需要做的就是调用方法“ listMessageCodes()”。 这是一个小例子。

下面提到的是message.properties中的消息代码示例:

fruit.orange.label=Orange
fruit.black.label=Black Grape
fruit.red.label=Red Apple
fruit.green.label=Green Apple

square.black.label=Black Square
square.yellow.label=yellow Square
square.red.label=Pink Square

circle.violet.label=Violet Circle
circle.magenta.label=Magenta Circle
circle.olive.label=Olive Circle

和像这样的控制器:

package demoapp

class DemoController {

    def messageSource

    def show() {
        [fruits: messageSource.listMessageCodes(request.locale, "fruit"),
        squares: messageSource.listMessageCodes(request.locale, "square"),
        circles: messageSource.listMessageCodes(request.locale, "circle"),
        blackColorItems:messageSource.listMessageCodes(request.locale, "black"),
        redColorItems:messageSource.listMessageCodes(request.locale, "red")]
    }
}

一个gsp:

<g:form>
    <p>Available Fruits</p>
    <g:each in="${fruits}" var="fruit">
        <span>
            <input type="radio" name="fruit">
            <label><g:message code="${fruit}"/></label>
        </span>
    </g:each>

    <p>Available Squares</p>
    <g:each in="${squares}" var="square">
        <span>
            <input type="radio" name="square">
            <label><g:message code="${square}"/></label>
        </span>
    </g:each>

    <p>Available Circles</p>
    <g:each in="${circles}" var="circle">
        <span>
            <input type="radio" name="circle">
            <label><g:message code="${circle}"/></label>
        </span>
    </g:each>

    <p>Available Black Color Items</p>
    <g:each in="${blackColorItems}" var="blackColorItem">
        <span>
            <input type="radio" name="blackColorItem">
            <label><g:message code="${blackColorItem}"/></label>
        </span>
    </g:each>

    <p>Available Red Color Items</p>
    <g:each in="${redColorItems}" var="redColorItem">
        <span>
            <input type="radio" name="redColorItem">
            <label><g:message code="${redColorItem}"/></label>
        </span>
    </g:each>

</g:form>

而已 :)

  • 您也可以在此处找到演示。

翻译自: https://www.javacodegeeks.com/2015/02/fetching-list-of-message-codes-from-message-properties.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值