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