syshen's blog

關於部落格
我不想限定我的 blog 方向,但是在這裡的都是我最認真的紀錄。
  • 63849

    累積人氣

  • 2

    今日人氣

    0

    訂閱人氣

Google 買下 Youtube 以及 Web2.0 經營模式思考

今天除了「天下圍攻」外,網路上最大的消息就是 Google 買下了 Youtube,一舉躍升成為最大的網路影網站,這應該不意外,Youtube 年年燒錢,而且還不是普通的燒,根本是拿金條去融,單靠微薄的廣告收入是難以支撐一個流量如此之大的網站,所以 Youtube 的算盤中,應該早算好被併購的一天,被誰併購,被花多少併購,才是問題,而最後出線的金主就是「咕背背」。Google 已經有 Google Video service 了,花了錢買 Youtube 應該只是單純要增加流量,Google Video 有營業模式,多了流量多少可以刺激買氣,增加此方面的收入,也可以開創多方獲利模式,與各家軟硬體公司合作,推出各種服務,不過買了之後,要怎麼整合兩者,要怎麼搞定版權問題都是 Google 要開始煩惱的問題。

但是說實在的,看到這則新聞,我自己卻有些不一樣的感受,看這一兩年來,Web2.0 的起來就好像以前網路達康時代,大家都很看好,網路創業風又起,各式各樣的服務競相冒出來,但是呢?!大家似乎都沒記起達康泡沫化的教訓,為什麼會泡沫化?不就是缺乏良好的獲利模式,不管是以前的 .com 公司,還是現在的 Web2.0,一個網站要怎麼獲利?大家首先先想到的就是「廣告」,但是真能靠廣告賺錢的網站少的可憐,而且能靠廣告賺到大錢的就只有 Google,因為他很聰明的利用全世界網站幫他刊登廣告。但是除了廣告外,還有什麼獲利方式,會員?像無名小站一樣?不過要提供會員制,相對的你就必須要提供更好的服務來留住會員,要提供更好的服務通常代表著 Cost 也會增加。雖然相對於 .com, Web2.0 網站所需要的 Cost 較低,但是如果缺乏有效的獲利模式,沒有實際的經營模式, .com 與 Web2.0 的差別只是燒錢的快慢而已。

如果沒辦法賺錢,就只好等別人來買,咬緊牙關撐著,巴望著那些在前面赫赫有名的網站多關注你一點,不過這種機會可遇不可求,而且你不會覺得很可悲嗎?你的心血創意只是等著別人來買,而不能靠自己手成功(或許有些人不會這樣想,有人買就該偷笑,賺個七億也不錯啊)。

我很歡迎 Web2.0 的到來,我也很喜歡用網路上一些服務,自己也常常有滿腦子的 idea 想去實踐,但是有時候我很怕 Web2.0 不是機會只是陷阱,終會成泡沫。今天除了看到這則新聞外,也看到了下面這篇文章,他提到:「但是當我們看著這熱鬧的 Web 2.0 熱潮之時,或許也該是時候反思 - 如果 Web 2.0 企業只能透過併購當做出場機制,而不能透過自身的商業模式獲利時,這股熱潮將如何結尾呢?」,值得深思。

<a href="http://blog.yam.com/miula/archives/2254274.html" target=_>Google 併購 YouTube ? Web2.0 最好的出場機制是併購?</a>
繼續閱讀

[Rails 筆記] Boolean pitfall

Ruby 沒有明確的 boolean 型別定義,不過通常以 nil 或 false 來代表 false,其他通通都是 true ,所以有個陷阱了,C 語言同樣也沒有 boolean 型別,但可以用 0 代表 false,非 0 代表 true,我們也都習以為常,不過在 Ruby 中,0 代表 true,例如:<br>
<br>
a = 0<br>
if (a) <br>
<div style="padding-left:10px">puts ("true")</div>
else<br>
<div style="padding-left:10px">puts ("false")</div>
end<br>
<br>
會印什麼,true 啊。<br>
繼續閱讀
else
puts ("false")
end

