Commit c512c2109dff63f6ff6fe3518359192759640b15
1 parent
ba3df928
Exists in
master
and in
22 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 @@ | @@ -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 @@ | @@ -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 |