Когда речь заходит о локализации приложений, многие представляют себе просто перевод текста на другие языки. Но на самом деле — это адаптация интерфейса и контента под конкретную культуру и привычки пользователей в разных странах. Здесь важно все: формат даты, стиль кнопок, длина фраз и даже выбор слов.
В мобильных приложениях весь текст, который видит пользователь, разработчики хранят в виде строк — strings. Когда приложение работает только на одном языке, процесс относительно простой: дизайнер обновляет тексты в макетах, разработчики — в strings.
Но как только в проекте появляется вторая, третья, а затем и пятая локализация — начинается настоящий текстовый хаос. Каждая платформа требует своего формата строк, переводчики работают с разрозненными файлами, а менеджеру проекта сложно понять, какие тексты уже переведены, а какие нет. Попытка «собрать переводы» с разных мест приводит к ошибкам и потере контекста.
В этой статье дизайнер интерфейсов CleverPumpkin Фёдор Миронов, расскажет, как наша команда справляется со сложностями локализации — путь от макета в Figma до финальной сборки на Android и iOS. Как синхронизироваться с разработчиками и переводчиками? Почему Crowdin стал нашим незаменимым инструментом и как с его помощью команда избегает хаоса, экономит время и ресурсы, повышает качество перевода и ускоряет релизы.
С какими проблемами сталкиваются команды при ручной локализации
На первых этапах может показаться, что локализация — это просто. Достаточно экспортировать тексты из кода в формат JSON, раскидать по языковым файлам, передать переводчику, получить переводы и распределить их обратно по платформам. Однако стоит добавить хотя бы пару языков или платформ — и очень быстро начинаются проблемы: теряются строки, возникает путаница с актуальными версиями, одни и те же тексты переводятся по нескольку раз.
Перевод без контекста. Работа переводчика без системы локализации превращается в сплошную техническую рутину. В его распоряжении — только файлы вроде JSON, YAML или XML, без визуального контекста и понимания, где используется та или иная строка. Он видит только набор ключей и фраз, в результате возникают:
неестественные формулировки;
смысловые ошибки;
необходимость постоянно вносить правки и согласовывать переводы вручную.
Если в проекте участвует несколько переводчиков, ситуация усложняется вдвойне. Кто что уже перевел? Кто внес изменения? Где финальная версия? Все эти вопросы приходится решать вручную — через переписки, таблицы и личный контроль.
Возьмем реальный пример из нашей практики. В одном из наших проектов мобильного приложения для криптовалютной биржи EVEDEX основной английский язык приложения содержит 794 строки. Учитывая 9 дополнительных локализаций, общее число строк в проекте — 7146. При ручном управлении таким объёмом легко допустить ошибку, и крайне сложно гарантировать, что все тексты актуальны, синхронизированы и переведены с учетом контекста.

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

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

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

Поддержка непрерывной локализации. Crowdin позволяет переводить тексты независимо от этапа разработки или дизайна. Переводчики могут работать с новыми строками сразу после их появления, не дожидаясь завершения верстки или готовности макета. Это особенно важно в динамичных проектах, где релизы выходят регулярно.
Интеграции и SDK. Crowdin интегрируется с системами контроля версий (например, GitHub), CI/CD-пайплайнами, таск-трекерами и другими сервисами. Для мобильных приложений доступны SDK, которые позволяют сразу загружать переводы, не дожидаясь нового билда.
Гибкость для разных платформ. Crowdin поддерживает создание платформенных текстов: строки можно помечать специальными лейблами, чтобы фильтровать их при экспорте под конкретную платформу — iOS, Android или Web. Это особенно полезно для уведомлений и системных сообщений, которые могут отличаться в реализации.
Работа со склонениями и переменными. С помощью плагина для Figma можно создавать строки с переменными — например, суммами, датами или количеством элементов. Также Crowdin поддерживает склонения, что особенно важно для языков с грамматической флексией.

Как устроена работа в CleverPumpkin
В процессе локализации ни один текст не попадает в приложение случайно: за каждой строкой стоит понятный процесс и ответственный человек. Перед тем как макеты передаются в разработку, дизайнер или 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, самостоятельно создавать строки и быть уверенным, что разработчики получат правильные идентификаторы и актуальные формулировки. В результате — меньше ошибок и рутины, больше времени на то, чтобы создавать удобные, локализованные интерфейсы.
Это блог CleverPumpkin. 14 лет мы создаём мобильные приложения и цифровые сервисы под ключ — от идеи до поддержки. На Хабре мы делимся опытом, рассказываем о проектах, технических сложностях и решениях, которые помогают бизнесу достигать целей. Если вы ищете команду, способную превратить идею в надёжный и удобный мобильный продукт — пишите нам в Telegram. Мы делаем приложения, которые остаются востребованными годами.
mikevgorbunov
Стоит попробовать gridly
Mofas
У него есть какие-то выраженные преимущества? Cost of switch, когда ты уже "живешь" в настроенной системе, довольно дорогой выйдет.