Як локалізувати рядок у файлі 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.