2009-05-13 61 views
16

我希望我的iPhone應用允許用戶使用適當的符號($,€,₤,¥等)輸入,顯示和存儲貨幣金額。爲iPhone本地化貨幣

NSNumberFormatter會做我需要的一切嗎?用戶切換語言環境時會發生什麼情況,並將這些金額(美元,日元等)存儲爲NSDecimalNumbers。爲了安全起見,我認爲有必要在輸入時捕獲語言環境,然後輸入貨幣符號,並將它們與NSDecimalNumber伊娃一起存儲在實例中,以便在用戶更改時可以在路上適當地展開和顯示它們自該項目創建之後的語言環境?

對不起,我幾乎沒有本地化的經驗,所以希望在潛水之前先做幾個快速指針。最後,鑑於iPhone鍵盤的侷限性,如何處理這種輸入的任何見解?

回答

32

NSNumberFormatter絕對是最好的選擇!您可以在NSNumberFormatter上設置一個NSLocale,格式化程序將根據該語言環境自動運行。數字格式化程序的默認區域設置始終是用戶所選區域格式的貨幣。

NSDecimalNumber *someAmount = [NSDecimalNumber decimalNumberWithString:@"5.00"]; 

NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init]; 
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 

NSLog(@"%@", [currencyFormatter stringFromNumber:someAmount]); 

這將根據用戶默認區域格式記錄金額'5.00'。如果你想改變你可以設置的貨幣:

NSLocale *aLocale = [[NSLocale alloc] initWithLocaleIdentifier: "nl-NL"] 
[currencyFormatter setLocale:aLocale]; 

這將選擇該區域設置的默認貨幣。

雖然您不是以用戶的本地貨幣收費,而是收費。要強制NSNumberFormatter在貨幣格式,同時保持用戶的偏好的數字格式,使用方法:

currencyFormatter.currencyCode = @"USD" 
currencyFormatter.internationalCurrencySymbol = @"$" 
currencyFormatter.currencySymbol = @"$" 

在EN-US作爲$5.00在NL-NL這是$ 5,00這將格式化。

+0

這就是我的想法。我很好奇當用戶在將someAmount歸檔到磁盤後更改其語言環境時會發生什麼情況。 iPhone可以很容易地在另一個國家出差。如果用戶對本地語言感到滿意,他們可能會更改語言環境。當這個對象被解除存檔時會發生什麼?它會顯示爲創建和打算的「$ 5.00」,或者顯示爲「¥5」,顯然,它具有明顯不同的貨幣價值,但是當currencyFormatter的區域設置爲日本時,格式正確的NSDecimalNumber爲「5.00」。 – Meltemi 2009-05-13 16:32:54

+0

您可以存儲格式化或無格式的someAmount。如果將其格式化存儲,金額將始終反映其製作幣種。如果將其存儲爲未格式化,格式化程序將只將其格式化爲當前的區域設置,但不會進行任何轉換!因此:'$ 5.00'將變成'¥5'。我在我的應用程序中做的是存儲未格式化的貨幣和它的區域設置。通過這種方式,我總是可以確定貨幣是在其生成的區域中進行格式化的,但我也可以稍後添加貨幣轉換。 – klaaspieter 2009-05-14 08:40:31

+0

只是通過c/p'ing此代碼,我得到的警告:格式不是字符串文字和沒有格式參數 我能不能得到這個? – oberbaum 2010-01-19 14:59:36