Я бы посоветовал посмотреть как реализован перевод в других системах. Например в
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) Доработать напильником, чтобы работало в проекте.