2011-11-16 69 views
0

我已經使用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的我同時設置 「字符集」 和 「源代碼字符集」,以UTF-8。 「語言」設置爲Russian,「國家」設置爲RUSSIAN FEDERATION

我確定俄羅斯文本在粘貼到Poedit之前是從UTF-8編碼的文本文件複製的。

我缺少什麼?

下面是messages.po複製出來的記事本++ - :

cthorn(點)共(點)英國/定位/區域/ ru_RU/LC_MESSAGES /消息

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 "Это текст для перевода." 

不好意思啊,從下載的文件的.mo cthorn(點)共(點)英國/定位/區域/ ru_RU/LC_MESSAGES/messages.po

(我只能發佈兩個環節,因爲我是一個的n00b)

+0

我的意思是文件本身。在這裏粘貼它後,文本肯定是UTF-8) – Eugene

回答

0

確保一切都在utf-8中,它會工作的很好。

不同的內容編碼總是最終成爲真正的痛苦a **

+0

我以爲我把所有的東西都設置爲UTF-8?我確保所有的PHP文件都被設置爲UTF-8編碼。正如你在部分看到的,編碼設置爲UTF-8,而在Poedit中,我能找到的唯一字符編碼值('Charset'和'源代碼字符集')被設置爲UTF-8。 – Chris

+0

您的翻譯文本的編碼是「ISO-8859-5」,嘗試設置'和你會看到,所以我想你的文件必須有問題。請確保您在POedit中輸入的文字也是UTF-8。 –

+0

我明確地看到你的意思 - 謝謝。我會嘗試重新創建.mo/.po文件。 – Chris

1

那麼,在您的網頁上的俄羅斯文本是ISO-8859-5。問題是,它是如何結束在該編碼:) 你可以顯示你的.po文件嗎?

UPD。 文件中的所有內容看起來都很好。我唯一能想到的就是試試這個:

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

謝謝,但它似乎並沒有工作:(發生的所有情況是頁面保持英語而不管?locale = ru_RU。 – Chris

+0

這可能意味着,俄語pack沒有完全安裝在服務器上,如果你有shell訪問服務器,在控制檯上運行'locale -a',它會給你支持的語言環境列表 – Eugene

+0

明白了,謝謝!使用'<?安裝。php系統('locale -a')?>和ru_RU.utf8被列出。回到你的第一個建議,我使用了'setlocale(LC_ALL,$ locale。'。utf8');'但不是'bind_textdomain_codeset(「messages」,'UTF-8');'和嘿presto,頁面在西里爾語中工作。謝謝! – Chris