В ShopCMS в переменной $_POST['lang'] теоретически можно передавать номер (числовой!) элемента массива с описанием языковых файлоы.
Никто это никогда не использовал (я не сталкивался), но код есть.
Код в index.php выглядит так:
//select a new language?
if (isset($_POST["lang"])) $_SESSION["current_language"] = $_POST["lang"];
//current language session variable
if (!isset($_SESSION["current_language"]) || $_SESSION["current_language"] < 0 || $_SESSION["current_language"] >
count($lang_list)) $_SESSION["current_language"] = 0; //set default language
//include a language file
if (isset($lang_list[$_SESSION["current_language"]]) && file_exists("core/languages/".$lang_list[$_SESSION["current_language"]]->
filename))
{
//include current language file
include ("core/languages/".$lang_list[$_SESSION["current_language"]]->filename);
}
else
{
die("<font color=red><b>ERROR: Couldn't find language file!</b></font>");
}
Все эти проверки нафиг не нужны, т.к. языковой файл один единственный - русский (иногда украинский) и всегда выбирается и грузится именно он.
Но в POST-массиве яндекс-кассы, передаваемом на сервер сайта при оплате заказа появился (23-го марта?) элемент POST-массива $_POST['lang'] с содержимым 'ru'. И код загрузки языкового файла срабатывает так, что вместо подгрузки файла core/languages/russian.php и дальнейшего нормального выполнения скрипт завершается с сообщением "ERROR: Couldn't find language file!". Оплата, естественно, не проходит, т.к. завершение должно быть с кодом 0.
Для возврата к нормальной работе достаточно в index.php закомментировать строку
if (isset($_POST["lang"])) $_SESSION["current_language"] = $_POST["lang"];