Gettext 詳可見: 使用 gettext 來實做 PHP 多國語系支援(I18N)
- po 檔: 原始文件, 也就是平常翻譯時修改的文件檔案
- mo 檔: 程式在看的文件(binary).
但是如果 po 檔不見, 要從 mo 檔轉換回來要怎麼辦?
mo 轉 po (msgunfmt)
- 使用 msgunfmt - uncompile message catalog from binary format
- msgunfmt xxx.mo > xxx.po # 這樣子 xxx.po 就是轉換回來的文字檔, 但是原本 po 檔的註解部份資料不會存在(不過通常這些資料也不需要了).
PHP 讀取 mo 檔
另外發現 WordPress 的程式裡面有 gettext 的 Library, 找一下發現此篇: [wp-polyglots] .mo to .po
(下述程式轉載於此)
使用 WordPress 的 Library, 可以直接將 mo 檔讀出來, 蠻有趣的, 用途可以再想想.
到 WordPress 解開的目錄中, wp-includes 裡面, 找到 l10n.php / streams.php / gettext.php, 將這三個檔案 cp 到同一個目錄後, 再使用下面這程式即可.
程式: mo_reader.php
<?php
include 'l10n.php';
include 'streams.php';
include 'gettext.php';
$mofile = './xxx.mo';if (is_readable($mofile)) {
$input = new CachedFileReader($mofile);
$mo2po = new gettext_reader($input);$mo2po->load_tables();
echo "<xmp>"; // I know that xmp is officially deprecated , but it works ;)
foreach ($mo2po->cache_translations as $msgid => $msgstr) {
echo "\n";
if ($msgid == "") {
echo 'msgid ""' . "\n";
echo 'msgstr ""' . "\n";
foreach (split("\n",$msgstr) as $val) {
if ($val != "")
echo '"' . $val . '\n"' . "\n";
}
} else {
echo 'msgid "' . $msgid . '"' . "\n";
echo 'msgstr "' . $msgstr . '"' . "\n";
}
}
echo "</xmp>";
} else {
echo 'ERROR: file not readable: ' . $mofile;
}
?>
完整程式含 WordPress Library 壓縮檔可見: gettext-reader.tgz
可以拿來做多國語系!
感謝大大的文章
另外大大您網誌好像沒有支援RSS?
有 RSS 阿.
http://feeds.feedburner.com/tsungblog