2012-02-09 3 views
3

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

Я локализую все файлы nib, которые у меня есть, и редизайн каждого файла nib в соответствии с его языком, но как я могу изменить файл nib, когда пользователь нажимает кнопку?

любая помощь будет оценена по достоинству.

+0

http://stackoverflow.com/questions/8351445/runtime-change-the-language-localization-in-three20 – 0xDE4E15B

+0

Я читал это сообщение раньше, но решение для библиотеки three20, я разрабатываю iPad, которые не используют внешнюю библиотеку. thx для комментариев. – Scar

ответ

3

В основном вы можете использовать проект, созданный кем-то: Advance Localization in iOS apps

Или есть другой способ, чтобы реализовать его yourself.You должны иметь все файлы локализации в проекте:

@implementation Language 

static NSBundle *bundle = nil; 

+(void)initialize { 
NSArray* languages = [NSLocale preferredLanguages]; 
NSString *current = [languages objectAtIndex:0]; 
[self setLanguage:current]; 

} 

/* 
    example calls: 
    [Language setLanguage:@"it"]; 
    [Language setLanguage:@"de"]; 
*/ 
+(void)setLanguage:(NSString *)l { 
NSLog(@"preferredLang: %@", l); 
NSString *path = [[ NSBundle mainBundle ] pathForResource:l ofType:@"lproj" ]; 
bundle = [[NSBundle bundleWithPath:path] retain]; 
} 

+(NSString *)get:(NSString *)key alter:(NSString *)alternate { 
return [bundle localizedStringForKey:key value:alternate table:nil]; 
} 

@end 

Этот код хорошо для того, что вам нужно. Но это только база. Поэтому каждый текст должен быть загружен с помощью метода get:alter:, поэтому он будет загружен на правильном языке. Как вы видите при инициализации, этот класс будет использовать системный язык, но после вызова метода setLanguage он будет использовать язык, который вы установили. После того, как вы установили язык с помощью метода get:alter:, вы должны перезагрузить весь свой текст в своем контроллере представления, снова вызвав метод get:alter: для каждого текста, который появляется, и установите результат на нужную метку или текстовое поле или на любой другой параметр типа NSString, требуется i18n. Так что есть больше работы, но это очень хорошая база. Я не думаю, что это может произойти автоматически, вам нужно закодировать.

+0

Отличное решение, но эта работа, когда у меня есть стартовая страница, которая спрашивает у пользователя, какой язык вы предпочитаете использовать. Итак, главный вопрос заключается в том, как я могу перезагрузить текущий контроллер представления, который появляется на экране, и контроллер, который уже загружен в памяти. Примечание. Я использую шаблон проекта TabBar, который загружает все нажатия, когда пользователь нажимает на них и выгружает их, если есть предупреждение о памяти. Опять же, Большой ответ, спасибо. – Scar

1

См. Мой ответ Creating a localized iPhone app but allowing the user to change language for the application.

В принципе, вы разбиваете свои локализации на таблицы и пачки, а не на встроенную систему локализации. Вы просматриваете свои строки из таблиц на одном языке и ваших файлов nib из пакетов с одним язычком.

+0

Отличный ответ, можете ли вы предоставить ответ с некоторым исходным кодом, образец проекта будет отличным. Заранее спасибо. – Scar

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