會印什麼,true 啊。
" meta-author="syshen"> 分享至facebook

[Rails 筆記] 在 session 中儲存物件

答案是利用 Ruby 的 Marshal 物件,如下例:<br><br><blockquote>class AdminController < ApplicationController<br> def do_login<br> if request.post?<br> user = User.login(params[:uid], params[:pwd])<br> if (user)<br> session[:user] = Marshal.dump(user)<br> end<br> end<br> end<br>end<br></blockquote><br>然後在 application.rb 中:<br><br><blockquote>class ApplicationController < ActionController::Base<br> model :user<br> def setup_variables<br> if (session[:user])<br> @login_user=Marshal.load(session[:user])<br> end<br> end<br>end<br></blockquote>這樣有什麼好處,好處是對於一些常用的物件,例如 Query DB 得到的 Model,我不用在每個 page 都再去 query database,將他記錄在 session 中即可,而且可以避免 db schema 更改後還要改 code 的窘境。<br><br><br>
繼續閱讀

Web2.0 Conference 會後感

請了一整天假(跟我目前工作無關,只好請假了),跑去參加了這場盛會,真的是盛會,難得看到經濟部主辦的活動會有這麼多人參加,大概有一兩千人吧,把整個世貿會議中心大禮堂都塞爆了,而且 Speaker 也都不是泛泛之輩。不過最後我有個想法,關於這場 Conference 的主題 - Web 2.0,我覺得這就好像小時候聽過的一個故事,古時候一個君王牽來一頭大象,再找來九個瞎子要他們摸大象,並告訴君王那是什麼東西,結果每個人回答的結果都不相同,這次的 Conference 也給我同樣的感受,每個 Speaker 都跟 Web2.0 多少有點關係,有的是赫赫有名的網站創辦人,如 flickr、TechCrunch、BubbleShare、HEMiDEMi、wretch 等等,也有創投的老闆,更有傳統科技公司的管理階層,如 IBM、Microsoft 等等,但是每個人嘴中講出的 Web2.0 就是不同,有些人從自己公司的角度去看,有些 Speaker 則是來介紹自己網站的(結果我想了又想,這個網站的型態應該跟 Web2.0 搭不上關係吧),有些人則提了對 Long Tail 的看法(恩..),聽完後,你想給 Web2.0 一個嚴格定義是很難的一件事,而且我是覺得這也是很無聊的事,不過就是個名詞,一個由出版業者提出了的名詞,多點話題性罷了。Anyway,我覺得這場 Conference 只成功了一半,帶來了話題,不過大家還是帶了一堆霧薩薩回家。<br> <br> 因為我很早就到了,所以可以坐的很前面,就順便拍了一些照片:<br> <br> Tech Crunch 草創者 <span class="title04"><strong>Michael Arrington</strong></span>:<br> <a href="http://www.flickr.com/photos/syshen/253713754/" title="Photo Sharing"><img alt="_DSC2841" src="http://static.flickr.com/121/253713754_3e3ff762ce_s.jpg" border="0" height="75" width="75"></a> <a href="http://www.flickr.com/photos/syshen/253721996/" title="Photo Sharing"><img alt="_DSC2842" src="http://static.flickr.com/108/253721996_09ee1b3f47_s.jpg" border="0" height="75" width="75"></a><br> <br> Flickr 早期的 co-funder <span class="title04" style="font-weight: bold;">Stewart Butterfield</span>,目前則是 Yahoo 的經理,很幽默風趣的一個人:<br> <a href="http://www.flickr.com/photos/syshen/253748585/" title="Photo Sharing"><img alt="_DSC2845" src="http://static.flickr.com/81/253748585_d05c1b87b6_s.jpg" border="0" height="75" width="75"></a> <a href="http://www.flickr.com/photos/syshen/253763237/" title="Photo Sharing"><img alt="_DSC2846" src="http://static.flickr.com/97/253763237_ba2e4d92c5_s.jpg" border="0" height="75" width="75"></a><br> flickr 的 vision 是 eyes of the world,Butterfield 也舉了幾個例子,其中之一就是最近的 Sony 筆電爆炸,flickr 網友在事件發生後沒多久就把照片上傳了。<br> <a href="http://www.flickr.com/photos/syshen/253777432/" title="Photo Sharing"><img alt="_DSC2847" src="http://static.flickr.com/97/253777432_d59df5d242_m.jpg" border="0" height="161" width="240"></a> <a href="http://www.flickr.com/photos/syshen/253791126/" title="Photo Sharing"><img alt="_DSC2848" src="http://static.flickr.com/101/253791126_378bef5a4e_m.jpg" border="0" height="161" width="240"></a><br> HeyMath 創辦人:<br> <a href="http://www.flickr.com/photos/syshen/253848112/" title="Photo Sharing"><img alt="_DSC2853" src="http://static.flickr.com/119/253848112_c97807d272_s.jpg" border="0" height="75" width="75"></a> <a href="http://www.flickr.com/photos/syshen/253835609/" title="Photo Sharing"><img alt="_DSC2852" src="http://static.flickr.com/91/253835609_6d3942d46e_s.jpg" border="0" height="75" width="75"></a><br> BubbleShare 創辦人 <span class="title04"><strong>Albert Lai </strong></span>,他讓我感到很驚訝 - 真是年輕啊,看起來比 wretch 的幾個還要年輕,台風雖還不算穩健,但是手部動作很多,頗有大將之風,也很樂意分享他們草創網站的經驗:<br> <a href="http://www.flickr.com/photos/syshen/253863708/" title="Photo Sharing"><img alt="_DSC2856" src="http://static.flickr.com/91/253863708_d3821913d9_s.jpg" border="0" height="75" width="75"></a> <a href="http://www.flickr.com/photos/syshen/254027967/" title="Photo Sharing"><img alt="_DSC2858" src="http://static.flickr.com/102/254027967_d323a067a5_s.jpg" border="0" height="75" width="75"></a><br> (我還在等主辦單位放出他們的 slide ,有看到順便通知一聲)<br> <br> 非常短的 Panel discussion:<br> <a href="http://www.flickr.com/photos/syshen/254036010/" title="Photo Sharing"><img src="http://static.flickr.com/117/254036010_016cd5354a_s.jpg" alt="_DSC2861" border="0" height="75" width="75"></a> <br> <br> 下午場有幾個國內的網站做介紹,其中包括無名、愛情公寓、HEMiDEMi 等等。<br> 無名的<font size="-1">林弘全,感覺上就像是小朋友一樣,年紀輕,觀念台風等也尚不成熟,有自己的想法,但較缺乏中心思考,講出來的東西也比較難讓人信服。</font>不過有趣的是,他投影片中的一張圖,一張用手繪的簡圖,圖中的線代表 Long Tail 跟他的三角經濟理論,簡單的圖博得滿堂掌聲,也讓我覺得,社會歷練沒給他帶來太多負面影響,還能保有赤子之心。<br> <a href="http://www.flickr.com/photos/syshen/254042078/" title="Photo Sharing"><img src="http://static.flickr.com/93/254042078_40b5f5d4b8_s.jpg" alt="_DSC2863" border="0" height="75" width="75"></a> <a href="http://www.flickr.com/photos/syshen/254056771/" title="Photo Sharing"><img src="http://static.flickr.com/114/254056771_34b8e071f0_s.jpg" alt="_DSC2864" border="0" height="75" width="75"></a> <a href="http://www.flickr.com/photos/syshen/254064588/" title="Photo Sharing"><img src="http://static.flickr.com/115/254064588_247631576e_s.jpg" alt="_DSC2865" border="0" height="75" width="75"></a><br> <br> HEMiDEMi 所講的 Web2.0 跟我的觀念比較接近,社群,引用等等,這才是我所瞭解的 Web2.0,HEMiDEMi 的 Shine Chen 也以他們網站自身的例子來介紹他們所認為的 Web2.0 概念,清楚明瞭,也有趣。<br> <a href="http://www.flickr.com/photos/syshen/254072110/" title="Photo Sharing"><img src="http://static.flickr.com/115/254072110_96b9e37c02_s.jpg" alt="_DSC2866" border="0" height="75" width="75"></a> <a href="http://www.flickr.com/photos/syshen/254080410/" title="Photo Sharing"><img src="http://static.flickr.com/117/254080410_b2e97c8add_s.jpg" alt="_DSC2869" border="0" height="75" width="75"></a> <a href="http://www.flickr.com/photos/syshen/254134585/" title="Photo Sharing"><img src="http://static.flickr.com/97/254134585_78746194f2_s.jpg" alt="_DSC2868" border="0" height="75" width="75"></a> <a href="http://www.flickr.com/photos/syshen/254090114/" title="Photo Sharing"><img src="http://static.flickr.com/101/254090114_b107e23df3_s.jpg" alt="_DSC2870" border="0" height="75" width="75"></a><br> <br> 最後,還有 IBM 跟 Microsoft 的串場演說,不過我興趣缺缺。<br> <a href="http://www.flickr.com/photos/syshen/254100644/" title="Photo Sharing"><img src="http://static.flickr.com/99/254100644_9c464cc039_s.jpg" alt="_DSC2871" border="0" height="75" width="75"></a> <a href="http://www.flickr.com/photos/syshen/254110778/" title="Photo Sharing"><img src="http://static.flickr.com/28/254110778_56017fd107_s.jpg" alt="_DSC2875" border="0" height="75" width="75"></a> <a href="http://www.flickr.com/photos/syshen/254128739/" title="Photo Sharing"><img src="http://static.flickr.com/95/254128739_2ef3b45dff_s.jpg" alt="_DSC2881" border="0" height="75" width="75"></a><br> <br> 這次的 Conference 對我來說還是有一些收穫,大致瞭解了創投們的想法,也比以前有更深刻的體驗,Web2.0 並非一定成功,很有可能只是另一波泡沫,如果沒有好的 Business Model,即使有再好的 idea ,難以吸引創投投資,最後也以落敗收場。有時候,過熱之餘還是要冷靜一下多想一想。<br><br><br>
繼續閱讀

