Плюрализация 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: может быть, Проверить ответ как правильный? ;-)