slug snippets

Transliteration with Rails

Tagged parameterize, rails, transliterate, slug  Languages ruby

List of common rules that provide transliteration of special characters. Uses the parameterize method provided by Rails:

# encoding: utf-8
rules = {
  "æ" => "ae",
  "ø" => "o",
  "Ø" => "O",
  "ñ" => "n", 
  "Ñ" => "N",
  "ä" => "a",
  "ö" => "o",
  "ü" => "u",
  "Ä" => "A",
  "Ö" => "O",
  "Ü" => "U",
  "À" => "A",
  "Á" => "A",
  "Â" => "A",
  "Ã" => "A",
  "Ä" => "A",
  "Å" => "A",
  "Æ" => "Ae",
  "Ç" => "C",
  "È" => "E",
  "É" => "E",
  "Ê" => "E",
  "Ë" => "E",
  "Ì" => "I",
  "Í" => "I",
  "Î" => "I",
  "Ï" => "I",
  "Ð" => "D",
  "Ñ" => "N",
  "Ò" => "O",
  "Ó" => "O",
  "Ô" => "O",
  "Õ" => "O",
  "Ö" => "O",
  "Ø" => "O",
  "Ù" => "U",
  "Ú" => "U",
  "Û" => "U",
  "Ü" => "U",
  "Ý" => "Y",
  "Þ" => "Th",
  "ß" => "ss",
  "à" => "a" ,
  "á" => "a",
  "â" => "a",
  "ã" => "a",
  "ä" => "a",
  "å" => "a",
  "æ" => "ae",
  "ç" => "c" ,
  "è" => "e",
  "é" => "e",
  "ê" => "e",
  "ë" => "e",
  "ì" => "i",
  "í" => "i",
  "î" => "i",
  "ï" => "i",
  "ð" => "d",
  "ñ" => "n",
  "ò" => "o",
  "ó" => "o",
  "ô" => "o",
  "õ" => "o",
  "ö" => "o",
  "ø" => "o",
  "ù" => "u",
  "ú" => "u",
  "û" => "u",
  "ü" => "u",
  "ý" => "y",
  "þ" => "th",
  "ÿ" => "y",
  "Ā" => "A",
  "Ă" => "A",
  "Ą" => "A",
  "Ć" => "C",
  "Ĉ" => "C",
  "Ċ" => "C",
  "Č" => "C",
  "Ď" => "D",
  "Đ" => "D",
  "Ē" => "E",
  "Ĕ" => "E",
  "Ė" => "E",
  "Ę" => "E",
  "Ě" => "E",
  "Ĝ" => "G",
  "Ğ" => "G",
  "Ġ" => "G",
  "Ģ" => "G",
  "Ĥ" => "H",
  "Ħ" => "H",
  "Ĩ" => "I",
  "Ī" => "I",
  "Ĭ" => "I",
  "Į" => "I",
  "İ" => "I",
  "IJ" => "Ij",
  "Ĵ" => "J",
  "Ķ" => "K",
  "Ĺ" => "L",
  "Ļ" => "L",
  "Ľ" => "L",
  "Ŀ" => "L",
  "Ł" => "L",
  "Ń" => "N",
  "Ņ" => "N",
  "Ň" => "N",
  "Ŋ" => "Ng",
  "Ō" => "O",
  "Ŏ" => "O",
  "Ő" => "O",
  "Œ" => "OE",
  "Ŕ" => "R",
  "Ŗ" => "R",
  "Ř" => "R",
  "Ś" => "S",
  "Ŝ" => "S",
  "Ş" => "S",
  "Š" => "S",
  "Ţ" => "T",
  "Ť" => "T",
  "Ŧ" => "T",
  "Ũ" => "U",
  "Ū" => "U",
  "Ŭ" => "U",
  "Ů" => "U",
  "Ű" => "U",
  "Ų" => "U",
  "Ŵ" => "W",
  "Ŷ" => "Y",
  "Ÿ" => "Y",
  "Ź" => "Z",
  "Ż" => "Z",
  "Ž" => "Z",
  "ā" => "a",
  "ă" => "a",
  "ą" => "a",
  "ć" => "c",
  "ĉ" => "c",
  "ċ" => "c",
  "č" => "c",
  "ď" => "d",
  "đ" => "d",
  "ē" => "e",
  "ĕ" => "e",
  "ė" => "e",
  "ę" => "e",
  "ě" => "e",
  "ĝ" => "g",
  "ğ" => "g",
  "ġ" => "g",
  "ģ" => "g",
  "ĥ" => "h",
  "ħ" => "h",
  "ĩ" => "i",
  "ī" => "i",
  "ĭ" => "i",
  "į" => "i",
  "ı" => "i",
  "ij" => "ij",
  "ĵ" => "j",
  "ķ" => "k",
  "ĸ" => "k",
  "ĺ" => "l",
  "ļ" => "l",
  "ľ" => "l",
  "ŀ" => "l",
  "ł" => "l",
  "ń" => "n",
  "ņ" => "n",
  "ň" => "n",
  "ʼn" => "n",
  "ŋ" => "ng",
  "ō" => "o",
  "ŏ" => "o",
  "ő" => "o",
  "œ" => "oe",
  "ŕ" => "r",
  "ŗ" => "r",
  "ř" => "r",
  "ś" => "s",
  "ŝ" => "s",
  "ş" => "s",
  "š" => "s",
  "ţ" => "t",
  "ť" => "t",
  "ŧ" => "t",
  "ũ" => "u",
  "ū" => "u",
  "ŭ" => "u",
  "ů" => "u",
  "ű" => "u",
  "ų" => "u",
  "ŵ" => "w",
  "ŷ" => "y",
  "ž" => "z",
  "ź" => "z",
  "ż" => "z"
}

[:fi, :sv, :en].each do |locale|
  I18n.backend.store_translations(locale, :i18n => {
     :transliterate => {
       :rule => rules
     }
  })
end

puts 'źåöé'.parameterize

Use it e.g. to create slugs:

module Slug
  extend self
  def to_slug(text)
    text.parameterize
  end
end

Slug.to_slug('åäö') => 'aao'