Подтвердить что ты не робот

Вручную загружать другой локализованный наконечник в iO

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

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

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

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

Спасибо за вашу помощь заранее!

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

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

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

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

4b9b3361

Ответ 1

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

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 содержит регулярное нелокализованное изображение, оно не будет отображаться до его локализации. Другие проблемы более конкретны и связаны с тем, как вы извлекаете локализованные данные.

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