2015-06-15 15 views
5

Ciao Ho bisogno di fare traduzioni con la pluralizzazione a seconda di un valore, ma non riesco a trovare come farlo.Traduzione angolareJS con pluralizzazione usando angular-translate

ad esempio ho variabile peopleCount.

  1. peopleCount = 1 traduzioni dovrebbero essere: inglese: {{ peopleCount }} person likes this lituano: {{ peopleCount }} zmogus tai megsta
  2. se peopleCount è più di 1 traduzione inglese sarebbe: {{ peopleCount }} people like this.

ma per le traduzioni lituano:

  1. se peopleCount è tra il 2 e il 9 o un qualsiasi numero che termina con quei numeri, tranne i numeri che termina con i numeri forniti nella quarta regola (ad esempio : 225, 249, 210 < --- questi sono numeri corretti e quelli incorreggibili: 215, 250 ...). sarebbe {{ peopleCount }} zmones tai megsta
  2. se conteggio è compreso tra il 10 e il 20 o il 30, 40 o qualsiasi altro numero che termina con uno zero come il 150 o 90 sarebbe {{ peopleCount }} zmoniu tai megsta

Come posso realizzare questo?

+1

Solo una nota che la corretta grammatica inglese sarebbe "5 persone come questa" (non i mi piace). – mkaj

risposta

12

Angular-translate ha service con funzionalità di MessageFormat, che è davvero potente e ha anche built-in locale per Lituano. Article about MessageFormat and angular-translate.

Installazione

È possibile installare questo pacchetto tramite pergolato:

$ bower install angular-translate-interpolation-messageformat 

Dopo che includono gli script necessari con MessageFormat e angolare-translate-interpolazione-MessageFormat in questo ordine:

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

Infine, nella funzione di configurazione chiamata useMessageFormatInter funzione di estrapolazione da $ translateProvider:

$translateProvider.useMessageFormatInterpolation(); 

Uso

Dopo aver installato angular-translate-interpolation-messageformat nella vostra applicazione è possibile lavorare con esso.

Ad esempio, è possibile creare la localizzazione inglese per il codice 'popolo' come questo:

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

e poi utilizzarlo nel tuo html come questo:

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

L'output sarà: " 12 zmones tai megsta ".

+0

Ti stai ancora chiedendo se c'è un modo per farlo con più opzioni con qualche tipo di istruzione invece di "uno", "pochi" e "altro"? – Einius

+0

Puoi leggere di più su [github] (https://github.com/SlexAxton/messageformat.js/). C'è anche la dichiarazione 'select', che non è una dichiarazione trully, ma forse sarà utile per le tue esigenze. Con select puoi creare qualcosa come: '" PEOPLE ":" {peopleCount, seleziona, 1 {one man} 2 {due men} altro {# people}} "' –

+0

Come può essere l'output "12 zmones tai megsta" , quando il valore di 'peopleCount' è 5? 12! = 5 – cezar

0

ho raggiunto questo senza angular-translate-interpolation-messageformat

Il mio caso è:
Ho risorse etichette bundle:
label.myItem=You have {{count}} item
label.myItems=You have {{count}} items

in HTML che ho scritto in questo modo:

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

qui itemCount sarà un 012 Variabile.

In questo modo non è necessario installare alcun nuovo pacchetto angolare.

output è: Quando ho 1:

Hai 1 articolo

Quando ho 2 (più di 1):

Hai 2 articoli