2015-05-04 28 views
5

Widzę pod grails-app/i18n jest mnóstwo paczek messages*.properties. Chciałbym umiędzynarodowić moją aplikację, ale mam 1 "zestaw pakietów" na stronie. Według zestaw pakietów Mam na myśli zestaw plików pakunków/właściwości, które zawierają ten sam tekst, ale dla różnych języków. Na przykład, jeśli chcę, moja strona wspierać angielskim, francuskim i hiszpańskim, to mój „O” strona może mieć zestaw wiązka 3 wiązek:Grails: organizowanie pakietów i18n

  • about.properties (angielski)
  • about_fr.properties (francuski)
  • about_es.properties (hiszpański)

Jeśli moja aplikacja składa się z 100 stron, a ja mam 3 nieruchomości pliki na stronie, to 300 Właściwości plików w końcu będę mieć pod grails-app/i18n! Thats a can o 'worms!

Zastanawiam się, czy mogę dodany podfoldery pod grails-app/i18n i zorganizować je w sposób zdecentralizowany:

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. 

byłoby to zrobić o wiele ładniejszy/zmywacz/kodu bardziej zorganizowany. Jeśli jest to możliwe:

  • Czy po prostu utworzyć foldery/pakiety pod grails-app/ i18n, czy jest jakaś komenda Grails CLI mogę użyć (np grails create-i18n-bundle about)?
  • Jak mogę odnieść się do moich zagnieżdżonych pakietów z wnętrza GSP? Na przykład w moim about.gsp, po prostu użyłbym: <g:message code="about/foo.bar" />?

Odpowiedz

1

Grails pobiera wszystkie pakiety znajdujące się pod folderem grails-app/i18n. Możesz więc utworzyć folder dla każdej grupy.

Odwołanie się do nich jest tak proste, jak gdyby było w pliku messages.properties. To znaczy, jeśli masz:

Grails-app/i18n/messages.properties

foo.bar = foo bar 

grails-app/i18n/o/about.properties

bar.foo = bar foo 

Możesz zrobić w swoim GSP:

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

Tutaj masz krótką dokumentację: https://grails.org/wiki/Internationalization