Đây là một giải pháp mà tôi đang sử dụng để xử lý sự cố này mà không cần chuyển sang MessageFormat.
Đầu tiên, tôi trích xuất chuỗi "số không" thành tài nguyên chuỗi của riêng nó.
<string name="x_items_zero">No items.</string>
<plurals name="x_items">
<item quantity="zero">@string/x_items_zero</item>
<item quantity="one">One item.</item>
<item quantity="other">%d items.</item>
</plurals>
Sau đó, tôi có một số phương pháp tiện lợi trong ResourcesUtil của riêng tôi
public static String getQuantityStringZero(Resources resources, int resId, int zeroResId, int quantity) {
if (quantity == 0) {
return resources.getString(zeroResId);
} else {
return resources.getQuantityString(resId, quantity, quantity);
}
}
public static String getQuantityStringZero(Resources resources, int resId, int zeroResId, int quantity, Object... formatArgs) {
if (quantity == 0) {
return resources.getString(zeroResId);
} else {
return resources.getQuantityString(resId, quantity, formatArgs);
}
}
Bây giờ bất cứ lúc nào tôi muốn sử dụng một chuỗi cụ thể cho số lượng 0, tôi gọi:
String pluralString = ResourcesUtil.getQuantityStringZero(
getContext().getResources(),
R.plural.x_items,
R.string.x_items_zero,
quantity
);
Tôi ước có điều gì đó tốt hơn nhưng điều này ít nhất cũng hoàn thành công việc trong khi vẫn giữ cho tài nguyên chuỗi XML dễ đọc.