Я пытаюсь реализовать функции i18n в своем приложении grails, но не только для сообщений (меню, метки и т. Д.). Я пытаюсь сделать это для фактических текстовых полей классов моего домена.
Пока что мое решение состоит в создании класса домена, подобного этому:
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 и выбираю перевод, если он существует, или язык по умолчанию, если перевод для данной локали недоступен.
например :
class NewsController {
def list = {
def newsContents = []
News.list().each {
newsContents << [contents : it.contents.getTranslation(params.lang)]
}
[news : newsContents]
}
}
Извините, если есть ошибки, но это я пишу идеи из головы в веб-форме: -)
Я полагаю, что есть намного более чистые решения, поэтому я просто хотел, чтобы вы дали мне понять эту сложную тему.
Спасибо!