Множественный перевод слова (POEdit)
-
Здравствуйте! Подскажите есть ли плагин назначения множественного перевода для существительного в русском языке?
Нужно чтобы было 3 значения перевода слова ОТЗЫВ:
1 отзыв
2 отзыва
5 отзывовПробовал через программу Poedit, не выходит множественный перевод для нужного слова.
- Тема изменена 4 года, 9 месяцев назад пользователем Yui. Причина: неинформативное название темы
-
Я так понимаю у людей нет решения?
nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
cм http://docs.translatehouse.org/projects/localization-guide/en/latest/l10n/pluralforms.html
Настройки POEdit в Catalog > Settings
Не нужен тут никакой плагин.
Как раз с помощью Poedit и функции _n это и делается.
Обязательно только в Poedit в свойствах каталога указать выражение для формы множественного числа. Его можно найти здесь — http://translate.sourceforge.net/wiki/l10n/pluralformsДобрый день!
Решение есть. Но чтобы строка поддерживала перевод с учетом форм множественного числа, она должна быть предварительно размечена в коде с помощью специальной функции _n().
Именно эта функция позволяет подменять перевод в зависимости от числа [отзывов] и указывает программам перевода, что для данной строки нужно выделить несколько отдельных полей. Таким образом, в первую очередь нужно убедиться, что вы пытаетесь перевести строку, которая правильно подготовлена для перевода.
Если строка размечена правильно, она попадает в соответствующий языковой файл (.po/.pot) именно как строка с учетом форм множественного числа (plural). И перевод файла с такими строками можно без проблем сделать практически любым профильным инструментом.
Настройка Poedit
Poedit тоже умеет работать со множественными числами. Режим работы зависит от языка и в случае WordPress может быть уже настроен по умолчанию. И даже если не настроен, это всегда можно сделать вручную следующим образом:
- Открыть меню «Каталог» > «Свойства»
- Найти на вкладке поле «Формы множественного числа» и переключить его в режим «Пользовательское выражение».
- Скопировать в него следующую строку:
nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
Пусть это выражение вас не пугает, оно всего лишь определяет нужную форму множественного числа с учетом норм русского языка.
Скриншот настроек Poedit:
https://habrastorage.org/webt/uj/o5/t4/ujo5t4qchfop02s30vzb_1up4ts.pngСкриншот результата (см. вкладки для разных форм числа в поле перевода):
https://habrastorage.org/webt/ge/ev/9z/geev9zra0argwap9f0bbbhg9dgo.pngКак правило, Poedit нормально настроен по умолчанию, так что скорее всего дело ваша строка просто неразмечена в коде. Нужно выяснить, откуда конкретно она возникает (плагин, тема, произвольное поле, ваш собственный код, ещё что-то?) и дальше решать по ситуации.
Спасибо что откликнулись, я этот вариант пробовал, но к сожалению % не стоит перед словом. Прилагаю скриншот.
У меня была тема другая где был приведённый на скриншоте перевод в множественной форме.Скриншоты где после применения Пользовательского выражения ничего не изменилось, потому что в изначальной фразе отсутствует выражение % — числа.
https://i.paste.pics/83FHF.png
https://i.paste.pics/83FHL.pngПоэтому перерыв 30 страниц интернета, замучив техподдержку на английском языке я обратился к вам. Должно же быть какое то другое решение((((
в изначальной фразе отсутствует выражение % — числа.
с таким надо обращаться к автору поделия, чтобы делали интернационализацию (i18n) правильно.
К сожалению у авторов тем такое встречается часто.
Он англичанин, и он не может понять что в русском языке от числительного меняются окончания. Он просто думает что я не могу перевести слово. Я ему месяц пытался объяснить что мне нужно, но он не понимает.
А подобной функцией нельзя сделать перевод:
function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys; return $suffix[$suffix_key]; } $array = array("минута", "минуты", "минут"); $n = 21; echo "$n $word "; $n = 11; $word = getWord($n, $array); echo "$n $word "; $n = 4; $word = getWord($n, $array); echo "$n $word "; ?>
Или некоректный код?
- Ответ изменён 4 года, 9 месяцев назад пользователем Yui. Причина: для оформления кода есть кнопка code
Народ так и не смог решить свою проблему, копавшись неделю в коде нашёл отвечающий за вывод перевода код:
<div class="tour_attribute_rating_count"> <?php echo intval($overall_rating_count); ?> <?php if($overall_rating_count > 1) { echo esc_html__('reviews', 'grandtour' ); } else { echo esc_html__('review', 'grandtour' ); } ?>
От отвечает за вывод перевода со числительным 1 и больше его, т.е. 2 варианта перевода.
Вопрос?! Можно ли сделать чтобы были разные значения перевода от числа, я готов даже прописать перевод слова к каждому числу!!!!Мне нравится что в интернете 90% ответов шаблонами, даже не читая информацию которую пишут. Вы понимаете НЕТ ПЕРЕМЕННОЙ — %s, чтобы она менялась в зависимости от числительного!!!!!!!!!!
А если бы вы все же наконец прочитали руководство по ссылке, то вопрос бы могли и решить, или автор плагина бы прочитал…
А так вы с этой проблемой уже больше месяца как
я читал руководство, и также перевод через Poedit делал на сайте другом где есть переменная %s, но без неё, только echo esc_html__ можно как то изменить.
копавшись неделю в коде нашёл отвечающий за вывод перевода код
Замените его на следующий, если автор плагина не может этого сделать:
<div class="tour_attribute_rating_count"> <?php printf( _n( '%s review', '%s reviews', (int) $overall_rating_count, 'grandtour' ), number_format_i18n( (int) $overall_rating_count ) ); ?>
Можно ли сделать чтобы были разные значения перевода от числа, я готов даже прописать перевод слова к каждому числу!
Можно только правкой некорректного кода. Одним переводом — нельзя.
Вы понимаете НЕТ ПЕРЕМЕННОЙ — %s, чтобы она менялась в зависимости от числительного!
Теперь есть 🙂
<div class="tour_attribute_rating_count"> <?php printf( _n( '%s отзыв', '%s отзыва', '%s отзывов', (int) $overall_rating_count, 'grandtour' ), number_format_i18n( (int) $overall_rating_count ) ); ?>
Здравствуйте! Спасибо за код, попытался добавить на 3 типа окончаний, но не получается, в русском языке 3 окончания в зависимости от числительного перед словом:
1 отзыв,
2 отзыва,
6 отзывов.- Ответ изменён 4 года, 9 месяцев назад пользователем DarkDjadai.
- Ответ изменён 4 года, 9 месяцев назад пользователем DarkDjadai.
- Тема «Множественный перевод слова (POEdit)» закрыта для новых ответов.