Задумывались ли вы когда-нибудь, зачем нужен файл .stringsdict
?
Приходилось ли вам сталкиваться с грамматическими правилами для множественного числа в приложениях для iOS?
Если вы ответили утвердительно на любой из этих вопросов или вам просто интересно узнать что-то новое о локализации в Swift, то эта статья для вас. Здесь я постараюсь объяснить, чем полезен этот мощный инструмент, предоставленный нам компанией Apple.
Пример: локализация строки с тремя состояниями множественного числа
Постараемся сделать всё просто и понятно. В этом примере у нас будет приложение, которое позволяет выбирать «волшебные города» Мексики и удалять их (реализация удаления в статью не входит). Приложение содержит таблицу с городами и позволяет перейти в режим редактирования, выбрать города вручную (или все сразу) и с помощью элемента на панели инструментов удалить их. Перед удалением показывается предупреждение с текстом, который нам нужно локализовать, — просто подтверждение действия. Итак, что это за приложение будет, разобрались. Теперь мы можем предсказать сценарии, с которыми нам предстоит столкнуться (если мы имеем дело с английским языком):
-
Перед удалением не выбран ни один город.
2. Выбран только один город.
3. Выбрано несколько городов (два и более).
Решить эту задачу можно различными способами, и один из самых распространенных — использовать пару операторов if/else
.
На сцену выходит .stringsdict
Использовать в этом случае условные операторы — вполне нормально, но если мы планируем поддерживать несколько языков, у нас могут возникнуть сложности из-за различий в правилах грамматики. И здесь на помощь приходит файл .stringsdict
, который представляет собой список свойств и позволяет добавлять различные правила для локализованных текстов. Изменяя значения словаря этого файла, можно задать конкретные правила для пустых значений (в нашем случае — городов), одного или нескольких значений и т. д. Вернемся к приложению и внесем изменения, которые позволят использовать .stringsdict
.
Во-первых, добавим новый файл типа .stringsdict
.
По умолчанию у этого файла следующая структура
Localized String Key — строковое значение для локализации, как если бы оно было указано в файле .strings
.
Localized Format Key — значение, указывающее имя словаря с применяемыми правилами; перед значением строки должно быть %#@
, после — @
. На изображении выше значение строки — VARIABLE.
VARIABLE — мы создали эту строку в предыдущем ключе, и теперь будем использовать этот словарь для применения правил. Первый ключ внутри словаря (NSStringFormatSpecTypeKey) оставим как есть: он говорит о том, что мы указываем языковые правила. Второй ключ (NSStringFormatValueTypeKey) описывает формат строки, и буква d
означает, что в локализованной строке для переменной %d
мы будем использовать десятичные числа. Наконец, нам нужно найти ключи для представления правил единственного и множественного числа в текстах. Для английского нужно указать ключ только для правил «one» и «other». (Можно указать ключ для «zero», но это необязательно.) Добавив соответствующие значения, мы получим что-то такое:
Теперь приложение готово обрабатывать три состояния в этом файле. Поэтому удалим операторы if/else
и напишем следующее:
Не забывайте, что грамматические правила формирования множественного числа зависят от языка. Например, в арабском языке есть разные формы множественного числа для категорий «zero», «one», «two», «few», «many» и «other» (в русском — для «one», «few», «many» и «other»), поэтому, если вы собираетесь поддерживать несколько языков, нужно аккуратно учесть эти правила.
В завершение статьи добавим поддержку нового языка. В примере мы используем мексиканские города, поэтому, думаю, было бы неплохо добавить в приложение испанский язык.
Исходный код — здесь: https://github.com/JAIRMG/StringsDictExample
О переводчике
Перевод статьи выполнен в Alconost.
Alconost занимается локализацией игр, приложений и сайтов на 70 языков. Переводчики-носители языка, лингвистическое тестирование, облачная платформа с API, непрерывная локализация, менеджеры проектов 24/7, любые форматы строковых ресурсов.
Мы также делаем рекламные и обучающие видеоролики — для сайтов, продающие, имиджевые, рекламные, обучающие, тизеры, эксплейнеры, трейлеры для Google Play и App Store.
pqbd
почему всегда примеры делают как кружок-кружок-дорисовываем сову?
Выбрали бы не очень простую логику:
одна статья
две статьи
пять статей
двадцать одна статья… сто восемьдесят одна статья
один стул
сто один стул
alconost Автор
Автор перечисляет формы множественного числа в русском языке согласно CLDR Common Locale Data Repository (Общий репозиторий языковых данных).
Для статьи и стула из вашего примера нужно создать разные словари.
Florelit
Почему же? Все отработает как нужно, вся используемая в локализации логика как раз описана в приведённой вами ссылке. Отдельных словарей не понадобится.