Если неопубликован только 1 пост, следует сказать: «Опубликовать %{count} неопубликованный пост в теме #%{topic_id}. Пост не будет доставлен подписчикам Групповых акторов.»
«От %{min_length} до %{max_length} букв, цифр, дефисов или подчёркиваний.»
Для этих двух случаев я оставляю строки без изменений. Если на сайте ограничение на имена пользователей установлено на 1 символ, это означает неправильную конфигурацию… менять ничего не нужно.
А как быть с сайтами, где имя пользователя состоит из 11 символов? В некоторых языках форма для числа 1 используется также и для числа 11. Как это работает в языках с несколькими формами множественного числа, если в английском языке не предусмотрено их различение? Могут ли переводчики вводить эти различные формы множественного числа?
Существуют языки, в которых для чисел, оканчивающихся на 1, используется форма для «одного» (хотя, возможно, число 11 не самый удачный пример). Кроме того, в таких языках имеется больше форм, чем просто «один» и «другое», поэтому даже при различных количествах, больших единицы, требуются разные переводы в зависимости от точного числа.
Немецкий язык к таким не относится, так что, полагаю, некоторые из ваших коллег знают в этом вопросе лучше меня.
Я немного запутался с переводом: выбирает ли Discourse единственное или множественное число на основе count или total?
По моим представлениям, обычно это count.
Но я не могу понять, как обработать случай, когда count равен 1, а total равен 3. У меня получается что-то вроде «1 из 3 post в этой теме опубликовано». Я могу исправить это, используя «posts»: «1 из 3 posts в этой теме опубликовано». Но тогда это не сработает, если total равен 1.
Это то, что мы называем «инженерным английским». Такая форма никогда не должна использоваться. Должно быть что-то вроде «сообщение опубликовано» или «тема опубликована», если возможно, чтобы последующие сообщения публиковались автоматически.
Аналогичная ситуация, по крайней мере в финском языке: числа от 0 до 9 (на самом деле каждое число в этом диапазоне) должны писаться словами, а не цифрами. Однако довольно распространённая практика — писать «one» вместо «1», а числа больше одного уже цифрами.
Что-то вроде «1 сообщение» всегда обречено на провал — это то, что используют англоязычные разработчики, потому что им лень писать по-человечески. Почти жаль это говорить вслух. И в более общем смысле: это воспринимается как американский стиль, а не как использование заглавных букв в заголовках и текстах
Дело не в лени. Использование плейсхолдера для числа крайне важно. Как я уже объяснял выше, в некоторых языках говорят «21 пост», точно так же, как говорят «1 пост». Если в английском тексте вместо %{count} было бы написано «one», переводчику было бы очень легко перевести это как есть, и тогда число не подставится вместо плейсхолдера, что приведёт к фразе «один пост», даже когда на самом деле их 21.
Поэтому использование чисел имеет свои причины. См. также: Always use %{count} variable when translating pluralized strings
Кстати, в немецком языке это тоже очень помогает избежать проблем, подобных этой.
Мне трудно поверить, что код находится на таком низком уровне, что невозможно заменить %(count) на слово, когда %(count) = 1. Я почти уверен, что при локализации я менял подобные плейсхолдеры на обычный текст, когда для единственного и множественного числа требуются разные варианты.
Вот что я имею в виду, говоря о лени и «инженерном английском». Под капотом действительно должны использоваться переменные и плейсхолдеры, но они должны преобразовываться в форму, удобную для чтения человеком и носителем языка. В конце концов, известные конечные пользователи используют программное обеспечение, а не инженеры…
Да, я знаю. Это более широкий и масштабный вопрос, чем просто рассмотрение того, как переводить «1 из 3…» или «1 из 1…». Но моя главная мысль в том, что не должно возникать необходимости задумываться о таких вещах (помимо других различий тысяч языков).
Но, конечно, возможно, мы живём в мире, где есть сложные ИИ, но нет решения, чтобы избежать ситуаций вроде «1 из 1»
Это довольно не по теме, так как обсуждение касалось возможности иметь разные формы единственного и множественного числа для этих текстов.
Однако, возможно, вы могли бы заменить 1 на “one” везде в интерфейсе на английском языке.
Но в немецком это не сработает так просто. Проблема в том, что в немецком языке слово, обозначающее «один», меняется в зависимости от падежа, рода и грамматической роли.
Например:
Тема останется открытой ещё на один месяц. → Das Thema ist noch einen Monat geöffnet.
Тема будет закрыта через один месяц. → Das Thema wird in einem Monat geschlossen.
Прошёл один месяц. → Ein Monat ist vergangen.
Таким образом, хотя в немецком языке также распространено писать числа словами, правильное оформление этого вопроса грамматически сложно.
Нельзя просто заменить цифру «1» на слово «eins», так как эта форма никогда не используется перед существительным, а нужная форма слова зависит от грамматического падежа.
Другими словами, использование слов вместо цифр создаст гораздо больше работы для переводчиков.
Нельзя просто использовать плейсхолдер вроде %{duration}, который подставляется как «one month», «one week» или «one day» во всех контекстах.
Вместо трёх длительностей и трёх предложений потребуется отдельная версия для каждой возможной грамматической комбинации — что потенциально увеличит объём текста в несколько раз.
Спасибо за ссылку. Из чтения кода и просмотра других языков, таких как арабский, я вижу, что языки могут предоставлять свои собственные переопределения, даже если английская строка одинакова для всех вариантов. Например, для арабского языка существуют отдельные правила, когда количество равно 2, и я вижу использование two: в строках на арабском, которые не определены в английском. Таким образом, для 1/11 язык, имеющий правило, может предоставить этот вариант. Насколько я понимаю, определять это в английском не нужно.
Спасибо за то, что углубились в этот вопрос. У меня нет контекста для этой строки, но если вы хотите отправить PR с изменениями, я с радостью посмотрю. Спасибо.
Можете ли вы объяснить, как это можно сделать в Crowdin?
Вот что я вижу в Crowdin, когда хочу перевести discourse_activity_pub.actor.warning.invalid_username на арабский язык:
Однако, судя по моему опыту, добавлять эти различные версии можно только в том случае, если множественные формы определены и в английском языке.
У меня тоже. В последний раз я смотрел тексты ActivityPub в апреле, когда создавал эту тему. Сейчас я просто заменял заполнители во время перевода, иначе было бы очень трудно подобрать правильные слова. Именно тогда я заметил, что фраза «1 из 3 сообщений в этой теме опубликовано» кажется мне неправильной — не только в немецком, но и в английском.