2015-06-15 33 views
5

Merhaba Bir değere bağlı olarak çoğullaştırma ile çeviri yapmak gerekir, ancak bunu nasıl yapamazsınız. Örneğin, peopleCount değişkenine sahipAngular-translate kullanarak çoğullaştırma ile AngularJS çeviri

.

  1. peopleCount = 1 çeviriler olmalıdır: ingilizce: {{ peopleCount }} person likes this litvanya: {{ peopleCount }} zmogus tai megsta
  2. peopleCount eğer 1'den fazla İngilizce tercüme olurdu geçerli: {{ peopleCount }} people like this.

ama litvanya çeviriler için:

    peopleCount 2 ve 9 veya 4 kuralda verilen numaralar ile biter sayılar hariç, bu orandan da biten herhangi bir sayı arasındadır
  1. bile (örnek : 225, 249, 210 < --- bunlar doğru numaralar ve onlardan bazıları: 215, 250 ...). sayımı 10 ve 20 veya 30, 40 ya da 150 gibi sıfır veya 90 ile biten herhangi bir başka sayısı arasında ise o bunu başarmak nasıl {{ peopleCount }} zmoniu tai megsta

olacağını {{ peopleCount }} zmones tai megsta

  • olurdu? Böyle

  • +1

    Sadece Doğru İngilizce dilbilgisinin "bundan 5 kişi" (beğenmeyeceği) olacağı bir not. – mkaj

    cevap

    12

    Eğik-translate gerçekten güçlüdür MessageFormat işlevselliği ile hizmet sahiptir ve aynı zamanda yerleşik yerel ayar litvanya için.

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

    $ bower install angular-translate-interpolation-messageformat 
    

    Bundan sonra bu sırayla MessageFormat ve açısal-translate-interpolasyon-messageformat gerekli komut dosyalarını içerir:

    Sen çardağımıza üzerinden bu paketi kurabilirsiniz takma Article about MessageFormat and angular-translate.

    Son olarak, yapılandırma işlevinizde call useMessageFormatInter $ TranslateProvider dan polation fonksiyonu:

    $translateProvider.useMessageFormatInterpolation(); 
    

    Kullanımı onunla çalışabilir uygulamanıza angular-translate-interpolation-messageformat kurduktan sonra

    .

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

    Ve daha bunun gibi html'nizin kullanmak:

    Örneğin, bu gibi kod 'İNSANLARIN' için ingilizce yerelleştirme oluşturabilir

    <span translate="PEOPLE" translate-values="{peopleCount: 12}" translate-interpolation="messageformat"></span> 
    
    çıkışı olacaktır

    : " 12 zon tai megsta ".

    +0

    Hala “bir”, “birkaç” ve “öteki” yerine bir çeşit ifade ile bunu daha fazla seçenekle yapmanın bir yolu olup olmadığını merak ediyor musunuz? – Einius

    +0

    [github] 'da daha fazla bilgi edinebilirsiniz (https://github.com/SlexAxton/messageformat.js/). Trully ifadesi olmayan “select” bildirimi de vardır, ancak belki ihtiyaçlarınız için yardımcı olacaktır. Select ile şöyle bir şey yaratabilirsiniz: "" PEOPLE ":" {peopleCount, select, 1 {one man} 2 {iki erkek} other {# people}} " –

    +0

    " 12 zmones tai megsta "nasıl çıktı? "peopleCount" değeri 5 iken, 12! = 5 – cezar

    0

    My durumda angular-translate-interpolation-messageformat

    olmadan bunu başardık:
    Ben kaynak paketi lables var: HTML
    label.myItem=You have {{count}} item
    label.myItems=You have {{count}} items

    böyle yazdım:

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

    Burada itemCount bir 012 olacakdeğişken.

    Bu sayede yeni açısal bir Paket yüklemeniz gerekmez.

    Çıktı geçerli: Ben 1 olduğunda:

    You have 1 öğe

    Ben 2 (Daha fazla 1 den) vardır: 2 var

    öğeler