Локализация
Локализация (сокращённо l10n) — это приспособление приложения к другому языку и региону: перевод текстов, привычные форматы дат и чисел, всё остальное, что отличается от страны к стране.
- Интернационализация (i18n) — это подготовка приложения к тому, чтобы оно вообще могло говорить на разных языках, без переделки кода. Эту часть FlutterFlow берёт на себя.
- Локализация (l10n) — собственно перевод и подгонка под конкретный регион: строки, форматы дат, времени и чисел, культурные особенности.
Коротко: интернационализация — возможность, локализация — её применение.
Подключение языков
FlutterFlow умеет перевести все тексты приложения разом через Google Translate — и дать поправить перевод там, где машина ошиблась. Отдельно локализуются системные сообщения: запросы разрешений, снекбары аутентификации и прочие встроенные тексты.
Ценность здесь простая: приложение с инструкциями только на английском проигрывает менее удачному конкуренту на родном языке пользователя.
Языки подключаются в Settings and Integrations > Languages: добавьте нужные, выберите основной, нажмите Translate All и поправьте перевод.
Посмотреть результат без запуска приложения можно в Canvas Settings рядом с переключателем светлой и тёмной темы — там появится Display Language. Список доступен, когда в проекте больше одного языка.
Смена основного языка после перевода стирает все существующие переводы на другие языки.
Виджет LanguageSelector
LanguageSelector переключает язык на лету, без перезапуска приложения: показывает текущий язык, по нажатию открывает список остальных.
Место ему — на экране первого запуска или в настройках.
Свойства
Внешний вид настраивается в панели свойств.

По умолчанию выбранный язык не сохраняется между запусками приложения. Чтобы сохранялся, включите Persist Selection в настройках языков.
Действие Set App Language
Если стандартный LanguageSelector не подходит — например, нужен свой экран выбора языка при первом запуске, — язык переключается действием Set App Language.
Действие меняет язык только внутри приложения; язык системы оно не трогает.

Работа с переводами
Править переводы можно в двух местах.
В настройках языков
Страница настроек показывает все тексты приложения, сгруппированные по страницам, — удобно, когда правок много.
Чтобы задать перевод вручную, впишите его в колонку нужного языка и отметьте как Fixed. Эта отметка защищает ваш вариант от перезаписи при массовом автопереводе.
Кнопка Translate Page переводит страницу через Google Translate.

В панели свойств
Отдельную надпись можно перевести прямо на месте: выделите виджет — Text, TextField или другой, — откройте панель свойств и нажмите значок глобуса.
- Перевод вручную вписывается в поле под названием языка.
- Кнопка Google Translate переводит на все языки сразу.

Статический текст в каждом RichTextSpan переводится и попадает в таблицу языков наравне с обычным Text.
А вот текст, собранный функцией Combine Text, в таблицу не попадает и кнопкой Translate All не переводится. Если нужен переводимый текст с разным оформлением, берите RichText и вписывайте строки в его RichTextSpan.
Системные сообщения
Отдельно переводятся сообщения, которые FlutterFlow показывает сам:
- Запросы разрешений iOS — то, что видит пользователь, когда приложение просит доступ к камере или галерее.
- Встроенные сообщения — тексты, сопровождающие вход, регистрацию, загрузку файлов.
Настраиваются они в Settings and Integrations > Project Setup > Languages, раздел Translation: выберите нужную категорию.
Впишите сообщение на основном языке, а дальше либо нажмите Translate Message, либо задайте переводы вручную и отметьте их как Fixed, чтобы автоперевод их не затёр.
Набор запросов разрешений зависит от возможностей приложения. Например, тексты про камеру и галерею появятся, если где-то есть кнопка с действием Upload Photo/Video.
Данные о текущем языке
Иногда логике приложения нужно знать, на каком языке оно сейчас работает.
Доступны два значения:
- Current Language Code — код языка по ISO:
en,de,fr. - Language-Dependent Text — своё значение для каждого языка. Так подставляют флаг или название страны в зависимости от выбранного языка.
Находятся они в Set from Variable > Internationalization.

Форматы дат
Дата, привычная в одной стране, читается неправильно в другой: в США пишут месяц, день, год (12/31/2023), в Индии — день, месяц, год (31/12/2023).
Решается это форматом yMd в DateTime Format Options: он сам подстраивается под регион пользователя.

Другие форматы, учитывающие регион:
yMMMd— дата с сокращённым месяцем:Dec 31, 2023в США,31 Dec 2023в Индии.jm— время с минутами:5:30 PMв США,17:30в Европе.
Если нужен свой формат, его можно задать вручную.
Формат чисел
Разделители целой и дробной части в разных странах разные: в США точка отделяет дробь, а запятая разряды, в Европе наоборот.
Задайте Number Format Options = Decimal и Decimal Type = Automatic — число подстроится под регион.

Формат валюты
Символ валюты и его место тоже зависят от страны: в США пишут $1,000.00, во Франции — 1 000,50 €.
Включите Display as Currency в настройках формата числа и оставьте поле Currency Symbol пустым — символ подставится по локали пользователя.

Проверка
Что стоит проверить:
- Другая локаль устройства — переключите её и посмотрите на переводы и вёрстку.
- Эмуляторы — на них удобно перебрать несколько регионов подряд.
- Длинные переводы. Немецкий текст обычно длиннее русского, а русский — длиннее английского; кнопки и заголовки от этого расползаются.
- Смысл перевода. Автоперевод регулярно промахивается на коротких надписях вроде «Home» или «Share» — их нужно вычитывать глазами.