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

В мобильных приложениях весь текст, который видит пользователь, разработчики хранят в виде строк — 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. Мы делаем приложения, которые остаются востребованными годами.

Комментарии (2)


  1. mikevgorbunov
    17.06.2025 08:17

    Стоит попробовать gridly


    1. Mofas
      17.06.2025 08:17

      У него есть какие-то выраженные преимущества? Cost of switch, когда ты уже "живешь" в настроенной системе, довольно дорогой выйдет.