Китайская локализация не работала с расширением PHP gettext, как это работает с английским
я уже локализовал веб-сайт с русского на английский с PHP и gettext только с упаковкой всех строк в .
это работает.
вот суть:https://gist.github.com/Grawl/ba8f39b8398791c6a67e
но это не работает с китайским переводом. Я только что добавил compiled .mo (и источник .po) в locale/zh_CN/LC_MESSAGES/ посетите /index.php?locale=zh_CN и вообще не вижу перевода.
что это неправильно с китайцами?
должен ли я использовать другой код языка или что-то еще?
я использую zh_CN для отображения на китайском языке, как это сделано в WordPress.
я не понимаю почему.
обновление:
проблема была в HTML <meta> тег и charset собирается с сервера в Windows-1251. Chop русский PHP сервер.
после того, как я поставил <meta charset="GBK"> и выключил AddDefaultCharset на .htaccess, китайская локализация, наконец, начала работать.
в конце концов, я добавил эти изменения:
.htaccess:
- AddDefaultCharset UTF-8
+ AddDefaultCharset off
+ RewriteRule ^cn index.php?locale=zh_CN&charset=GBK [L]
functions.php, включен до <!DOCTYPE html>:
+ $charset=$_GET["charset"];
+ if(!isset($charset)) {
+ $charset="UTF-8";
+ }
head.php, the <head> содержимое тега:
+ <meta charset="<?=$charset?>">
Итак, если я не устанавливаю charset в get request, он становится UTF-8, иначе он переходит из get request. Для Chiense я установил его в GBK, как на Taobao.com, и настройки браузера правильно.
но ведь у меня просто кириллица, закодированная китайскими иероглифами, символ за символом.
такой: Сервис и услуги
становится этот: 褋械褉胁懈褋 懈 褍褋谢褍谐懈
если вставить эти иероглифы в приложение дешифратора, выбрал GB2312 слева (один из китайских гарнитур) и UTF-8 справа, у вас будет ?е?ви? и ??л?ги – некоторые кириллические символы повреждены, но это, очевидно, исходная строка, потому что в переводе у меня больше сокращается 服务 за эту фразу.
помогите мне пожалуйста.
обновление 2
я просто забыл поставить bind_textdomain_codeset(); to $domain, это было messages.
все работает на кодировке unicode. Все нормально.
1 ответов
резюме
я смог сделать эту работу без изменения <meta charset="..."> значением от utf-8. Вы также должны иметь возможность удалить AddDefaultCharset правил от .htaccess и удалить &charset=GBK из своего RewriteRule. Вы должны убедиться, что ваш .po файл отформатирован и скомпилирован правильно, а также убедитесь, что сервер может его найти.
Объяснение/Пример
задание <meta charset="..."> тег говорит только обозреватель что на странице используется кодировка символов. PHP все еще должен знать, какой файл выбрать для замены строк. И в любом случае, хотя эта документация говорит об обратном, я думаю, вы все еще можете использовать UTF-8 для китайской локализации. Вот простой рабочий пример, который я установил в своей системе:
<?php
// initialize locale-related variables
$locale = $_GET['locale'] ?: 'en_US';
$domain = 'bridges';
$locale_dir = dirname( __FILE__ ) . '/locale'; // using absolute path!
// set up locale
putenv( "LC_ALL=$locale" );
setlocale( LC_ALL, $locale );
bindtextdomain( $domain, $locale_dir );
bind_textdomain_codeset( $domain, 'UTF-8' );
textdomain($domain);
?><!doctype html>
<html>
<head>
<meta charset="utf-8">
<title><?= _( 'Localization Test' ) ?></title>
</head>
<body>
<p><?= _( 'Hello' ) ?>!</p>
</body>
</html>
мой .po файл, который находится по адресу ./locale/zh_CN/LC_MESSAGES/bridges.po выглядит так:
msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
"PO-Revision-Date: 2015-07-20\n"
"Last-Translator: Morgan Benton\n"
"Language-Team: Chinese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_CN\n"
msgid "Localization Test"
msgstr "本土化试"
msgid "Hello"
msgstr "您好"
по словам комментировать gettext() документация, вы должны поместить кодировка и другие соответствующие заголовки внутри , например,
"Content-Type: text/plain; charset=UTF-8\n"
вы можете проверить синтаксис .po файл, выполнив команду msgfmt -c bridges.po -o bridges.mo из вашего терминала. Он предупредит вас, если он думает, что что-то не так с вашим . Как предположил комментатор, Я думаю, вам не нужно устанавливать китайские системные библиотеки.
P. S. Я не знаю, если эти китайские переводы правильно или нет. Это только то, что Google Translate дал мне! :)