Создание локализованного приложения для iPhone, но разрешение пользователю изменить язык для приложения

Как легкое и чистый способ использовать Перечисление с расширенным для цикла, преобразуйте в ArrayList с java.util. Collections.list.

for (TableColumn col : Collections.list(columnModel.getColumns()) {

(javax.swing.table. TableColumnModel.getColumns возвращает Перечисление.)

Примечание, это может быть очень немного менее эффективно.

14
задан Ron Srebro 7 August 2009 в 17:21
поделиться

3 ответа

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

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

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

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

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

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

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

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

12
ответ дан 1 December 2019 в 08:53
поделиться

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

1
ответ дан 1 December 2019 в 08:53
поделиться

Здесь есть три проблемы:

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

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

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

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

передача языка в виде таблицы.

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

. передача языка в виде таблицы.

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

.
15
ответ дан 1 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: