INTERNATIONALIZATION FOR RUBY
https://lingohub.com MADE WITH BY LINGOHUB
RUBY i18n
INTERNATIONALIZATION FOR PLAIN RUBY: THE RUBY i18n GEM
− Ruby i18n allows translation and localization,interpolation of values to translations,
pluralization,customizable transliteration to ASCII, flexible defaults, bulk lookup,lambdas
as translation data, custom key/scope separator, and custom exception handlers.
− The gem is split in two parts:
− Public API
− Default backend
− YAML (.yml) or plain Ruby (.rb) files are used for storing translationsin SimpleStore,still
YAML is the preferred option among Ruby developers.
https://lingohub.com MADE WITH BY LINGOHUB
INTERNATIONALIZATION AND THE YAML RESOURCE FILE FORMAT
KEY FEATURES OF YAML
− Information is stored in key-value pairs delimited with colon ( : )
− Keys can be nested (scoped)
− i18n expects the root key to correspond to the locale of the content
− The “leaf key” has to have a value
− Values can be escaped
− Correct and consistent line indentation is important for preserving the key hierarchy
https://lingohub.com MADE WITH BY LINGOHUB
INTERNATIONALIZATION AND THE YAML RESOURCE FILE FORMAT
KEY FEATURES OF YAML
− Lines starting with a hash tag sign ( # ) preceded with any number of white-space are
ignored by the parser (treated as a comment)
− Place-holder syntax is: %{name}, where “name” can consist of multiple non-white-space
characters
− UTF-8 encoding is usually used for YAML resource files
https://lingohub.com MADE WITH BY LINGOHUB
EXAMPLE YAML FILE
https://lingohub.com MADE WITH BY LINGOHUB
INSTALLATION AND SETUP
1. gem installation
2. Change the directoryto the location
where the sample YAML file was saved
and start the irb (interactive ruby shell).
3. Check the current locale. (By default it
is English)
4. Changing it something else is easy.
gem  install  i18n
2.0.0p247  :001  >  require  ‘i18n’
=>  true
2.0.0p247  :002  >  I18n.locale
=>  :en
2.0.0p247  :003  >  I18n.locale  =  :de
=>  :de
https://lingohub.com MADE WITH BY LINGOHUB
TRANSALTION LOOKUP
− Lookup one of the phrases from our
YAML file example
− The translation is missing because we
haven’t loaded the file. Load all .yml and
.rb files in the current directory.
− Retry accessing the English translation
with the key ‘world’
2.0.0p247  :004  >  I18n.translate  :world,  
:scope  =>  ‘greetings.hello’
=>  “translation  missing:  en.hello.world”
2.0.0p247  :005  >  I18n.load_path  =  
Dir[‘./*.yml,  ‘./*.rb’]
=>  [“./en.yml”]
2.0.0p247  :006  >  I18n.translate  :world,  
:scope  =>  ‘greetings.hello’
=>  “Hello  world!”
https://lingohub.com MADE WITH BY LINGOHUB
TRANSALTION LOOKUP
− A local can also be explicitly passed
− When passing the phrase key, a symbol or
string can be used, and a scope can be an
array or dot-separated. Combinations of
them are valid too.
2.0.0p247   :007  >  I18n.translate   :world,  :scope  
=>  ‘greetings.hello’,   :locale  =>  :en
=>  “Hello  world!”
I18n.translate   ‘greetings.hello.world’
I18n.translate   ‘hello.world’,   :scope  =>  
:greetings
I18n.translate   ‘hello.world’,   :scope  =>  
‘greetings’
I18n.translate   :world,  :scope  =>  
‘greetings.hello’
I18n.translate   :world,  scope:  [:greetings,  
:hello]
https://lingohub.com MADE WITH BY LINGOHUB
TRANSALTION LOOKUP
− Translate the key :missing and the key
:also_missing
− Variables can be interpolated to the
translation
− Pass an array of keys to look up multiple
translations at once
− A key can translate to a hash of grouped
translations
2.0.0p247   :008  >  I18n.translate   :missing,  
default:  [:also_missing,   ‘Not  here’]
=>  ‘Not  here’
2.0.0p247   :009  >  I18n.translate   :user,  :scope  
=>  [:greetings,   :hello],  :user  =>  ‘Ela’
=>  “Hello  Ela!”
2.0.0p247   :010  >  I18n.translate   [:world,  
:friend],   :scope  =>  [:greetings,   :hello]
=>  [“Hello  World!”,  “Hello  Friend!”]
2.0.0p247   :011  >  I18n.translate   :hello,  :scope  
=>  [:greetings]   =>  {:world=>”Hello   World!”,  
:user=>”Hello   %{user}”,  :friend=>”Hello  
Friend!”}
https://lingohub.com MADE WITH BY LINGOHUB
PLUARLIZATION OPTION IN i18n FOR RUBY
− The i18n API providesa flexible
pluralization feature adaptingto the
different grammar of languages.
− The :count interpolation isinterpolated to
the translation and used to pick a
pluralization from the translations
2.0.0p247  :012  >  I18n.translate  :messages,  
:scope  =>  :inbox,  :count  =>  1
=>  “You  have  one  message  in  your  inbox.”
2.0.0p247  :013  >  I18n.translate  :messages,  
:scope  =>  :inbox,  :count  =>  39
=>  “You  have  39  messages  in  your  inbox.”
https://lingohub.com MADE WITH BY LINGOHUB
SETTING UP DATE AND TIME LOCALIZATION
− Pass the Time object to I18n.localize to
localize the time format. Pick a format by
passing the :format option
2.0.0p247  :014  >  I18n.localize  Time.now
=>  “Wed,  14  Aug  2013  13:34:49  +0200”
2.0.0p247  :015  >  I18n.localize  Time.now,  
:format  =>  :short
=>  “14  Aug  13:34”
https://lingohub.com MADE WITH BY LINGOHUB
⟶ Instead of I18n.localize,a shorter alias can be used: I18n.l.
i18n – THE DEFAULT INTERNATIONALIZATION SOLUTION FOR RUBY ON RAILS
− Ruby adds all .rb and .yml files from the config/locales directory to translations load path
automatically.
− By default, Rials expects that all the resource files are kept in config/locales.
− You can change some settings by overriding the defaults in application.rb
− Organize the resource files in subdirectories
− Set :de as the default locale
− Set :en, :de and :fr as available locales
https://lingohub.com MADE WITH BY LINGOHUB
Config.i18n.load_path  +=  
Dir[Rails.root.join(‘config/locales/**/*.{rb,ym
l}’]
config.i18n.default_locale  =  :de
Config.i18n.available_locales  =  [:en,  :de,  :fr]
PASSING THE LOCALE AS A QUERY PARAMETER WITHIN THE URL
− Set the locale in before_action in the
ApplicationController
− This requires passing the locale as a URL
query parameter and adding it to all the
links within the application.
− Rails comes with a helper method that
can be overridden
before_action :set_locale
Def set_locale
I18n.locale  =  params[:locale]  ||  
I18n.default_locale
end
#  app/controllers/application_controller.rb
def default_url_options(options={})
{  :locale  =>  I18n.locale  }
end
https://lingohub.com MADE WITH BY LINGOHUB
PASSING THE LOCALE AS A PART OF THE URL PATH
It is cleaner to have the locale information
at the beginning of the path instead of the
end:
http://localhost:3000/sr/ vs http://localhost:
3000/?locale=sr.
You can do so with the “over-riding
default_url_options”strategy. Just set up the
routes with the scoping option.
#  config/routes.rb
scope  “(:locale)”,  locale:  /en|sr/  do
resources  :books
end
https://lingohub.com MADE WITH BY LINGOHUB
PASSING THE LOCALE AS A DOMAIN NAME OR A SUBDOMAIN
− Setting the locale from the domain name
or subdomain makes the locale very
obvious and search engines like this
approach too.
− Do so by adding a before_action to the
ApplicationController.
before_action :set_locale
def set_locale
#extracting from the domain name
I18n.locale  =  extract_locale_from_tld ||  I18n.default_locale  
#extracting from subdomain:  
#I18n.locale  =  extract_locale_from_subdomain ||  I18n.default_locale  
end  
def extract_locale_from_tld
parsed_locale =  request.host.split('.').last
I18n.available_locales.include?(parsed_locale.to_sym)  ?  
parsed_locale :  nil
end  
def extract_locale_from_subdomain
parsed_locale =  request.subdomains.first
I18n.available_locales.include?(parsed_locale.to_sym)  ?  
parsed_locale :  nil
end
https://lingohub.com MADE WITH BY LINGOHUB
SETTING THE LOCALE FROM CLIENT-SUPPLIED INFORMATION
− Information other than the page URL can
be used to set the appropriate locale for
the current user.
− An example for a trivial implementation of
using an Accept-Language header
https://lingohub.com MADE WITH BY LINGOHUB
I18n.locale  =  current_user.locale
def set_locale
I18n.locale  =  
extract_locale_from_accept_language_header
end  
private  
def extract_locale_from_accept_language_header
request.env['HTTP_ACCEPT_LANGUAGE'].scan(/
^[a-­‐z]{2}/).first  
end
TRANSLATION LOOKUP AND DATE/TIME LOCALIZATION BY RUBY ON RAILS
Rails adds t (translate) and l (localize) helper
methods to controllers. They will catch
missing translationsand wrap the resulting
error message into a <span>.
#instead  of  I18n.translate  :hello
t  :hello
#instead  of  I18n.localize  Time.now
l Time.now
https://lingohub.com MADE WITH BY LINGOHUB
USING SAFE HTML TRANSLATIONS IN RUBY ON RAILS
− Keys with a ‘_html’ suffix and keys named
‘html’ are marked as HTML safe. Use
them without escaping.
#config/locales/en.yml
en:
welcome:  <b>welcome!</b>
hello_html:  <b>hello!</b>
title:
html:  <b>title!</b>
#  app/views/home/index.html.erb
<div><%=  t(‘welcome’)  %></div>
<div><%=  raw  t(‘welcome’)  %></div>
<div><%=  t(‘hello_html’)  %></div>
<div><%=  t(‘title.html’)  %></div>
https://lingohub.com MADE WITH BY LINGOHUB
TRANSLATION FOR ACTIVE RECORD MODELS
− Methods Model.model_name.human and
Model.human_attribute_name(attribute)
can be used to transparentlylook up
translationsfor model and attribute
names.
en:  
activerecord:
models:
user:  Dude
attributes:  
user:
login:  “Handle”
#  will  translate  User  
attribute  “login”  as  “Handle”
https://lingohub.com MADE WITH BY LINGOHUB
ERROR MESSAGE SCOPES
For example,if there is an ActiveRecord
model “User” that has the :presence
validation for :name, the key for the
message would be :blank. ActiveRecord will
look up for this key in several namespaces,
in this order:
activerecord.errors.models.[model_name].attr
ibutes.[attribute_name]
activerecord.errors.models.[model_name]
activerecord.errors.messages
errors.attributes.[attribute_name]
errors.messages
https://lingohub.com MADE WITH BY LINGOHUB
SENATRA AND PADRINO
https://lingohub.com MADE WITH BY LINGOHUB
I18n FOR
i18n FOR SINATRA
Set up Sinatra to use i18n gem for
internationalization
require  ‘i18n’
require  ’i18n/backend/fallbacks’
configure
I18n::Backend::Simple.send(:include,  
I18n::Backend::Fallbacks)
I18n.load_path,  Dir
[File.join(settings.root,  ‘locales’,  
‘*.yml’)]
I18n.backend.load_translations
end
https://lingohub.com MADE WITH BY LINGOHUB
i18n FOR SINATRA
before  ‘/:locale/*’   do
I18n.locale   =  params[:locale]
request.path_info =  ‘/’  +  
params[:splat   ]  [0]
end
before  do
if  (locale  =  
request.host.split(‘.’)[0])   !=  ‘www’
I18n.locale   =  locale
end
end
use  Rack::Locale
https://lingohub.com MADE WITH BY LINGOHUB
Passing the locale
− Specific URLs
− Dedicated subdomains
i18n FOR SINATRA
use  Rack::Locale
helpers   do
def t(*args)
I18n.t(*args)
end
def l(*args)
I18n.l(*args)
end
end
helpers   do
def find_template(views,   name,   engine,   &block)
I18n.fallbacks[I18n.locale].each   {  
|locale|  
super(views,  
“#{name}.#{locale}”,   engine,   &block)}
super(views,   name,   engine,   &block)
end
end
https://lingohub.com MADE WITH BY LINGOHUB
Passing the locale
− Browser preference (requires rack-
contrib)
i18n FOR PADRINO
Localization is fully supported in
− padrino-core (date formats, time formats etc.)
− padrino-admin (admin language, orm fields, orm errors, etc.)
− padrino-helpers(currency, percentage, precision,duration,etc.)
Setting up the default locale in config/boot.rb
https://lingohub.com MADE WITH BY LINGOHUB
Padrino.before_load do
I18n.locale  =  :en
end
BROUGHT TO YOU BY LINGOHUB
ANJA OBERMÜLLER
BUSINESS DEVELOPMENT& MARKETING AT
LINGOHUB
anja.obermueller@lingohub.com
@LingoHub
@anjaobermueller
Read the whole article.
https://lingohub.com MADE WITH BY LINGOHUB

Ruby i18n - internationalization for ruby

  • 1.
  • 2.
    INTERNATIONALIZATION FOR PLAINRUBY: THE RUBY i18n GEM − Ruby i18n allows translation and localization,interpolation of values to translations, pluralization,customizable transliteration to ASCII, flexible defaults, bulk lookup,lambdas as translation data, custom key/scope separator, and custom exception handlers. − The gem is split in two parts: − Public API − Default backend − YAML (.yml) or plain Ruby (.rb) files are used for storing translationsin SimpleStore,still YAML is the preferred option among Ruby developers. https://lingohub.com MADE WITH BY LINGOHUB
  • 3.
    INTERNATIONALIZATION AND THEYAML RESOURCE FILE FORMAT KEY FEATURES OF YAML − Information is stored in key-value pairs delimited with colon ( : ) − Keys can be nested (scoped) − i18n expects the root key to correspond to the locale of the content − The “leaf key” has to have a value − Values can be escaped − Correct and consistent line indentation is important for preserving the key hierarchy https://lingohub.com MADE WITH BY LINGOHUB
  • 4.
    INTERNATIONALIZATION AND THEYAML RESOURCE FILE FORMAT KEY FEATURES OF YAML − Lines starting with a hash tag sign ( # ) preceded with any number of white-space are ignored by the parser (treated as a comment) − Place-holder syntax is: %{name}, where “name” can consist of multiple non-white-space characters − UTF-8 encoding is usually used for YAML resource files https://lingohub.com MADE WITH BY LINGOHUB
  • 5.
  • 6.
    INSTALLATION AND SETUP 1.gem installation 2. Change the directoryto the location where the sample YAML file was saved and start the irb (interactive ruby shell). 3. Check the current locale. (By default it is English) 4. Changing it something else is easy. gem  install  i18n 2.0.0p247  :001  >  require  ‘i18n’ =>  true 2.0.0p247  :002  >  I18n.locale =>  :en 2.0.0p247  :003  >  I18n.locale  =  :de =>  :de https://lingohub.com MADE WITH BY LINGOHUB
  • 7.
    TRANSALTION LOOKUP − Lookupone of the phrases from our YAML file example − The translation is missing because we haven’t loaded the file. Load all .yml and .rb files in the current directory. − Retry accessing the English translation with the key ‘world’ 2.0.0p247  :004  >  I18n.translate  :world,   :scope  =>  ‘greetings.hello’ =>  “translation  missing:  en.hello.world” 2.0.0p247  :005  >  I18n.load_path  =   Dir[‘./*.yml,  ‘./*.rb’] =>  [“./en.yml”] 2.0.0p247  :006  >  I18n.translate  :world,   :scope  =>  ‘greetings.hello’ =>  “Hello  world!” https://lingohub.com MADE WITH BY LINGOHUB
  • 8.
    TRANSALTION LOOKUP − Alocal can also be explicitly passed − When passing the phrase key, a symbol or string can be used, and a scope can be an array or dot-separated. Combinations of them are valid too. 2.0.0p247   :007  >  I18n.translate   :world,  :scope   =>  ‘greetings.hello’,   :locale  =>  :en =>  “Hello  world!” I18n.translate   ‘greetings.hello.world’ I18n.translate   ‘hello.world’,   :scope  =>   :greetings I18n.translate   ‘hello.world’,   :scope  =>   ‘greetings’ I18n.translate   :world,  :scope  =>   ‘greetings.hello’ I18n.translate   :world,  scope:  [:greetings,   :hello] https://lingohub.com MADE WITH BY LINGOHUB
  • 9.
    TRANSALTION LOOKUP − Translatethe key :missing and the key :also_missing − Variables can be interpolated to the translation − Pass an array of keys to look up multiple translations at once − A key can translate to a hash of grouped translations 2.0.0p247   :008  >  I18n.translate   :missing,   default:  [:also_missing,   ‘Not  here’] =>  ‘Not  here’ 2.0.0p247   :009  >  I18n.translate   :user,  :scope   =>  [:greetings,   :hello],  :user  =>  ‘Ela’ =>  “Hello  Ela!” 2.0.0p247   :010  >  I18n.translate   [:world,   :friend],   :scope  =>  [:greetings,   :hello] =>  [“Hello  World!”,  “Hello  Friend!”] 2.0.0p247   :011  >  I18n.translate   :hello,  :scope   =>  [:greetings]   =>  {:world=>”Hello   World!”,   :user=>”Hello   %{user}”,  :friend=>”Hello   Friend!”} https://lingohub.com MADE WITH BY LINGOHUB
  • 10.
    PLUARLIZATION OPTION INi18n FOR RUBY − The i18n API providesa flexible pluralization feature adaptingto the different grammar of languages. − The :count interpolation isinterpolated to the translation and used to pick a pluralization from the translations 2.0.0p247  :012  >  I18n.translate  :messages,   :scope  =>  :inbox,  :count  =>  1 =>  “You  have  one  message  in  your  inbox.” 2.0.0p247  :013  >  I18n.translate  :messages,   :scope  =>  :inbox,  :count  =>  39 =>  “You  have  39  messages  in  your  inbox.” https://lingohub.com MADE WITH BY LINGOHUB
  • 11.
    SETTING UP DATEAND TIME LOCALIZATION − Pass the Time object to I18n.localize to localize the time format. Pick a format by passing the :format option 2.0.0p247  :014  >  I18n.localize  Time.now =>  “Wed,  14  Aug  2013  13:34:49  +0200” 2.0.0p247  :015  >  I18n.localize  Time.now,   :format  =>  :short =>  “14  Aug  13:34” https://lingohub.com MADE WITH BY LINGOHUB ⟶ Instead of I18n.localize,a shorter alias can be used: I18n.l.
  • 12.
    i18n – THEDEFAULT INTERNATIONALIZATION SOLUTION FOR RUBY ON RAILS − Ruby adds all .rb and .yml files from the config/locales directory to translations load path automatically. − By default, Rials expects that all the resource files are kept in config/locales. − You can change some settings by overriding the defaults in application.rb − Organize the resource files in subdirectories − Set :de as the default locale − Set :en, :de and :fr as available locales https://lingohub.com MADE WITH BY LINGOHUB Config.i18n.load_path  +=   Dir[Rails.root.join(‘config/locales/**/*.{rb,ym l}’] config.i18n.default_locale  =  :de Config.i18n.available_locales  =  [:en,  :de,  :fr]
  • 13.
    PASSING THE LOCALEAS A QUERY PARAMETER WITHIN THE URL − Set the locale in before_action in the ApplicationController − This requires passing the locale as a URL query parameter and adding it to all the links within the application. − Rails comes with a helper method that can be overridden before_action :set_locale Def set_locale I18n.locale  =  params[:locale]  ||   I18n.default_locale end #  app/controllers/application_controller.rb def default_url_options(options={}) {  :locale  =>  I18n.locale  } end https://lingohub.com MADE WITH BY LINGOHUB
  • 14.
    PASSING THE LOCALEAS A PART OF THE URL PATH It is cleaner to have the locale information at the beginning of the path instead of the end: http://localhost:3000/sr/ vs http://localhost: 3000/?locale=sr. You can do so with the “over-riding default_url_options”strategy. Just set up the routes with the scoping option. #  config/routes.rb scope  “(:locale)”,  locale:  /en|sr/  do resources  :books end https://lingohub.com MADE WITH BY LINGOHUB
  • 15.
    PASSING THE LOCALEAS A DOMAIN NAME OR A SUBDOMAIN − Setting the locale from the domain name or subdomain makes the locale very obvious and search engines like this approach too. − Do so by adding a before_action to the ApplicationController. before_action :set_locale def set_locale #extracting from the domain name I18n.locale  =  extract_locale_from_tld ||  I18n.default_locale   #extracting from subdomain:   #I18n.locale  =  extract_locale_from_subdomain ||  I18n.default_locale   end   def extract_locale_from_tld parsed_locale =  request.host.split('.').last I18n.available_locales.include?(parsed_locale.to_sym)  ?   parsed_locale :  nil end   def extract_locale_from_subdomain parsed_locale =  request.subdomains.first I18n.available_locales.include?(parsed_locale.to_sym)  ?   parsed_locale :  nil end https://lingohub.com MADE WITH BY LINGOHUB
  • 16.
    SETTING THE LOCALEFROM CLIENT-SUPPLIED INFORMATION − Information other than the page URL can be used to set the appropriate locale for the current user. − An example for a trivial implementation of using an Accept-Language header https://lingohub.com MADE WITH BY LINGOHUB I18n.locale  =  current_user.locale def set_locale I18n.locale  =   extract_locale_from_accept_language_header end   private   def extract_locale_from_accept_language_header request.env['HTTP_ACCEPT_LANGUAGE'].scan(/ ^[a-­‐z]{2}/).first   end
  • 17.
    TRANSLATION LOOKUP ANDDATE/TIME LOCALIZATION BY RUBY ON RAILS Rails adds t (translate) and l (localize) helper methods to controllers. They will catch missing translationsand wrap the resulting error message into a <span>. #instead  of  I18n.translate  :hello t  :hello #instead  of  I18n.localize  Time.now l Time.now https://lingohub.com MADE WITH BY LINGOHUB
  • 18.
    USING SAFE HTMLTRANSLATIONS IN RUBY ON RAILS − Keys with a ‘_html’ suffix and keys named ‘html’ are marked as HTML safe. Use them without escaping. #config/locales/en.yml en: welcome:  <b>welcome!</b> hello_html:  <b>hello!</b> title: html:  <b>title!</b> #  app/views/home/index.html.erb <div><%=  t(‘welcome’)  %></div> <div><%=  raw  t(‘welcome’)  %></div> <div><%=  t(‘hello_html’)  %></div> <div><%=  t(‘title.html’)  %></div> https://lingohub.com MADE WITH BY LINGOHUB
  • 19.
    TRANSLATION FOR ACTIVERECORD MODELS − Methods Model.model_name.human and Model.human_attribute_name(attribute) can be used to transparentlylook up translationsfor model and attribute names. en:   activerecord: models: user:  Dude attributes:   user: login:  “Handle” #  will  translate  User   attribute  “login”  as  “Handle” https://lingohub.com MADE WITH BY LINGOHUB
  • 20.
    ERROR MESSAGE SCOPES Forexample,if there is an ActiveRecord model “User” that has the :presence validation for :name, the key for the message would be :blank. ActiveRecord will look up for this key in several namespaces, in this order: activerecord.errors.models.[model_name].attr ibutes.[attribute_name] activerecord.errors.models.[model_name] activerecord.errors.messages errors.attributes.[attribute_name] errors.messages https://lingohub.com MADE WITH BY LINGOHUB
  • 21.
    SENATRA AND PADRINO https://lingohub.comMADE WITH BY LINGOHUB I18n FOR
  • 22.
    i18n FOR SINATRA Setup Sinatra to use i18n gem for internationalization require  ‘i18n’ require  ’i18n/backend/fallbacks’ configure I18n::Backend::Simple.send(:include,   I18n::Backend::Fallbacks) I18n.load_path,  Dir [File.join(settings.root,  ‘locales’,   ‘*.yml’)] I18n.backend.load_translations end https://lingohub.com MADE WITH BY LINGOHUB
  • 23.
    i18n FOR SINATRA before ‘/:locale/*’   do I18n.locale   =  params[:locale] request.path_info =  ‘/’  +   params[:splat   ]  [0] end before  do if  (locale  =   request.host.split(‘.’)[0])   !=  ‘www’ I18n.locale   =  locale end end use  Rack::Locale https://lingohub.com MADE WITH BY LINGOHUB Passing the locale − Specific URLs − Dedicated subdomains
  • 24.
    i18n FOR SINATRA use Rack::Locale helpers   do def t(*args) I18n.t(*args) end def l(*args) I18n.l(*args) end end helpers   do def find_template(views,   name,   engine,   &block) I18n.fallbacks[I18n.locale].each   {   |locale|   super(views,   “#{name}.#{locale}”,   engine,   &block)} super(views,   name,   engine,   &block) end end https://lingohub.com MADE WITH BY LINGOHUB Passing the locale − Browser preference (requires rack- contrib)
  • 25.
    i18n FOR PADRINO Localizationis fully supported in − padrino-core (date formats, time formats etc.) − padrino-admin (admin language, orm fields, orm errors, etc.) − padrino-helpers(currency, percentage, precision,duration,etc.) Setting up the default locale in config/boot.rb https://lingohub.com MADE WITH BY LINGOHUB Padrino.before_load do I18n.locale  =  :en end
  • 26.
    BROUGHT TO YOUBY LINGOHUB ANJA OBERMÜLLER BUSINESS DEVELOPMENT& MARKETING AT LINGOHUB anja.obermueller@lingohub.com @LingoHub @anjaobermueller Read the whole article. https://lingohub.com MADE WITH BY LINGOHUB