Teil 2 – Platzhalter, Validierungen, Modellklassen
[Zu Teil 1]
Oft enthalten Webseiten Sätze, in denen sich ein einzelnes Wort sich dynamisch ändert. Beispielsweise „Sie sind als „name“ eingeloggt.“ Zur Übersetzung können wir natürlich den Satz aus seinen Bestandteilen zusammenbauen. Oft gibt es ein Problem: in verschiedenen Sprachen ist der Satzbau anders.
Besser ist deshalb die sogenannte Interpolation, wie man sie in Ruby ja kennt. Im Satz steht ein markierter Platzhalter, der zur Laufzeit ersetzt wird. Die yaml-Datei zur Spezifikation nutzt hierbei nicht die Ruby Syntax, sondern markiert die zu ersetzenden durch doppelte geschweifte Klammern. Achtung: In Rails 3 hat sich die Syntax leicht geändert.
# Definition
logmsg: "You are logged in as {{name}}."
# call
I18n.translate(:logmsg, :name => 'Administrator')
# or short form
t :logmsg, :name => 'Administrator' |
# Definition
logmsg: "You are logged in as {{name}}."
# call
I18n.translate(:logmsg, :name => 'Administrator')
# or short form
t :logmsg, :name => 'Administrator'
Wir müssen dabei sicherstellen, das die Parameter von Definition und Aufruf übereinstimmen. Die translate()
-Methode dabei relativ tolerant: Überflüssige Parameter werden ignoriert, fehlende Parameter werden mit einem „(???)“ ersetzt.
:!: Achtung: die übersetzende Person muss wissen, dass sie die Variablennamen in den Klammern nicht mit übersetzen soll!
Eine weitere kleine Falle lauert bei den Variablennamen: Sie dürfen nicht wie eine der anderen Parameter der translate()
-Methode heißen. Verboten sind deshalb „default“ und „scope“.
„Mehrsprachige Webseiten mit Ruby on Rails (2)“ weiterlesen