Tôi quen với việc sử dụng NSLocalizedString() để bản địa hóa các chuỗi, nhưng vấn đề tôi có ngày hôm nay đòi hỏi phải khéo léo hơn một chút. tình hình của tôi là như thế này:Bản địa hóa các chuỗi được nối hoặc động
NSString *userName; //the users name, entered by the user. Does not need localized
NSString *favoriteFood; //the users favorite food, also entered by user, and not needing localized
NSString *summary = [NSString stringWithFormat:@"%@'s favorite food is %@", userName, favoriteFood];
này hoạt động tốt cho tiếng Anh, nhưng không phải mọi ngôn ngữ sử dụng thứ tự từ giống như tiếng Anh, ví dụ, một word-by-word dịch sentance cùng từ Nhật sang tiếng Anh sẽ đọc: pizza món ăn ưa thích
UserName là
chưa kể rằng 's là không làm một sở hữu trong mọi ngôn ngữ.
Kỹ thuật nào có sẵn để bản địa hóa loại câu ghép này?
CẬP NHẬT LỢI ÍCH CỦA CÁC LOẠI KHÁC: @Jon Reed đúng, định vị vị trí rất quan trọng đối với việc bản địa hóa. Tài liệu mà anh ta liên kết chỉ chứa một tham chiếu đến thực tế là chúng có thể được sử dụng với NSString, NSLog, một người khác, liên kết này thực sự không biết CÁCH sử dụng chúng.
Tôi tìm thấy this link, giải thích rõ điều đó. Nó cũng giải thích câu hỏi của tôi tốt hơn tôi. Từ liên kết:
Format chuỗi cho printf và sprintf (xem printf) trình bày một vấn đề đặc biệt cho bản dịch. Hãy xem xét các sau: 1
printf(_"String `%s' has %d characters\n", string, length(string))) A possible German
dịch cho điều này có thể là:
"%d Zeichen lang ist die Zeichenkette `%s'\n" The problem
nên rõ ràng: thứ tự của các chi tiết kỹ thuật định dạng là khác nhau từ bản gốc! Mặc dù gettext có thể trả lại chuỗi đã dịch tại thời gian chạy là , nhưng không thể thay đổi đối số thứ tự trong lệnh gọi printf.
Để giải quyết vấn đề này, định dạng printf thông số có thể có thêm một phần tử tùy chọn , mà chúng tôi gọi là thông số định vị vị trí. Ví dụ:
"%2$d Zeichen lang ist die Zeichenkette `%1$s'\n" Here, the
specifier vị trí bao gồm một số số nguyên, mà chỉ ra mà lập luận để sử dụng, và một ‘$’. Đếm là một lần và chuỗi định dạng không được bao gồm. Như vậy, trong ví dụ sau, 'string' là số đầu tiên và 'chiều dài (string)' được thứ hai:
$ gawk 'BEGIN { > string = "Dont Panic" > printf _"%2$d characters live in \"%1$s\"\n", > string, length(string) > }' -| 10 characters live in "Dont Panic"
Tôi đã theo liên kết của bạn và đọc Localizing String Resources (http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPInternational/Articles/StringsFiles.html). Tôi không thấy bất kỳ tham chiếu nào đến các thông số định dạng mà bạn đề cập (% 2 $ @) Bạn có thể giải thích một chút được không? – SooDesuNe
Làm theo liên kết và tìm kiếm "specifiers positional". Ngoài ra, hãy thử. Đây là một công cụ cần thiết để bản địa hóa. –
'% $ 1 @' phải là '% 1 $ @' ở cuối ví dụ của bạn. – bovine