[Rails 筆記] ActiveRecord 轉換 JSON

酷耶,看到這都快興奮的跳到桌子上了,看看這個連結吧:<a href="http://www.bigbold.com/snippets/posts/show/474" target=_>Accessing ActiveRecord objects in javascript </a>
雖然我看不太懂這段 code 的意思,不過測試的結果,可以 work 耶! 讚!
就只剩下 JSON 轉 ActiveRecord 了,改天再來研究看看。

(1) 安裝 json:
<u> % gem install json</u>

(2) Add a new file : /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/json.rb , 裡頭包含以下程式碼:
<blockquote>
require 'json/lexer'
require 'json/objects'
module ActiveRecord
&nbsp;&nbsp;module Json # :nodoc:
&nbsp;&nbsp;&nbsp;&nbsp;DEFAULT_CONVERSIONS = { Time => [:to_s, :db] }
&nbsp;&nbsp;&nbsp;&nbsp;def to_json(conversions = {})
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conversions = DEFAULT_CONVERSIONS.merge(conversions)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.attributes.keys.inject({}) do |hsh, key|
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value = self.send(key)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hsh.merge(key => conversions[value.class] ? value.send(*conversions[value.class]) : value.to_s)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end.to_json
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;end
end
</blockquote>

(3) 在 environment.rb 中加上: <font color="red">[Update]: 似乎不用加以下這段,加了反讓 fastcgi 掛掉,不加也能 work 啦</font>
<blockquote>
require "#{RAILS_ROOT}/lib/active_record/json"
ActiveRecord::Base.class_eval { include ActiveRecord::Json }
</blockquote>

