2013-07-03 10 views
39

Używam Plurals, aby uprościć mój kod. na przykład, kiedyś miećUzyskiwanie łańcucha od liczby mnogiej do użycia w XML?

<string name="cat">Cat</string> 
<string name="cats">Cats</string> 

Użycie liczby mnogiej zamiast wielu ciągów mam teraz

<plurals name="cats"> 
    <item quantity="one">Cat</item> 
    <item quantity="other">Cats</item> 
</plurals> 

Ja jednak używany do pobierania ciągów używać jako tytuły lub streszczenia w moim XML. np

android:title="@string/cats" 

Po usunięciu ten ciąg na rzecz mnogiej, teraz jestem pewien, w jaki sposób odzyskać mój ciąg znaków XML. Zrobiłem dokonać naiwną próbę z

android:title="@plurals/cats" 

ale to właśnie daje mi @1234567890 zamiast Cats (lub Cat).

Ktoś wie, czy możliwe jest pobranie łańcucha z liczby mnogiej z XML?

+0

https://developer.android.com/guide/topics/resources/string-resource.html#Plurals –

+1

Liczba mnoga nie polega na uproszczeniu liczby mnogiej w języku angielskim; ale w celu wsparcia zasad czystego języka. Francuski będzie "0 cat", a rosyjski "21 cat". Nie zapomnij podać% d, aby numer mógł zostać przeniesiony w tłumaczeniu; Jeśli potrzebne. – Liggliluff

Odpowiedz

47

trzeba ustawić go za pomocą kodu:

...setText(yourContext.getResources().getQuantityString(R.plurals.cats, catsCountVar)); 
+0

Mam nadzieję, że nie jest to jedyna opcja, ponieważ wtedy musiałbym znaleźć wiele widoków w czasie wykonywania, które inaczej nie spędziłbym czasu procesora. Jeśli nikt nie odpowie w ciągu kilku dni, zaakceptuję tę odpowiedź jako zasadniczo "niemożliwe z XML". – Duke

+2

Tutaj dokument: http://developer.android.com/guide/topics/resources/string-resource.html# Plurals – gwa

+0

Nie jestem zainteresowany (wyświetlaniem) liczby - chcę mieć pojedynczą i mnogą formę tego słowa, jednocześnie obsługując wiele języków. Ponieważ wyszukiwanie widoków (według identyfikatora) jest drogie, nie potrzebuję robić (drugiego) przejścia przez każdy widok na mojej liście/menu/etc w kodzie, aby ustawić wyświetlany ciąg, który domyślnie Android już wykonał dla mnie, gdy widok (y) jest najpierw zawyżony/utworzony.Z 2 ciągami zamiast z zasobu liczby mnogiej, nie muszę robić nic w moim kodzie na tych widokach. (Z tego co widzę, Plurals zaszkodzi mojej wydajności przy minimalnym wzroście konserwacji.) – Duke

2

można mieć korzyści run-time liczby mnogiej i statycznego rzecz zasobów łańcuchowych pozostawiając swoje zasoby ciągów gdzie one są i odnoszące się do nich w zasoby w liczbie mnogiej.

Od https://developer.android.com/guide/topics/resources/string-resource.html#Plurals (wyróżnienia dodane).

<item>

liczbie mnogiej lub pojedynczej ciąg. Wartość może być odniesieniem do innego zasobu ciągów. Musi być dzieckiem elementu. Pamiętaj, że musisz unikać apostrofów i cudzysłowów. Zobacz Formatowanie i stylowanie, poniżej, aby uzyskać informacje o właściwym stylu i formatowaniu twoich napisów. Przykład:

<string name="cat">Cat</string> 
<string name="cats">Cats</string> 

<plurals name="cats"> 
    <item quantity="one">@string/cat</item> 
    <item quantity="other">@string/cats</item> 
</plurals> 

Teraz można użyć android:title="@string/cats" w plikach XML, a także korzystać z

getQuantityString(R.plurals.cats, numberOfCats) 

przy starcie.

Powiązane problemy