Благодаря полученным ответам я пишу 2 решения на базе Android.Первый, который я использовал, имел множественное число.На первый взгляд, проверяя документы / примеры Plurals, вы можете подумать, что существует количество «немногих» (для 2-4 множественных чисел), проверка которых у sources работает только для локали 'cs'.Для остальных локалей работают только «один» и «другой».Итак, в ваших файлах strings.xml:
<plurals name ="years">
<item quantity="one">1 year</item>
<item quantity="other"><xliff:g id="number">%d</xliff:g> years</item>
</plurals>
Так что для полировки у меня будет:
<plurals name ="years">
<item quantity="one">1 rok</item>
<item quantity="other"><xliff:g id="number">%d</xliff:g> lat</item>
</plurals>
Тогда я буду иметь в своем коде:
int n = getYears(...);
if (Locale.getDefault().getLanguage().equalsIgnoreCase("pl") && n >= 2 && n <= 4) {
return getString(R.string.years_pl, n);
} else {
return getResources().getQuantityString(R.plurals.years, n, n);
}
И в моем файле strings.xml для польского языка я добавил бы отсутствующую строку:
<string name="years_pl"><xliff:g id="number">%d</xliff:g> lata</string>
Мое второе решение имеет элемент множественного числа для английского, испанского и других языков, которые не имеют слишком много множественного числаизменения.Тогда для остальных языков, которые имеют такие изменения, я бы использовал ChoiceFormat.Так что в моем коде:
...
private static final int LANG_PL = 0;
// add more languages here if needed
...
String formats[] = {
"{0,number} {0,choice,1#" + getString(R.string.year_1) + "|2#" + getString(R.string.years_2_4) + "|4<" + getString(R.string.years_lots) +"}", // polish
// more to come
};
...
// Here I would add more for certain languages
if (Locale.getDefault().getLanguage().equalsIgnoreCase("pl")) {
return MessageFormat.format(formats[LANG_PL], n);
} else {
return getResources().getQuantityString(R.plurals.years, n, n);
}
Я не знаю, являются ли эти способы лучшим, но на данный момент, или пока Google не сделает что-то лучше, это работает для меня.