Ich möchte in der Lage sein, pluralisierte Zeichenfolgen in i18n in Schienen zu übersetzen. Eine Zeichenfolge kann sein:
You have 2 kids
oder
You have 1 kid
Ich weiß, dass ich die Pluralisierungs-Hilfsmethode verwenden kann, aber ich möchte dies in i18n-Übersetzungen einbetten, damit ich zu keinem Zeitpunkt in der Zukunft meine Ansichten durcheinander bringen muss. Ich habe gelesen, dass dies :count
irgendwie in Übersetzungen für den Plural verwendet wird, aber ich kann keine wirklichen Ressourcen dafür finden, wie es implementiert wird.
Beachten Sie, dass ich weiß, dass ich eine Variable in einer Übersetzungszeichenfolge übergeben kann. Ich habe auch etwas versucht wie:
<%= t 'misc.kids', :kids_num => pluralize(1, 'kid') %>
Was gut funktioniert, aber ein grundlegendes Problem der gleichen Idee hat. Ich muss die Zeichenfolge 'kid'
im Pluralisierungshelfer angeben . Ich möchte das nicht tun, weil es in Zukunft zu Problemen führen wird. Stattdessen möchte ich alles in der Übersetzung und nichts in der Ansicht behalten.
Wie kann ich das machen ?
"#{....}"
im obigen Code nicht erforderlich sind.<%= t 'misc.kids', :kids_num => pluralize(1, t('kid')) %>
. Vielleicht hat das 2011 (!) Nicht funktioniert, aber jetzt auf Rails 5.2.2Antworten:
Versuche dies:
en.yml
::In einer Ansicht:
Aktualisierte Antwort für Sprachen mit mehrfacher Pluralisierung (getestet mit Rails 3.0.7):
Datei
config/initializers/pluralization.rb
:Datei
config/locales/plurals.rb
:Datei
config/locales/en.yml
:Datei
config/locales/ru.yml
:Test :
quelle
%{count}
zur Arbeit zu kommen, musste ich Anführungszeichen um den gesamten Block verwenden, dh.one: "%{count} kid"
Ich hoffe, dass russischsprachige Ruby on Rails-Programmierer dies finden konnten. Ich möchte nur meine eigene sehr genaue russische Pluralisierungsformel teilen. Es basiert auf Unicode-Spezifikationen . Hier ist nur der Inhalt der
config/locales/plurals.rb
Datei, alles andere sollte genauso gemacht werden wie in der obigen Antwort.Muttersprachler können Fälle wie
111
und genießen121
. Und hier die Testergebnisse:Danke für die erste Antwort!
quelle
config/locales/plurals.rb
eher zu gehen alsconfig/initializers/pluralization.rb
Denken Sie zunächst daran, dass die Anzahl der Pluralformen von der Sprache abhängt . Für Englisch gibt es zwei, für Rumänisch 3 und für Arabisch 6!
Wenn Sie mehrere Formen richtig verwenden möchten, müssen Sie sie verwenden
gettext
.Für Ruby und Rails sollten Sie diese http://www.yotabanana.com/hiki/ruby-gettext-howto-rails.html überprüfen
quelle
Rails 3 handhabt dies robust mit CLDR-Berücksichtigung und Zählinterpolationsvariable. Siehe http://guides.rubyonrails.org/i18n.html#pluralization
quelle
Englisch
Es funktioniert einfach sofort
en.yml :
Verwendung (Sie können I18n natürlich in einer Ansichtsdatei überspringen):
Russisch (und andere Sprachen mit mehreren Pluralformen)
Installieren Sie Rails-18n Gem und fügen Sie Ihren
.yml
Dateien Übersetzungen hinzu, wie im Beispiel :ru.yml :
Verwendung:
quelle
Es gibt tatsächlich eine Alternative zum umständlichen i18n-Ansatz. Die Lösung heißt Tr8n.
Ihr obiger Code wäre einfach:
Das ist es. Sie müssen Ihre Schlüssel nicht aus Ihrem Code extrahieren und in Ressourcenpaketen verwalten. Sie müssen keine Pluralisierungsregeln für jede Sprache implementieren. Tr8n enthält numerische Kontextregeln für alle Sprachen. Es kommt auch mit Geschlechterregeln, Listenregeln und Sprachfällen.
Die vollständige Definition des obigen Übersetzungsschlüssels würde tatsächlich so aussehen:
Da wir jedoch Platz und Zeit sparen möchten, wird num automatisch numerischen Regeln zugeordnet, und es müssen nicht alle Optionen für die Regelwerte angegeben werden. Tr8n wird mit Pluralisierern und Inflektoren geliefert, die die Arbeit im laufenden Betrieb für Sie erledigen.
Die Übersetzung für Ihren Schlüssel auf Russisch wäre einfach:
Übrigens wäre Ihre Übersetzung in Sprachen mit geschlechtsspezifischen Regeln ungenau. Auf Hebräisch müssten Sie beispielsweise mindestens zwei Übersetzungen für Ihr Beispiel angeben, da "Sie" je nach Geschlecht des angezeigten Benutzers unterschiedlich wären. Tr8n handhabt es sehr gut. Hier ist eine Transliteration hebräischer Übersetzungen:
In diesem Fall benötigt Ihr einzelner englischer Schlüssel 4 Übersetzungen. Alle Übersetzungen erfolgen im Kontext - Sie müssen den Satz nicht brechen. Tr8n verfügt über einen Mechanismus, mit dem ein Schlüssel basierend auf Sprache und Kontext mehreren Übersetzungen zugeordnet werden kann - alles im laufenden Betrieb.
Eine letzte Sache. Was wäre, wenn Sie den Zählteil fett machen müssten? Es wäre einfach:
Nur für den Fall, dass Sie Ihr "Fett" später neu definieren möchten - es wäre sehr einfach - müssen Sie nicht alle Ihre YAML-Dateien durchgehen und ändern - Sie tun es einfach an einem Ort.
Um mehr zu erfahren, schauen Sie bitte hier:
https://github.com/tr8n/tr8n_rails_clientsdk
Offenlegung: Ich bin der Entwickler und Betreuer des Tr8n-Frameworks und aller seiner Bibliotheken.
quelle
Über Redmine. Wenn Sie Regeln für Pluralisierungsdateien in config / locales / als plurals.rb und andere Regeln kopieren, die nicht mit dem Namen des Gebietsschemas übereinstimmen (ru.rb, pl.rb .. usw.), funktionieren diese nicht. Sie müssen die Dateiregeln in 'locale'.rb umbenennen oder die Methode in der Datei /lib/redmine/i18n.rb ändern
und wenn Sie ältere Redmine haben, fügen Sie hinzu
quelle