(4) 使用時,呼叫 to_json() 函式即可。
<blockquote>
user = User.new()
user.to_json()
</blockquote>

繼續閱讀

[Rails 筆記] 如何使用 Stored Procedure (MySQL)

儘管 Rails 的原始作者之一 David Heinemeier 對 Database 的 Stored Procedure 並<a href="http://dev.mysql.com/tech-resources/interviews/david-heinemeier-hansson-rails.html" target=_>不太感興趣</a>,都有了 Active Record 了,何需 Stored Procedure,不過需求總是存在的,要改好像也不太難,這篇筆記都是參考自 - <a href="http://guyharrison.typepad.com/guy_harrisons_blog/2006/04/mysql_stored_pr.html" target=_>MySQL stored procedures with Ruby</a> 以及 <a href="http://wiki.rubyonrails.org/rails/pages/StoredProceduresInMySql" target=_>StoredProceduresInMySql</a>。這各式兩種作法,一種是改 Rails 原本的程式碼,另外一種則是改自己的程式碼 ,各有優缺點。

先看改 Rails 的方法:
(1) 找到 Rails 中的 mysql_adapter.rb 檔,他通常位於:
<u><i>/usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_adapters/mysql_adapter.rb</i></u>
(2) 修改底下這行:
<u><i>ConnectionAdapters::MysqlAdapter.new( mysql, logger, [host, username, password, database, port, socket], config)</i></u>
把它改成:
<u><i>ConnectionAdapters::MysqlAdapter.new( mysql, logger, [host, username, password, database, port, socket<font color="red"><b>, Mysql::CLIENT_MULTI_RESULTS</b></font>], config)</i></u>

