May 19th, 2009

Rails Muti Internationalization (I18N)

2 Comments », RoR, by nolifelover

rails-internationalization

สำหรับหลายท่านคงอยากทำให้ rails สามารถทำ muti lang ได้ซึ่งใน version ก่อน 2.2 ไม่มี api core สำหรับการทำ Internationalization แต่ตั้งแต่ 2.2 เป็นต้นไปทัมพัฒนาได้ใส่ i18n core สำหรับการใช้งานแบบ muti lang โดยผมก้ได้เปลี่ยนวิธีใช้จาก gettext มาเป็น i18n ตาม core ของ rails แล้วโดยงานที่ผมทำไม่ได้เกี่ยวอะไรกับการทำหลายภาษาหรอกครับแค่ว่าเอามาแปลไทยเท่านั้นเพราะเผื่อว่าลูกค้าต้องการเปลี่ยนคำจะได้ไม่ต้องไล่แก้ที่ view อยู่มันเหนื่อยเลยเอา i18n มาช่วย

config/initializers/load_translations.rb

1
2
3
4
%w{yml rb}.each do |type|
  I18n.load_path += Dir.glob("#{RAILS_ROOT}/app/locales/**/*.#{type}")
end
I18n.default_locale = 'th'

สำหรับโค้ดส่วนนี้จะเป็นส่วนที่ใช้สำหรับโหลด เจ้าตัวแปลมาครับโดยจะอยู่ใน app/locales ครับ

ต่อไปก็มาถึงการใช้งานกันแล้วครับ สมมุคิดว่าผมมี controller ชื่อว่า hello_world_controller.rb อยู่ละครับ และมี index.html.erb
index.html.erb

<%="hello_world">
<%="To Day=>"+Data.today.to_s>

ผมต้องการแปล hello_world และ To day ให้เป็นภาษาไทยครับผมต้องแก้เจ้า index.html.erb ตามนี้ครับ
index.html.erb

<%=t("hello_world.say_hello")>
<%=t("to_day")+Data.today.to_s>

เมื่อผมแก้เสร็จก็ไปทำการแก้ไขไฟล์แปลภาษากันครับ โดยในไฟล์แปลภาษาผมจะตั้งชื่อว่าอะไรก็ได้ครับขึ้นกับความพอใจครับโดยผมขอตั้งฃื่อว่า th.yml โดยผมจะเขียนโดยใช้โครงสร้าง yml ครับ
app/locales/th.yml

1
2
3
4
th:
  :hello_world
    :say_hello สวัสดีครับ
  :to_day วันนี้วันที่

ตรงนี้สังเกตให้ดันะครับว่า :say_hello จะย่อยเข้าไปของ :hello_world เวลาใช้จึงเป็น hellow_world.say_hello ครับ ส่วน :to_day ใช้เป็น to_day ได้เลยเนื่องจากว่าไม่ได้ย่อยเข้าไปครับ และหากว่าเรียก hello_world.say_hello.morning ต้องเขียนแบบนี้ครับ

1
2
3
4
5
th:
  :hello_world
    :say_hello สวัสดีครับ
      :morning สวัสดีตอนเช้า
  :to_day วันนี้วันที่

คงไม่ยากนะครับ

20 views

2 Responses to “Rails Muti Internationalization (I18N)”

» You can leave a response or Trackback .

  1. aeronz Says:

    เยี่ยมไปเลยครับ

  2. nolifelover Says:

    บทความหน้าจะมีเรื่องการเอา plugins นำมาใช้ร่วมกันครับ

» Trackbacks/Pingbacks

Leave a Reply