Плюрализация Android не работает, нужна помощь - PullRequest
10 голосов
/ 15 сентября 2010

Я пытался использовать ресурс множественного числа с 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.

Кто-нибудь знает, что происходит? Я отладил код, и вызов res.getQuantityString (...) возвращает строку, значение которой %d degrees или %d meters. Хотя, когда количество оказывается равным 1, оно правильно оценивается как 1 degree или 1 meter.

Заранее спасибо за любую помощь!

С уважением, Небесная Торб.

Ответы [ 3 ]

37 голосов
/ 18 ноября 2010

Похоже, вам нужно указать количество дважды, первое используется для определения используемой строки, а второе - это то, которое заменяется на строку. например,

Resources res = this.getResources();
int tv = this.mObject.temp_c.intValue();
tTemp.setText(res.getQuantityString(R.plurals.degrees, tv, tv));

И, по крайней мере, в моем тестировании элементы xliff:g в ресурсе не нужны.

4 голосов
/ 11 декабря 2010

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);
3 голосов
/ 20 марта 2011

Та же проблема здесь!Я думаю, что это просто недостаток в документации.«Чистый» метод getQuantitiyString(int, int) просто получает текстовый ресурс без какого-либо форматирования.Как сказал superfell: просто используйте метод getQuantityString(int, int, Object...) и дважды передайте целочисленное значение.

Я надеялся, что это сработает так же, как и вы, но просто нет !!

PS: может быть, проверить ответ как правильный?; -)

...