(3) 新增加一個 function:
<blockquote>
def select_sp(sql, name = nil)
&nbsp;rows = select(sql, name = nil)
&nbsp;while (@connection.more_results?())
&nbsp;&nbsp;@connection.next_result()
&nbsp;end
&nbsp;return rows
end
</blockquote>

(4) 使用上,如下例:
<blockquote>
connection.select_sp ("CALL my_stored_proc();")
</blockquote>

如果妳不想改 code,就不能用 Rails 的 adapter ,而是要自己 connect。
繼續閱讀

奇蹟的夏天

這週六與女友去台中新光戲院看了這部電影 -「<a href="http://www.myfootballsummer.com/" target=_>奇蹟的夏天</a>」,可能多數人沒聽過吧,因為它是國片,紀錄片形式的電影。或許因為知名度不高,整間廳不超過十個觀眾,但是我想人少應該有一半的原因是電影院附近的抗議活動,台中的新光三越到了週末下午應該是人潮眾多,不過這天卻是稀稀疏疏的,電影院裡頭人更是少的可憐,已經快要到那種工作人員比觀眾多的窘境了。不過,「奇蹟的夏天」不會難看,相當精采,雖然沒有大明星,沒有大場面,沒有炫麗特校,但是看著一張張花蓮美崙國中小朋友們的純真臉蛋,心情也跟著舒服。希望大家能多多支持國片,花點時間,花點小錢,進電影院看一下這部片,讓它能夠一場接著一場播映下去。

預告:
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/71y1rzITIGU"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/71y1rzITIGU" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>

其他影片片段:
繼續閱讀

看膩了太多所謂的爆料了嗎?

剛剛在<a href="http://blog.serv.idv.tw/2006/09/18/525/" target=_>終極邊疆</a>看到一個有趣的 News filter,簡單的 Javascript bookmarlet 可以幫助你 Mark 出一些特殊字眼,例如:「據透露」、「據了解」、「據指出」等等,這些新聞媒體現在都不做到查詢義務,老是喜歡搞一些爆料新聞,喜歡用聳動標題,一副唯恐天下不亂。有了這個 Filter,就可以讓這些惡質媒體現形。

繼續閱讀

從 google maps 看地球

好久沒有逛 Google Sightseeing 之類的網站了,沒想到多了幾個有趣的:

韓國半沈的郵輪:
<a href="http://perljam.net/google-satellite-maps/id/10866/Republic_of_Korea//Busan/Capsized_Cruise_ship" target=_><img src="http://mikepegg21.googlepages.com/shiplistgmm.JPG" border="0" /></a>

