簡體   English   中英

復數在android中沒有按預期工作

[英]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&lt;{0} items}</string>
</resources>

然后,從代碼中您所要做的就是以下內容:

String fmt = resources.getText(R.string.item_shop);
textView.setText(MessageFormat.format(fmt, amount));

您可以在MessageFormatjavadocs中閱讀有關格式字符串的更多信息

最近有一篇關於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM