2015-12-21 63 views
11

在Android字符串中,您可以定義複數來處理翻譯,具體取決於提供給字符串的實際編號,如here所述。 字符串還允許指定多個位置參數,類似sprintf在許多語言中所做的。具有多個參數的Android多個字符串

但是,應考慮以下字符串:

<resources> 
    <string name="remaining">%1$d hours and %2$d minutes remaining.</string> 
</resources> 

它包含兩個數字,我將如何改變這個在Android的複數?所有示例只能使用單個參數。這甚至有可能嗎?

回答

3

getQuantityString有一個重載的版本,它需要一個字符串id,數量和可用於格式化字符串的對象的varargs。儘管似乎可以使用複數形式,但對我而言,這聽起來很奇怪。您可以使用DateUtil中包含的幫助程序方法,這些方法已經本地化並負責單數/複數,然後用這些幫助程序的結果填寫字符串。例如。 getRelativeTimeSpanString

<plurals name="numberOfEmails"> 
    <item quantity="one">%d email</item> 
    <item quantity="other">%d emails</item> 
</plurals> 

<plurals name="numberOfMessages"> 
    <item quantity="one">%d message</item> 
    <item quantity="other">%d messages</item> 
</plurals> 

,然後你可以使用getQuantityString檢索兩個部分,並在一個結合起來。

+2

getRelativeTimeSpanString似乎是我手邊的問題的一個好選擇,但並不能解決我最初的問題。有多個號碼的文本並不罕見(「你有5封郵件和3封郵件」,「還有5美元,剩下83美分。」)。我沒有看到如何爲您建議的getQuantityString版本指定XML。 –

+0

看看我發佈的第一個鏈接。文件說,數量將用於選擇字符串和第三個參數來格式化 – Blackbelt

+1

對不起,我不明白。你可以用a)XML的例子來擴展你的答案,爲「你有5封郵件和3封郵件」所需的4個複數形式設置一個字符串,以及b)用郵件和消息作爲輸入數量來調用getQuantityString? –

-6

那麼這是一種可能的工作方式。在活動

<resources> 
    <plurals name="remaining"> 
     <item quantity="one">%1$d hours and</item> 
     <item quantity="other">%2$d minutes remaining.</item> 
    </plurals> 
</resources> 

然後:在值/ strings.xml中像這樣創建一個複數標籤

Resources res = getResources(); 
String myString = res.getQuantityString(R.plurals.remaining, count, count); 

我希望它能幫助!

+2

它不回答這個問題.. 。 – user2878850

+4

建議的解決方案根本無法工作。每次調用getQuantityString(...)時,只會選擇其中一個文本。 –

5

上一個答案使用字符串連接,從i18n的角度來看這是不正確的。對於原始字符串「%1 $ d小時和%2 $ d分鐘」。使用字符串連接會強制將「剩餘」轉換爲可能不適合某些語言的結尾。

我的解決辦法是:

<resources> 
    <string name="remaining">Time remaining: Hours:%1$d Minutes:%2$d.</string> 
</resources> 

或許用 「剩餘時間」 作爲標題。

該解決方案在http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling

它通常可以通過使用 量中性配方,以避免數量串提到,如「書:1」