2013-02-20 31 views
30

Làm thế nào tôi sẽ sử dụng NSLocalizedString cho chuỗi này:NSLocalizedString với định dạng

[NSString stringWithFormat:@"Is “%@“ still correct for “%@“ tap “OK“ otherwise tap “Change“ to choose new contact details", individual.contactInfo, individual.name]; 

Khi sử dụng stringWithFormat trước khi tôi đã sử dụng nó theo cách sau đây:

[NSString stringWithFormat:@"%d %@", itemCount, NSLocalizedString(@"number of items", nil)]; 
+0

Licks nóng có câu trả lời đúng, nhưng tôi cũng khuyên bạn nên đọc http://nshipster.com/nslocalizedstring/ –

+0

Tôi đoán câu trả lời của tôi không xử lý các trích dẫn nhúng, nhưng chúng đã bị hỏng trong bản gốc. –

+0

Một hiển thị ngắn sắp tới của việc triển khai iOS cho các chuỗi được bản địa hóa là nhận xét không được bao gồm như một phần của khóa. Vì lý do này, bạn có thể có hai thông điệp khác nhau với cùng một từ ngữ tiếng Anh nhưng ý kiến ​​khác nhau, và hệ điều hành sẽ không (rõ ràng) có thể phân biệt chúng. –

Trả lời

64
[NSString stringWithFormat:NSLocalizedString(@"Is “%@“ still correct for “%@“ tap “OK“ otherwise tap “Change“ to choose new contact details", @"Query if parm 1 is still correct for parm 2"), individual.contactInfo, individual.name]; 
+0

Ah vì vậy NSLocalizedString nhận ra '% @'? –

+8

Không, nhưng stringWithFormat thực hiện. –

+0

Nếu bạn đang sử dụng Swift, bạn có thể sử dụng 'String (định dạng: NSLocalizedString (" foo% @ baz ")," bar ")'. –

24

câu Given có thể được xây dựng với các phần biến số theo thứ tự khác trong một số ngôn ngữ sau đó tôi nghĩ bạn nên sử dụng đối số vị trí với [NSString stringWithFormat:]:

NSString *format = NSLocalizedString(@"number_of_items", @"Number of items"); 

Trong đó sẽ nạp chuỗi sau đây cho tiếng Anh:

@"Is \"%[email protected]\" still correct for \"%[email protected]\" tap \"OK\" otherwise tap \"Change\" to choose new contact details" 

Và có lẽ cái gì khác cho Pháp (tôi không biết tiếng Pháp vì vậy tôi sẽ không cố gắng một bản dịch, nhưng nó cũng có thể có đối số đầu tiên và thứ hai theo một thứ tự khác nhau):

"French \"%[email protected]\" french \"%[email protected]\" french" 

và bạn có thể yên tâm định dạng chuỗi như bình thường:

NSString *translated = [NSString stringWithFormat:format individual.contactInfo, individual.name]; 
+0

Bạn không cần phải sử dụng mã thông báo vị trí trong phiên bản tiếng Anh (nếu thứ tự phù hợp mà không có). Họ vẫn có thể được sử dụng trong tiếng Pháp (hoặc bất cứ điều gì) nếu cần thiết. –

+1

@HotLicks Tôi nghĩ có ý nghĩa khi sử dụng chúng ở mọi nơi nếu được sử dụng. – trojanfoe

+1

Chỉ là một điều khác để có được sai, trong nhiều trường hợp. –

11

Tôi chỉ muốn thêm một định nghĩa rất hữu ích mà tôi sử dụng trong nhiều dự án của mình.

Tôi đã thêm chức năng này để header prefix tập tin của tôi:

#define NSLocalizedFormatString(fmt, ...) [NSString stringWithFormat:NSLocalizedString(fmt, nil), __VA_ARGS__] 

này cho phép bạn xác định một chuỗi cục bộ như sau:

"ExampleScreenAuthorizationDescriptionLbl"= "I authorize the payment of %@ to %@."; 

và nó có thể được sử dụng thông qua:

self.labelAuthorizationText.text = NSLocalizedFormatString(@"ExampleScreenAuthorizationDescriptionLbl", self.formattedAmount, self.companyQualifier); 
+0

Làm việc như một nét quyến rũ và rất thanh lịch. – agarcian

+3

Lưu ý, mặc dù, điều này giết chết công cụ 'genstrings' chỉ tìm kiếm các tham chiếu trực tiếp đến NSLocalizedStrings. Nó không xử lý các macro. – AHM

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