J'essaie de mettre en œuvre des fonctionnalités i18n dans mon application Grails, mais pas seulement pour les messages (menus, étiquettes, etc ...). J'essaye de le faire pour les champs de texte réels de mes classes de domaine.Quelles sont les bonnes pratiques pour CONTENT i18n en grails
Jusqu'à présent, ma solution consiste à créer une classe de domaine comme celui-ci:
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
}
}
}
Ensuite, par exemple, j'aurais cette classe de domaine avec un seul champ traduisible:
class News {
LocalizedText contents
// [...]
}
Ensuite, Sur mon contrôleur, je vérifie le paramètre lang et sélectionne une traduction si elle existe, ou la langue par défaut si aucune traduction n'est disponible pour les paramètres régionaux donnés. par exemple. :
class NewsController {
def list = {
def newsContents = []
News.list().each {
newsContents << [contents : it.contents.getTranslation(params.lang)]
}
[news : newsContents]
}
}
Désolé s'il y a des erreurs, mais cela me est le codage des idées sur la tête dans un formulaire web :-)
Je crois qu'il ya des solutions beaucoup plus propres là-bas, donc je voulais juste vous commencez-moi sur ce sujet complexe.
Merci!
Incroyable! Merci ! – Philippe
Est-ce que ça marche avec les grails 3? – user666
Je crains de ne pas connaître la réponse à cette question, c'était en 2011 et probablement dans Grails 1.x. – wwwclaes