Method: I18n.transliterate

Defined in:
lib/active_support/vendor/i18n-0.4.1/i18n.rb

.transliterate(*args) ⇒ Object

Transliterates UTF-8 characters to ASCII. By default this method will transliterate only Latin strings to an ASCII approximation:

I18n.transliterate("Ærøskøbing")
# => "AEroskobing"

I18n.transliterate("日本語")
# => "???"

It’s also possible to add support for per-locale transliterations. I18n expects transliteration rules to be stored at i18n.transliterate.rule.

Transliteration rules can either be a Hash or a Proc. Procs must accept a single string argument. Hash rules inherit the default transliteration rules, while Procs do not.

Examples

Setting a Hash in <locale>.yml:

i18n:
  transliterate:
    rule:
      ü: "ue"
      ö: "oe"

Setting a Hash using Ruby:

store_translations(:de, :i18n => {
  :transliterate => {
    :rule => {
      "ü" => "ue",
      "ö" => "oe"
    }
  }
)

Setting a Proc:

translit = lambda {|string| MyTransliterator.transliterate(string) }
store_translations(:xx, :i18n => {:transliterate => {:rule => translit})

Transliterating strings:

I18n.locale = :en
I18n.transliterate("Jürgen") # => "Jurgen"
I18n.locale = :de
I18n.transliterate("Jürgen") # => "Juergen"
I18n.transliterate("Jürgen", :locale => :en) # => "Jurgen"
I18n.transliterate("Jürgen", :locale => :de) # => "Juergen"


215
216
217
218
219
220
221
222
223
224
225
# File 'lib/active_support/vendor/i18n-0.4.1/i18n.rb', line 215

def transliterate(*args)
  options      = args.pop if args.last.is_a?(Hash)
  key          = args.shift
  locale       = options && options.delete(:locale) || config.locale
  raises       = options && options.delete(:raise)
  replacement  = options && options.delete(:replacement)
  config.backend.transliterate(locale, key, replacement)
rescue I18n::ArgumentError => exception
  raise exception if raises
  handle_exception(exception, locale, key, options)
end