Fluent — семейство спецификаций, реализаций и практик для локализации, разработанной Mozilla. Сейчас она применяется в браузере Firefox. Используя Fluent, переводчики могут писать более естественные переводы на родном языке. Сегодня мы представляем спецификацию формата файлов Fluent версии 1.0. Приглашаем разработчиков переводческих инструментов попробовать его и рассказать о ваших впечатлениях. Браузер Firefox поддерживает около сотни языков, и это бросает разработчикам вызов с точки зрения локализации. Многие проблемы сложно решить используя традиционные подходы. В локализации ПО доминирует принцип разметки переводов «один к одному» с исходным текстом. Грамматика исходного языка (в случае с Mozilla — английского) накладывает серьёзные ограничения на доступность выразительных средств при переводе. Рассмотрим следующее сообщение, которое появляется, когда пользователь пытается закрыть окно Firefox с несколькими вкладками. Сообщение отображается только в том случае, если вкладок 2 или больше. В английском языке, слово tab будет всегда во множественном числе — tabs. Англоязычного разработчика устроит такое сообщение. Оно звучит корректно для любых значений $count. В английском языке для всех значений $count достаточно одного варианта сообщения. Многие же переводчики заметят, что слово tab может принять разные формы в зависимости от значения $count. В традиционном подходе к локализации, ответственность за корректную обработку сообщения будет лежать на переводчиках. Они должны учитывать, что в других языках может существовать несколько множественных форм слова, даже если в английском она всего одна. Чем больше языков будет поддерживать приложение, тем серьёзнее будет становиться проблема. Существует множество грамматических и стилистических вариаций, которые нельзя напрямую сопоставить между двумя языками. Поддержка всех этих нюансов с помощью традиционного подхода может быть затруднительной. В некоторых языках придётся идти на компромиссы, в других вообще не будет подходящего решения. Fluent меняет распределение ролей в локализации. Вместо того, чтобы требовать от разработчиков учитывать все возможные нюансы всех языков, Fluent старается держать тексты на исходном языке в максимально простой форме. Мы делаем возможным передачу грамматики и стиля других языков независимо от исходного текста. Всё происходит изолированно. То, что один язык может использовать более продвинутую логику в локализации, не влияет на другие языки перевода. Каждая локализация в программе сама решает, насколько сложным должен быть текст перевода. К примеру, посмотрим на перевод сообщения о закрытии вкладок на чешский. Слово panel (вкладка) должно принимать одну из двух форм: panely для количества вкладок 2, 3 и 4, и panelů для всех остальных значений. Fluent даёт переводчикам возможность писать грамматически верные предложения и свободно использовать выразительные средства своего языка. Благодаря Fluent, чешский перевод использует правильные множественные формы для любых возможных значений $count. В то же время, в исходный текст или код не требуется вносить никаких изменений. Логика в чешской локализации никак не влияет на все остальные локализации программы. Во французском языке это предложение будет таким же простым, как и английское: Концепция асимметричной локализации является ключевой инновацией Fluent, которая стала возможной благодаря опыту Mozilla в разработке многоязычного ПО на протяжении 20 лет. Многие ключевые идеи для Fluent были позаимствованы из MessageFormat от ICU (International Component for Unicode) и из формата XLIFF. На первый взгляд, Fluent походит на другие решения для локализации, которые позволяют использовать варианты слов для множественных существительных и слов с грамматическим полом. В отличие от них, Fluent использует целостный подход к локализации. Fluent развивает эти идеи, определяя синтаксис для всего текстового файла, где хранятся переводы, и разрешая ссылаться из одних сообщений на другие. Файл Fluent может содержать в себе множество сообщений, каждое из которых переведено на язык переводчика. Сообщения могут ссылаться на другие сообщения внутри того же файла, или на сообщения из других файлов. Во время выполнения, Fluent объединяет файлы в наборы (bundles), и ссылки разрешаются внутри этого набора. Ссылка на сообщения — это мощный инструмент для поддержки единообразия переводов. Однажды определённый перевод может многократно использоваться в других переводах. Fluent поддерживает специальный тип сообщения под названием термин (term), хорошо подходящий для многократного использования. Идентификатор термина всегда начинается с чёрточки. После определения, термин -sync-brand-name может использоваться из других сообщений как переменная, всегда возвращая корректный текст. Термины помогают внедрить единообразие согласно руководству стилей. К примеру, их можно изменять для особого брендирования неофициальных сборок или бета-релизов. Использование термина напрямую в середине предложения может вызвать проблемы во флективных языках, или в языках с другими правилами капитализации текста. Значение термина можно определить в нескольких аспектах в зависимости от контекста. Рассмотрим следующее определение термина -sync-brand-name на итальянском. Благодаря ассиметричной природе Fluent, переводчик на итальянский может определить две формы для написания бренда. Вариант с верхним регистром (по умолчанию) подходит для самостоятельного использования или для использования в начале предложения. Вариант в нижнем регистре может быть запрошен путём передачи параметра капитализации, когда термин используется внутри большого предложения. Определение нескольких вариантов термина — это удобный приём, который позволяет соответствовать грамматическим правилам множества языков. В следующем примере, польский переводчик может использовать склонения для построения правильного предложения в сообщении sync-signedout-account-title. Fluent позволяет внедрять сложную логику языковых конструкций там, где это необходимо. В то же время, просто перевод остаётся простым. Fluent не добавляет сложной реализации в простые конструкции. Сегодня мы объявляем о первом стабильном релизе Fluent Syntax. Это спецификация формата файла для хранения переводов, а так же бета-релиз парсеров на JavaScript, Python и Rust. На примерах выше вы увидели, что из себя представляет синтаксис Fluent. Он создан быть понятным для людей с небольшими техническими познаниями, и позволяет делать проверку и редактирование текста с минимальным количеством ошибок. Восстановление после ошибки является важным моментом: один неверный перевод не сломает весь файл или прилегающие к нему переводы. Комментарии пригодятся для передачи контекста конкретного сообщения или целой группы. Переводы могут занимать несколько строк, что облегчает работу и разметку больших фрагментов текста. Файлы Fluent можно открыть в любом текстовом редакторе, что снижает порог вхождения для разработчиков и локализаторов. Формат уже поддерживается открытой платформой для перевода ПО Pontoon от Mozilla. Подробности о синтаксисе можно узнать из материала Fluent Syntax Guide (англ). Формальное определение можно найти в материале Fluent Syntax specification (англ). А если вы хотите просто попробовать Fluent, используйте Fluent Playground — онлайновый редактор со сниппетами, которыми можно поделиться. Firefox является основным фактором развития Fluent. В Firefox уже используется более 3000 сообщений Fluent. Миграция на Fluent началась в прошлом году, и сейчас идёт полным ходом. Формат Fluent показал себя стабильным и гибким решением для сложных интерфейсов, вроде страницы настроек Firefox. Он так же используется на множестве веб-страниц Mozilla, таких как Firefox Send и Common Voice. Мы считаем, что Fluent — это отличный выбор для приложений, в которых важны простота и скорость выполнения, но в то же время требующих отображения элементов интерфейса в зависимости от множества переменных. В частности, Fluent помогает создавать естественные предложения на разных языках в ограниченном пространстве мобильных интерфейсов; в информационно-насыщенных платформах социальных медиа; и в играх для передачи игровой статистики и объяснения механики игроку. Мы будем рады услышать мнение о Fluent от разработчиков или вендоров. Fluent разрабатывается как стандарт будущего, поэтому мы приглашаем всех попробовать его и рассказать, с какими ещё проблемами вы сталкиваетесь в работе. С вашей помощью мы сможем усовершенствовать Fluent для работы на множестве платформ и в множестве ситуаций. Мы открыты для конструктивной критики. Узнать больше о Fluent можно на сайте проекта. Если вам есть что рассказать, свяжитесь с нами на Fluent Discourse. Localization Engineer