背景:
字元資料是最為重要的資料型別,為什麼呢 ? 因為程式是為人服務的,那些能直接讀懂二進位制資料的超人是很少的
。但是如何用二進位制資料表示字元呢 ? 這個時候「編碼」就誕生了,簡單來說,編碼就是二進位制資料和字元之間建立的對映。ascii碼出現了。但是世界這麼大,給你乙個字元,你如何知道這是哪種文字的字元屬於哪個國家哪種文化呢(火星文除外)? 剛開始出現的ascii碼,只是面向英語的,像歐洲國家的人就沒有那麼福分去享受這個字符集了,於是就出現了所謂的世界字符集unicode,有人說unicode只有65530個字元,其實是不對的。實際上它可以表示無限個字元。
要點:如果你在
ruby中想使用不同的字符集,那麼請記住$kcode這個全域性變數,該變數有常用的五種設定,每種設定都是單個不區分大小寫的字母:
1. a: ascii
2. n : none(ascii)
3. e: euc
4. s: sjis
5. u: utf-8
你可以這麼設定,$kcode = 'u' ,也可以這麼設定,$kcode = 'utf-8' , 僅僅第乙個字元(u)管用。
當使用utf-8的時候require jcode這個庫會很有幫助。
訊息目錄是指用特定的語言表示的訊息集合,是本地化思想中不可分割的一部分。其思想是,將與語言相關的字串和應用程式的其他部分分離,這樣只需要「插入」不同的目錄就可獲得用不同語言表示的訊息和字串。
ruby裡的gettext-package庫是實現這一功能的最佳方式,這是小日本masao的勞動結晶(masao雖然是個小日本,但是我挺佩服這個人的,年紀好像是三十多了吧,除了日常工作,還維護gettext這個庫,維護兩個blog,乙個是日文的,乙個是英文的,曾經我也效仿這個小日本寫英文blog,但是沒有堅持下去,真是失敗),rails的多個國際化外掛程式都是基於gettext庫來實現的。gnu有個gettext程式,小日本寫的這個是模仿gnu這個gettext寫的
ruby實現。
想使用其基本功能,需要require 'gettext'
想使用更有用的實用程式,需要require 'gettext/utils'
ruby1. 8 .6沒有包含這個gettext庫,需要自己安裝 gem install gettext
關於gettext有三個關鍵的術語需要解釋:
1. po - file : 可移植的物件檔案,是人類可讀的形式,每個po-file對應一種文化的語言,也叫模板檔案。
2. mo - file :是可移植的二進位制訊息目錄檔案,是根據po-file建立的,
ruby庫讀取的是mo-file,而不是po-file。
3. text domain : 文字域,實際上是mo-file的basename,這個是和應用程式所繫結的。
所以有了文字域,和應用程式繫結以後,我們只需要寫乙個po-file檔案,然後生成mo-file檔案,就可以實現本地化了。
網上找了個簡單的例子:
require 'gettext'
class person
include gettext
def initialize(name, age,children_num)
@name, @age, @children_num = name, age, children_num
enddef show
puts _("information")
puts _("name: %, age: %") %
puts n_("% is an unmarried.", "% has % boy or girl firend.", @firend_num) %
endend
alex = person.new("alex",26, 0 )
alex.show
mary = person.new("mary", 18, 0)
mary.show
上面的例子裡,
puts _("name: %, age: %") % ,這種寫法我估計是gettext裡實現的。
require 'gettext/untils'
desc "update pot/po file"
task :updatepo do
enddesc "create mo-files"
task :makemo do
gettext.create_mofiles
endcreate_mofiles 將建立子目錄data/locale/, 並根據po-file生成mo-file。
#, fuzzy
這個表示是還沒有被翻譯的內容或者是需要校譯的內容。
rakefile
person.rb
po/ .
.data/
locale/ .
.然後我們可以測試一下:
首先我們需要設定環境變數,
export gettext_path="data/locale"
export lang="zh_cn.utf-8"
ruby person.rb
這樣應用程式會根據變數lang的設定情況輸出對應的值。
以上設定環境變數主要是為了在控制台下測試這個簡單程式而已,在本地化應用裡將不會使用這個環境變數。
Alex學Ruby 字元編碼與國際化
背景 字元資料是最為重要的資料型別,為什麼呢 因為程式是為人服務的,那些能直接讀懂二進位制資料的超人是很少的 但是如何用二進位制資料表示字元呢 這個時候 編碼 就誕生了,簡單來說,編碼就是二進位制資料和字元之間建立的對映。ascii碼出現了。但是世界這麼大,給你乙個字元,你如何知道這是哪種文字的字元...
Alex學Ruby 關於多型關聯
剛才看了李妙妙的 這篇文章 感覺說的不是很明白,並沒有從物件導向的角度說清楚,我的理解 要理解多型關聯,首先要理解什麼是多型。多型是物件導向乙個特性。同乙個物件有不同的行為,叫多型。在李舉的那個例子裡,article,image,sound,這三個model會有很多共同的行為,如果沒有使用多型關聯,...
Alex學Ruby 最重要的資料型別 字串
但我還記得c語言裡的字串是以空字元結束的,但 ruby不是,所以,ruby的字串裡可以包含空字元。2.ruby裡的字串分為兩種,其中最簡單的一種是用單引號括起的字串,表示的完全是字面意義,唯一支援的轉義序列是 單引號和反斜槓 str i m ok a u ok xie i m ok a u ok x...