Grails:如何使用当前的本地化获取i18消息?

时间:2014-10-07 05:28:42

标签: grails localization internationalization

我在Grails(2.2.4)+常规应用程序中进行编码,我需要获取i18消息,有什么方法可以返回这种值?

4 个答案:

答案 0 :(得分:3)

查看官方文档 - http://grails.org/doc/2.2.x/guide/i18n.html您可以找到有关如何设置和阅读i18n消息的所有有趣信息。

本质上:

将你的i18n消息放在grails-app / i18n / messages_ [lang_code] .properties中,其中[lang_code]代表你感兴趣的语言代码。这个文件是简单的ini-like文件,所以它包含key = values例如

site_title=Your site internationalized site name

然后您可以使用此消息。如果您想在gsp视图中显示它,请使用简单的taglig:

<g:message code="site_title" />

正如您所见,&#34;代码&#34;属性与属性文件中消息的键相关联。如果你想在控制器中获取你的i18n消息,那么你将需要注入&#34; messageSource&#34;豆:

def messageSource

之后,您可以使用此方法在控制器操作中接收消息:

messageSource.getMessage('site_title', null, request.locale, 'here you can put some default value if i18n label is not found')

它将返回与&#39; site_title&#39;相关联的消息。键。

还有一件事 - Grails应用程序使用您的浏览器区域设置。如果您想更改它们,请在您的网址请求中传递lang参数,例如http://yourappdomain.com?lang=en

答案 1 :(得分:0)

你是说如何在运行时更改它们?

主要使用<g:message code="this.is.your.code.localization.hellolable"/>

喜欢spring / resource.groovy文件。和控制器传递方式?

Look this answer here

消息传递涉及两个类 1。message bean itself 2. PluginAwareMessage ......某种......确保你有注射或可用的那些。您甚至可以使用此服务来使用代码访问消息。

答案 2 :(得分:0)

如果要在src:

中使用g.message标记,请使用此代码
def grailsApplication = ApplicationHolder.application
def g = grailsApplication.mainContext.getBean(
    'org.codehaus.groovy.grails.plugins.web.taglib.ValidationTagLib')
g.message(code:'your.code.in.message.property', locale:'locale.name') // set locale only for this message

或者您可以将其用于应用程序级别:

def localeResolver = RequestContextUtils.getLocaleResolver(request); // returns a SessionLocaleResolver
def locale = new Locale("fr", "CA");
localeResolver.setLocale(request, response, locale);

答案 3 :(得分:0)

我使用时工作正常:

def getMessage( String code, Object[] args = null)
{
    // assuming the test cwd is the project dir (where application.properties is)
    URL url = new File('grails-app/i18n').toURI().toURL()
    def messageSource = new ResourceBundleMessageSource()
    messageSource.bundleClassLoader = new URLClassLoader(url)
    messageSource.basename = 'messages'
    messageSource.getMessage(code, args, Locale.ENGLISH)
}

在设置函数中,我模拟了我的函数(使用上面的函数):

    ResponsHelper.metaClass.static.jsonError = { String code, Object[] args = null ->
        getMessage(code, args)
    }

    ResponsHelper.metaClass.static.jsonErrorsNoArgsInList = { List errors ->
        errors.collect {
            getMessage(it, [])
        }
    }