2013-12-21 3 views
2

Я пытаюсь поддержать традиционный китайский в одном из моих проектов PHP, но я не могу заставить его показать никаких китайских персонажей. Вот мой Gettext установка:PHP gettext Упрощенная поддержка Китая?

putenv("LC_ALL=zh_CN.utf8"); 
setlocale(LC_ALL, "zh_CN.utf8"); 
bindtextdomain("wpsmessages", dirname(__FILE__) . "/locale"); 
bind_textdomain_codeset("wpsmessages", 'UTF-8'); 
textdomain("wpsmessages"); 

Ранее я создал локаль в SSH, введя:

sudo locale-gen zh_CN.utf8 

Который потом вернулся:

Generating locales... 
zh_CN.UTF-8... done 

После ввода locale -a я получаю follwing в списке (среди прочих):

zh_CN 
zh_CN.utf8 

Но все же, он не показывает никаких китайских символов. Что я здесь делаю неправильно?

+0

Не слишком уверен, что я понимаю ваши примеры. Вы пытаетесь заставить PHP получить текст, чтобы иметь китайскую поддержку, но все ваши примеры демонстрируют конфигурации системного уровня. Где ваш код PHP не работает? Вытягивает ли данные из базы данных? Является ли базой данных и PHP-скриптом UTF8? – JakeGould

+0

Возможный дубликат [Невозможно сделать (UTF-8) традиционный китайский символ работать в PHP gettext extension (.po и .mo файлы, созданные в poEdit)] (http://stackoverflow.com/questions/2264740/cant- make-utf-8-традиционный-китайский-характер-to-work-in-php-gettext-extensio) – JakeGould

+1

Извините, я не был слишком ясен об этом. Поэтому у меня в основном есть готовый PHP-проект gettext, вызывающий '__ ('Это некоторый текст')', получая текст из файлов .mo и .po, находящихся в папке '/ locale /'. gettext отлично работает для локалей de_DE.utf8, nl_NL.utf8, pt_BR.utf8 и т. д., но я не могу заставить его печатать строки для упрощенного китайского языка. Вместо этого он печатает английские строки по умолчанию. – Alphawolf

ответ

3

Немного emberrassing, но решение было просто переименовать файл wpsmessages-zh_CN.mo в wpsmessages.mo, следуя моим собственным соглашениям об именах файлов.

В основном структура моего PHP проекта с использованием Gettext, как это:

/locale/pt_BR.utf8/LC_MESSAGES/wpsmessages.mo 
/locale/zh_CN.utf8/LC_MESSAGES/wpsmessages.mo 
... 

Таким образом, используя bindtextdomain("wpsmessages", dirname(__FILE__) . "/locale"); получает правильный .mo файл локали, указанного setlocale(), но он не может найти файл, как это имя был неправ.

Надеюсь, это поможет кому-то быть таким же глупым, как я. :)

Смежные вопросы