2012-01-03 14 views
5

Tôi đang làm việc trên một ứng dụng có hỗ trợ đa ngôn ngữ. Như bạn có thể mong đợi, bất cứ lúc nào tôi tải một số file ngòi sử dụng một mã như thế này:Tải thủ công một ngòi bản địa hóa khác trong iOs

self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:nil]; 

Ứng dụng sau đó sẽ được tải cục bộ phiên bản xib tương ứng từ thư mục Languange của nó. Bây giờ, tôi tự hỏi nếu nó có thể tải các tập tin nib bản địa bằng tay. Ví dụ, thay vì chỉ đơn giản là tải CustomController, tải/, vv phiên bản tiếng Anh /Pháp/Đức của CustomController.

Có cách nào tôi có thể đạt được điều này không?

Cảm ơn sự giúp đỡ của bạn trước!

P.S. Tôi biết điều này có thể không phải là cách thích hợp để thay đổi ngôn ngữ trong một ứng dụng iphone/ipad, nhưng đây không phải là quyết định của tôi

[sau sửa] này trông hơi kỳ lạ và giống như một hack, nhưng nó có vẻ làm việc (tải nib Đức):

NSString* path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"]; 
NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 
self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:languageBundle]; 

tôi thấy mũi ở đây: http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

Nó không cảm thấy hoàn toàn đúng mặc dù, tôi tự hỏi nếu có những giải pháp khác nữa. Để bắt đầu, tôi có cảm giác điều này sẽ gây ra sự cố với phiên bản cũ của iO, vì thư mục ngôn ngữ có quy ước đặt tên khác nhau

+1

Kiểm tra xem điều này có thể giúp bạn: http://stackoverflow.com/questions/598020/objective-c-cocoa-internationalization-with-nibs-is-that-really-a-good-idea – Peres

+0

Có, nhưng không phải trong trường hợp này. Tôi có một số ý tưởng về cách để đạt được một hiệu ứng như vậy mà không cần sử dụng ngòi cục bộ. Thật không may, các ứng dụng sử dụng chúng ngay bây giờ và ý tưởng là để làm điều này càng sớm càng tốt, mà không cần phải làm nhiều viết lại/xem xét lại các ứng dụng. Nếu tôi có thể tự tải các xib bản địa hóa, nó sẽ thực sự dễ dàng để chuyển đổi nó – BBog

+0

Nhưng chúng ta đang nói về làm nó trên chạy?Ví dụ tôi có ngòi cho tiếng Anh Anh, và sau đó tôi đi đến các thiết lập và chuyển đổi ngôn ngữ để frensh và nó sẽ chỉ thay đổi ?? – Peres

Trả lời

17

Vì vậy, giống như tôi đã nói trong chỉnh sửa, đây là những gì tôi đã tìm thấy làm giải pháp:

NSString* path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"]; 

NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 

self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:languageBundle]; 

Và nếu bạn cần phải tải một văn bản vào một nhãn cục bộ

NSString* path= [[NSBundle mainBundle] pathForResource:[[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] objectAtIndex:0] ofType:@"lproj"]; 

NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 

someLabel.text = [languageBundle localizedStringForKey:@"textKey" value:@"" table:nil];  

Thông tin thêm ở đây: http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

Người mà nó có thể quan tâm, phương pháp này làm tăng khá nhiều vấn đề. Để bắt đầu, một cái gì đó có thể ảnh hưởng đến tất cả mọi người: bạn cần phải có mọi tài nguyên được sử dụng bởi một xib bản địa hóa cũng được bản địa hoá. Nếu tôi tải một xib bản địa hóa mới bằng phương pháp này, và xib đó chứa một hình ảnh không được bản địa hóa thường xuyên, nó sẽ không hiển thị cho đến khi nó được bản địa hóa. Các sự cố khác cụ thể hơn và được kết nối với cách bạn truy xuất dữ liệu được bản địa hóa.

Cuối cùng, tôi không nghĩ rằng tôi sẽ sử dụng điều này, bởi vì đối với các ứng dụng hiện tại nó là quá khó khăn, nhưng nó có thể bật ra thuận tiện trong tương lai.

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