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

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

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

-- Обновить --

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

15 ответов

Решение

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

"NSLocationWhenInUseUsageDescription" = "Description of this";

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

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

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

правый редактор

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

левый боковой редактор

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

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

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

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

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

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

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

Шаг за шагом локализуйте Info.plist:

  1. Найдите в x-коде папку Ресурсы (находится в корне)
  2. Выберите папку Ресурсы
  3. Затем нажмите главное меню Файл-> Создать-> Файл...
  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!

Подсказки

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

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

    NSLocationWhenInUseUsageDescription = "Description of this";
    

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

    "NSLocationWhenInUseUsageDescription" = "Description of this";
    

Для более новых XCode 12/13/...

1. Создайте новый InfoPlist.stringфайл в вашем проекте.

2. Выберите свой файл, и вы должны увидеть на правой боковой панели опцию «Локализация».

3. Если вы хотите добавить больше языков в информацию о вашем проекте >> Локализации

Он автоматически создаст копию вашего «InfoPlist.string» для новых языков, которые вы добавляете.

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

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

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

Вы можете использовать каталог строк из,

Хкод 15 +

Просто создайте файл каталога строк с именемInfoPlist.

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

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

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

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

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

В дополнение к принятому ответу (проект находится на Flutter, но он в основном такой же, как нативный):

У меня есть папки Base.lproj, en.lproj, xx.kproj. и т. д. с InfoPlist.stringsв каждом. В этом файле есть такие строки (без кавычек вокруг ключа и с точкой с запятой в конце):

NSLocationWhenInUseUsageDescription = "My explanation why I need this";

Убедитесь, что у вас есть свои языки в YourProject > Info:

Также проверьте project.pbxproj файл, он находится в XXX.xcodeproj/project.pbxproj: в нем должны быть все ваши языки в кодах (en, fr и т. д.)

Но даже тогда это не сработало. Наконец, я заметил CFBundleLocalizations ключ в Info.plistфайл. (чтобы открыть его как необработанные пары "ключ-значение" в XCode - правая кнопка мыши на Info.plist файл -> Открыть как -> Исходный код) Убедитесь, что значения в массиве являются кодами, а не полными словами, например fr вместо French и т.п.

       <key>CFBundleLocalizations</key>
<array>
    <string>en</string>
    <string>ru</string>
    <string>lv</string>
</array>

И еще раз убедитесь, что ваше устройство настроено на язык, который вы тестируете. Ура

PS "Язык разработки" не влияет на вашу проблему, не беспокойтесь об изменении.

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

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

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

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

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

Когда используешь InfoPlist.strings файл (в XCode он должен находиться рядом с Info.plist file - реальное местоположение файла может быть где угодно в проекте, вероятно

https:https://stackru.com/images/2b4be40adad89509587caa6eab933ddc855f9c5d.png

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

Я пытался использовать Privacy - Camera Usage Description, но рабочий ключ NSCameraUsageDescription

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

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

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

iOS локализовать .plist

Вы можете пропустить определение ключа, если вы установите его в

.plist

      

InfoPlist.string

      "NSPhotoLibraryAddUsageDescription" = "You need to allow access to the photo library to download image";
Другие вопросы по тегам