====== 如何將 Big5 的 Gallery 轉換為 UTF-8 ======
以前為了將 Gallery 1.4 由 Big5 轉換至 UTF-8 所寫的步驟與程式.
====== 我的環境 =====
FreeBSD 4.9 Release, Gallery 1.4.2
====== 步驟 =====
==== Download ====
首先先到 Gallery 的 download 網頁: [http://sourceforge.net/project/showfiles.php?group_id=7130] 找到符合版本的 zh_TW.utf8 的 language pack. (例如 zh_TW.utf8-pack-1.4.2.tar.gz)
==== 解壓 ====
將此壓縮檔在 gallery/locale/ 下解開, 會多出一個 zh_TW.utf8 的目錄. 記得 check 是否是 www server 可讀的權限, 不然後面可能會失敗: 此 zh_TW.utf8 目錄及裡面的子目錄 LC_MESSAGES/ 和 flagimage/ 都得讓 www server user 有進入的權限 (x), 一般就是設定成 755.
==== 改變 gallery 設定 ====
編輯 gallery/config.php, 將$gallery->app->default_language 的值由 "zh_TW" 改為 "zh_TW.utf8". $gallery->app->available_lang[] 也改一下. $gallery->app->locale_alias 則需要系統上有裝相對應的 locale.
將 config.php 轉成 UTF-8 (為了轉換相簿名稱等, 可用 iconv 轉).
==== 轉換相簿內容 ====
至此, 進入 gallery 應該已經是用 UTF-8 顯示了, 且訊息為中文. 但是相簿內容的資料還沒轉換. 我寫了一個 php script.
**使用前請先備份你的資料檔: (在 albums 目錄上一層)**
tar zcf backup.tgz albums --exclude '*.jpg' --exclude '*.avi'
這樣就算失敗了還是可以蓋回去.
此程式轉換的內容包括: 相簿: 標題/敘述/摘要, 照片: 標題/關鍵字/評論/額外欄位.
=== 注意事項 ===
* 此程式不應該重複執行, 否則可能會有無法預期之後果.
* 請先備份您的資料檔, 本程式不負任何損毀之責.
* 本程式未經廣泛測試, 如有發現任何問題, [[http://ericyu.org/blog/contacts/|歡迎聯絡我]].
=== 程式 ===
Download: http://ericyu.org/wikidata/gallery-big5-utf8.txt 或由下拷貝:
albumList as $album) {
foreach ($album_alters as $iter)
$album->fields[$iter] = iconv($f, $t, $album->fields[$iter]);
$album->save();
$album->load($album->fields["name"]);
for ($i = 1; $i <= $album->numPhotos(1); $i++) {
$album->setCaption($i, iconv($f, $t, $album->getCaption($i)));
$album->setKeywords($i, iconv($f, $t, $album->getKeywords($i)));
foreach($album->getExtraFields() as $field)
$album->setExtraField($i, $field, iconv($f, $t, $album->getExtraField($i, $field)));
for($j = 1; $j <= $album->numComments($i); $j++) {
$c = &$album->getComment($i, $j);
$c->name = iconv($f, $t, $c->name);
$c->commentText = iconv($f, $t, $c->commentText);
}
}
$album->save();
}
$albumDB->save();
?>
記得將第一行的目錄改成你的 gallery 所在目錄, 然後以 php cmd (/usr/local/bin/php) 執行或以 web 方式執行.
(PHP 須有將 iconv 支援編譯進去, 您也可自行改用 [[phpfn>mb_convert_encoding]]) 轉換.