
Перевод файлов Flutter ARB за секунды
Метаданные остаются целыми. Заполнители сохраняются. Формы множественного числа соответствуют CLDR. Ваши файлы ARB переводятся без нарушения работы flutter gen-l10n.
Ошибки перевода ARB нарушают сборки Flutter
Файлы ARB похожи на JSON, но устроены иначе. Они содержат записи метаданных с префиксом @, определения заполнителей с аннотациями типов и формы множественного числа ICU, которые должны точно соответствовать правилам CLDR. Универсальные инструменты перевода повреждают все эти элементы — и flutter gen-l10n либо молча завершается сбоем, либо выдаёт непонятные ошибки.
Записи метаданных с префиксом @ переводятся или удаляются, из-за чего нарушаются определения и описания заполнителей
Имена заполнителей внутри фигурных скобок переводятся, переименовываются или удаляются, что приводит к аварийному завершению во время выполнения
Для форм множественного числа ICU требуются точные категории CLDR для каждого языка, но универсальные инструменты либо пропускают их, либо создают недопустимые структуры
Заголовок @@locale повреждается или не соответствует содержимому, из-за чего flutter gen-l10n назначает переводы неверному языку
{
"@@locale": "en",
"appTitle": "My Flutter App",
"@appTitle": {
"description": "The title of the application"
},
"greeting": "Hello, {name}!",
"@greeting": {
"description": "A greeting with the user's name",
"placeholders": {
"name": {
"type": "String",
"example": "John"
}
}
},
"itemCount": "{count, plural, =0{No items} =1{1 item} other{{count} items}}",
"@itemCount": {
"description": "Number of items in the cart",
"placeholders": {
"count": {
"type": "int"
}
}
},
"lastLogin": "Last login: {date}",
"@lastLogin": {
"placeholders": {
"date": {
"type": "DateTime",
"format": "yMMMd"
}
}
}
}{
"@@locale": "de",
"appTitle": "Meine Flutter-App",
"@appTitle": {
"description": "The title of the application"
},
"greeting": "Hallo, {name}!",
"@greeting": {
"description": "A greeting with the user's name",
"placeholders": {
"name": {
"type": "String",
"example": "John"
}
}
},
"itemCount": "{count, plural, =0{Keine Artikel} =1{1 Artikel} other{{count} Artikel}}",
"@itemCount": {
"description": "Number of items in the cart",
"placeholders": {
"count": {
"type": "int"
}
}
},
"lastLogin": "Letzte Anmeldung: {date}",
"@lastLogin": {
"placeholders": {
"date": {
"type": "DateTime",
"format": "yMMMd"
}
}
}
}Что сохраняет i18n Agent
Записи метаданных с @
Все метаданные с префиксом @ — описания, заполнители и аннотации типов — сохраняются в точности, как они определены
Безопасность заполнителей
Именованные заполнители, такие как {userName}, {count} и {price}, распознаются и остаются неизменными во всех переводах
Формы множественного числа CLDR
Категории множественного числа ICU (zero, one, two, few, many, other) правильно создаются для каждого целевого языка в соответствии с правилами CLDR
Структура JSON
Порядок ключей, вложенность и форматирование, характерное для ARB, соответствуют исходному файлу, поэтому различия остаются понятными
Работает с Вашим стеком Flutter
Как это работает

Без ручного копирования, извлечения строк и лишних действий. Только переведённые файлы.
Попробовать i18n Agent
Перетащите сюда файл перевода
JSON, YAML, PO, XML, CSV, Markdown, Properties
или нажмите, чтобы выбрать
Целевые языки
Часто задаваемые вопросы
Можно также перевести:
Для разработчиков
Установите инструмент CLI и переведите первый файл за 2 минуты.
Установить инструмент CLIДля корпоративных команд
Всё ещё связаны контрактом с TMS? Обсудим переход.