Commit c512c2109dff63f6ff6fe3518359192759640b15
1 parent
ba3df928
Exists in
staging
and in
42 other branches
ActionItem70: transliterating UTF-8 strings
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@518 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
2 changed files
with
50 additions
and
0 deletions
Show diff stats
| ... | ... | @@ -0,0 +1,39 @@ |
| 1 | +module Noosfero::Transliterations | |
| 2 | + | |
| 3 | + TRANSLATION = { | |
| 4 | + [ 'Á', 'À', 'À', 'Â', 'Ã', 'Ä' ] => 'A', | |
| 5 | + [ 'á', 'à', 'à', 'â', 'ã', 'ä', 'ª' ] => 'a', | |
| 6 | + [ 'É', 'È', 'Ê', 'Ë' ] => 'E', | |
| 7 | + [ 'é', 'è', 'ê', 'ë' ] => 'e', | |
| 8 | + [ 'Í', 'Ì', 'Î', 'Ï' ] => 'I', | |
| 9 | + [ 'í', 'ì', 'î', 'ï' ] => 'i', | |
| 10 | + [ 'Ó', 'Ò', 'Ô', 'Ö', 'Õ', 'º' ] => 'O', | |
| 11 | + [ 'ó', 'ò', 'ô', 'ö', 'õ', 'º' ] => 'o', | |
| 12 | + [ 'Ú', 'Ù', 'Û', 'Ü' ] => 'U', | |
| 13 | + [ 'ú', 'ù', 'û', 'ü' ] => 'u', | |
| 14 | + [ 'Ç' ] => 'C', | |
| 15 | + [ 'ç' ] => 'c', | |
| 16 | + [ 'Ñ' ] => 'N', | |
| 17 | + [ 'ñ' ] => 'n', | |
| 18 | + [ 'Ÿ' ] => 'Y', | |
| 19 | + [ 'ÿ' ] => 'y', | |
| 20 | + } | |
| 21 | + | |
| 22 | + # transliterate a string (assumed to be contain UTF-8 data) | |
| 23 | + # into ASCII by replacing non-ascii characters to their | |
| 24 | + # ASCII. | |
| 25 | + # | |
| 26 | + # The transliteration is, of course, lossy, and its performance is poor. | |
| 27 | + def transliterate | |
| 28 | + | |
| 29 | + new = self.clone | |
| 30 | + Noosfero::Transliterations::TRANSLATION.each { |from,to| | |
| 31 | + from.each { |seq| | |
| 32 | + new.gsub!(seq, to) | |
| 33 | + } | |
| 34 | + } | |
| 35 | + new | |
| 36 | + end | |
| 37 | +end | |
| 38 | + | |
| 39 | +String.send(:include, Noosfero::Transliterations) | ... | ... |
| ... | ... | @@ -0,0 +1,11 @@ |
| 1 | +require File.dirname(__FILE__) + '/../test_helper' | |
| 2 | +require 'noosfero/transliterations' | |
| 3 | + | |
| 4 | +class TransliterationsTest < Test::Unit::TestCase | |
| 5 | + | |
| 6 | + def test_should_transliterate | |
| 7 | + assert_equal 'eeeeEEOOoocaaaiIIiuuyYnN', 'éèëêÊËÖÔöôçäàâîÏÎïûüÿŸñÑ'.transliterate | |
| 8 | + end | |
| 9 | + | |
| 10 | + | |
| 11 | +end | ... | ... |