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

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

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

Что вы думаете?

Привет, пави


person pawi    schedule 05.08.2010    source источник


Ответы (2)


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

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

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

person fedmest    schedule 14.09.2010
comment
Из того, что я видел в документации Apple, упоминается только получение значений этого ключа AppleLanguages. Сталкивались ли вы с трудностями при отправке своего приложения в App Store? - person Dirty Henry; 11.01.2012
comment
У меня есть одно приложение в App Store, которое использует именно этот код. Последний раз обновлялся около года назад, без проблем... - person fedmest; 21.06.2013