通常,通过键(即消息代码)从消息属性中获取消息,如果我们想选择多个消息属性(如列表),该怎么办。 要从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