Мы используем cookie. Продолжая использовать сайт, вы соглашаетесь с Политикой использования cookie.
Принять
О компании
Мы всегда ищем толковых ребят — пишите на
в рейтинге разработки мобильных приложений «под ключ»
Рейтинг Рунета
2 место
  • /
  • /
11 июня 2025

ВРЕМЯ ПРОЧТЕНИЯ — 08 МИН

Локализация мобильного приложения без хаоса. Опыт CleverPumpkin в синхронизации переводов через Crowdin

Локализация мобильного приложения без хаоса. Опыт CleverPumpkin в синхронизации переводов через Crowdin
Когда речь заходит о локализации приложений, многие представляют себе просто перевод текста на другие языки. Но на самом деле — это адаптация интерфейса и контента под конкретную культуру и привычки пользователей в разных странах. Здесь важно все: формат даты, стиль кнопок, длина фраз и даже выбор слов.

В мобильных приложениях весь текст, который видит пользователь, разработчики хранят в виде строк — strings. Когда приложение работает только на одном языке, процесс относительно простой: дизайнер обновляет тексты в макетах, разработчики — в strings.
Дизайнер интерфейсов Фёдор Миронов
Но как только в проекте появляется вторая, третья, а затем и пятая локализация — начинается настоящий текстовый хаос. Каждая платформа требует своего формата строк, переводчики работают с разрозненными файлами, а менеджеру проекта сложно понять, какие тексты уже переведены, а какие нет. Попытка «собрать переводы» с разных мест приводит к ошибкам и потере контекста.

В этой статье наш дизайнер интерфейсов Фёдор Миронов, расскажет, как наша команда справляется со сложностями локализации — путь от макета в Figma до финальной сборки на Android и iOS. Как синхронизироваться с разработчиками и переводчиками? Почему Crowdin стал нашим незаменимым инструментом и как с его помощью команда избегает хаоса, экономит время и ресурсы, повышает качество перевода и ускоряет релизы.

С какими проблемами сталкиваются команды при ручной локализации

На первых этапах может показаться, что локализация — это просто. Достаточно экспортировать тексты из кода в формат JSON, раскидать по языковым файлам, передать переводчику, получить переводы и распределить их обратно по платформам. Однако стоит добавить хотя бы пару языков или платформ — и очень быстро начинаются проблемы: теряются строки, возникает путаница с актуальными версиями, одни и те же тексты переводятся по нескольку раз.

Перевод без контекста. Работа переводчика без системы локализации превращается в сплошную техническую рутину. В его распоряжении — только файлы вроде JSON, YAML или XML, без визуального контекста и понимания, где используется та или иная строка. Он видит только набор ключей и фраз, в результате возникают:

  • неестественные формулировки;
  • смысловые ошибки;
  • необходимость постоянно вносить правки и согласовывать переводы вручную.
Если в проекте участвует несколько переводчиков, ситуация усложняется вдвойне. Кто что уже перевел? Кто внес изменения? Где финальная версия? Все эти вопросы приходится решать вручную — через переписки, таблицы и личный контроль.

Возьмем реальный пример из нашей практики. В одном из наших проектов мобильного приложения для криптовалютной биржи EVEDEX основной английский язык приложения содержит 794 строки. Учитывая 9 дополнительных локализаций, общее число строк в проекте — 7146. При ручном управлении таким объемом легко допустить ошибку, и крайне сложно гарантировать, что все тексты актуальны, синхронизированы и переведены с учетом контекста.
Статистика локализации строк в мобильном приложении
Отсутствие синхронизации между платформами и дизайном. Можно попробовать наладить процесс с помощью скриптов, которые экспортируют строки из кода, рассылают их переводчикам, а затем собирают обратно. Но даже при таком подходе остаются нерешенными вопросы:

  • как поддерживать актуальность базовой локализации;
  • как синхронизировать тексты с макетами в Figma;
  • где хранить ключи строк, чтобы все участники команды использовали одну и ту же структуру.
Без централизованного хранилища данных рано или поздно все сводится к хаосу.

Сложности в синхронизации между командами. Некоторые команды пытаются перенести процесс работы с текстами в Google Таблицы. Это частично решает проблему прозрачности, но вносит новые сложности:

  • дизайнеру приходится вручную копировать новые тексты в таблицу;
  • переводчик должен постоянно следить за обновлениями и отслеживать, что уже переведено;
  • разработчику нужно выгружать эти строки в определенных форматах для каждой платформы.
Все эти сложности заставили нас искать системное решение — и мы нашли его в Crowdin.

Как Crowdin упрощает локализацию интерфейсов

Чтобы понять, насколько Crowdin облегчает работу с мультиязычными приложениями, рассмотрим его ключевые возможности — каждая из них решает конкретные проблемы, с которыми сталкиваются команды при ручной локализации.

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

Плагин для Figma. Позволяет дизайнерам синхронизировать тексты в макетах Figma с текстами в Crowdin:

  • автоматически отображает идентификаторы строк (keys), которые затем используются в коде;
Плагин для Figma
  • помогает избежать ситуаций, когда разработчики верстают интерфейс по устаревшим или случайным текстам;
  • дает возможность предварительно просматривать переводы прямо в Figma — это удобно и ускоряет процесс дизайна для всех языков сразу.
