grails中的内容i18n有哪些好的实践
我试图在我的grails应用程序中实现i18n功能,但不仅仅是针对消息(菜单、标签等)。我正在尝试为我的域类的实际文本字段执行此操作 到目前为止,我的解决方案包括创建如下域类:grails中的内容i18n有哪些好的实践,grails,internationalization,Grails,Internationalization,我试图在我的grails应用程序中实现i18n功能,但不仅仅是针对消息(菜单、标签等)。我正在尝试为我的域类的实际文本字段执行此操作 到目前为止,我的解决方案包括创建如下域类: class LocalizedText { String text Locale locale static hasMany=[translations : LocalizedText] String getTranslation(String locale) { def
class LocalizedText {
String text
Locale locale
static hasMany=[translations : LocalizedText]
String getTranslation(String locale) {
def translation = this.translations.find(locale:locale)
if (translation != null) {
return translation
} else {
return this
}
}
}
然后,例如,我将有一个具有单个可翻译字段的域类:
class News {
LocalizedText contents
// [...]
}
然后,在我的控制器上,我检查lang参数并选择一个翻译(如果它存在),或者选择默认语言(如果给定区域设置没有翻译可用)。
e、 g:
类新闻控制器{
定义列表={
def newsconts=[]
News.list()。每个{
newsContents我们遇到了同样的问题,最终得到了基本相同的实现:
class Translatable {
Map<String, String> values = [:]
static mapping = {
columns {
values column: 'val'
}
values type: 'text', lazy: false
}
def putAt(key, value) {
values[key.toString()] = value.toString()
return value
}
def getAt(key) {
return values[key.toString()]
}
}
您应该看看“i18n字段”插件。这就是我使用的解决方案
import org.springframework.context.i18n.LocaleContextHolder
/**
* ML = Multi Language
* */
class MLString {
String english
String spanish
boolean hasLanguage(String language){
switch (language){
case 'en':
return english?.trim()
case 'es':
return spanish?.trim()
default:
return false
}
}
String getLanguage(String language){
switch (language){
case 'en':
return english
case 'es':
return spanish
default:
return ''
}
}
String toString() {
String language = LocaleContextHolder.getLocale().getLanguage()
if (hasLanguage(language)){
return getLanguage(language)
} else {
return getLanguage('en')
}
}
static constraints = {
english nullable: true
spanish nullable: true
}
}
谢谢Marijn。我暂时不回答这个问题,以防有人有其他想法。恐怕我不知道答案,这是2011年,可能是Grails 1.x。
Translatable translatable = new Translatable()
translatable[Locale.ENGLISH] = "TexT"
prinlnt translatable[Locale.ENGLISH]
import org.springframework.context.i18n.LocaleContextHolder
/**
* ML = Multi Language
* */
class MLString {
String english
String spanish
boolean hasLanguage(String language){
switch (language){
case 'en':
return english?.trim()
case 'es':
return spanish?.trim()
default:
return false
}
}
String getLanguage(String language){
switch (language){
case 'en':
return english
case 'es':
return spanish
default:
return ''
}
}
String toString() {
String language = LocaleContextHolder.getLocale().getLanguage()
if (hasLanguage(language)){
return getLanguage(language)
} else {
return getLanguage('en')
}
}
static constraints = {
english nullable: true
spanish nullable: true
}
}