Объявление 1. Ваше предположение только на одну форму множественного числа неверно.Некоторые языки имеют несколько различных форм множественного числа (ваш польский перевод вашего примера):
один: Pozostał jeden bilet.
несколько: Pozostały 2 bilety.
многие: Pozostało 5 biletów.
другие:Позостало 1,5 билета.// Хорошо, этот не имеет смысла, но вот как он будет переведен, если он сделает ...
Пожалуйста, найдите больше информации в CLDR .Обратите внимание на формы множественного числа для арабского языка.
Ad 2. Для перевода я бы использовал Globalize , так как он имеет эту функцию более или менее встроенной (есть функция Localize()
).Единственной проблемой из моих наблюдений будет местный запасной вариант.На самом деле вам нужно убедиться, что что-то вроде de-AT (немецкий / австрийский) возвращается к de (немецкий / инвариант страны), если у вас нет конкретных переводов для данного языка.С китайским языком может быть большая проблема, вы не должны ни при каких обстоятельствах прибегать к упрощенному китайскому языку (если zh указывает на него), если у вас есть традиционный китайский язык.Использование zh-Hans и zh-Hant может быть хорошей идеей.
Что касается множественных форм, вам, вероятно, необходимо включить данные из таблицы CLDR выше и использовать некоторую логику, основанную на Locale.Я бы, вероятно, расширил бы файлы культуры Globalize, добавив формы множественного числа, а затем вызвав FindClosestCulture()
(если я правильно его помню), я бы проверил, какое правило я должен использовать для этого контекста (локаль и число).Затем прочитайте соответствующее сообщение с помощью Localize()
.Конечно, нужно писать сообщения с соответствующими ключами, например:
tickets-one : One ticket left.
tickets-other: : {0} tickets left.
Кстати.Я бы использовал пронумерованные заполнители.Причина в том, что иногда вам нужно разместить более одного.В этом случае, если у вас два одинаковых заполнителя %s
, переводчики не смогут переупорядочить предложение.И это требуется чаще, чем вы думаете (многие языки имеют совершенно другие правила грамматики, чем английский).
Ad 3. В зависимости от вашего движка шаблонов ...
Ad 4. Это зависит от того, как вы хотитеинтегрировать это.Обычно используется трансляция на стороне сервера, поэтому вы на самом деле записываете файл JavaScript из серверной части приложения.В этом случае, в зависимости от технологии, которую вы используете в своем бэк-энде, вы можете использовать простые файлы свойств или более сложные (но часто лучшие) решения, такие как Gettext.Для обоих форматов вы можете легко найти краудсорсинговую платформу (т.е. Launchpad поддерживает последнюю из коробки).Если вы хотите, чтобы кто-то переводил ваши файлы JavaScript, подобные тем, которые вы показываете выше, это не очень хорошая идея.Одна проблема с этим, это нестандартно, поэтому многие люди не знают, как это перевести.Во-вторых, это очень легко повредить, забыв добавить запятую, двоеточие или фигурную скобку.Это ошибки, с которыми вам (или какой-то несчастной душе, пользующейся написанным вами) придется столкнуться.