Проблемы с кодировкой символов при переводе с английского на русский - PullRequest
0 голосов
/ 16 ноября 2011

Я использовал Poedit (работает на Win7) для генерации файлов .mo / .po для создания русской версии веб-страницы с использованием PHP gettext. Когда я отображаю русскую версию страницы, все символы отображаются черными бриллиантами / квадратами.

Вот пример веб-страницы, демонстрирующей проблему:

http://cthorn.co.uk/localization/index.php

... а вот и русская версия:

http://cthorn.co.uk/localization/index.php?locale=ru_RU

Код для index.php:

<?php require_once("locale/localization.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
        <title>Test</title>
    </head>

    <body>
        <p><? echo _("This is the text to be translated."); ?></p>
    </body>
</html>

Код для файла localization.php:

<?php
    $locale = "en_GB";
    if (isSet($_GET["locale"])) $locale = $_GET["locale"];
    putenv("LC_ALL=$locale");
    setlocale(LC_ALL, $locale);
    bindtextdomain("messages", "./locale");
    textdomain("messages");
?>

Структура каталогов:

 - localization
    - locale
       - ru_RU
          - LC_MESSAGES
               messages.mo
               messages.po
         localization.php
      index.php

В Poedit я установил "Charset" и "Исходный код charset" на UTF-8. «Язык» установлен как Russian, а «Страна» установлен как RUSSIAN FEDERATION.

Я убедился, что русский текст был скопирован из текстового файла в кодировке UTF-8 перед вставкой в ​​Poedit.

Чего мне не хватает?

Вот messages.po скопированный из Notepad ++:

msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-11-16 10:49-0000\n"
"PO-Revision-Date: 2011-11-16 10:49-0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
"X-Poedit-Basepath: C:\\websites\\cthorn.co.uk\\live\n"
"X-Poedit-Language: Russian\n"
"X-Poedit-Country: RUSSIAN FEDERATION\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-SearchPath-0: .\n"

#: localization/index.php:10
msgid "This is the text to be translated."
msgstr "Это текст для перевода."

Извините - скачайте файлы с:

* * Cthorn одна тысяча тридцать восемь (точка) со (точка) ик / локализации / национальная_версия / ru_RU / LC_MESSAGES / messages.mo cthorn (точка) со (точка) ик / локализации / локаль / ru_RU / LC_MESSAGES / messages.po

(я могу опубликовать только две ссылки, так как я n00b)

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

Убедитесь, что все в UTF-8, и он будет отлично работать.

различные Content-кодировки всегда заканчиваются настоящей болью в a **

1 голос
/ 16 ноября 2011

Ну, русский текст на вашей странице - ISO-8859-5. Вопрос в том, как это оказалось в этой кодировке :) Можете ли вы показать свой .po файл?

UPD. Все в ваших файлах выглядит хорошо. Единственное, о чем я могу думать, это попробовать:

    setlocale(LC_ALL, $locale.'.utf8');
    bind_textdomain_codeset("messages", 'UTF-8');
...