2015-05-04 10 views
5

Ich sehe unter grails-app/i18n gibt es eine Tonne messages*.properties Bundles. Ich möchte meine App internationalisieren, habe aber 1 "Bundle-Set" pro Seite. Von Bundle Set Ich meine, ein Set Bundles/Eigenschaften Dateien, die den gleichen Text enthalten, aber für verschiedene Sprachen. Zum Beispiel, wenn ich möchte, dass meine Website Englisch, Französisch und Spanisch unterstützen, dann meinem „About“ Seite könnte ein Bündel Satz von 3 Bündeln hat:Grails: Organisieren i18n Bündel

  • about.properties (Englisch)
  • about_fr.properties (Französisch)
  • about_es.properties (Spanisch)

Wenn mein app von 100 Seiten besteht, und ich habe drei Eigenschaften Dateien pro Seite, das ist 300 Properties-Dateien ich werde schließlich unter grails-app/i18n haben! Das ist eine Dose Würmer!

Ich frage mich, ob ich Unterordner unter grails-app/i18n und organisieren sie in dezentral hinzugefügt werden:

myapp/ 
    grails-app/ 
     i18n/ 
      about/ 
       about.properties 
       about_fr.properties 
       about_es.properties 
      contact/ 
       contact.properties 
       contact_fr.properties 
       contact_es.properties 
      fizzbuzz/ 
       fizzbuzz.properties 
       fizzbuzz_fr.properties 
       fizzbuzz_es.properties 
      ... etc. 

Dieses für viel schöner/Reiniger/organisierter Code machen würde. Wenn dies möglich ist:

  • Muß ich nur Ordner erstellen/Pakete unter grails-app/ i18n, oder gibt es einen Grails-CLI-Befehl ich verwenden kann (zum Beispiel grails create-i18n-bundle about)?
  • Wie beziehe ich mich dann in einem GSP auf meine verschachtelten Bündel? Zum Beispiel, in meinem about.gsp, würde ich einfach verwenden: <g:message code="about/foo.bar" />?

Antwort

1

Grails nimmt alle Bundles, die sich unter dem Ordner grails-app/i18n befinden. So können Sie einen Ordner für jede Ihrer Gruppen erstellen.

Um darauf zu verweisen, ist es genauso einfach wie in den messages.properties. Ich meine, wenn Sie:

Grails-app/i18n/messages.properties

foo.bar = foo bar 

Grails-app/i18n/about/about.properties

bar.foo = bar foo 

Sie können in Ihrem gsp tun:

<g:message code="foo.bar"/> 
<g:message code="bar.foo"/> 

Hier haben Sie eine kurze Dokumentation: https://grails.org/wiki/Internationalization