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()));
... но текст в текстовом представлении остается %d degrees
и %d meters
.
Кто-нибудь знает, что происходит? Я отлажил код и вызов res.getQuantityString (...) возвращает строку, значение которой является %d degrees
или %d meters
. Отказ Хотя, когда количество происходит 1, он правильно оценивает 1 degree
или 1 meter
.
Заранее благодарю за любую помощь!
С уважением, Селестиалорб.
Решение
Похоже, что вам нужно указать счетчик дважды, первый используется для определения использования строки, а второй - это тот, который заменен в строку. например
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!).
Чтобы использовать SURURALS, которые вы хотите объявить вам плюрализнируемые строки аналогичным образом для нормальных строковых ресурсов:
<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: Может быть, проверьте ответ как правильный? ;-)