Приложение для iPhone использует язык, отличный от того, который установлен в ОС / устройстве? - PullRequest
3 голосов
/ 05 августа 2010

Возможно ли, чтобы мое приложение работало на языке, отличном от того, который установлен в ОС? Я хочу переключить язык в меню настроек моего приложения, где пользователь может, например, выберите немецкий для приложения, в то время как его система работает на английском языке.

Из того, что я уже прочитал, кажется, что это невозможно без собственного механизма локализации ...

Что ты думаешь?

Cheerz, Pawi

Ответы [ 2 ]

10 голосов
/ 15 сентября 2010

это можно сделать легко, хотя мне потребовались недели, чтобы понять, как; -)

У меня есть приложение для iPhone под названием iDEX, которое является румынским словарем.На iPad румынский язык не доступен в качестве языка пользовательского интерфейса, поэтому я хотел предоставить пользователю возможность выбрать румынский язык в настройках приложения, поскольку настройки устройства его не включают.

Что нужно сделатьИнтернационализировать приложение и локализовать его как обычно.Затем, в основном методе , установите ключ AppleLanguages стандарта NSUserDefaults на выбранный вами язык и страну, например

int main(int argc, char *argv[]) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[NSArray arrayWithObject:@"ro_RO"] forKey:@"AppleLanguages"];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool drain];
    return retVal;
}

обязательно , чтобы вы установили AppleLanguages ключ до , когда вы запустите UIApplicationMain(), потому что именно в этот момент загружается инфраструктура UIKit и определяется язык по умолчанию.

Также важно, чтобы вы указали и язык, и страну (например, @ "ro_RO", а не просто @ "ro"), иначе ваше приложение может аварийно завершить работу при установке ключа.

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

Надеюсь, это поможет ...

0 голосов
/ 05 августа 2010

Вам нужно реализовать свой собственный механизм загрузки ресурсов для достижения этой цели. Например, вы больше не сможете использовать макрос NSLocalizedString или [NSBundle pathForResource:]. Вам всегда нужно будет указывать пути, включая локализацию (как в de.lproj / MyStrings.strings, а не просто MyStrings.strings). Я бы посоветовал не делать этого без крайней необходимости.

...