Поддержка Переводы Множественный перевод слова (POEdit)

  • Здравствуйте! Подскажите есть ли плагин назначения множественного перевода для существительного в русском языке?
    Нужно чтобы было 3 значения перевода слова ОТЗЫВ:
    1 отзыв
    2 отзыва
    5 отзывов

    Пробовал через программу Poedit, не выходит множественный перевод для нужного слова.

    • Тема изменена 1 месяц, 2 недели назад пользователем Yui. Причина: неинформативное название темы
Просмотр 15 ответов — с 1 по 15 (всего 15)
  • Я так понимаю у людей нет решения?

    Модератор Yui

    (@fierevere)

    ゆい

    nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);

    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 может быть уже настроен по умолчанию. И даже если не настроен, это всегда можно сделать вручную следующим образом:

    1. Открыть меню «Каталог» > «Свойства»
    2. Найти на вкладке поле «Формы множественного числа» и переключить его в режим «Пользовательское выражение».
    3. Скопировать в него следующую строку: ‪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 нормально настроен по умолчанию, так что скорее всего дело ваша строка просто неразмечена в коде. Нужно выяснить, откуда конкретно она возникает (плагин, тема, произвольное поле, ваш собственный код, ещё что-то?) и дальше решать по ситуации.

    • Ответ изменён 1 месяц, 2 недели назад пользователем Norske.
    • Ответ изменён 1 месяц, 2 недели назад пользователем Norske.

    Спасибо что откликнулись, я этот вариант пробовал, но к сожалению % не стоит перед словом. Прилагаю скриншот.
    У меня была тема другая где был приведённый на скриншоте перевод в множественной форме.

    Скриншоты где после применения Пользовательского выражения ничего не изменилось, потому что в изначальной фразе отсутствует выражение % — числа.

    https://i.paste.pics/83FHF.png
    https://i.paste.pics/83FHL.png

    Поэтому перерыв 30 страниц интернета, замучив техподдержку на английском языке я обратился к вам. Должно же быть какое то другое решение((((

    Модератор Yui

    (@fierevere)

    ゆい

    в изначальной фразе отсутствует выражение % — числа.

    с таким надо обращаться к автору поделия, чтобы делали интернационализацию (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
    ";
    ?>
    

    Или некоректный код?

    • Ответ изменён 1 месяц, 2 недели назад пользователем Yui. Причина: для оформления кода есть кнопка code
    Модератор Yui

    (@fierevere)

    ゆい

    Народ так и не смог решить свою проблему, копавшись неделю в коде нашёл отвечающий за вывод перевода код:

    
    <div class="tour_attribute_rating_count">
    <?php echo intval($overall_rating_count); ?>&nbsp;
    <?php
    if($overall_rating_count > 1)
    {
    echo esc_html__('reviews', 'grandtour' );
    }
    else
    {
    echo esc_html__('review', 'grandtour' );
    }
    ?>
    

    От отвечает за вывод перевода со числительным 1 и больше его, т.е. 2 варианта перевода.
    Вопрос?! Можно ли сделать чтобы были разные значения перевода от числа, я готов даже прописать перевод слова к каждому числу!!!!

    Модератор Yui

    (@fierevere)

    ゆい

    Мне нравится что в интернете 90% ответов шаблонами, даже не читая информацию которую пишут. Вы понимаете НЕТ ПЕРЕМЕННОЙ — %s, чтобы она менялась в зависимости от числительного!!!!!!!!!!

    Модератор Yui

    (@fierevere)

    ゆい

    А если бы вы все же наконец прочитали руководство по ссылке, то вопрос бы могли и решить, или автор плагина бы прочитал…

    А так вы с этой проблемой уже больше месяца как

    я читал руководство, и также перевод через Poedit делал на сайте другом где есть переменная %s, но без неё, только echo esc_html__ можно как то изменить.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    копавшись неделю в коде нашёл отвечающий за вывод перевода код

    Замените его на следующий, если автор плагина не может этого сделать:

    
    <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 отзывов.

    • Ответ изменён 2 недели, 3 дня назад пользователем Shetov.
    • Ответ изменён 2 недели, 3 дня назад пользователем Shetov.
Просмотр 15 ответов — с 1 по 15 (всего 15)