iT邦幫忙

DAY 19
9

Rails 的簡單任務系列 第 20

[RoR] 中文轉漢語拼音的 permalink

前一日以英文標題轉成具可讀性的 permalink,而標題是中文的話,就可轉成漢語拼音,當作該文章的 permalink。
雖然在台灣一直有到底用通用拼音?漢語拼音?羅馬拼音?來解決中文的音譯問題,常是有以國情習慣、國際上慣用、甚至政治等不同的角度來爭議,看要用哪一種;最近台灣的路牌好像要改成漢語拼音了。

而目前在網路上有關中文拼音的 ruby 的相關程式,是在 http://www.upulife.com/leo/?p=260,可以立即把中文轉成漢語拼音,在此就用這現成的工具來達成今日的目標。

安裝及使用
先下載 http://www.upulife.com/ruby/ruby-pinyin.tar.gz 並解開後,把 pinyin.rb 及 dict 的目錄,放在 /home/ironman/test1 裡面就可以了。馬上就可以執行測試:

./script/console
Loading development environment (Rails 2.1.1)
>> require 'pinyin.rb'
=> ["PinYin"]
>> py = PinYin.instance
.... # 跑一堆碼出來,不理會,電腦規格與跑的速度有影響
>> py.to_permlink('中文轉漢語拼音')
=> "zhong-wen-zhuan-han-yu-pin-yin"
# 這樣的語法可以把聲調顯示出來
>> py.to_pinyin('中文轉漢語拼音',separator = '-', tone = true)
=> "zhong1-wen2-zhuan3-han4-yu3-pin1-yin1"
# 姓名轉漢語拼音再截字首
>> py.to_pinyin_abbr('劉德華')
=> "ldh"
# 姓氏完整,名取字首
>> py.to_pinyin_abbr_else('劉德華')
=> "liudh"
# 中英文混合
>> py.to_permlink('影集 Prison Break')
=> "ying-ji-Prison-Break"

所以直接用 to_permlink 建置在其中。

修改 Model
只要把第18日辛苦建立的 model ,改成這樣就可運作:

# 編輯 app/models/article.rb
class Article < ActiveRecord::Base
before_save :generate_permalink

def to_param
  "#{id}-#{permalink}"
end

protected
 def generate_permalink
  require 'pinyin.rb'
  py=PinYin.instance
  self.permalink = py.to_permlink(self.title)
 end
end

就可以有把中英文標題轉成 permalink 的功能了,如附圖的左下角連結顯示:

有關中文在網址裡面,如果是直接在參數裡面,在早期似乎容易會有是用 Big5 或 UTF-8 的編碼來傳出 url 的 query,與 server 端不符就找不到;而現在 UTF-8 算是普及了,可能就比較少會碰到這樣子的狀況;然而以中文在 Firefox 上網址顯示,至少 3.x 版看起來會是這樣,q=看電影,而在 2.x 版及在 IE6 上的網址顯示 q=%E7%9C%8B%E9%9B%BB%E5%BD%B1 (至於 IE7 是不是就不是亂碼?),對於沒有中文字型(Unicode環境下的電腦都可看中文字嗎?),可能就不具可讀性(英文字母的可讀性?而不是字母拼出來的意義可讀性?);至少轉成漢語拼音方式,就完全減少掉亂碼出現的機會,也具有一些網址的辨識性。


上一篇
[RoR] 透過 permalink 使網址具可讀性
下一篇
[RoR] 簡單產生 RSS Feeds 及簡易部落格聯播功能
系列文
Rails 的簡單任務33

1 則留言

0
gric
iT邦高手 1 級 ‧ 2009-03-14 13:10:09

感恩分享咯!

我要留言

立即登入留言