Вопрос

Я пытался использовать ресурсы прорезы с 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: Может быть, проверьте ответ как правильный? ;-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top