我用过
<form method="get">
<g:localeSelect name="lang" value="${locale}"/>
<input type="submit" value="Change locale"/>
</form>
更改我网站的语言。
但是在哪里可以定义哪些语言出现在选择列表中?目前有大约50种语言,但我只想要英语,德语,意大利语和法语。但我不知道在哪里指定它。
感谢您的帮助。
答案 0 :(得分:0)
Grails localeSelect
标记的实现方式如下所示。如您所见,localeSelect
标记始终使用所有可用的区域设置,使用Locale.getAvailableLocales()
检索。
/**
* A helper tag for creating locale selects.<br/>
*
* eg. <g:localeSelect name="myLocale" value="${locale}" />
*
* @emptyTag
*
* @attr name REQUIRED The name of the select
* @attr value The set locale, defaults to the current request locale if not specified
*/
Closure localeSelect = { attrs ->
attrs.from = Locale.getAvailableLocales()
attrs.value = (attrs.value ?: RCU.getLocale(request))?.toString()
// set the key as a closure that formats the locale
attrs.optionKey = { it.country ? "${it.language}_${it.country}" : it.language }
// set the option value as a closure that formats the locale for display
attrs.optionValue = {it.country ? "${it.language}, ${it.country}, ${it.displayName}" : "${it.language}, ${it.displayName}" }
// use generic select
out << select(attrs)
}
您可以轻松创建自己的标记,以根据Grails selectLocale
代码和Grails manual on creating your own tags选择区域设置。
以下代码使用传递给代码的availableLocales
列表作为属性,或使用availableLocales
中找到的session
列表。标记代码的其余部分与Grails原始localeSelect
标记完全相同。如果您希望最常使用一种语言,也可以自定义语言的顺序。
class LanguageTagLib {
static namespace = "lang"
Closure myLocaleSelect = { attrs ->
attrs.from = attrs.availableLocales ?: session.availableLocales ?: []
attrs.value = (attrs.value ?: RCU.getLocale(request))?.toString()
// set the key as a closure that formats the locale
attrs.optionKey = { it.country ? "${it.language}_${it.country}" : it.language }
// set the option value as a closure that formats the locale for display
attrs.optionValue = {it.country ? "${it.language}, ${it.country}, ${it.displayName}" : "${it.language}, ${it.displayName}" }
// use generic select
out << g.select(attrs)
}
}
在.gsp
模板中,您现在可以使用<lang:myLocaleSelect ... />
来包含区域设置选择器。