Як локалізувати рядок у файлі iOS info.plist?


258

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

Як я можу використовувати рядок перекладу всередині файлу plist?

- Оновлення -

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


Ви коли-небудь працювали над цим, я намагаюся локалізувати NSLocationWhenInUseUsageDescription?
Олівер Пірмен

Відповіді:


489

Ви повинні використовувати 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 Perfors

22
При тестуванні локалізацій на тренажері. Мені довелося змінити мову на самому симуляторі, а не лише мову в цілі xcode. Просто попередження для будь-кого іншого.
Джон Вебб

10
правильне використання є keyname = "ваш текст"; наприклад: NSLocationWhenInUseUsageDescription = "ваш текст"
Magurizio

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 doc на випадок, коли хтось зацікавлений: developer.apple.com/library/archive/documentation/General/…
нагинати

і як ми вирішимо, що xx? наприклад для англійської мови це може бути en, en, eng, англійська мова тощо? Вибачте, якщо це дурне питання, тому що я початківець
Awais Nasir

Ваша відповідь працювала для мене, за винятком сценарію резервної мови, програма отримує запасну мову завжди використовувану раніше мову, а не англійську, моє значення англійської мови присутнє у файлі Info.plist, хоча я також спробував також base.lproj
Awais Nasir

19

Якщо щось не працює, переконайтеся, що ви додали:

"Локалізовані ресурси можна змішувати" = ТАК

в info.plist. У моєму випадку файли InfoPlist.strings були просто проігноровані.


15

Поради

  1. Пам'ятайте, що iOS Simulator використовує за замовчуванням вашу системну мову. Будь ласка, змініть мову (та регіон) у програмі iOS Simulator Setting, щоб перевірити свої переклади.

  2. Рядок локалізації (див. Тут документи Apple )

    NSLocationWhenInUseUsageDescription = "Description of this";

    а не (з цитатою "...")

    "NSLocationWhenInUseUsageDescription" = "Description of this";

Цінні доповнення, але я думаю, що це має бути коментар під відповідною відповіддю, а не нова відповідь. Також зауважте, що "363" - це не ідентифікатор посту, а кількість голосів відповіді (кількість з тих пір змінилася).
Джон Дж. Каміллері

7
Я не маю 50 репутації, щоб додати коментар.
Джузеппе Беккарі

Не має значення, чи використовуєте ви цитати "..." навколо клавіші, наприклад: ( "NSLocationWhenInUseUsageDescription"="description"дійсно). Це може бути з або без.
mluisbrown

12

Я настійно рекомендую ознайомитися з посібниками Apple і переглянути перераховані тут ресурси WWDC: Теми інтернаціоналізації та локалізації.

Щоб спеціально відповісти на ваше запитання, додаючи нову мову до свого проекту введіть тут опис зображення, ви отримуєте можливість вибрати, які файли InfoPlist включати (якщо у вас кілька цілей, у вас буде кілька файлів інформаційного списку). Все, що вам потрібно зробити, щоб отримати наступний екран, натисніть клавішу + під Локалізаціями та виберіть нову мову, щоб додати підтримку. введіть тут опис зображення

Після додавання він створить необхідні рядкові файли у відповідних каталогах lproj для даної мови.

--EDIT--

Для того, щоб було зрозуміло, iOS замінить рядок для файлу Plist на основі поточно вибраної мови користувачем, використовуючи ключ запису в плісті як ключ у файлі локалізованих рядків.


3
Переклад всього списку лише на одну клавішу - це надлишок. Дізнайтеся більше тут: bit.ly/1yBUTru
RGML

2
Це просто не відповідає дійсності для XCode 9. Це додає нову мову.
Том

Мені потрібно буде розібратися в цьому для Xcode 9 - ще не було можливості перевірити новий Xcode.
Метт С.

11

Крок за кроком локалізуйте Info.plist:

  1. Знайдіть у Xcode папку Resources (поміщена в корінь)
  2. Виберіть папку Ресурси
  3. Потім натисніть головне меню Файл-> Створити-> Файл ...
  4. Виберіть у розділі "Ресурс" файл рядків і натисніть кнопку Далі
  5. Тоді в Save As полі запишіть ТОЛЬКО ІнфоПліст (капітал "I" та "P" капітал)
  6. Потім натисніть Створити
  7. Потім виберіть файл InfoPlist.strings, створений у папці "Ресурси", і натисніть у правому меню кнопку "Локалізувати"
  8. Потім вибираєте проект із навігатора проектів та вибираєте проект зі списку проектів
  9. На інформаційній вкладці внизу ви можете скільки завгодно мов (Є в розділі Локалізації)
  10. Мова, яку ви можете бачити в папці ресурсів
  11. Щоб локалізувати значення ("ключ") з файлу info.plist, ви можете відкрити текстовий редактор і отримати всі ключі, які потрібно локалізувати.
  12. Ви вводите будь-який ключ як приклад у будь-який рядок InfoPlist.strings, як у наведеному вище прикладі

"NSLocationAlwaysAndWhenInUseUsageDescription" = "blabla";

"NSLocationAlwaysUsageDescription" = "blabla2";

Це все, і ви локалізуєте свій файл info.plist!


4

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

Вам потрібно зробити info.plist локалізованим, зайшовши в нього і натиснувши кнопку локалізації в інспекторі файлів, як показано нижче.

Тоді info.plist буде включений до файлових ресурсів, коли ви збираєтесь додавати нові Локалізації.

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


3
Чи стикалися ви з якимись проблемами? Я не можу створити проект, коли я додаю дві мови до Локалізації, оскільки xcode говорить "Файл info.plist не вдалося відкрити, оскільки такого файлу немає.
mkkrolik

2
@mkkrolik У мене зараз те саме питання. Ви знайшли рішення?
Тоданлі

@Todanley пропустити це рішення, воно не працює для мене. Використовуйте натомість InfoPlist.strings.
mkkrolik

@mkkrolik Дякую, що працює. А також під час тестування на тренажері мені довелося змінити мовну настройку тренажера, а не мою цілі, щоб вона працювала.
Тоданлі

3

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

Він додасть ключ до вашого інформаційного списку для вказаної мови.


0

У моєму випадку все було налаштовано правильно, але все-таки файл InfoPlist.strings не знайдено.

Єдине, що справді працювало - це знову видалити та додати файли InfoPlist.strings до проекту.


0

У моєму випадку локалізація не спрацювала, причиною символу '-' є ім’я. Приклад: "aero-Info.plist" І локалізовані файли: "aero-InfoPlist.strings" та "aeroInfoPlist.strings" не працювали.


0

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

Переглянути в XCode

) обережно використовувати коротке ім'я ключа для перекладу.

Я намагався використовувати Privacy - Camera Usage Description, але робочий ключ єNSCameraUsageDescription

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.