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