Blog jak widać już nie jest aktualizowany. I raczej nie będzie. Wisi sobie ot tak, ze względów historycznych :)

Sinatra i lokalizacja - sinatra-r18n

Krzysztof Rygielski | 2010-04-02 14:43 | Kategorie: Ruby, Sinatra

Lokalizowanie aplikacji webowych to dość popularne zjawisko. W Ruby on Rails od wersji chyba 2.0 lub ciut później możliwość internacjonalizacji zostaÅ‚a na staÅ‚e wÅ‚Ä…czona do frameworku. WczeÅ›niej byÅ‚o to osiÄ…galne przy użyciu różnych zewnÄ™trznych pluginów. Sinatra również dosponuje możliwoÅ›ciÄ… lokalizowania aplikacji.

Jest nam potrzebny gem sinatra-r18n

$ gem install sinatra-r18n

Następnie w katalogu naszej aplikacji tworzymy katalog i18n. Tam umieszczamy pliki językowe np. w formacie YAML. Przykładowa treść pliku en.yml może wyglądać następująco:

hello: "Hello world!"

Analogicznie np. pl.yml:

hello: "Witaj świecie!"

W gÅ‚ównym pliku aplikacji Sinatry dodajemy doÅ‚Ä…czenie gema sinatra-r18n:

require 'sinatra/r18n'

NastÄ™pnie dodajemy kod metody get, która bÄ™dzie przetwarzać okreÅ›lony widok w zależnoÅ›ci od przekazanego locale, np:

get '/:locale' do
  erb :locale_test_view
end

W widoku views/locale_test_view.erb generujemy lokalizowaną treść następująco:

t.hello

Oczywiście to wywołanie otaczamy tagami czyli:

<%= t.hello %>

Wówczas po wejÅ›ciu pod adres /en kod ten wygeneruje tekst "Hello world!" a pod /pl tekst "WItaj Å›wiecie!"

Możliwe jest wielowÄ™zÅ‚owe rozbudowanie struktury plików YAML, np:

hello:
  normal: "Hello world!"
  pirate: "Argh.. Ahoy mate!"

Wówczas kod w widoku generujÄ…cy ten tekst wyglÄ…da tak:

t.hello.normal # => "Hello world!"
t.hello.pirate # => "Argh.. Ahoy mate!"

Tak wyglÄ…da lokalizowanie Sinatry w dużym skrócie, oczywiÅ›cie w przypadku nieskomplikowanej aplikacji. Jak widać, jest to bardzo proste :-)