Локализация

Локализация (сокращённо l10n) — это приспособление приложения к другому языку и региону: перевод текстов, привычные форматы дат и чисел, всё остальное, что отличается от страны к стране.

инфо
Интернационализация и локализация — не одно и то же
  • Интернационализация (i18n) — это подготовка приложения к тому, чтобы оно вообще могло говорить на разных языках, без переделки кода. Эту часть FlutterFlow берёт на себя.
  • Локализация (l10n) — собственно перевод и подгонка под конкретный регион: строки, форматы дат, времени и чисел, культурные особенности.

Коротко: интернационализация — возможность, локализация — её применение.

Подключение языков

FlutterFlow умеет перевести все тексты приложения разом через Google Translate — и дать поправить перевод там, где машина ошиблась. Отдельно локализуются системные сообщения: запросы разрешений, снекбары аутентификации и прочие встроенные тексты.

Ценность здесь простая: приложение с инструкциями только на английском проигрывает менее удачному конкуренту на родном языке пользователя.

Языки подключаются в Settings and Integrations > Languages: добавьте нужные, выберите основной, нажмите Translate All и поправьте перевод.

Посмотреть результат без запуска приложения можно в Canvas Settings рядом с переключателем светлой и тёмной темы — там появится Display Language. Список доступен, когда в проекте больше одного языка.

внимание

Смена основного языка после перевода стирает все существующие переводы на другие языки.

Виджет LanguageSelector

LanguageSelector переключает язык на лету, без перезапуска приложения: показывает текущий язык, по нажатию открывает список остальных.

Место ему — на экране первого запуска или в настройках.

Свойства

Внешний вид настраивается в панели свойств.

language-selector-properties.avif

совет

По умолчанию выбранный язык не сохраняется между запусками приложения. Чтобы сохранялся, включите Persist Selection в настройках языков.

Действие Set App Language

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

инфо

Действие меняет язык только внутри приложения; язык системы оно не трогает.

set-app-lang-action.png

Работа с переводами

Править переводы можно в двух местах.

В настройках языков

Страница настроек показывает все тексты приложения, сгруппированные по страницам, — удобно, когда правок много.

Чтобы задать перевод вручную, впишите его в колонку нужного языка и отметьте как Fixed. Эта отметка защищает ваш вариант от перезаписи при массовом автопереводе.

Кнопка Translate Page переводит страницу через Google Translate.

manage-translation-in-language-settings.avif

В панели свойств

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

  • Перевод вручную вписывается в поле под названием языка.
  • Кнопка Google Translate переводит на все языки сразу.

manage-translation-in-properties-panel.avif

заметка
RichText и Combine Text

Статический текст в каждом 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.

retrieve-lang-data.png

Форматы дат

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

Решается это форматом yMd в DateTime Format Options: он сам подстраивается под регион пользователя.

localize-dates.avif

совет

Другие форматы, учитывающие регион:

  • yMMMd — дата с сокращённым месяцем: Dec 31, 2023 в США, 31 Dec 2023 в Индии.
  • jm — время с минутами: 5:30 PM в США, 17:30 в Европе.

Если нужен свой формат, его можно задать вручную.

Формат чисел

Разделители целой и дробной части в разных странах разные: в США точка отделяет дробь, а запятая разряды, в Европе наоборот.

Задайте Number Format Options = Decimal и Decimal Type = Automatic — число подстроится под регион.

localize-numbers.avif

Формат валюты

Символ валюты и его место тоже зависят от страны: в США пишут $1,000.00, во Франции — 1 000,50 €.

Включите Display as Currency в настройках формата числа и оставьте поле Currency Symbol пустым — символ подставится по локали пользователя.

localize-currency.avif

Проверка

Что стоит проверить:

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

обновлено

ESC