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

260

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

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

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

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

Soheil
источник
Вы когда-нибудь решали это, я изо всех сил пытаюсь локализовать NSLocationWhenInUseUsageDescription?
Оливер Пирмейн

Ответы:

491

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

NSLocationWhenInUseUsageDescription = "Description of this";

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

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

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

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

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

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

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

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

Кредиты на Марко , спасибо за фото в том числе в этом ответе!

Фахри Азимов
источник
15
После создания файла строк вам необходимо также включить ключ в файл Info.plist или его можно безопасно удалить оттуда?
Роонак
11
Совет: используйте именно имя «InfoPlist.strings» и ничего больше. Например, мой оригинальный файл infoplist был назван как-то иначе, но мне нужно было использовать это имя именно для того, чтобы оно заработало.
Sjoerd представляет
22
При тестировании локализаций на симуляторе. Мне пришлось изменить язык на самом симуляторе, а не только язык в цели xcode. Просто предупреждение для всех остальных.
Джон Уэбб
10
правильное использование - keyname = "ваш текст"; Например: NSLocationWhenInUseUsageDescription = "ваш текст"
Магурицио
10
Внимание: ключ в этом файле не должен иметь кавычки, что отличается от обычной локализации. например: NSMicrophoneUsageDescription = "ваше описание";
Ючао Чжоу
33

Все вышеперечисленное не работает для меня (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), и в моем случае это не сработало.

Цви
источник
2
Почему не указана ссылка на соответствующий документ?
Юрский период
3
Здесь ссылка на соответствующую страницу Apple
согнуть
и как мы решили, что хх? например для английского это может быть en, en, eng, английский и т. д.? Извините, если это глупый вопрос, потому что я новичок
Awais Nasir
Ваш ответ сработал для меня, за исключением сценария с резервным языком, приложение получает язык резервирования всегда ранее использовавшимся языком, а не английским, хотя мое значение на английском присутствует в файле Info.plist, также я также пробовал base.lproj
Awais Nasir
19

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

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

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

Тувок
источник
15

подсказки

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

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

    NSLocationWhenInUseUsageDescription = "Description of this";

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

    "NSLocationWhenInUseUsageDescription" = "Description of this";
Джузеппе Беккари
источник
Ценные дополнения, но я думаю, что это должен быть комментарий под соответствующим ответом, а не новый ответ. Также обратите внимание, что «363» - это не идентификатор сообщения, а количество голосов, которые получил ответ (число с тех пор изменилось).
Джон Дж. Камиллери
7
У меня нет 50 репутации, чтобы добавить комментарий там.
Джузеппе Беккари
Неважно, используете ли вы кавычки "..." вокруг клавиши, например: ( "NSLocationWhenInUseUsageDescription"="description"допустимо). Это может быть с или без.
mluisbrown
12

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

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

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

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

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

Мэтт С.
источник
3
Перевод всего списка только для одного ключа является излишним. Найти больше информации здесь: bit.ly/1yBUTru
RGML
2
Это просто неверно для XCode 9. Он никогда не запрашивает plist-локализацию при добавлении нового языка.
Том
Мне нужно разобраться с этим для Xcode 9 - еще не было возможности протестировать новый Xcode.
Мэтт С.
11

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

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

"NSLocationAlwaysAndWhenInUseUsageDescription" = "блаб";

"NSLocationAlwaysUsageDescription" = "blabla2";

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

Костас Бакулиас
источник
4

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

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

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

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

Эдвард
источник
3
Были ли у вас проблемы? Я не могу построить проект, когда добавляю два языка в локализацию, так как xcode говорит: «Файл info.plist не может быть открыт, потому что такого файла нет.
mkkrolik
2
@mkkrolik У меня сейчас та же проблема. Вы нашли решение?
Тоданли
@Todanley пропустить это решение, оно не работает для меня. Вместо этого используйте InfoPlist.strings.
mkkrolik
@mkkrolik Спасибо, что работает. А также при тестировании с симулятором мне пришлось изменить настройку языка симулятора, а не цели, чтобы он работал.
Тоданли
3

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

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

Шапка
источник
0

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

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

d.ennis
источник
0

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

Майк Глухов
источник
0

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

Посмотреть в XCode

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

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

Hourglasser
источник