杜拜的 Palm Island (原來已經快建好了啊)
<a href="http://perljam.net/google-satellite-maps/id/4845/United_Arab_Emirates//Dubai/Palm_Islands___Jumeirah" target=_><img src="http://mikepegg21.googlepages.com/palmsgmm.JPG" border="0" /></a>

杜拜的世界島(尚在興建中,還看不出樣子):
<a href="http://perljam.net/google-satellite-maps/id/8765/United_Arab_Emirates//Dubai/The_World__islands_" target=_><img src="http://static.flickr.com/91/246504210_0d8df09f35_m.jpg" border="0"/></a>

杜拜的六星帆船旅館:
<a href="http://maps.google.com/maps?hl=en&ie=UTF8&amp;amp;amp;amp;z=18&ll=25.141031,55.185356&spn=0.002297,0.003616&t=k&om=1" target=_><img src="http://static.flickr.com/81/246506313_6dc166db8d_m.jpg" border="0"/></a>

繼續閱讀

[Rails 筆記] Rails Localization

Rails app 怎麼做 localization ? 好問題! 已經有人 port UNIX 上的 gettext 到 ruby 上,並有文件介紹如何與 Rails app 整合。<br><br><span style="font-weight: bold;">[安裝]</span><br>確認你有安裝 gettext,在 Ubuntu 上請用以下命令安裝:<br><br> <span style="font-style: italic; text-decoration: underline;">% apt-get install gettext</span><br><br>安裝 <code><span style="font-family: Verdana;">libgettext-ruby1.8:</span><br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="font-family: Verdana;"> <span style="font-style: italic; text-decoration: underline;">% gem install gettext</span><br><br>或者<br><br> <span style="font-style: italic; text-decoration: underline;">% apt-get install </span></span></code><code><span style="font-family: Verdana;"><span style="font-style: italic; text-decoration: underline;">libgettext-ruby1.8</span><br><br><span style="font-weight: bold;">[建立環境]</span><br>舉例來說,如果我的 Rails app 目錄位於 /var/rails/sandbox/ 路徑下,先在該目錄下建立 po 檔案夾,裡頭包含各個你要 localize 的語言子目錄,如下:<br><br></span></code><blockquote><code><span style="font-family: Verdana;">% ls -l po</span></code><br><code><span style="font-family: Verdana;">drwxr-xr-x 2 root root 4096 2006-09-15 20:21 en</span></code><br><code><span style="font-family: Verdana;">drwxr-xr-x 2 root root 4096 2006-09-15 21:21 ja</span></code><br><code><span style="font-family: Verdana;">drwxr-xr-x 2 root root 4096 2006-09-15 20:21 zh_CN</span></code><br><code><span style="font-family: Verdana;">drwxr-xr-x 2 root root 4096 2006-09-15 21:04 zh_TW</span></code><br><code><span style="font-family: Verdana;"></span></code></blockquote><code><span style="font-family: Verdana;"><br>編寫 Rakefile,如下:<br></span></code><code><span style="font-family: Verdana;"></span></code><blockquote>require(File.join(File.dirname(__FILE__), 'config', 'boot'))<br><br>require 'rake'<br>require 'rake/testtask'<br>require 'rake/rdoctask'<br><br>require 'tasks/rails'<br><span style="color: rgb(255, 0, 0);">require 'gettext/utils'</span><br><br><span style="color: rgb(255, 0, 0);">desc "Update pot/po files"</span><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);">task :updatepo do</span><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);"> MY_APP_TEXT_DOMAIN = "sandbox" #sandbox 是我的 Textdomain, 你應該改成你自己的</span><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);"> MY_APP_VERSION = "sandbox 0.0.9"</span><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);"> GetText.update_pofiles(MY_APP_TEXT_DOMAIN,</span><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);"> Dir.glob("{app,lib}/**/*.{rb,rhtml}"),</span><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);"> MY_APP_VERSION)</span><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);">end</span><br style="color: rgb(255, 0, 0);"><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);">desc "Create mo-files"</span><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);">task :makemo do</span><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);"> GetText.create_mofiles(true, "po", "locale")</span><br style="color: rgb(255, 0, 0);"><span style="color: rgb(255, 0, 0);">end</span><br style="color: rgb(255, 0, 0);"><br></blockquote><code><span style="font-family: Verdana;"><span style="font-weight: bold;">[攥寫你的程式碼]</span><br>你想要做 localize 的地方可以利用 _() 或者 N_() 函式包裝起來,如下:<br></span></code><code><span style="font-family: Verdana;"></span></code><blockquote><h2><%= _("This string should be localized") %></h2><br><h2><%= N_("This string should be localized") %></h2><br></blockquote><code><span style="font-family: Verdana;">設定 application.rb,如下:<br></span></code><code><span style="font-family: Verdana;"></span></code><blockquote><span style="color: rgb(255, 0, 0);">require 'gettext/rails'</span><br>class ApplicationController < ActionController::Base<br> <span style="color: rgb(255, 0, 0);">GetText.locale = "zh_TW"</span><br> <span style="color: rgb(255, 0, 0);">init_gettext "sandbox"</span><br></blockquote><code><span style="font-family: Verdana;">在這裡我先暫時將 locale 強制設定成 zh_TW 做測試,事實上,你可以透過幾種方法來改變語言(如果不直接設定 GetText.locale= 的話):<br></span></code><ul><li>QUERY_STRING 中的 lang 參數設定。</li><li>Cookie 中的 lang 參數設定。</li><li><code><span style="font-family: Verdana;">HTTP_ACCEPT_LANGUAGE</span> 中的值。</code></li><li>你也可以透過 config/routes.rb 讓某路徑對應到特定語言中,例如 /login/zh_TW/hello/ 可以對應到 zh_TW 語言中。</li></ul><blockquote>ActionController::Routing::Routes.draw do |map|<br> <span style="color: rgb(255, 0, 0);">map.connect ':controller/:lang/:action/:id'</span><br>end<br></blockquote><code><span style="font-family: Verdana;"><br><span style="font-weight: bold;">[建立 po 跟 mo 檔]</span><br>回到你的 Rails Root 路徑下,執行以下命令產生 pot 檔。<br><br> <span style="font-style: italic; text-decoration: underline;">% rake updatepo</span><br><br>執行完後你會在 po/ 目錄下找到一份 pot 檔,檔名是你取的 Textdomain,將這份 pot 檔案翻譯後並改名成附檔名為 .po 的檔案,並放到該語言的目錄下,例如你翻譯成中文後,可以放到 zh_TW 目錄下。<br><br>翻譯完後,執行:<br><br> <span style="font-style: italic; text-decoration: underline;">% rake makemo</span><br><br>你會發現在你 Rails app ROOT 目錄下會多個檔案夾 - locale ,在裡頭你會發現 zh_TW/LC_MESSAGES/sandbox.mo ,這就是產生的 mo 檔,有用過 gettext 的人,相信對這些流程應該不陌生。<br>執行你的 Rails app 後,你就可以發現你的字串都被置換了。<br><br><br><span style="font-weight: bold;">[參考資源]</span><br></span></code><ul><li><a title="Ruby-Gettext-Package" target="blank_" href="http://www.yotabanana.com/hiki/ruby-gettext.html?ruby-gettext">Ruby-Gettext-Package</a> </li><li><a title="Using Gettext To Translate Your Rails Application" target="blank_" href="http://manuals.rubyonrails.com/read/chapter/105">Using Gettext To Translate Your Rails Application</a> (y) </li><li><a title="Ruby-GetText-Package HOWTO for Ruby on Rails" target="blank_" href="http://www.yotabanana.com/hiki/ruby-gettext-howto-rails.html">Ruby-GetText-Package HOWTO for Ruby on Rails</a> </li></ul><br><br><br>
繼續閱讀
網誌分類篩選
收起分類
分類篩選
相簿設定
標籤設定
相簿狀態