2012-07-20 42 views
6

Tôi muốn có tùy chọn trong đơn đăng ký thay đổi ngôn ngữ ứng dụng (chỉ ngôn ngữ ứng dụng không phải toàn bộ hệ thống), vui lòng cho tôi một số gợi ý không?thay đổi cài đặt ngôn ngữ ứng dụng trong iOS không phải toàn bộ thiết bị

Xin cảm ơn trước,

Tôi biết về bản địa hóa!

+0

Tôi đoán bài đăng này là một điểm khởi đầu tốt: http: // stackoverflow.com/questions/1669645/how-to-force-nslocalizedstring-to-sử dụng-ngôn ngữ-cụ thể-ngôn ngữ –

+0

Tôi nghĩ rằng bạn không thể thay đổi ngôn ngữ của ứng dụng mà không cần thiết bị. –

+0

@VineeshTP Bạn có thể thay đổi cài đặt ngôn ngữ cho thiết bị và trình mô phỏng trong khi phát triển. Hãy xem câu trả lời của tôi. – Abizern

Trả lời

2

Bạn có thể thực hiện việc này bằng cách sử dụng cờ tùy chỉnh xây dựng mà bạn đã thiết lập từ Xcode. Bằng cách này bạn có thể chạy một ứng dụng theo nội địa hóa thay vì thay đổi tất cả các cài đặt cho thiết bị.

tôi đã viết một bài đăng blog về nó tại http://abizern.org/2012/03/18/simple-localisation-testing/

Và có một dự án ví dụ trên Github mà bạn có thể sử dụng để xem nó trong hành động: https://github.com/Abizern/SimpleLocalisationTesting

+0

Tôi có cùng một câu hỏi nhưng làm thế nào tôi có thể tìm thấy này -AppleLanguages ​​soryy Tôi mới đến iOS –

+0

Nó chỉ là một trong những lá cờ bạn có thể vượt qua tại thời gian chạy. – Abizern

+1

Cảm ơn các tài liệu. Nhưng từ tài liệu này nó không phải là hoàn toàn rõ ràng làm thế nào để thiết lập nó cho newbs – User16119012

1

Tôi đã thực hiện bản địa hóa tùy chỉnh được thực hiện bởi .plist chứa đầy đủ các từ điển. Như thế này:

kYes 
    en = @"Yes" 
    ru = @"Да" 
kNo 
    en = @"No" 
    ru = @"Нет" 

Trong dự án của tôi, tôi đã thực hiện một lớp đơn để đọc chuỗi này. Trong tùy chọn người dùng chọn ngôn ngữ cần thiết (lúc đầu tiên ứng dụng bắt đầu chọn ngôn ngữ từ trạng thái hệ thống hiện tại hoặc đặt mặc định). Ngôn ngữ đã chọn phải được lưu trong tệp hoặc trong cài đặt để sử dụng vào lần bắt đầu tiếp theo. Trong singleton tôi có +getStringWithKey:. Vì vậy, tôi vượt qua có @ "kYes" và nhận được chuỗi cho nội địa hóa hiện tại cho ứng dụng mà thôi. Ngoài ra, bạn sẽ cần thêm các tệp bản địa hóa chuẩn vào dự án, thậm chí trống, bởi vì nếu bạn không, tất cả các ngôn ngữ bạn hỗ trợ sẽ không được hiển thị trong iTunes.

1

Tôi đã thực sự suy nghĩ về ý tưởng khác về cách thay đổi ngôn ngữ trong ứng dụng ui của bạn, mặc dù nó buộc bạn phải 1. đặt tất cả các chuỗi bằng tay 2. cung cấp phương thức (thông báo) cập nhật tất cả các yếu tố ui khi cài đặt ngôn ngữ đã thay đổi. Ý tưởng được dựa trên cùng một phương pháp mà iOS sử dụng để tìm phiên bản địa hoá của chuỗi. Vì vậy, như một điều kiện tiên quyết, bạn phải cung cấp một gói (ví dụ: AppNameStrings.bundle) với cấu trúc thư mục language_id.lproj trong đó language_id là người chỉ định cho các ngôn ngữ bạn muốn cung cấp. Bạn có thể tạo một bó như vậy bằng cách tạo một gói cài đặt, mở nó trong Trình tìm kiếm và xóa tệp root.plist. Tiếp theo, bạn cần một hàm bạn có thể sử dụng để đọc từ gói của mình. Dưới đây là 2 phương pháp tôi sử dụng để đọc các chuỗi được bản địa hóa. Đặt phương pháp sau đây trong tập tin GlobalDefinitions.h bạn

#ifdef __OBJC__ 
NSBundle *yourNameBundle(void); 
NSString *YourNameLocalized(NSString *stringToken, NSString *language); 
#endif 

và mã này trong file GlobalDefinitions.m bạn

NSBundle *yourNameBundle(void) { 
static NSBundle* bundle = nil; 
    if (!bundle) { 
    NSString* path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"YouNameBundle.bundle"]; 
    bundle = [NSBundle bundleWithPath:path]; 
    } 
    return bundle; 
} 
NSString *YourNameLocalized(NSString *stringToken, NSString *language) { 
    if (yourNameBundle()) { 
    return [yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language]; 
    } else { 
    return stringToken; 
    } 
} 

Bạn phải tạo một thể loại trên NSBundle cho

[yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language] 

như là phương pháp tiêu chuẩn bỏ lỡ các tham số ngôn ngữ. Trong phương thức của bạn, bạn mở tệp language.lproj/Root.strings tương ứng và quét nó cho chuỗiToken. Nếu bạn không thể tìm thấy nó trả lại mã thông báo nếu không thì chuỗi văn bản. Bất cứ khi nào bạn cần phiên bản địa phương của một số văn bản bạn viết, ví dụ: label.text = YourNameLocalized (@ "Mã thông báo", [self provideLanguageIdentifier); và bạn đã xong. Tôi đã không thực hiện nó cho đến nay nhưng nó sẽ làm việc.

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