Плюрализация Android не работает, нужна помощь
Я пытался использовать множественный ресурс с Android, но не повезло.
вот мой файл ресурсов для моего множества:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<plurals name="meters">
<item quantity="one">1 meter</item>
<item quantity="other">
<xliff:g id="count">%d</xliff:g>
meters
</item>
</plurals>
<plurals name="degrees">
<item quantity="one">1 degree</item>
<item quantity="other">
<xliff:g id="count">%d</xliff:g>
degrees
</item>
</plurals>
</resources>
...и вот код, который я использую, когда пытаюсь извлечь строку количества из моих ресурсов:
Resources res = this.getResources();
tTemp.setText(res.getQuantityString(R.plurals.degrees, this.mObject.temp_c.intValue()));
...но текст в TextView остается %d degrees
и %d meters
.
кто-нибудь знает, что происходит? Я отладил код и РЭС.getQuantityString(...) call возвращает строку, значение которой %d degrees
или %d meters
. Хотя, когда количество оказывается 1, оно правильно оценивает 1 degree
или 1 meter
.
заранее спасибо за любую помощь!
С уважением, celestialorb.
3 ответов
Кажется, что вам нужно указать количество дважды, первый используется для определения строки для использования, а второй-тот, который заменяется в строку. например,
Resources res = this.getResources();
int tv = this.mObject.temp_c.intValue();
tTemp.setText(res.getQuantityString(R.plurals.degrees, tv, tv));
и по крайней мере в моем тестировании до сих пор xliff:g
элементы в ресурсе не нужны.
Android "поддерживает" использование множественных чисел с помощью R. plurals, который практически недокументирован. Погружение в исходный код показывает, что вы должны иметь следующие возможные версии строки:
- "ноль"
- "один"
- " немногие "(ровно за 2)
- "другие" (для 3 и выше)
однако я обнаружил, что на самом деле работают только "один" и "другой" (несмотря на то, что другие используются в android источник!).
чтобы использовать несколько строк, которые вы хотите объявить множественными, аналогично обычным строковым ресурсам:
<resources>
<plurals name="match">
<!-- Case of one match -->
<item quantity="one">1 match</item>
<!-- Case of several matches -->
<item quantity="other">%d matches</item>
</plurals>
</resources>
затем, чтобы фактически использовать их в коде, используйте код, подобный тому, что superfell предложил выше:
String text = getResources().getQuantityString(R.plurals.match, myIntValue, myIntValue);
myTextView.setText(text);
такая же проблема! Я думаю, это просто ошибка в документации. "Чистый"getQuantitiyString(int, int)
метод просто получает текстовый ресурс без форматирования. Как superfell заявил: просто используйте getQuantityString(int, int, Object...)
метод и передайте свое целочисленное значение дважды.
Я надеялся, что это сработает так же, как и вы, но это просто не так!!
PS: может быть, Проверить ответ как правильный? ;-)