如何將 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'
這樣就算失敗了還是可以蓋回去.
此程式轉換的內容包括: 相簿: 標題/敘述/摘要, 照片: 標題/關鍵字/評論/額外欄位.
注意事項
- 此程式不應該重複執行, 否則可能會有無法預期之後果.
- 請先備份您的資料檔, 本程式不負任何損毀之責.
- 本程式未經廣泛測試, 如有發現任何問題, 歡迎聯絡我.
程式
Download: http://ericyu.org/wikidata/gallery-big5-utf8.txt 或由下拷貝:
<?php // Written by ericyu, http://ericyu.org/ $GALLERY_BASEDIR = "/home/ericyu/public_html/photo/"; // 更改為 gallery 目錄 require($GALLERY_BASEDIR."init.php"); $f = "Big5"; // from encoding $t = "UTF-8"; // to encoding $albumDB = new AlbumDB(false); $album_alters = array("title", "description", "summary"); foreach ($albumDB->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 支援編譯進去, 您也可自行改用 mb_convert_encoding) 轉換.