2012-10-05 14 views
5

Mam do czynienia z problemem z ciągami ilości (liczby mnogiej).Jak sprawić, by rosyjskie ciągi ilościowe działały prawidłowo?

The manual says, Mogę podać ciągi znaków, które są specyficzne dla każdej lokalizacji i istnieje kilka typowych przypadków: "zero", "jeden", "dwa", "kilka", "wiele" i "inne". Nie wiem, czy uwzględniono wszystkie możliwe przypadki dotyczące wszystkich języków na świecie; tak czy inaczej, dla Rosjan, dla których próbuję zlokalizować, wystarczy.

W języku rosyjskim cyfry od 2 do 4 należy traktować jak "kilka" (reguła jest w rzeczywistości bardziej złożona, ale potrzebuję tylko numerów poniżej dziesięciu).

Jednakże, gdy zażądam ciągu ilościowego dla 2, system bierze ciąg "inny". Nie wymaga ani "dwóch" ciągów, ani "kilku" (zapewniłem je w moich zasobach). Jeśli usunąłem „inne” ciąg, otrzymuję wyjątek:

android.content.res.Resources$NotFoundException: 
    Plural resource ID #0x7f080000 quantity=2 item=other 

Próbowałem to zarówno na emulator (Android 2.1) i na rzeczywistym urządzeniu (Android 2.3), zachowanie jest takie samo źle w obu przypadkach . Oczywiście, gdzieś jest błąd - system nie rozpoznaje specyficznych dla danego kraju wielkości dla mojego języka. Czy to możliwe, że Android ma tu jakiś błąd?

Odpowiedz

1

Dzięki Brigham który ma wskazał na issue, gdzie problem jest wyjaśniony; to wyjaśnienie najpierw dało więcej pytań, ale teraz wydaje się, że zostały rozwiązane. Rzeczywiście, łańcuchy ilościowe nie działają poprawnie (przynajmniej przed API 11, który jest Androidem 3.x), więc musisz użyć alternatywy.

Rozwiązanie dla API przed wersją 11 jest wymienione w comment 15, który zawiera łącze do project for alternative handling of quantity strings. Ten projekt to program, który po prostu robi to, co system miał robić. Można go łatwo przekonwertować do biblioteki, więc wystarczy dodać go do projektu, zaimportować klasę i przejść.

3

Uważam, że obecnie jest uszkodzony w systemie Android.

http://code.google.com/p/android/issues/detail?id=8287

Konkretnie, następujący kod w PluralRules.java pokazuje, że większość języków używać tylko one lub other struny, ale Czech użyje ciąg few:

static final PluralRules ruleForLocale(Locale locale) { 
    String lang = locale.getLanguage(); 
    if ("cs".equals(lang)) { 
     if (cs == null) cs = new cs(); 
     return cs; 
    } 
    else { 
     if (en == null) en = new en(); 
     return en; 
    } 
} 

private static PluralRules cs; 
private static class cs extends PluralRules { 
    int quantityForNumber(int n) { 
     if (n == 1) { 
      return QUANTITY_ONE; 
     } 
     else if (n >= 2 && n <= 4) { 
      return QUANTITY_FEW; 
     } 
     else { 
      return QUANTITY_OTHER; 
     } 
    } 
} 

private static PluralRules en; 
private static class en extends PluralRules { 
    int quantityForNumber(int n) { 
     if (n == 1) { 
      return QUANTITY_ONE; 
     } 
     else { 
      return QUANTITY_OTHER; 
     } 
    } 
} 
0
  1. Określ liczbę mnogą sznurki w wartości-RU/strings.xml nie Wartości/strings.xml
  2. ustawić język urządzenia mobilnego jako rosyjski (od Ustawienia-> Język & input-> Język -> wybierz rosyjski)

Jeśli język nie jest rosyjska potrwa plurals sznurki od wartości/strings.xml

Powiązane problemy