- ПОМОГИТЕ создать такую фишку (блок с иерархией: выбор по категориях)
- Создание типа матерела, слайд шоу или несколько фото в типе материала
- Благодарность и пожелания.
- Как вывести термины словаря в views иерархически?
- Как на одной странице показать термины и связанные материалы(ноды)?
- Ошибка перевода модуля ad
- Инструменты для участия в переводе
- Русская локализация (файлы) --- где скачать реально?
- Русская локализая : Где все таки скачать???
- Казахская группа перевода Drupal на drupal.org
- Организация работы на сервере
- Перевод терминов
- Миграция Беларусского на сервер L.D.O
- Обработка строк перевода
- Запрос имени анонима при добавлении ноды
Данный сервер пока еще использует 1ю версию(релиз) l10n_server, поэтому вероятно тут могут быть баги... хотя очень странно (насчет 3й формы в которую копируются строки из 2й формы)
Лично я храню переводы на своем сервере (использую 2й релиз) и пользуюсь http://dgo.to/l10n_update
Искренне благодарю за добротное объяснение.
В качестве выжимки:
#: module.file:строка(оставляем как было)
msgid "Original string"
msgid_plural ""
msgstr[0] ""
За разъяснения и потраченное время ещё раз спасибо. Во всех импортированных мной переводах уже исправил на @count[2]. В ближайшее время постараюсь пройтись вообще по всем имеющимся переводам, повставлять @count[2] вместо @count для 3-го варианта.
Спасибо за развернутое объяснение! Все расписано верно!
По поводу @count[2]:
На сегодняшний день drupal-6 & drupal-7 используют для перевода строк функцию t(), а для перевода строк на страницах используется её симметричный JavaScript аналог Drupal.t() данные для которого подготавливаются в _locale_rebuild_js().
А для вывода множественных форм строки, зависящих от численного значения (параметр @count) используется format_plural() и её JavaScript аналог Drupal.formatPlural() (исходник можно посмотреть в misc/drupal.js)
Как видно из кода для 3-й формы (варианта) используется:
217 args['@count[' + index + ']'] = args['@count'];
218 delete args['@count'];
219 return Drupal.t(plural.replace('@count', '@count[' + index + ']'), args);
'@count' будет заменен на '@count[2]' (index = 2)
В ввиду того, что строка 3-й множественной формы может использоваться в JavaScript (модулей много, всего не предусмотришь) все строки в 3й форме должны быть @count[2], чтобы иметь перевод.
Я написал эту заметку, чтобы люди просто взяли за правило использовать именно @count[2] для 3-й множественной формы, тогда в будущем будет меньше ошибок и исправлений.
На текущий момент JavaScript перевод множественных форм в drupal 6 работает не корректно с языками у которых больше 2-х форм. Исправление http://drupal.org/node/504506 уже принято в drupal 7 и ожидает отзывов пользователей для включения в ядро 6.
Количество множественных форм и формула вычисления в drupal привязаны к языку, единственной возможностью их установить и изменить - импортировать .PO файл содержащий формулу и определение кол-ва форм.
Замечание: Простое добавление языка в систему не назначает этих параметров, необходим именно импорт .PO файла, тогда ядро начнет собирать строки для перевода. Но ядро не умеет определять принадлежность строки к участию во множественном переводе - это связано со способом хранения множественных строк в ядре.
Вероятно это изменение пойдет уже в 8е ядро - http://drupal.org/node/532512 так как нужно знать количество множественных форм, чтобы переводить при помощи ядра и/или localiation client
На сегодняшгий день, невозможно узнать, какие строки требуют множественного перевода, так как связь между единственной и остальными формами устанавливается только для переведенных (импортированных) строк.
ЗЫЖ для многих языков описаны формулы и количество множественных форм - http://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms
Большое спасибо. Почитал, картина прояснилась. Правда так и не понял, почему надо именно @count[2] (просто возьму на веру), и можно ли обзывать переменную как-то иначе, например @d, как там.
Что понял - разъясню для тех, кто столкнётся с этой же проблемой.
Цифры в квадратных скобках - это не то, чем заканчивается число, а номера элементов массива/вариантов. То, какой из вариантов используется, определяется формулой. Здесь она не указана, но в самом файле перевода она есть в самом начале. Суть её такова:- для чисел, заканчивающихся на цифру 1, кроме 11 - использовать вариант под индексом [0] aka Основной Вариант;
- для чисел, заканчивающихся цифрами 2-4, кроме второго десятка (12-14) - под индексом [1] aka Второй Вариант;
- для всех остальных - под индексом [2] aka Третий Вариант.
Ну во всяком случае для русского языка формула обычно такая.
Единственное, что ещё хотелось бы уточнить:
Не напрашиваюсь, но если не трудно - прошу пояснить.
Поясняю, посмотреть можно и нужно на официальном сайте http://www.gnu.org/software/gettext/manual/gettext.html#Translating-plur...
Для 3й формы предпочтительнее использовать @count[2] ибо именно так строки будут нормально подхватываться в JavaScript Drupal.t() функции
msgid "1 answer"
msgid_plural "@count answers"
msgstr[0] "@count ответ" -- 1, 21, 31...
msgstr[1] "@count ответа" -- 2-4, 22-24, ...
msgstr[2] "@count[2] ответов" -- 0, 5-10.... 20, 30
Прошу прощения, если на вопрос уже неоднократно отвечали - однако я что местным поиском, что через гугл нашёл только этот топик.
Где можно ознакомиться с более подробным описанием синтаксиса для таких "множественных" вариантов перевода в зависимости от числа?
Потому что не понятно: