[英]Plurals not working as intended in android
我正在使用android-sdk提供的Plural字符串。 我使用以下代碼創建一個復數字符串:
<plurals name="valuestr">
<item quantity="zero">Choose a value.</item>
<item quantity="one">%d unit.</item>
<item quantity="other">%d units.</item>
</plurals>
Java代碼:
textView.setText(getResources().getQuantityString(R.plurals.valuestr,0,0));
當我設置除“0”以外的任何值時,這工作正常,但是當我設置為“0”時,它顯示“0單位”。 。
請幫忙!
更新
在互聯網上搜索更多時,我遇到了一個使用java.text.MessageFormat
類的解決方法:
<resources>
<string name="item_shop">{0,choice,0#No items|1#One item|1<{0} items}</string>
</resources>
然后,從代碼中您所要做的就是以下內容:
String fmt = resources.getText(R.string.item_shop);
textView.setText(MessageFormat.format(fmt, amount));
您可以在MessageFormat的javadocs中閱讀有關格式字符串的更多信息
最近有一篇關於G +的帖子。 簡而言之,這是因為它不會選擇Integer最接近的匹配(0 = 0),而是因為它會尋找最佳的語法選擇。
在您的示例中,您使用單位。 正確的用法是; 0個單位1個單位2個單位
制作,零等於幾乎任何高於1的其他數量
閱讀全文; https://plus.google.com/116539451797396019960/posts/VYcxa1jUGNo
在資源文件的<plurals>
部分中定義的<plurals>
僅用於關於單數/復數字符串的語法區分。 您不應該像其他人那樣將它們用於其他顯示邏輯。 您應該在代碼中添加一些檢查邏輯。
Android開發人員指南清楚地說明了這一點:
雖然歷史上稱為“數量字符串”(在API中仍稱為數量字符串),但數量字符串應僅用於復數。 例如,當有未讀消息時,使用數量字符串來實現諸如Gmail的“收件箱”與“收件箱(12)”之類的內容將是錯誤的。 使用數量字符串而不是if語句似乎很方便,但重要的是要注意某些語言(例如中文)根本不會產生這些語法上的區別,所以你總是得到另一個字符串。
在我看來,你的解決方法 - 盡管在技術上對你當前的實現工作 - 看起來並不像一個干凈的解決方案。 未來的業務需求可能使得必須包含比僅顯示不同文本更復雜的邏輯。 或者,您可能在不同位置使用的資源文件中有一個通用的“無項目選擇”字符串,只有在您不遵守解決方案時才可以重復使用。
通常,我會避免使用兩種不同的格式化技術(String.format樣式格式化程序%d
與MessageFormat樣式格式化程序{0}
並選擇一個您在整個應用程序中堅持使用的格式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.