Ручная загрузка другого локализованного пера в iO - PullRequest
5 голосов
/ 03 января 2012

Я работаю над приложением с поддержкой нескольких языков.Как и следовало ожидать, время от времени я загружаю некоторые nib-файлы, используя такой код:

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

Приложение затем загружает соответствующую локализованную версию xib из своей папки языка.Теперь мне интересно, можно ли загрузить локализованный файл пера вручную.Например, вместо простой загрузки CustomController загружается английский / французский / немецкий / и т. Д. версия CustomController.

Есть ли способ, которым я могу достичь этого?

Заранее благодарю за помощь!

PS Я знаю, что это не может быть правильным способом изменить язык в iphone/ ipad app, но это не мое решение

[позднее редактировать] Это выглядит немного странно и похоже на хак, но, похоже, работает (загрузка немецкого пера):

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

Я нашел подсказку здесь: http://learning -ios.blogspot.com / 2011/04 / advance-localization-in-ios-apps.html

Хотя это не совсем правильно, мне интересно, есть ли и другие решения.Для начала, я чувствую, что это вызовет проблемы со старыми версиями iO, поскольку языковая папка имела другое соглашение об именах

1 Ответ

17 голосов
/ 04 января 2012

Итак, как я уже сказал в редактировании, вот что я нашел в качестве решения:

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

NSBundle* languageBundle = [NSBundle bundleWithPath:path];

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

А если вам нужно загрузить текст в локализованную метку

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];       

Подробнее здесь: http://learning -ios.blogspot.com / 2011/04 / advance-localization-in-ios-apps.html

Для кого это может касаться, этот метод вызывает целый ряд проблем. Начнем с того, что может затронуть каждого: вам нужно, чтобы каждый ресурс, используемый локализованным XIB, также был локализован. Если я загружу новую локализованную XIB с использованием этого метода, и эта XIB содержит обычное нелокализованное изображение, оно не будет отображаться, пока не будет локализовано. Другие проблемы более специфичны и связаны с тем, как вы получаете локализованные данные.

В конце концов, я не думаю, что буду использовать это, потому что для текущего приложения это слишком проблематично, но может оказаться полезным в будущем.

...