Как локализовать строку внутри информации iOS.файл plist?
Как вы можете знать iOS 8 требует NSLocationWhenInUseUsageDescription ключ для использования местоположения пользователя. Я добавил этот ключ и некоторую общую информацию в свой информационный список.
Как я могу использовать строку перевода в файл plist ?
-- Update --
У меня уже есть локализуемых строк. Мне просто интересно, могу ли я использовать что-то вроде NSLocalizedString (MYSTRING,nil) внутри строки plist. Я знаю, что я могу создать несколько файлов информации.файлы для локализации, но мне было интересно, что там может быть более простой способ.
7 ответов
вы должны использовать InfoPlist.strings
файл для локализации значений Info.plist
. Для этого перейдите в File->New->File
выберите Strings File
под на iOS
имя InfoPlist
, и создавать. Откройте и вставьте Info.plist
значения, которые вы хотите локализовать как:
"NSLocationWhenInUseUsageDescription" = "Description of this";
теперь вы можете локализовать InfoPlist.strings
файл с переводами. Удачи!
EDIT:
выберите Параметры локализации или при необходимости включите локализацию,
вы должен быть в состоянии увидеть файл также на левой стороне редактора.
EDIT:
здесь является официальной документацией для Info.plist
ключи локализации.
все вышеперечисленное не сработало для меня (XCode 7.3), поэтому я прочитал ссылку Apple о том, как это сделать, и это намного проще, чем описано выше. Согласно Apple:
локализованные значения не сохраняются в информации.сам файл plist. Вместо этого значения для определенной локализации сохраняются в a файл Strings с InfoPlist имя.веревка. Вы помещаете этот файл в тот же языковой каталог проекта, который используется для хранения прочие ресурсы на эти же цели локализация.
соответственно, я создал строковый файл с именем InfoPlist.струны и поместил его в xx.папка lproj языка " xx " (и добавила ее в проект, используя File->Add Files to ...). Вот и все. Нет необходимости в ключе "локализованные ресурсы могут быть смешаны" = да, и нет необходимости в InfoPlist.строки в базе.lproj или en.lproj все.
приложение использует информацию.plist key-значение по умолчанию, если не удается найти ключ на языке конкретный файл. Таким образом, я вкладываю свою английскую Ценность В информацию.plist файл и переведенный на язык конкретного файла, протестирован и все работает.
в частности, нет необходимости локализовать InfoPlist.strings (который создает версию файла в базе.lproj, en.lroj, и xx.lproj), и в моем случае это не сработало.
Если что-то не работает, убедитесь, что Вы добавил:
"локализованные ресурсы могут быть смешаны" = YES
в инфо.файл plist. В моем случае InfoPlist.файлы strings просто игнорировались.
Я бы настоятельно рекомендовал прочитать руководства Apple и просмотреть ресурсы WWDC, перечисленные здесь: темы интернационализации и локализации
чтобы конкретно ответить на ваш вопрос, когда вы добавляете новый язык для вашего проекта, вы получаете возможность выбрать, какие файлы InfoPlist для включения (если у вас есть несколько целей, у вас будет несколько файлов Info plist). Все, что вам нужно сделать, чтобы получить следующий экран, это нажать + под локализациями и выбрать новый язык для добавления поддержки.
после добавления он создаст необходимые строковые файлы в соответствующих каталогах lproj для данного языка.
-- EDIT--
чтобы быть ясным, iOS заменит строку для вашего файла Plist на основе выбранного пользователем языка, используя ключ записи plist в качестве ключа в локализованном файле строк.
Как RGML говорят, Вы можете создать InfoPlist.строки, локализовать его, а затем добавить свой ключ и значение, как это: "NSLocationWhenInUseUsageDescription" = " Помогите найти меня!";
Он добавит ключ к вашей информации.plist для указанного языка.
для тех, кто испытывает проблемы информация.plist не включается при попытке добавить локализации, как в Xcode 9.
вам нужно сделать инфо.plist localiazble, войдя в него и нажав на кнопку локализации в инспекторе файлов, как показано ниже.
информация.затем plist будет включен в файловые ресурсы для добавления новых локализаций.
в моем случае все было настроено правильно, но все-таки InfoPlist.файл strings не найден.
единственное, что действительно работало, это удалить и добавить InfoPlist.строки файлов снова в проект.