Китайская локализация не работала с расширением 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 дал мне! :)