Screencast: Globalize3

Rails bringt bereits standardmäßig die Möglichkeit mit eine mehrsprachige Applikation zu bauen. Dazu werden Textbausteine in Yaml-Dateien erstellt und in der Applikation verwendet. Dies reicht in den meisten Fällen aus, aber ist nur bedingt geeignet um große und dynamisch erstellte Textmengen zu verwalten. Hier hat Globalize3 seine Stärken. Globalize3 ist ein Gem mit welchem mehrsprachige Texte in Datenbanken verwaltet werden kann. Es ist relativ einfach einzubinden und zu verwenden . Ryan zeigt in diesem Screencast wie es funktioniert.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

Gemfile

[ruby]
gem ‚globalize3‘
[/ruby]

terminal

[bash]
rails g migration create_article_translations
rake db:migrate
rails c
[/bash]

rails console

[ruby]
I18n.locale
Article.first.name
I18n.locale = :wk
Article.first.update_attribute(:name, "Ahhyya")
I18n.locale = :en
[/ruby]

db/migrate/create_article_translations.rb

[ruby]
class CreateArticleTranslations < ActiveRecord::Migration
def up
Article.create_translation_table!({
name: :string,
content: :text
}, {
migrate_data: true
})
end

def down
Article.drop_translation_table! migrate_data: true
end
end
[/ruby]

models/article.rb

[ruby]
translates :name, :content
[/ruby]

config/application.rb

[ruby]
config.i18n.fallbacks = true
[/ruby]

Screencast: Internationalisierung im Backend

Internationalisierung ist für viele Applikationen unerlässlich und Rails bringt bereits einiges mit um es zu umzusetzen. Jedoch können YAML Dateien unübersichtlich werden, wenn der Umfang sehr groß ist. Ryan zeigt diese Woche wie Redis für die Verwaltung von Übersetzungen, über ein Webinterface, eingesetzt werden kann.

 

Download:

Download(18 MB, 11:11)
Alternativer Download für iPod & Apple TV(18.3 MB, 11:11)

 

Resourcen:

 

Quellcode:

[bash]
rails g controller translations index
brew install redis
[/bash]

[ruby]
# Gemfile
gem ‚redis‘

# config/initializers/i18n_backend.rb
TRANSLATION_STORE = Redis.new
I18n.backend = I18n::Backend::Chain.new(I18n::Backend::KeyValue.new(TRANSLATION_STORE), I18n.backend)

# translations_controller.rb
def index
@translations = TRANSLATION_STORE
end

def create
I18n.backend.store_translations(params[:locale], {params[:key] => params[:value]}, :escape => false)
redirect_to translations_url, :notice => "Added translation"
end
[/ruby]

[html]
<!– home/index.html.erb –>
<h1><%= t "welcome" %></h1>

<!– translations/index.html.erb –>
<h1>Translations</h1>

<ul>
<% @translations.keys.each do |key| %>
<li><%= key %>: <%= @translations[key] %></li>
<% end %>
</ul>

<h2>Add Translation</h2>

<%= form_tag translations_path do %>
<p>
<%= label_tag :locale %><br />
<%= text_field_tag :locale %>
</p>
<p>
<%= label_tag :key %><br />
<%= text_field_tag :key %>
</p>
<p>
<%= label_tag :value %><br />
<%= text_field_tag :value %>
</p>
<p><%= submit_tag "Submit" %></p>
<% end %>
[/html]

[text]
# config/locales/en.yml
en:
welcome: "Welcome"
[/text]