2015-06-15 10 views
5

Hallo Ich muss Übersetzungen mit Pluralisierung abhängig von einem Wert machen, kann aber nicht finden, wie das geht.AngularJS Übersetzung mit Pluralization mit Winkel-translate

zum Beispiel habe ich Variable peopleCount.

  1. peopleCount = 1 Übersetzungen sollte sein: Englisch: {{ peopleCount }} person likes this litauisch: {{ peopleCount }} zmogus tai megsta
  2. wenn peopleCount mehr als 1 Englisch Übersetzung wäre: {{ peopleCount }} people like this.

aber für litauisch Übersetzungen:

  1. wenn peopleCount zwischen 2 und 9 oder einem beliebigen Anzahl mit diesen Zahlen außer Zahlen enden, die in der 4. Regel mit Zahlen Enden (Beispiel : 225, 249, 210 < --- das sind richtige Zahlen und falsche Zahlen: 215, 250 ...). es wäre {{ peopleCount }} zmones tai megsta
  2. , wenn Zahl zwischen 10 und 20 oder 30, 40 oder jeder anderen Zahl endet mit einer Null wie 150 oder 90 ist, würde es {{ peopleCount }} zmoniu tai megsta

sein Wie erreichen ich das?

+1

Just eine Anmerkung, dass korrekte englische Grammatik "5 Leute so" (nicht mögen) sein würde. – mkaj

Antwort

12

Angular-translate hat Service mit einer Funktionalität von Message die wirklich leistungsfähig ist und hat auch eingebaute für litauisch locale. Article about MessageFormat and angular-translate.

Installation

Sie dieses Paket über Bower installieren:

$ bower install angular-translate-interpolation-messageformat 

Danach sind benötigten Skripte Message und Winkel-translate-Interpolation-Message in dieser Reihenfolge:

<script src="path/to/messageformat.js"></script> 
<script src="path/to/angular-translate-interpolation-messageformat.js"></script> 

Und schließlich in Ihrer Konfigurationsfunktion Aufruf useMessageFormatInter polation Funktion von $ translateProvider:

$translateProvider.useMessageFormatInterpolation(); 

Nutzungs

Nach angular-translate-interpolation-messageformat in Ihre App Installation können Sie mit ihm arbeiten.

Zum Beispiel können Sie Englisch Lokalisierung für Code 'Menschen', da dies erstellen:

{ 
    "PEOPLE" : "{peopleCount, plural, one {There is one man (in lithuanian)} few {# zmones tai megsta} other {# zmoniu tai megsta}}" 
} 

Und als es in Ihrem html wie folgt verwenden:

<span translate="PEOPLE" translate-values="{peopleCount: 12}" translate-interpolation="messageformat"></span> 

Der Ausgang wird sein: " 12 zmones tai megsta ".

+0

Frage mich immer noch, ob es eine Möglichkeit gibt, dies mit mehr Optionen zu machen, mit einer Art von Anweisungen anstelle von "Eins", "Wenige" und "Andere"? – Einius

+0

Sie können mehr über [GitHub] (https://github.com/SlexAxton/messageformat.js/) lesen. Es gibt auch eine 'Select'-Deklaration, die keine eindeutige Aussage ist, aber vielleicht hilfreich für Ihre Bedürfnisse ist. Mit select können Sie folgendes erstellen: '" PEOPLE ":" {peopleCount, select, 1 {ein Mann} 2 {zwei Männer} anderes {# people}} " –

+0

Wie kann die Ausgabe" 12 zmones tai megsta "sein? , wenn der Wert von 'peopleCount' 5 ist? 12! = 5 – cezar

0

ich erreicht dies ohne angular-translate-interpolation-messageformat

Mein Fall ist:
Ich habe Ressourcenbündel Lables:
label.myItem=You have {{count}} item
label.myItems=You have {{count}} items

in HTML Ich habe wie folgt geschrieben:

<ng-pluralize count="itemCount" 
     when="{'one':'{{&quot;label.myItem&quot; | translate:{count: itemCount} }}', 
      'other':'{{&quot;label.myItems&quot; | translate: {count: itemCount} }}' }"> 
</ng-pluralize> 

hier wird itemCount ein 012 seinVariable.

Auf diese Weise müssen Sie kein neues eckiges Paket installieren.

Ausgang ist: Wenn ich 1:

Sie haben 1 Artikel

Wenn ich 2 haben (mehr als 1):

Sie 2 haben Artikel