У меня была та же проблема с PHP 5.6.30 VC11 Theard Safe в Windows 10. Обходной путь найден и исправлен этот вопрос здесь от sirio3mil.
Очевидно, что PHP с TS может получить доступ только к языковой папке Locale. Поэтому, когда функции setlocale и putenv вызываются не на системном языке, а на другом, папка с .mo и .po не может быть прочитана.
Обходной путь - иметь только одну языковую папку с системным языком и несколько пар файлов .mo / .po для каждого переведенного языка. Домен будет установлен на желаемом языке.
Пример со швейцарским французским, немецким и итальянским языками:
Структура папок
\ Locale \ fr_CH \ LC_MESSAGES
- fr_CH.mo + fr_CH.po // системный язык
- de_CH.mo + de_CH.po
- it_CH.mo + it_CH.po
код
$lang = 'fr_CH' or 'de_CH' or 'it_CH'
bindtextdomain($lang, '.\Locale');
textdomain($lang);
bind_textdomain_codeset($lang, 'UTF-8');
setlocale (LC_ALL, $lang);
putenv('LC_ALL=' . $lang);