solution for I18n deprecation error

I’m working on a 2.3.8 Rails application when i found an error warning on I18n lately. The error says like the following message:

The {{key}} interpolation syntax in I18n messages is deprecated. Please use %{key} instead

The stack trace stopped at a line in ajaxful_rating plugin, but i was thinking that the issue was came from I18n gem as the error warning message said. So, i looked for the similar issues over there. Yeah, this is an incompatiblity issue from Rails 2.3 or lower. I saw my I18n installed gems was sit on 0.3.7 and 0.4.1 versions and i think my 2.3.8 Rails application choose the newest one.

The solution is just simply tells Rails to use the oldest version. In the config/environment.rb put this line before any gems that uses I18n:

config.gem ‘I18n’, :version => ’0.3.7′

Hope this helps..

I18n di rails 2.2

Udah beberapa hari ini aku nyobain make plugin buat localization. Maksud aku adalah buat masukin fitur multilingual (multibahasa) dalam suatu aplikasi web.
Sebelum tanya sama “mbah google”, biasanya aku cari dulu di Agile Web Development sama di wiki-nya Rails. Disana banyak banget tuh plugin buat localization (atau internationalization, tapi aku lebih pilih istilah localization), dan bingung mo pake yang mana..

Setelah search ama muter2 ngikutin link dari page yang satu ke page yang lainnya, akhirnya aku nemuin semacam perbandingan kelebihan dan kekurangan masing2 plugin buat localiztion di weblog-nya rails, tapi di posting yang mana aku udah lupa, coz ga sempet nge-bookmark si. Yah..aku pikir ga penting perbandingan itu, aku cuma nyari plugin yang simple2 aja, ga mo ribet2 gara2 plugin yang kompleks.

Langsung aja aku liat ada plugin namanya Simple Localization , selain Globalize, GetText, Gibberish trus masih ada beberapa lainnya lagi. Beruntung ketika aku buka home page Simple Localization aku langsung tertarik buat nge-pakenya, kayanya se-simple namanya gitu..

Udah install plugin, tapi ko ga mau jalan method buat translate-nya, hmm..trus aku coba lagi buat aplikasi rails baru, install plugin, trus cobain sekali lagi, tapi tetep aja ngga mau jalan. Karena ada hal lain yang harus aku kerjain, aku pending dulu tuh buat nge-trace, dimana yang nyebabin error.

Besoknya lagi aku coba lagi dari awal sambil nge-baca tutorial dari homepage tuh plugin dengan seksama. Tetep aja ngga mau jalan, usut punya usut ternyata plugin itu emang, ga jalan di rails 2.1+ (saat itu release version rails yang ada di komputer aku 2.1.2).

Ok deh, saat itu cukup dulu segitu, besoknya lagi lanjutin buat nyari plugin yang tepat. Setelah ngebaca tutorial di masing-masing homepage beberapa plugin yang ada di Agile Web Development akhirnya aku jadi pusing..bingung.. mo pake yang mana…
Terakhir iseng2 ngebuka weblog-nya rails, nah loh disitu ada post tentang I18n (Internationalization). Akhirnya.. usai sudah pencarianku selama ini.. :-)

Disini aku mo share tentang gimana caranya biar I18n up and running di aplikasi rails. Langkah-langkahnya kurang lebih kaya gini:


  1. Update rails ke versi 2.2.2 [sourcecode language='css']
    sudo gem update rails
    [/sourcecode]

  2. Generate aplikasi rails baru [sourcecode language='css']
    rails i18n_app
    [/sourcecode]

    hasilnya adalah:

    [sourcecode language='css']
    create
    create app/controllers
    create app/helpers
    create app/models
    create app/views/layouts
    create config/environments
    create config/initializers
    create config/locales
    create db

    create config/initializers/new_rails_defaults.rb
    create config/locales/en.yml
    create config/boot.rb
    create config/environment.rb
    [/sourcecode]

    bisa kita liat pada line 8 dan line 12, rails generator nge-create file config/locales/en.yml
    yang nantinya akan digunakan untuk menyimpan konfigurasi localization.

  3. Masuk ke direktori i18n_app trus generate controller home dengan index method [sourcecode language='css']
    cd i18n_app
    script/generate controller home index
    [/sourcecode]

  4. Katakan kita akan membuat satu page yang berisi hello world, title dan content, sehingga editlah file config/locales/en.yml menjadi seperti ini: [sourcecode language='css']
    en:
      hello: “Hello World”
      page:
        title: “Welcome to my multilingual website”
        content: “This is the content of my homepage that i’ve created to try the I18n feature in rails 2.2″
    [/sourcecode]

  5. Buatlah translation dari default English (en.yml) ke Bahasa Indonesia (id.yml) misalnya di config/locales, atau copy file en.yml kemudian rename menjadi config/locales/id.yml. Filenya kurang lebih menjadi seperti ini: [sourcecode language='css']
    id:
      hello: “Hallo Semuanya”
      page:
        title: “Selamat datang di website multibahasaku”
        content: “Ini adalah isi dari halaman utama website aku yang aku buat untuk mencoba fitur I18n di rails 2.2″
    [/sourcecode]

  6. Modifikasi file app/views/index.html.erb menjadi seperti dibawah ini: [sourcecode language='ruby']





    [/sourcecode]

    Inti dari I18n adalah method “t” (translate) tersebut yang membaca file *.yml yang dapat dibuat dengan nested.
    Untuk memanggil method ini dari selain dari ActionView atau ActionController dapat kita gunakan class method I18n.translate
    Misal:
    I18n.translate(‘hello’) maka hasilnya adalah “Hello World” untuk translation English dan “Hallo Semuanya” untuk translation Bahasa Indonesia.


  7. Untuk memberikan pilihan bahasa yang ada, tambahkan potongan kode berikut di file index.html.erb [sourcecode language='ruby']
    ‘home’ do -%>
       
       

    [/sourcecode]

  8. Kemudian buatlah before_filter untuk method di ApplicationController (app/controllers/application.rb) untuk men-set bahasa/language seperti ini: [sourcecode language='ruby']
      before_filter :set_language

      protected
      def set_language
        I18n.locale = params[:language] || ‘en’
      end
    [/sourcecode]

  9. Masuk ke direktori aplikasi dan start server [sourcecode language='css']
    script/server
    [/sourcecode]

  10. Hasilnya kurang lebih seperti ini:


Akhirnya jadilah applikasi web multibahasa kita.. ini adalah post pertamaku, bukan maksud aku untuk menggurui, cuma sekedar sharing aja. Ditunggu saran, kritik dan koreksi-nya..

Thanks