8

Xin lưu ýLocalizedStringWithFormat hoạt động như thế nào?

Tôi không hỏi về NSLocalizedString() macro. Tôi hỏi về hàm lớp NSString+ (instancetype)localizedStringWithFormat:(NSString *)format, ....

Đây là hai điều riêng biệt.

Câu hỏi

Tôi đang cố gắng sử dụng phương pháp NSString lớp localizedStringWithFormat nhưng tôi chỉ không thể làm việc ra làm thế nào tôi dự định sử dụng nó.

Bất cứ điều gì tôi cố gắng dường như không nhận được các từ xuất hiện trong tệp bản dịch bằng cách sử dụng Xcode 6 export for localization. Tôi đã thử hai biến thể hàng đầu ở đây nhưng không có gì.

Ví dụ trong các tài liệu cho thấy ...

NSString *myString = [NSString localizedStringWithFormat:@"%@: %f", @"Cost", 1234.56]; 

này có nghĩa là tôi phải tách các từ được dịch từ những con số? tức là tôi không thể chỉ sử dụng ...

NSString *myString = [NSString localizedStringWithFormat:@"Cost: %f", 1234.56]; 

Nếu tôi có thể sử dụng thì cụm từ được dịch là gì và bản dịch sẽ là gì?

Nếu không thì tại sao lại sử dụng điều này? Tại sao không chỉ sử dụng ...

NSString *myString = [NSString stringWithFormat:@"%@: %f", NSLocalizedString(@"Cost"), 1234.56]; 

Sự khác biệt với điều cuối cùng này là gì?

Dù bằng cách nào, ai đó có thể chỉ cho tôi cách để dịch các từ thực tế được dịch.

Cập nhật

OK, lúc này tôi đang sử dụng một công việc ngu ngốc xung quanh mà chỉ dường như bị lạm dụng mọi thứ lol.

Nếu tôi làm ...

NSString *myString = [NSString stringWithFormat:@"%@: %f", NSLocalizedString(@"Cost"), 1234.56]; 

Sau đó, nó được dịch từ "Chi phí" nhưng không sử dụng locale chính xác cho những con số.

Nếu tôi sử dụng ...

NSString *myString = [NSString localizedStringWithFormat:@"%@: %f", @"Cost", 1234.56]; 
// or 
NSString *myString = [NSString localizedStringWithFormat:@"Cost: %f", 1234.56]; 

Sau đó Xcode "Xuất cho nội địa hóa" chỉ cần bỏ qua nó hoàn toàn và không có gì về "Chi phí" được thêm vào tập tin dịch ở tất cả nên không có gì được dịch.

Vì vậy, tôi đã viện đến sử dụng ...

[NSString localizedStringWithFormat:@"%@: %f", NSLocalizedString(@"Cost", @"Cost context stuff..."), 1234.56]; 

này cho biết thêm "Chi phí" đến tập tin dịch và chuyển đổi số sang miền địa phương đúng nhưng có vẻ như tôi đang sử dụng rất nhiều dư thừa thứ ở đây

+0

@matt yeah, tôi đã thấy điều đó. Tôi chỉ không thể có được những từ để dịch. Tôi đã thử tất cả mọi thứ tôi có thể nghĩ đến nhưng những từ dường như không xuất hiện trong tập tin dịch thuật. Tôi nhận được định dạng số đã dịch và sau đó là văn bản tiếng anh. – Fogmeister

+0

@matt có, chúng tôi đã dịch sang 15 ngôn ngữ và khoảng 50 từ cho mỗi ngôn ngữ. Đây là bit duy nhất không hoạt động. Tôi đã cập nhật câu hỏi ngay bây giờ. – Fogmeister

+0

@matt Tôi không chắc hai ý kiến ​​cuối cùng này có ý nghĩa gì? Tôi biết dịch là tùy thuộc vào tôi. Tôi biết miền địa phương khác với ngôn ngữ. Cả hai sự kiện này đều không giúp tôi có được nội dung của bản dịch này. – Fogmeister

Trả lời

5

Khi bạn nghĩ về NSLocalizedStrings - hãy nghĩ khóa/giá trị.Bạn có thể chơi một số thủ thuật với phím, giống như với ví dụ thứ hai của bạn:

@"Cost: %f" 

Đó là một chìa khóa - giá trị có lẽ sẽ là cái gì đó trông giống như @ "SomeOtherWord:% f", -% f vẫn được sử dụng một một phần của chuỗi định dạng sau đó.

Ví dụ cuối cùng bạn đã cho:

NSString *myString = [NSString stringWithFormat:@"%@: %f", NSLocalizedString(@"Cost"), 1234.56]; 

phép riêng của bạn ra bản dịch của từ "Chi phí" với các thiết lập lại của chuỗi, mà có thể là tốt - nhưng có thể không đủ để truyền tải một cách hiệu quả ý nghĩa của bạn bằng tất cả ngôn ngữ. Có thể có một ngôn ngữ mà bạn không dán nhãn: giá trị, sau đó chỉ dịch "Chi phí" không giúp bạn có được bản địa hóa tốt.

NSLocalizedString có thể hỗ trợ hầu hết các tình huống đó, nhưng việc bản địa hóa rất khó khăn và đầy những trường hợp đặc biệt, vì vậy mã của bạn cũng có thể có trường hợp đặc biệt - chỉ cần cố gắng giữ những phần đó tách biệt với phần còn lại của logic.

EDIT: Phát biểu câu hỏi thực tế vì nó phát triển:

localizedStringWithFormat: 

sẽ thay đổi cách định dạng specifiers được thay thế.

Từ docs NSString của Apple:

Thảo luận

Phương pháp này tương đương với sử dụng initWithFormat: ngôn ngữ: và đi qua các miền địa phương hiện tại như là đối số locale.

+0

Đó là điều đầu tiên tôi nghĩ (văn bản là chìa khóa). Nhưng khi tôi sử dụng nó không có gì được thêm vào các tập tin dịch thuật để thực sự dịch nó. Đó có phải là một lỗi trong xuất khẩu của Xcode cho chức năng bản địa hóa có thể? – Fogmeister

+0

Điều gì sẽ xảy ra nếu bạn làm điều đó trong hai giai đoạn?Đầu tiên lấy NSLocalizedString (key), sau đó làm một stringWithFormat :. XCode có điền đúng thứ không? – KirkSpaziani

+0

Thử phiên bản dòng lệnh: "xcodebuild -exportLocalizations" có thể có một số đầu ra hữu ích. Hoặc có thể, đó là một tính năng lỗi/mất tích trên localizedStringWithFormat: – KirkSpaziani

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