2015-06-15 48 views
5

Witam Muszę wykonać tłumaczenia z plurowaniem w zależności od wartości, ale nie mogę tego zrobić.Tłumaczenie AngularJS z plurowaniem za pomocą translacji kątowej

Na przykład mam zmienną peopleCount.

  1. peopleCount = 1 tłumaczenia powinny być: angielski: {{ peopleCount }} person likes this litewski: {{ peopleCount }} zmogus tai megsta
  2. jeśli peopleCount jest więcej niż 1 angielskie byłoby: {{ peopleCount }} people like this.

ale litewska tłumaczenia:

  1. jeśli peopleCount wynosi pomiędzy 2 a 9, lub dowolnej liczby kończąc te numery z wyjątkiem liczb, które kończy się wraz z numerami zawartymi w 4 reguły (np : 225, 249, 210 < --- to są poprawne liczby i niepowiązane: 215, 250 ...). byłoby {{ peopleCount }} zmones tai megsta
  2. jeśli liczba jest między 10 a 20 lub 30, 40 lub dowolny inny numer kończący się zerem jak 150 lub 90 byłoby {{ peopleCount }} zmoniu tai megsta

Jak mogę tego dokonać?

+1

Just uwaga, że ​​odpowiednia gramatyka angielska to "5 osób w ten sposób" (nie lubi). – mkaj

Odpowiedz

12

kątowa-translate posiada usługi funkcjonalności MessageFormat który jest naprawdę potężny, a także posiada wbudowany lokalizacji na litewski. Article about MessageFormat and angular-translate.

Instalacja

Można zainstalować ten pakiet za pośrednictwem altany:

$ bower install angular-translate-interpolation-messageformat 

Po tym zawierają niezbędne skrypty z MessageFormat i kątowego-translate-interpolacji-messageformat w tej kolejności:

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

I na koniec w funkcji konfiguracyjnej wywołaj useMessageFormatInter Funkcja polation od $ translateProvider:

$translateProvider.useMessageFormatInterpolation(); 

Wykorzystanie

Po zainstalowaniu angular-translate-interpolation-messageformat do swojej aplikacji można z nim pracować.

Na przykład, można utworzyć angielski lokalizację dla kodu „Ludzie”, jak to:

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

I nie używać go w kodzie HTML tak:

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

Wyjście będzie " 12 zmones tai megsta ".

+0

Nadal zastanawiasz się, czy istnieje sposób na zrobienie tego z większą liczbą opcji z pewnymi instrukcjami zamiast 'one',' few' i 'other'? – Einius

+0

Możesz przeczytać więcej na [github] (https://github.com/SlexAxton/messageformat.js/). Istnieje również deklaracja 'select', która nie jest instrukcją, ale może będzie pomocna dla twoich potrzeb. Za pomocą select możesz stworzyć coś takiego: '" LUDZIE ":" {peopleCount, select, 1 {one man} 2 {two men} other {# people}} "' –

+0

Jak może być wyjście "12 zmones tai megsta" , kiedy wartość 'peopleCount' wynosi 5? 12! = 5 – cezar

0

I to osiągnąć bez angular-translate-interpolation-messageformat

Mój przypadek jest:
Mam zasobów wiązki lables:
label.myItem=You have {{count}} item
label.myItems=You have {{count}} items

w HTML pisałem tak:

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

tutaj itemCount będzie $scope zmienna.

Dzięki temu nie trzeba instalować żadnego nowego pakietu kątowego.

wyjściowa wynosi: Kiedy mam 1:

Masz 1 pkt

Kiedy mam 2 (więcej niż 1):

masz 2 elementy