2014-10-01 5 views
3

У меня есть приложение, которое имеет несколько разных раскадровки, и использует базовую интернационализацию для локализации на французский язык. Main.storyboard, у которого есть файл .strings с переводом, загружает с французами просто отлично. Однако, когда я создаю новую раскадровку и представляю ее, она остается на английском языке. Я просто делал это, чтобы загрузить раскадровку раньше:Несколько раскадровки, не загружая локализацию

UIStoryboard *upcomingStoryboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil]; 
/// Code to present initial view controller. 

Это просто загружает английский раскадровки. Затем я попробовал, следуя инструкции from this site, которые изменили мой код:

NSString *language = @"Base"; 
NSBundle *mainBundle = [NSBundle mainBundle]; 
NSString *preferred = [[mainBundle preferredLocalizations] objectAtIndex:0]; 
if ([[mainBundle localizations] containsObject:preferred]) { 
    language = preferred; 
} 
NSBundle *bundle = [NSBundle bundleWithPath:[mainBundle pathForResource:language 
                   ofType:@"lproj"]]; 
UIStoryboard *upcomingStoryboard = [UIStoryboard storyboardWithName:storyboardName bundle:bundle]; 

Всего это сделало вызвать приложение к сбою при загрузке раскадровки, которая, вероятно, потому, что там нет фактического раскадровка файла в fr.lproj, просто .strings файл. Кто-нибудь имел успех в этом?

+0

Почему вы не можете использовать '[UIStoryboard storyboardWithName: storyboardName bundle: [NSBundle mainBundle]];'? Раскадровка, которую я использую в своем приложении, не является основной раскадрой, и она локализована без проблем. Если вы передадите 'nil' в аргумент bundle, то он не будет локализовать что-либо. Вот почему аргумент bundle существует. – Fogmeister

+0

Я тоже пробовал это без везения. Вы используете базовую интернационализацию с файлом .strings для раскадровки? – macandyp

+0

Вы передали главный пучок? то есть не только нуль. – Fogmeister

ответ

0

Я использую несколько раскадровки в своем локализованном приложении. Ни один из них не задан как файл «Основной интерфейс». Все они загружаются в код в зависимости от того, где пользователь должен находиться в приложении.

По сути, у меня есть раскладная панель для входа в систему, которая позволяет пользователю войти в систему и раскадровку приложения для содержимого приложения.

Проект использует базовую интернационализацию (с английским языком разработки) и строковые файлы для всех переводов (наконечники, раскадровки и код).

Они загружаются через метод, как это ...

- (void)showStoryboardWithName:(NSString *)storyboardName transition:(UIViewAnimationOptions)transition 
{ 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:[NSBundle mainBundle]]; 
    UIViewController *controller = [storyboard instantiateInitialViewController]; 
    [self showViewController:controller withTransition:transition]; 
} 

У меня есть 15ish языков локализованы в приложении, и все они работают с этим.

+1

Не уверен, что в итоге получило трюк. Я удалил несколько раз, и мне не повезло. Я, наконец, выкопал старый iPod touch и установил его, и все работало, как ожидалось. Затем я снова удалил свой телефон и работал там. Спасибо, что подтвердили, что это должно было сработать так легко, и я был сумасшедшим :) – macandyp

Смежные вопросы