Vnevremen
@Vnevremen
digital designer

Как управлять порядком слов в предложении при переводе?

Использую Polylang для языковых версий сайта. Помимо обычных надписей, в шаблоне часто встречаются строки подобного вида:
Пройдено <?=count($user_lessons)?> из <?=plural_form(count($lessons), array('занятие', 'занятия', 'занятий'))?>

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

Как бы вы поступили в данном случае? Единственный ли выход условием проверять какой текущий язык и в зависимости от этого менять порядок слов?
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
OxCom
@OxCom
Я бы посоветовал посмотреть как реализован перевод в других системах. Например в Symfony + Twig.

Идея проста: использовать placeholder'ы. Например:
1) Есть строка 'Пройдено %user_lessons%' из %total_lessons% %lessons%'.
2) Определяем язык и ищем соответствие этой строке в других языках. Если нет, то fallback на исходную строку. Допустим для английского будет '%user_lessons% of %total_lessons% %lessons% completed.'.
3) Дальше можно использовать strtr() вот примерно в таком виде:

<?php
        
$str = '%user_lessons% of %total_lessons% %lessons% completed.';
$trans = strtr($str, [
    '%user_lessons%' => 3,
    '%total_lessons%' => 10,
    '%lessons%' => 'lessons'
]);

echo $trans;


4) Доработать напильником, чтобы работало в проекте.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы