Как локализовать строку в файле iOS info.plist?

Как вы знаете, для iOS 8 требуется NSLocationWhenInUseUsageDescription. Я добавил этот ключ и некоторую общую информацию в свой информационный план. enter image description here

Как использовать строку перевода внутри файла plist?

- Обновление -

У меня уже есть строка Localizable. Мне просто интересно, могу ли я использовать что-то вроде NSLocalizedString (MYSTRING, nil) внутри строки plist. Я знаю, что я могу создать несколько файлов info.plist для локализации, но мне было интересно, что может быть проще.

Ответ 1

Вы должны использовать файл InfoPlist.strings для локализации значений Info.plist. Для этого перейдите в File->New->File, выберите " Strings File вкладке " Resource " в iOS, назовите его InfoPlist и создайте. Откройте и вставьте значения Info.plist вы хотите локализовать, например:

NSLocationWhenInUseUsageDescription = "Description of this";

Теперь вы можете локализовать файл InfoPlist.strings с переводами. Удачи!

РЕДАКТИРОВАТЬ:

выберите параметры локализации или включите локализацию, если необходимо,

right side editor

Вы также сможете увидеть файл в редакторе слева.

left side editor

РЕДАКТИРОВАТЬ:

Вот официальная документация по локализации ключей Info.plist.

Ответ 2

Все вышеизложенное не помогло мне (XCode 7.3), поэтому я прочитал ссылку Apple о том, как это сделать, и это намного проще, чем описано выше. Согласно Apple:

Локализованные значения не сохраняются в самом файле Info.plist. Вместо этого вы сохраняете значения для определенной локализации в файл с именем InfoPlist.strings. Вы помещаете этот файл в тот же языковой проект, который вы используете для хранения другие ресурсы для той же локализации.

Соответственно, я создал строковый файл с именем InfoPlist.strings и поместил его в папку xx.lproj на языке "xx" (и добавил его в проект с помощью File- > Add Files to...). Это. Нет необходимости в ключе "Локализованные ресурсы могут быть смешаны" = ДА, и нет необходимости в InfoPlist.strings в base.lproj или en.lproj.

Приложение использует значение ключа Info.plist в качестве значения по умолчанию, если оно не может найти ключ в конкретном файле. Таким образом, я поместил свое английское значение в файл Info.plist и перевел его в файл определенного языка, протестировал и все работает.

В частности, нет необходимости локализовать InfoPlist.strings(который создает версию файла в файлах base.lproj, en.lroj и xx.lproj), и в моем случае это не сработало.

Ответ 3

Если что-то не работает, убедитесь, что вы добавили:

"Локализованные ресурсы могут быть смешаны" = ДА

в info.plist. В моем случае файлы InfoPlist.strings просто игнорировались.

Ответ 4

Я бы очень рекомендовал прочитать руководства Apple и посмотреть ресурсы WWDC, перечисленные здесь: Темы по интернационализации и локализации

Чтобы ответить на ваш вопрос, когда вы добавляете новый язык в свой проект enter image description here, вы получаете возможность выбирать, какие файлы InfoPlist включать (если у вас несколько целей, у вас будет несколько файлов Info plist). Все, что вам нужно сделать, чтобы получить следующий экран, попало под + в разделе "Локализация" и выберите новый язык для добавления поддержки. enter image description here

После того, как вы добавили, он создаст необходимые строковые файлы в соответствующих каталогах lproj для данного языка.

- EDIT -

Чтобы быть ясным, iOS заменит строку для вашего файла Plist на основе выбранного пользователем языка, используя ключ ввода plist в качестве ключа в файле локализованных строк.

Ответ 5

подсказки

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

  2. Строка локализации (см. Apple Docs здесь) должна быть

    NSLocationWhenInUseUsageDescription = "Description of this";
    

    а не (с цитатой "...")

    "NSLocationWhenInUseUsageDescription" = "Description of this";
    

Ответ 6

Как говорит RGML, вы можете создать InfoPlist.strings, локализовать его, а затем добавить свой ключ и значение, подобное этому: "NSLocationWhenInUseUsageDescription" = "Помощь, чтобы найти меня!";

Он добавит ключ к вашему info.plist для указанного языка.

Ответ 7

Для тех, кто испытывает проблему с инфо.пластом, не включается при попытке добавить локализации, например, в Xcode 9.

Вам нужно сделать info.plist localiazble, зайдя в него и нажав кнопку локализации в инспекторе файлов, как показано ниже.

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

введите описание изображения здесь

Ответ 8

В моем случае все было настроено правильно, но файл InfoPlist.strings не был найден.

Единственное, что действительно работало, - это удалить и снова добавить файлы InfoPlist.strings в проект.

Ответ 9

Пошаговая локализация Info.plist:

  1. Найдите в x-коде папку Ресурсы (находится в корне)
  2. Выберите папку Ресурсы
  3. Затем нажмите главное меню File-> Создать-> Файл...
  4. Выберите в разделе "Resource" Strings File и нажмите Next
  5. Затем в поле Сохранить как напишите ТОЛЬКО InfoPlist (заглавная буква "I" и заглавная буква "P")
  6. Затем нажмите Создать
  7. Затем выберите файл InfoPlist.strings, созданный в папке Resources, и нажмите в правом меню кнопку "Локализация".
  8. Затем вы выбираете проект из навигатора проекта и выбираете проект из списка проектов.
  9. Во вкладке информации внизу вы можете выбрать желаемый язык (есть в разделе "Локализации").
  10. Язык, который вы можете увидеть в папке ресурсов
  11. Чтобы локализовать значения ("ключ") из файла info.plist, вы можете открыть его в текстовом редакторе и получить все ключи, которые хотите локализовать.
  12. Вы пишете любой ключ в качестве примера в любом InfoPlist.strings, как в примере выше.

"NSLocationAlwaysAndWhenInUseUsageDescription" = "блабли";

"NSLocationAlwaysUsageDescription" = "blabla2";

Это все работает, и вы должны локализовать свой файл info.plist!

Ответ 10

В моем случае локализация не сработала из-за символа "-" в имени. Пример: "aero-Info.plist" и локализованные файлы: "aero-InfoPlist.strings" и "aeroInfoPlist.strings" не работают.