From dabf22a0c2193c87970de6ef267cb08450022589 Mon Sep 17 00:00:00 2001 From: J Potts Date: Sun, 25 Jun 2017 12:25:28 +0100 Subject: [PATCH 1/2] Adding support for Swedish --- README.markdown | 1 + lib/inflections.rb | 1 + lib/inflections/sv.rb | 93 +++++++++++++++++++++++++++++++++++++++++++ test/sv_test.rb | 68 +++++++++++++++++++++++++++++++ 4 files changed, 163 insertions(+) create mode 100644 lib/inflections/sv.rb create mode 100644 test/sv_test.rb diff --git a/README.markdown b/README.markdown index 3bea400..6f45530 100644 --- a/README.markdown +++ b/README.markdown @@ -11,6 +11,7 @@ Inflections is a repository containing non-English singularization and pluraliza * Brazilian Portugues (pt-BR) * Turkish (tr) * Italian (it) +* Swedish (sv) If you are fluent in a language not yet included in this gem, _please_ consider creating a list of inflections and submitting a pull request. diff --git a/lib/inflections.rb b/lib/inflections.rb index dbf406c..a9781ae 100644 --- a/lib/inflections.rb +++ b/lib/inflections.rb @@ -4,3 +4,4 @@ require 'inflections/nb' require 'inflections/tr' require 'inflections/pt-BR' +require 'inflections/sv' diff --git a/lib/inflections/sv.rb b/lib/inflections/sv.rb new file mode 100644 index 0000000..1838a18 --- /dev/null +++ b/lib/inflections/sv.rb @@ -0,0 +1,93 @@ +# encoding: utf-8 +# +# Swedish inflections +# +# Original rules by olabini - https://olabini.com/blog/2006/08/announcing-swedish-rails +# Adapted by richardjohansson - for https://github.com/mynewsdesk/swedish_pluralize +# +module Inflections + ActiveSupport::Inflector.inflections(:sv) do |inflect| + inflect.clear + + # --- Plural --- + + # -er + inflect.plural(/([tmnslpr])$/i, '\1er') # produkt, produkter + + # -or + inflect.plural(/a$/i, 'or') # flicka, flickor + + # -ar + inflect.plural(/e$/i, 'ar') # pojke, pojkar + inflect.plural(/g$/i, 'gar') + inflect.plural(/l$/i, 'lar') # bil, bilar + inflect.plural(/el$/i, 'lar') # fågel, fåglar + + # -er + inflect.plural(/kel$/i, 'kler') # muskel, muskler + inflect.plural(/tel$/i, 'tlar') # titel, titlar + + # -r + inflect.plural(/de$/i, 'der') # fiende, fiender + + # -n + inflect.plural(/le$/i, 'lem') # muskel, muskler + + inflect.plural(/ö$/i, 'ön') # frö, frön + inflect.plural(/ok$/i, 'öcker') # bok, böcker + inflect.plural(/um$/i, 'a') # faktum, fakta + inflect.plural(/o$/i, 'or') # sko, skor + inflect.plural(/s$/i, 'sor') # ros, rosor + inflect.plural(/man$/i, 'män') # man, män + inflect.plural(/mus$/i, 'möss') # mus, möss + inflect.plural(/d$/i, 'den') # huvud, huvuden + inflect.plural(/ad$/i, 'ader') + inflect.plural(/ne$/i, 'nen') # vittne, vittnen + inflect.plural(/and$/i, 'änder') # hand, händer + + # Own hack + inflect.plural(/i$/i, 'ier') # kategori, kategorier + + # --- Singular --- + + # -er + inflect.singular(/([tmnslpr])er$/i, '\1') # produkt, produkter + + # -or + inflect.singular(/or$/i, 'a') # flicka, flickor + + # -ar + inflect.singular(/mar$/i, 'me') + inflect.singular(/kar$/i, 'ke') # pojke, pojkar + inflect.singular(/gar$/i, 'g') + inflect.singular(/lar$/i, 'l') # bil, bilar + inflect.singular(/glar$/i, 'gel') # fågel, fåglar + + # -er + inflect.singular(/ler$/i, 'el') # muskel, muskler + + # -r + inflect.singular(/der$/i, 'de') # fiende, fiender + inflect.singular(/ader$/i, 'ad') + + # -n + inflect.singular(/kler$/i, 'kel') # muskel, muskler + inflect.singular(/tlar$/i, 'tel') # titel, titlar + + inflect.singular(/en$/i, 'e') # vittne, vittnen + inflect.singular(/ön$/i, 'ö') # frö, frön + inflect.singular(/öcker$/i, 'ok') # bok, böcker + inflect.singular(/a$/i, 'um') # faktum, fakta + inflect.singular(/män$/i, 'man') # man, män + inflect.singular(/möss$/i, 'mus') # mus, möss + inflect.singular(/den$/i, 'd') # huvud, huvuden + inflect.singular(/skor$/i, 'sko') # sko, skor + inflect.singular(/änder$/i, 'and') # hand, händer + inflect.singular(/sor$/i, 's') # ros, rosor + + # --- Uncountable --- + + inflect.uncountable %w(hus kar träd får brev namn nummer kön) + + end +end diff --git a/test/sv_test.rb b/test/sv_test.rb new file mode 100644 index 0000000..8708052 --- /dev/null +++ b/test/sv_test.rb @@ -0,0 +1,68 @@ +# encoding: utf-8 + +require 'test_helper' +require 'inflections/sv' + +class TestSwedishInflections < Minitest::Test + + def test_plural + assert_equal 'produkter', 'produkt'.pluralize(:sv) + assert_equal 'muskler', 'muskel'.pluralize(:sv) + assert_equal 'flickor', 'flicka'.pluralize(:sv) + assert_equal 'pojkar', 'pojke'.pluralize(:sv) + assert_equal 'fåglar', 'fågel'.pluralize(:sv) + assert_equal 'bilar', 'bil'.pluralize(:sv) + assert_equal 'titlar', 'titel'.pluralize(:sv) + assert_equal 'fiender', 'fiende'.pluralize(:sv) + assert_equal 'muskler', 'muskel'.pluralize(:sv) + assert_equal 'frön', 'frö'.pluralize(:sv) + assert_equal 'böcker', 'bok'.pluralize(:sv) + assert_equal 'fakta', 'faktum'.pluralize(:sv) + assert_equal 'skor', 'sko'.pluralize(:sv) + assert_equal 'händer', 'hand'.pluralize(:sv) + assert_equal 'rosor', 'ros'.pluralize(:sv) + assert_equal 'män', 'man'.pluralize(:sv) + assert_equal 'möss', 'mus'.pluralize(:sv) + assert_equal 'huvuden', 'huvud'.pluralize(:sv) + assert_equal 'vittnen', 'vittne'.pluralize(:sv) + assert_equal 'kategorier', 'kategori'.pluralize(:sv) + + # Time units + assert_equal 'minuter', 'minut'.pluralize(:sv) + assert_equal 'timmar', 'timme'.pluralize(:sv) + assert_equal 'dagar', 'dag'.pluralize(:sv) + assert_equal 'veckor', 'vecka'.pluralize(:sv) + assert_equal 'månader', 'månad'.pluralize(:sv) + end + + def test_singular + assert_equal 'flicka', 'flickor'.singularize(:sv) + assert_equal 'pojke', 'pojkar'.singularize(:sv) + assert_equal 'fågel', 'fåglar'.singularize(:sv) + assert_equal 'bil', 'bilar'.singularize(:sv) + assert_equal 'dag', 'dagar'.singularize(:sv) + assert_equal 'produkt', 'produkter'.singularize(:sv) + assert_equal 'muskel', 'muskler'.singularize(:sv) + assert_equal 'fiende', 'fiender'.singularize(:sv) + assert_equal 'muskel', 'muskler'.singularize(:sv) + assert_equal 'titel', 'titlar'.singularize(:sv) + assert_equal 'vittne', 'vittnen'.singularize(:sv) + assert_equal 'frö', 'frön'.singularize(:sv) + assert_equal 'bok', 'böcker'.singularize(:sv) + assert_equal 'faktum', 'fakta'.singularize(:sv) + assert_equal 'man', 'män'.singularize(:sv) + assert_equal 'mus', 'möss'.singularize(:sv) + assert_equal 'huvud', 'huvuden'.singularize(:sv) + assert_equal 'sko', 'skor'.singularize(:sv) + assert_equal 'hand', 'händer'.singularize(:sv) + assert_equal 'ros', 'rosor'.singularize(:sv) + + # Time units + assert_equal 'minut', 'minuter'.singularize(:sv) + assert_equal 'timme', 'timmar'.singularize(:sv) + assert_equal 'dag', 'dagar'.singularize(:sv) + assert_equal 'vecka', 'veckor'.singularize(:sv) + assert_equal 'månad', 'månader'.singularize(:sv) + end + +end From 540eedfced542e3064d010ec99ce40dd9a755de5 Mon Sep 17 00:00:00 2001 From: J Potts Date: Tue, 27 Jun 2017 12:52:38 +0100 Subject: [PATCH 2/2] Fixing comments and adding some tests --- lib/inflections/sv.rb | 12 ++++++------ test/sv_test.rb | 5 +++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/inflections/sv.rb b/lib/inflections/sv.rb index 1838a18..03725b9 100644 --- a/lib/inflections/sv.rb +++ b/lib/inflections/sv.rb @@ -31,7 +31,7 @@ module Inflections inflect.plural(/de$/i, 'der') # fiende, fiender # -n - inflect.plural(/le$/i, 'lem') # muskel, muskler + inflect.plural(/le$/i, 'len') # äpple, äpplen inflect.plural(/ö$/i, 'ön') # frö, frön inflect.plural(/ok$/i, 'öcker') # bok, böcker @@ -44,9 +44,8 @@ module Inflections inflect.plural(/ad$/i, 'ader') inflect.plural(/ne$/i, 'nen') # vittne, vittnen inflect.plural(/and$/i, 'änder') # hand, händer - - # Own hack inflect.plural(/i$/i, 'ier') # kategori, kategorier + inflect.plural(/mi$/i, 'min') # --- Singular --- @@ -71,10 +70,9 @@ module Inflections inflect.singular(/ader$/i, 'ad') # -n - inflect.singular(/kler$/i, 'kel') # muskel, muskler - inflect.singular(/tlar$/i, 'tel') # titel, titlar - inflect.singular(/en$/i, 'e') # vittne, vittnen + + inflect.singular(/tlar$/i, 'tel') # titel, titlar inflect.singular(/ön$/i, 'ö') # frö, frön inflect.singular(/öcker$/i, 'ok') # bok, böcker inflect.singular(/a$/i, 'um') # faktum, fakta @@ -84,6 +82,8 @@ module Inflections inflect.singular(/skor$/i, 'sko') # sko, skor inflect.singular(/änder$/i, 'and') # hand, händer inflect.singular(/sor$/i, 's') # ros, rosor + inflect.singular(/rier$/i, 'ri') + inflect.singular(/min$/i, 'mi') # --- Uncountable --- diff --git a/test/sv_test.rb b/test/sv_test.rb index 8708052..34026aa 100644 --- a/test/sv_test.rb +++ b/test/sv_test.rb @@ -26,6 +26,8 @@ def test_plural assert_equal 'huvuden', 'huvud'.pluralize(:sv) assert_equal 'vittnen', 'vittne'.pluralize(:sv) assert_equal 'kategorier', 'kategori'.pluralize(:sv) + assert_equal 'äpplen', 'äpple'.pluralize(:sv) + assert_equal 'suddgummin', 'suddgummi'.pluralize(:sv) # Time units assert_equal 'minuter', 'minut'.pluralize(:sv) @@ -56,6 +58,9 @@ def test_singular assert_equal 'sko', 'skor'.singularize(:sv) assert_equal 'hand', 'händer'.singularize(:sv) assert_equal 'ros', 'rosor'.singularize(:sv) + assert_equal 'kategori', 'kategorier'.singularize(:sv) + assert_equal 'äpple', 'äpplen'.singularize(:sv) + assert_equal 'suddgummi', 'suddgummin'.singularize(:sv) # Time units assert_equal 'minut', 'minuter'.singularize(:sv)