2009-06-05 46 views
7

Tôi có một ứng dụng iPhone có nút để thay đổi ngôn ngữ hiển thị trong thời gian chạy. Tôi đã xem xét NSLocalizedString() sẽ trả về các chuỗi thích hợp theo tùy chọn hệ thống. Các tùy chọn của tôi thay vì mã hóa cứng tất cả các chuỗi hiển thị và trả về theo lựa chọn ngôn ngữ người dùng trong thời gian chạy là gì? Bất kỳ con trỏ nào cũng sẽ được đánh giá cao.Thay đổi ngôn ngữ cho NSLocalizedString() trong thời gian chạy

+0

Xem http://stackoverflow.com/question s/1669645/how-to-force-nslocalizedstring-to-sử dụng-một-ngôn ngữ cụ thể – Elliot

Trả lời

1

"Trải nghiệm người dùng" chính xác là để người dùng chọn ngôn ngữ của họ thông qua bảng tùy chọn hệ thống; không phải ứng dụng của bạn (hoặc bảng cài đặt của ứng dụng, v.v.). Không có cách nào để ghi đè lên mỗi ứng dụng này và bạn sẽ không muốn bất kỳ ứng dụng nào thay đổi cài đặt trên toàn hệ thống.

+5

Tôi không đồng ý. Đối với trò chơi truyền hình, tôi thích tiếng Nhật hơn vì tôi chơi các trò chơi Nhật Bản từ thời thơ ấu. Nhưng tôi thích sử dụng ngôn ngữ mẹ đẻ của tôi cho các ứng dụng khác. – AechoLiu

+0

Ứng dụng của chúng tôi có thể không hỗ trợ tùy chọn hệ thống ở một số quốc gia nơi nó được giới thiệu, vì vậy ghi đè EN với DE sẽ là thắng lợi cho nhiều khách hàng có ngôn ngữ thứ hai khác mặc định = EN. –

+0

Điều này giả định ứng dụng không hiển thị nhiều ngôn ngữ cùng một lúc. –

5

Sử dụng để thiết lập trật tự ngôn ngữ bằng vũ lực

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en",@"de",..., nil] forKey:@"AppleLanguages"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

sau đó sử dụng

NSLocalizedString(); 

để hiển thị chuỗi cục bộ ...

15

Dựa trên các bài bởi người sử dụng "object2.0", tôi đã đặt cùng một số mẫu mã bạn có thể sử dụng trong ứng dụng của mình để thay đổi ngôn ngữ giao diện người dùng khi đang di chuyển.

Lớp nội địa chính mà không được công việc khó khăn:

-(NSString *) localized:(NSString *) key 
{ 
    GameInfo *gameInfo = [GameInfo sharedInstance]; 

    // langCode should be set as a global variable somewhere 
    NSString *path = [[NSBundle mainBundle] pathForResource:langCode ofType:@"lproj"]; 

    NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 
    return [languageBundle localizedStringForKey:key value:@"" table:nil]; 
} 

Giả sử bạn có chức năng này trong một lớp học toàn cầu gọi utils, gọi hàm này với đoạn mã sau (ví dụ để sản xuất các từ "Settings" .

NSLog([utils localized:@"Settings"]); 

Để thay đổi ngôn ngữ:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:langCode, nil] forKey:@"AppleLanguages"]; 
+0

tóm tắt tốt đẹp :) BTW, chúng ta cũng có thể lấy langCode từ NSUserDefaults, nếu chúng ta lưu ngôn ngữ đã chọn vào NSUserDefaults sau khi người dùng thay đổi ngôn ngữ khi đang bay. (dunno nếu hoạt động này là một hoạt động tốn kém, mặc dù) – aslisabanci

+0

@CheckSmith tại sao "ofType: @" lproj "?? Tôi thường tạo ra Localizable.strings – onmyway133

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