Просмотр переводов
Контекст для переводчика. Одна из ключевых проблем перевода — отсутствие контекста. Crowdin решает ее автоматически: при загрузке макетов из Figma сервис делает скриншоты экранов с выделенными текстами. Переводчик видит, где именно используется строка, и может подобрать формулировку, которая будет звучать уместно и естественно.
Контекст для переводчика
Поддержка непрерывной локализации. Crowdin позволяет переводить тексты независимо от этапа разработки или дизайна. Переводчики могут работать с новыми строками сразу после их появления, не дожидаясь завершения верстки или готовности макета. Это особенно важно в динамичных проектах, где релизы выходят регулярно.

Интеграции и SDK. Crowdin интегрируется с системами контроля версий (например, GitHub), CI/CD-пайплайнами, таск-трекерами и другими сервисами. Для мобильных приложений доступны SDK, которые позволяют сразу загружать переводы, не дожидаясь нового билда.

Гибкость для разных платформ. Crowdin поддерживает создание платформенных текстов: строки можно помечать специальными лейблами, чтобы фильтровать их при экспорте под конкретную платформу — iOS, Android или Web. Это особенно полезно для уведомлений и системных сообщений, которые могут отличаться в реализации.

Работа со склонениями и переменными. С помощью плагина для Figma можно создавать строки с переменными — например, суммами, датами или количеством элементов. Также Crowdin поддерживает склонения, что особенно важно для языков с грамматической флексией.
Переменные и склонения

Как устроена работа у нас

В процессе локализации ни один текст не попадает в приложение случайно: за каждой строкой стоит понятный процесс и ответственный человек. Перед тем как макеты передаются в разработку, дизайнер или UX-копирайтер запускает плагин Crowdin в Figma и начинает процесс загрузки всех текстов из интерфейса. Таким образом фиксируются все идентификаторы строк, чтобы они были доступны разработчикам с самого начала верстки.

Мы используем понятную и предсказуемую схему нейминга строк, в которую закладывается контекст и функция элемента:

  • cancel_button
  • trade_label
  • trade_tab_chart
  • order_book_price_value
  • order_funding_rate_fee

Мы строго запрещаем хардкодить тексты в коде. Если при верстке разработчик сталкивается с отсутствием нужной строки, он оставляет комментарий в Figma с просьбой добавить соответствующую строку в Crowdin. Так исключаются дубли и повышается консистентность интерфейса.

После загрузки макета, строки становятся доступны через SDK или экспортируемые файлы. Каждый разработчик работает с текстами, уже переведенными и отсортированными по платформам. Так проще управлять строками и исключать ситуации, когда разные платформы используют разные формулировки.

Для платформ iOS и Android мы отдельно учитываем особенности системных уведомлений. Некоторые строки не отображаются в UI, но при этом требуют адаптации под гайдлайны платформ. В Crowdin такие строки маркируются специальными лейблами, например, InfoPlist для iOS или android_only, чтобы разработчикам было легче фильтровать тексты при импорте.

Когда большая часть базовой локализации готова, мы подключаем переводчика к проекту. Он работает непосредственно в Crowdin, где видит не только строку, но и скриншот экрана с ее расположением.

Лайфхаки работы с Crowdin для дизайнера

Собрал несколько приемов, которые ускоряют работу с Crowdin.

1. Используйте команду Select Matching Layers в Figma для массовой подготовки строк — она быстро выделит повторяющийся текст на всех экранах. Достаточно переименовать их, указав предполагаемые ключи. Только потом запускаем плагин Crowdin. Он автоматически определит дубликаты, создаст уникальный ключ и свяжет все повторяющиеся строки с ключом.
Массовое добавление ключей
2. Учитывайте особенности русской локализации. Если макеты изначально создаются на английском языке, не забывайте про особенности других языков.

Например, в английской версии в кнопках принято использовать существительные, тогда как в русском языке более естественно звучат глаголы. Из-за этого кнопки и заголовки, которые по-английски звучат одинаково, в русском будут отличаться.

Чтобы перевод получился правильным, не стоит использовать один и тот же ключ для кнопок и заголовков. Для каждой текстовой роли в интерфейсе лучше создавать отдельную строку.
Массовое добавление ключей
3. Используйте переменные для динамических данных. При работе с динамическими значениями (например, суммами, датами или именами) не нужно разбивать строку на части. Вместо этого используйте переменные — например, %s. В приложении такие placeholders будут заменяться на нужные значения, а строка останется целостной и понятной для перевода. Это особенно важно при работе с несколькими языками, где порядок слов может отличаться.

Подводим итог

Когда в приложении появляется больше одного языка, начинается настоящий текстовый бардак: что-то теряется, что-то забывается, переводчики работают с голыми строками без контекста, а разработчики гадают, какие слова вообще должны быть на кнопках.

Crowdin помогает навести порядок: тексты хранятся, обновляются и синхронизируются между командой в едином пространстве. Все прозрачно: видно, какие строки уже переведены, какие нужно обновить, где они находятся в интерфейсе. С плагином для Figma дизайнер сам может связать тексты в макетах с ключами из Crowdin, самостоятельно создавать строки и быть уверенным, что разработчики получат правильные идентификаторы и актуальные формулировки. В результате — меньше ошибок и рутины, больше времени на то, чтобы создавать удобные, локализованные интерфейсы.

Другие статьи по теме: