В системах интернационализации грамматический род является одним из ключевых факторов, влияющих на построение корректных сообщений. В разных языках он реализуется по-разному: от двух классов (мужской и женский) до сложных систем с тремя и более родами, включая средний и общие/смешанные формы. В библиотеке FormatJS работа с родом встроена в механизм ICU MessageFormat и тесно связана с правилами выбора вариантов текста.
Грамматический род — это морфологическая категория, определяющая согласование слов в предложении. В контексте локализации он влияет не только на прилагательные и глаголы, но и на структуру фраз.
В языках мира наблюдаются разные системы:
Для систем форматирования важно не лингвистическое описание, а поведение правил выбора текста.
FormatJS использует стандарт ICU MessageFormat, где выбор варианта
строки осуществляется через конструкцию select.
Базовый механизм:
{gender, select,
male {текст для мужского рода}
female {текст для женского рода}
other {нейтральный вариант}
}
Конструкция select выполняет сопоставление значения
переменной с набором предопределённых ключей. Для грамматического рода
обычно используются:
malefemaleotherКлюч other является обязательным резервным вариантом,
обеспечивающим устойчивость сообщения при отсутствии совпадения.
В реальных сценариях грамматический род редко используется изолированно. Чаще он комбинируется с другими механизмами ICU:
plural — множественные формыselectordinal — порядковые числительныеselect конструкцииПример комбинированного выражения:
{gender, select,
male {{count, plural,
one {Он добавил # элемент}
other {Он добавил # элементов}
}}
female {{count, plural,
one {Она добавила # элемент}
other {Она добавила # элементов}
}}
other {{count, plural,
one {Пользователь добавил # элемент}
other {Пользователь добавил # элементов}
}}
}
Такая структура отражает реальную сложность языковых согласований.
Русский язык требует строгого согласования по роду, числу и падежу. Это приводит к необходимости учитывать:
Например:
В системах без поддержки рода такие различия невозможно корректно отразить без дублирования строк.
FormatJS решает это через параметризацию сообщений.
В английском языке грамматический род в большинстве случаев не влияет на структуру предложения. Это приводит к следующей особенности:
othermale и female могут применяться только для
местоименийПример:
{gender, select,
male {He uploaded a file}
female {She uploaded a file}
other {They uploaded a file}
}
Здесь other часто соответствует гендерно-нейтральной
форме.
Современные стандарты интернационализации всё чаще требуют поддержки
нейтральных форм. В FormatJS это реализуется через ключ
other, который выступает универсальным вариантом.
Во многих языках нейтральность достигается разными способами:
Пример:
{gender, select,
other {File uploaded successfully}
}
FormatJS использует данные CLDR (Common Locale Data Repository), которые определяют:
Хотя CLDR напрямую не задаёт грамматический род как категорию, он
предоставляет основу для корректного сочетания select и
plural в разных языках.
В реальных интерфейсах часто встречаются вложенные конструкции, где род комбинируется с:
Пример сложной структуры:
{gender, select,
male {{status, select,
success {Он успешно завершил операцию}
error {Он столкнулся с ошибкой}
}}
female {{status, select,
success {Она успешно завершила операцию}
error {Она столкнулась с ошибкой}
}}
other {{status, select,
success {Операция успешно завершена}
error {При выполнении операции произошла ошибка}
}}
}
Такие конструкции показывают, что грамматический род становится частью логики представления данных.
Грамматический род влияет на:
Игнорирование рода приводит к:
Несмотря на гибкость, механизм имеет ограничения:
По мере усложнения интерфейса увеличивается количество вложенных конструкций, что требует строгой структуризации сообщений.
При использовании FormatJS важно учитывать, что система не интерпретирует смысловые данные. Она оперирует только ключами выбора:
gendercountstatusВсе лингвистические различия должны быть заранее формализованы в структуре сообщений.
Это означает, что грамматический род становится частью модели данных, а не только языковой особенностью.