如何將 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/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) 轉換.


Navigation
Personal Tools