這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 | |||
gallery_b5_u8 [2006/05/18 07:45] ericyu |
gallery_b5_u8 [2006/05/30 03:38] (目前版本) ericyu |
||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== 如何將 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 目錄上一層)** | ||
+ | <code> | ||
+ | tar zcf backup.tgz albums --exclude '*.jpg' --exclude '*.avi' | ||
+ | </code> | ||
+ | |||
+ | 這樣就算失敗了還是可以蓋回去. | ||
+ | |||
+ | 此程式轉換的內容包括: 相簿: 標題/敘述/摘要, 照片: 標題/關鍵字/評論/額外欄位. | ||
+ | |||
+ | === 注意事項 === | ||
+ | * 此程式不應該重複執行, 否則可能會有無法預期之後果. | ||
+ | * 請先備份您的資料檔, 本程式不負任何損毀之責. | ||
+ | * 本程式未經廣泛測試, 如有發現任何問題, [[http://ericyu.org/blog/contacts/|歡迎聯絡我]]. | ||
+ | |||
+ | === 程式 === | ||
+ | Download: http://ericyu.org/wikidata/gallery-big5-utf8.txt 或由下拷貝: | ||
+ | <code php> | ||
+ | <?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(); | ||
+ | ?> | ||
+ | </code> | ||
+ | |||
+ | 記得將第一行的目錄改成你的 gallery 所在目錄, 然後以 php cmd (/usr/local/bin/php) 執行或以 web 方式執行. | ||
+ | (PHP 須有將 iconv 支援編譯進去, 您也可自行改用 [[phpfn>mb_convert_encoding]]) 轉換. | ||