Cách ít hacky nhất là qua NSUserDefaults
: Ngôn ngữ được xác định bởi AppleLocale
(ID ngôn ngữ dưới dạng chuỗi) và ngôn ngữ được xác định theo kết quả trùng khớp đầu tiên trong AppleLanguages
(một mảng ID ngôn ngữ); ứng dụng của bạn có thể ghi đè các giá trị mặc định này cho ứng dụng của bạn chỉ. Để kiểm tra xem ứng dụng của bạn có bị ghi đè hay không, bạn có thể sử dụng một cái gì đó như [defaults persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]] objectForKey:@"AppleLocale"]
. Để xóa ghi đè, hãy sử dụng -removeObjectForKey:
.
Dù bạn làm cách nào, bạn có thể sẽ phải relaunch the app khi thay đổi ngôn ngữ; Ứng dụng OS X và iOS không được thiết kế để thay đổi ngôn ngữ khi chạy (trên OS X, chỉ các ứng dụng mới được phát hành thấy thay đổi ngôn ngữ; trên iOS hệ thống sẽ giết tất cả ứng dụng để thay đổi ngôn ngữ).
Tôi đã thêm tính năng này để giúp việc chuyển đổi ngôn ngữ dễ dàng hơn cho việc phát triển/thử nghiệm; Tôi không biết liệu điều này có làm hỏng quá trình xem xét của App Store hay không.
Nguồn
2013-03-16 01:38:23
Whoa-whoo. 'method_setImplementation (class_getInstanceMethod ([lớp NSLocale], @selector (currentLocale)), (IMP) spoofedImpl);'? –
Bất kỳ cách nào để làm điều đó mà không bị vướng bận? – Mike
Bạn đã thử tạo danh mục cho NSLocale để trả lại ngôn ngữ bạn chọn cho các phương thức lớp chưa? –