2009-05-13 52 views
16

Tôi muốn ứng dụng iPhone của mình cho phép nhập, hiển thị và lưu trữ số tiền bằng cách sử dụng ký hiệu thích hợp ($, €, ₤, ¥, v.v.) cho người dùng.Địa phương hóa đơn vị tiền tệ cho iPhone

NSNumberFormatter có thể làm mọi thứ tôi cần không? Điều gì sẽ xảy ra khi người dùng chuyển miền địa phương của họ và những số tiền này (đô la, yên, vv) được lưu trữ dưới dạng NSDecimalNumbers. Tôi cho rằng, để an toàn, cần phải nắm bắt miền địa phương tại thời điểm nhập cảnh và sau đó là ký hiệu tiền tệ và lưu trữ chúng trong ví dụ của tôi cùng với mã vạch NSDecimalNumber để chúng có thể được mở và hiển thị một cách thích hợp trên đường nếu người dùng thay đổi địa phương của họ kể từ khi mục được tạo ra?

Xin lỗi, tôi có ít trải nghiệm bản địa hóa vì vậy hy vọng sẽ có một vài gợi ý nhanh trước khi đi sâu vào. Cuối cùng, bạn có hiểu biết về cách xử lý loại đầu vào này do giới hạn bàn phím của iPhone không?

Trả lời

32

NSNumberFormatter chắc chắn là con đường để đi! Bạn có thể đặt NSLocale trên NSNumberFormatter, trình định dạng sẽ tự động hoạt động theo ngôn ngữ đó. Ngôn ngữ mặc định cho trình định dạng số luôn là đơn vị tiền tệ cho định dạng vùng được người dùng chọn.

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

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

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

này sẽ đăng nhập số lượng '5.00' theo định dạng người dùng khu vực mặc định. Nếu bạn muốn thay đổi đơn vị tiền tệ bạn có thể đặt:

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

Chọn loại tiền tệ mặc định cho ngôn ngữ đó.

Thông thường, mặc dù bạn không tính phí bằng nội tệ của người dùng, nhưng theo cách riêng của bạn. Để buộc NSNumberFormatter để định dạng trong đơn vị tiền tệ, trong khi vẫn giữ định dạng số trong sở thích của người dùng, sử dụng:

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

Trong en-US này sẽ định dạng như $5.00 trong nl-NL nó $ 5,00.

+0

Đó là những gì tôi nghĩ. Tôi tò mò điều gì sẽ xảy ra khi người dùng thay đổi miền địa phương của họ sau khi someAmount đã được lưu trữ vào đĩa. IPhone có thể, khá dễ dàng, tìm thấy chính nó ở một quốc gia khác trên một chuyến đi kinh doanh. Nếu người dùng cảm thấy thoải mái với ngôn ngữ địa phương, vv họ có thể thay đổi Locale. Điều gì xảy ra khi đối tượng này bị hủy lưu trữ? Nó sẽ hiển thị là '$ 5,00' như đã được tạo và dự định hay nó sẽ hiển thị là '¥ 5', rõ ràng, có giá trị tiền tệ khác nhau đáng kể nhưng là NSDecimalNumber được định dạng đúng '5.00' khi ngôn ngữ của currencyFormatter là Nhật Bản. – Meltemi

+0

Bạn có thể lưu trữ một sốAmount được định dạng hoặc không định dạng. Nếu bạn lưu trữ nó định dạng, số tiền sẽ luôn luôn phản ánh tiền tệ nó được thực hiện in Nếu bạn lưu trữ nó không định dạng, trình định dạng sẽ chỉ định dạng nó trong miền địa phương hiện tại, nhưng sẽ không làm bất kỳ chuyển đổi! Do đó: '$ 5,00' sẽ trở thành '¥ 5'. Những gì tôi làm trong ứng dụng của tôi là lưu trữ cả tiền tệ chưa định dạng và ngôn ngữ của nó. Bằng cách này, tôi luôn chắc chắn rằng đơn vị tiền tệ được định dạng bằng ngôn ngữ mà nó được tạo ra, nhưng tôi cũng có thể thêm chuyển đổi tiền tệ sau này. – klaaspieter

+0

chỉ bằng cách c/p'ing mã này, tôi nhận được cảnh báo: định dạng không phải là một chuỗi chữ và không có đối số định dạng Tôi có thể không nhận được điều này? – oberbaum

Các vấn đề liên quan