PHP setlocale возвращается к системному стандартному языку

Это код, который я использую для установки языка:

$locale = 'en_US';
putenv('LANG='.$locale);
setlocale(LC_ALL, $locale);
bindtextdomain($locale, ROOTPATH.'/admin/locale');
bind_textdomain_codeset($locale, 'UTF-8');
textdomain($locale);
echo setlocale(LC_ALL, 0).'<br><br>';
echo _('register_success');

.

Разбивая это:

$locale = 'en_US';

Установка этого значения в ‘pt_PT’ делает работу для португальского, но если для него установлено другое значение, ничего не переводится.

putenv('LANG='.$locale);
setlocale(LC_ALL, $locale);
bindtextdomain($locale, ROOTPATH.'/admin/locale');

(ROOTPATH ​​- это переменная пути к корневой папке проекта)

bind_textdomain_codeset($locale, 'UTF-8');
textdomain($locale);

Следующая часть всегда выводит это:
LC_COLLATE = С; LC_CTYPE = Portuguese_Portugal.1252; LC_MONETARY = С; LC_NUMERIC = С; LC_TIME = С

echo setlocale(LC_ALL, 0).'<br><br>';

И строку, которую я тестирую

echo _('register_success');

Я уже пробовала setlocale(LC_ALL, NULL) а также setlocale(LC_ALL, '') до установки его в ‘en_US’, но это тоже не помогло, хотя это echo setlocale(LC_ALL, 0) только печать Portuguese_Portugal.1252,

Я также пытался изменить язык моей системы и все такое, но она все еще Portuguese_Portugal.1252не совсем уверен, как …

Вот структура папок для файлов .po / .mo.

root
- admin/
- locale/
- en_US/
- LC_MESSAGES/
- en_US.mo
- en_US.po
- pt_PT/
- LC_MESSAGES/
- pt_PT.mo
- pt_PT.po

РЕДАКТИРОВАТЬ

Вот значения, которые setlocale () возвращает для разных кодов (я не знаю, помогает ли это, но они не показались мне слишком последовательными):

setlocale(LC_ALL, 'pt_PT');
echo setlocale(LC_ALL, '0');

Выходы: LC_COLLATE = C; LC_CTYPE = Португальский_Португалия.1252; LC_MONETARY = C; LC_NUMERIC = C; LC_TIME = C

setlocale(LC_ALL, 'PT');
echo setlocale(LC_ALL, '0');

Выходы: PT

setlocale(LC_ALL, 'US');
echo setlocale(LC_ALL, '0');

Выходы: англ_Соединённые Штаты.1252

setlocale(LC_ALL, 'EN');
echo setlocale(LC_ALL, '0');

Выходы: EN

setlocale(LC_ALL, 'en_US');
echo setlocale(LC_ALL, '0');

Выходы: LC_COLLATE = C; LC_CTYPE = Португальский_Португалия.1252; LC_MONETARY = C; LC_NUMERIC = C; LC_TIME = C

0

Решение

setlocale(LC_ALL, '')

работает для меня.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]