diff --git a/lib/noosfero/transliterations.rb b/lib/noosfero/transliterations.rb new file mode 100644 index 0000000..7456234 --- /dev/null +++ b/lib/noosfero/transliterations.rb @@ -0,0 +1,39 @@ +module Noosfero::Transliterations + + TRANSLATION = { + [ 'Á', 'À', 'À', 'Â', 'Ã', 'Ä' ] => 'A', + [ 'á', 'à', 'à', 'â', 'ã', 'ä', 'ª' ] => 'a', + [ 'É', 'È', 'Ê', 'Ë' ] => 'E', + [ 'é', 'è', 'ê', 'ë' ] => 'e', + [ 'Í', 'Ì', 'Î', 'Ï' ] => 'I', + [ 'í', 'ì', 'î', 'ï' ] => 'i', + [ 'Ó', 'Ò', 'Ô', 'Ö', 'Õ', 'º' ] => 'O', + [ 'ó', 'ò', 'ô', 'ö', 'õ', 'º' ] => 'o', + [ 'Ú', 'Ù', 'Û', 'Ü' ] => 'U', + [ 'ú', 'ù', 'û', 'ü' ] => 'u', + [ 'Ç' ] => 'C', + [ 'ç' ] => 'c', + [ 'Ñ' ] => 'N', + [ 'ñ' ] => 'n', + [ 'Ÿ' ] => 'Y', + [ 'ÿ' ] => 'y', + } + + # transliterate a string (assumed to be contain UTF-8 data) + # into ASCII by replacing non-ascii characters to their + # ASCII. + # + # The transliteration is, of course, lossy, and its performance is poor. + def transliterate + + new = self.clone + Noosfero::Transliterations::TRANSLATION.each { |from,to| + from.each { |seq| + new.gsub!(seq, to) + } + } + new + end +end + +String.send(:include, Noosfero::Transliterations) diff --git a/test/unit/transliterations_test.rb b/test/unit/transliterations_test.rb new file mode 100644 index 0000000..c4e3eea --- /dev/null +++ b/test/unit/transliterations_test.rb @@ -0,0 +1,11 @@ +require File.dirname(__FILE__) + '/../test_helper' +require 'noosfero/transliterations' + +class TransliterationsTest < Test::Unit::TestCase + + def test_should_transliterate + assert_equal 'eeeeEEOOoocaaaiIIiuuyYnN', 'éèëêÊËÖÔöôçäàâîÏÎïûüÿŸñÑ'.transliterate + end + + +end -- libgit2 0.21.2