Создание локализованного приложения для iPhone, но позволяющего пользователю менять язык для приложения - PullRequest
14 голосов
/ 07 августа 2009

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

В настоящее время я использую NSLocalizedString для получения локализованной строки, но просматривая все варианты макроса, я не могу найти ту, которая позволит мне указать язык.

Есть идеи как это сделать?

Ответы [ 4 ]

15 голосов
/ 19 ноября 2009

Здесь есть три вопроса:

  • Строка
  • Другие ресурсы (включая NIB)
  • Системные сообщения

Последнее почти наверняка не исправимо, поэтому мы оставим это так. Они появятся на языке устройства.

Два других разрешимы, но вам нужно будет делать больше вещей вручную. Для строк вместо создания одной Localizable.strings и последующей ее локализации создайте совершенно отдельные таблицы (English.strings, French.strings и т. Д.) Затем используйте NSLocalizedStringFromTable(), передавая язык в качестве таблицы.

Для NIB есть два подхода. Вы можете поместить каждый набор локализованных NIB в свой собственный Bundle, а затем передать этот Bundle вместо nil в -initWithNibName:bundle:. Кроме того, вы можете вручную загрузить NIB, найдя их с помощью [NSBundle -pathForResource:ofType:inDirectory:forLocalization:].

12 голосов
/ 10 марта 2010

Есть лучший способ сделать это. Вы можете заставить язык так:

[[NSUserDefaults standardUserDefaults] setObject: [NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"];

И отмените эту настройку:

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"AppleLanguages"];

NB. вам, как правило, придется перезапустить приложение, чтобы это вступило в силу.

Подумайте, нужно ли вам позвонить [[NSUserDefaults standardUserDefaults] synchronize];

Я согласен, что пользователю не нужно указывать язык. Однако единственным исключением является возможность переопределить язык и установить его на родной язык разработчика. Если пользователь может говорить на языке разработчика (например, английском для меня), он может захотеть использовать приложение на этом языке, если переводы неверны.

Я ссылаюсь на этот ответ: Как заставить NSLocalizedString использовать определенный язык (ответ на самом деле не работает для меня, но следуя идеям в комментариях, сделал. Отменить то, что я разработал

3 голосов
/ 01 мая 2011

Хитрость в использовании определенного языка путем выбора его из приложения состоит в том, чтобы заставить NSLocalizedString использовать определенный пакет в зависимости от выбранного языка,

вот пост, который я написал для этого http://learning -ios.blogspot.com / 2011/04 / advance-localization-in-ios-apps.html

и вот код одного примера приложения https://github.com/object2dot0/Advance-Localization-in-ios-apps

1 голос
/ 19 ноября 2009

Правильный «пользовательский опыт» для пользователя, чтобы выбрать свой язык с помощью панели системных настроек; не ваше приложение (или панель настроек вашего приложения и т. д.). Невозможно переопределить это приложение для каждого приложения, и мы бы не хотели, чтобы какое-либо приложение изменило настройки всей системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...