diff --git a/CHANGELOG.md b/CHANGELOG.md index 3739686c..9a762e23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### Features * Add support for Ruby 3.1. \[[#187](https://github.com/kslazarev/numbers_and_words/pull/187)\] * Drop support for Ruby 2.5. \[[#180](https://github.com/kslazarev/numbers_and_words/pull/180)\] + * Add polish language support \[[#189](https://github.com/kslazarev/numbers_and_words/pull/189)\] * Your contribution here. ## 0.11.11 (July 5, 2021) diff --git a/README.rdoc b/README.rdoc index 5b62c3b5..4f9a3247 100644 --- a/README.rdoc +++ b/README.rdoc @@ -19,6 +19,8 @@ Soletra números em vários idiomas utilizando a biblioteca I18n. Deletrea números en varios idiomas utilizando la gema I18n. +Przeliteruj liczby w kilku językach za pomocą gemu I18n. + == Supported Languages / Языки / Langues Supportées * English [en] @@ -42,6 +44,7 @@ Deletrea números en varios idiomas utilizando la gema I18n. * Português Brasileiro [pt-BR] * հայերեն (Armenian) [hy] * Қазақша [kz] +* Polish [pl] ** Experimental @@ -93,6 +96,9 @@ Deletrea números en varios idiomas utilizando la gema I18n. I18n.with_locale(:kz) { 42.to_words } => "қырық екi" + 18n.with_locale(:pl) { 42.to_words } + => "czterdzieści dwa" + 21.to_words => "twenty-one" => "veintiuno" @@ -114,6 +120,7 @@ Deletrea números en varios idiomas utilizando la gema I18n. => "hai mươi mốt" => "քսան մեկ" => "жиырма бiр" + => "dwadzieścia jeden" 231.to_words => "two hundred thirty-one" @@ -136,6 +143,7 @@ Deletrea números en varios idiomas utilizando la gema I18n. => "hai trăm ba mươi mốt" => "երկու հարյուր երեսուն մեկ" => "екi жүз отыз бiр" + => "dwieście trzydzieści jeden" 4030.to_words => "four thousand thirty" @@ -157,6 +165,7 @@ Deletrea números en varios idiomas utilizando la gema I18n. => "bốn nghìn không trăm ba mươi" => "չորս հազար երեսուն" => "төрт мың отыз" + => "cztery tysiące trzydzieści" 1000100.to_words => "one million one hundred" @@ -178,6 +187,7 @@ Deletrea números en varios idiomas utilizando la gema I18n. => "một triệu một trăm" => "մեկ միլիոն հարյուր" => "бiр миллион бiр жүз" + => "milion sto" 1000000000000000000000000000000000.to_words => "one decillion" @@ -196,6 +206,7 @@ Deletrea números en varios idiomas utilizando la gema I18n. => "en decillion" => "decilijon" => "бiр дециллион" + => "decylion" [1, 2, 3].to_words => ["one", "two", "three"] @@ -211,6 +222,7 @@ Deletrea números en varios idiomas utilizando la gema I18n. => ["một", "hai", "ba"] => ["մեկ", "երկու", "երեք"] => ["бiр", "екi", "үш"] + => ["jeden", "dwa", "trzy"] [11, 22, 133].to_words => ["eleven", "twenty-two", "one hundred thirty-three"] @@ -232,6 +244,7 @@ Deletrea números en varios idiomas utilizando la gema I18n. => ["mười một", "hai mươi hai", "một trăm ba mươi ba"] => ["տասնմեկ", "քսան երկու", "հարյուր երեսուն երեք"] => ["он бiр", "жиырма екi", "бiр жүз отыз үш"] + => ["jedenaście", "dwadzieścia dwa", "sto trzydzieści trzy"] 21.77.to_words => "twenty-one and seventy-seven hundredths" @@ -240,6 +253,7 @@ Deletrea números en varios idiomas utilizando la gema I18n. => "huszonegy egész hetvenhét század" => "twenty-one point seven seven" => "hai mươi mốt phẩy bảy mươi bảy" + => "dwadzieścia jeden" == Language options / Языковые опции @@ -300,13 +314,13 @@ Deletrea números en varios idiomas utilizando la gema I18n. Change gender form: (gender: [:female || :male || :neuter]) - I18n.with_locale(:'cs') { 1.to_words gender: :female } + I18n.with_locale(:cs) { 1.to_words gender: :female } => "jedna" - I18n.with_locale(:'cs') { 1.to_words gender: :male } + I18n.with_locale(:cs) { 1.to_words gender: :male } => "jeden" - I18n.with_locale(:'cs') { 1.to_words gender: :neuter } + I18n.with_locale(:cs) { 1.to_words gender: :neuter } => "jedno" Remove 'zero' from integral part of float: (remove_zero: [true || false]) @@ -353,6 +367,19 @@ Deletrea números en varios idiomas utilizando la gema I18n. I18n.with_locale(:es) { 0.7.to_words remove_zero: true } => "siete décimas" +* Polish + + Change gender form: (gender: [:female || :male || :neuter]) + + I18n.with_locale(:pl) { 1.to_words gender: :female } + => "jedna" + + I18n.with_locale(:pl) { 1.to_words gender: :male } + => "jeden" + + I18n.with_locale(:pl) { 1.to_words gender: :neuter } + => "jedno" + == Other options / Другие опции * Precision diff --git a/lib/numbers_and_words/i18n/locales/numbers.pl.yml b/lib/numbers_and_words/i18n/locales/numbers.pl.yml new file mode 100644 index 00000000..72013f0d --- /dev/null +++ b/lib/numbers_and_words/i18n/locales/numbers.pl.yml @@ -0,0 +1,92 @@ +pl: + numbers: + ones: [zero, jeden, dwa, trzy, cztery, pięć, sześć, siedem, osiem, dziewięć] + teens: [_, jedenaście, dwanaście, trzynaście, czternaście, piętnaście, szesnaście, siedemnaście, osiemnaście, dziewiętnaście] + tens: [_, dziesięć, dwadzieścia, trzydzieści, czterdzieści, pięćdziesiąt, sześćdziesiąt, siedemdziesiąt, osiemdziesiąt, dziewięćdziesiąt] + hundreds: [_, sto, dwieście, trzysta, czterysta, pięćset, sześćset, siedemset, osiemset, dziewięćset] + mega: [_, thousands, millions, billions, trillions, quadrillions, quintillions, sextillions, septillions, octillions] + thousands: + one: tysiąc + few: tysiące + many: tysięcy + millions: + one: milion + few: miliony + many: milionów + billions: + one: miliard + few: miliardy + many: miliardów + trillions: + one: bilion + few: biliony + many: bilionów + quadrillions: + one: biliard + few: biliardy + many: biliardów + quintillion: + one: trylion + few: tryliony + many: trylionów + sextillions: + one: tryliard + few: tryliardy + many: tryliardów + septillions: + one: sekstilion + few: sekstiliony + many: sekstilionów + octillions: + one: kvadriliarda + few: kvadriliardy + many: kvadriliard + ordinal: + ones: + male: [zerowy, pierwszy, drugi, trzeci, czwarty, pięty, szósty, siódmy, ósmy, dziewiąty] + female: [zerowa, pierwsza, druga, trzecia, czwarta, piąta, szósta, siódma, ósma, dziewiąta] + neuter: [zerowe, pierwsze, drugie, trzecie, czwarte, piąte, szóste, siódme, ósme, dziewiąte] + teens: + male: [_, jedenasty, dwunasty, trzynasty, czternasty, piętnasty, szesnasty, siedemnasty, osiemnasty] + female: [_, jedenasta, dwunasta, trzynasta, czternasta, piętnasta, szesnasta, siedemnasta, osiemnasta] + neuter: [_, jedenaste, dwunaste, trzynaste, czternaste, piętnaste, szesnaste, siedemnaste, osiemnaste] + tens: + male: [_, dwudziesty, trzydziesty, czterdziesty, pięćdziesiąty, sześćdziesiąty, siedemdziesiąty, osiemdziesiąty, dziewięcdziesiąty] + female: [_, dwudziesta, trzydziesta, czterdziesta, pięćdziesiąta, sześćdziesiąta, siedemdziesiąta, osiemdziesiąta, dziewięcdziesiąta] + neuter: [_, dwudzieste, trzydzieste, czterdzieste, pięćdziesiąte, sześćdziesiąte, siedemdziesiąte, osiemdziesiąte, dziewięcdziesiąte] + hundreds: + male: [_, setny, dwusetny, trzysetny, czterysetny, pięćsetny, sześćsetny, siedemsetny, osiemsetny, dziewięćsetny] + female: [_, setna, dwuseta, trzysetna, czterysetna, pięćsetna, sześćsetna, siedemsetna, osiemsetna, dziewięćsetna] + neuter: [_, setne, dwusete, trzysetne, czterysetne, pięćsetne, sześćsetne, siedemsetne, osiemsetne, dziewięćsetne] + integral: całych + micro: [_, tenths, hundredths, thousandths, millionths, billionths, trillionths] + tenths: + one: dziesiętna + few: dziesiętnych + many: dziesiętnych + hundredths: + one: setna + few: setnych + many: setnych + thousandths: + one: tysięczna + few: tysięcznych + many: tysięcznych + millionths: + one: milionowa + few: milionowych + many: milionowych + billionths: + one: miliardowa + few: miliardowych + many: miliardowych + trillionths: + one: bilionowa + few: bilionowych + many: bilionowych + micro_separator: '' + micro_prefix: + tens: dziesięć + hundreds: sto + union: '' + union: 'i' diff --git a/lib/numbers_and_words/i18n/pluralization.rb b/lib/numbers_and_words/i18n/pluralization.rb index 49984af7..0cfa0e09 100644 --- a/lib/numbers_and_words/i18n/pluralization.rb +++ b/lib/numbers_and_words/i18n/pluralization.rb @@ -6,6 +6,7 @@ require 'numbers_and_words/i18n/plurals/fr' require 'numbers_and_words/i18n/plurals/lv' require 'numbers_and_words/i18n/plurals/lt' +require 'numbers_and_words/i18n/plurals/pl' module NumbersAndWords module I18n diff --git a/lib/numbers_and_words/i18n/plurals/pl.rb b/lib/numbers_and_words/i18n/plurals/pl.rb new file mode 100644 index 00000000..d2220e2b --- /dev/null +++ b/lib/numbers_and_words/i18n/plurals/pl.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +module NumbersAndWords + module I18n + module Plurals + module Pl + module_function + + RULE = lambda do |number| + if one_conditions(number) + :one + elsif few_conditions(number) + :few + elsif many_conditions(number) + :many + else + :other + end + end + + def one_conditions(number) + number % 10 == 1 && number % 100 != 11 + end + + def few_conditions(number) + [2, 3, 4].include?(number % 10) && + ![12, 13, 14].include?(number % 100) + end + + def many_conditions(number) + (number % 10).zero? || + [5, 6, 7, 8, 9].include?(number % 10) || + [11, 12, 13, 14].include?(number % 100) + end + end + end + end +end diff --git a/lib/numbers_and_words/strategies/array_joiner/languages.rb b/lib/numbers_and_words/strategies/array_joiner/languages.rb index 5b029d5b..96b8d398 100644 --- a/lib/numbers_and_words/strategies/array_joiner/languages.rb +++ b/lib/numbers_and_words/strategies/array_joiner/languages.rb @@ -14,6 +14,7 @@ require 'numbers_and_words/strategies/array_joiner/languages/pt-BR' require 'numbers_and_words/strategies/array_joiner/languages/cs' require 'numbers_and_words/strategies/array_joiner/languages/vi' +require 'numbers_and_words/strategies/array_joiner/languages/pl' module NumbersAndWords module Strategies diff --git a/lib/numbers_and_words/strategies/array_joiner/languages/pl.rb b/lib/numbers_and_words/strategies/array_joiner/languages/pl.rb new file mode 100644 index 00000000..376d4410 --- /dev/null +++ b/lib/numbers_and_words/strategies/array_joiner/languages/pl.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module NumbersAndWords + module Strategies + module ArrayJoiner + module Languages + class Pl < Base + end + end + end + end +end diff --git a/lib/numbers_and_words/strategies/figures_converter/decorators.rb b/lib/numbers_and_words/strategies/figures_converter/decorators.rb index a9f2dddc..b909c55a 100644 --- a/lib/numbers_and_words/strategies/figures_converter/decorators.rb +++ b/lib/numbers_and_words/strategies/figures_converter/decorators.rb @@ -11,6 +11,7 @@ require 'numbers_and_words/strategies/figures_converter/decorators/ua' require 'numbers_and_words/strategies/figures_converter/decorators/cs' require 'numbers_and_words/strategies/figures_converter/decorators/vi' +require 'numbers_and_words/strategies/figures_converter/decorators/pl' module NumbersAndWords module Strategies diff --git a/lib/numbers_and_words/strategies/figures_converter/decorators/pl.rb b/lib/numbers_and_words/strategies/figures_converter/decorators/pl.rb new file mode 100644 index 00000000..97b000b0 --- /dev/null +++ b/lib/numbers_and_words/strategies/figures_converter/decorators/pl.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +require 'numbers_and_words/strategies/figures_converter/decorators/pl/base' +require 'numbers_and_words/strategies/figures_converter/decorators/pl/fractional' +require 'numbers_and_words/strategies/figures_converter/decorators/pl/integral' diff --git a/lib/numbers_and_words/strategies/figures_converter/decorators/pl/base.rb b/lib/numbers_and_words/strategies/figures_converter/decorators/pl/base.rb new file mode 100644 index 00000000..0e3b7106 --- /dev/null +++ b/lib/numbers_and_words/strategies/figures_converter/decorators/pl/base.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module NumbersAndWords + module Strategies + module FiguresConverter + module Decorators + module Pl + class Base < Decorators::Base + end + end + end + end + end +end diff --git a/lib/numbers_and_words/strategies/figures_converter/decorators/pl/fractional.rb b/lib/numbers_and_words/strategies/figures_converter/decorators/pl/fractional.rb new file mode 100644 index 00000000..39a26f42 --- /dev/null +++ b/lib/numbers_and_words/strategies/figures_converter/decorators/pl/fractional.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +module NumbersAndWords + module Strategies + module FiguresConverter + module Decorators + module Pl + class Fractional < Base + def run + @options[:gender] = :female + "#{super} #{fraction_significance}" + end + + private + + def fraction_significance + @strategy.translations.micros full_fraction.fraction_capacity, figures.reverse.join.to_i + end + + def full_fraction + (0..zero_length).inject(figures.clone) { |result, _el| result.unshift '0' }.to_figures + end + + def figures + @strategy.figures + end + + def zero_length + fraction_length - figures.length + end + + def fraction_length + @options[:fractional][:length].to_i + end + end + end + end + end + end +end diff --git a/lib/numbers_and_words/strategies/figures_converter/decorators/pl/integral.rb b/lib/numbers_and_words/strategies/figures_converter/decorators/pl/integral.rb new file mode 100644 index 00000000..7e881c8c --- /dev/null +++ b/lib/numbers_and_words/strategies/figures_converter/decorators/pl/integral.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module NumbersAndWords + module Strategies + module FiguresConverter + module Decorators + module Pl + class Integral < Base + def run + @options[:gender] = :female + [super, integral_significance].compact.join(' ') + end + + private + + def integral_significance + figs = figures.reverse.join.to_i + return nil if @options[:remove_zero] && figs.zero? + + @strategy.translations.integral figs + end + + def figures + @strategy.language.figures + end + end + end + end + end + end +end diff --git a/lib/numbers_and_words/strategies/figures_converter/languages.rb b/lib/numbers_and_words/strategies/figures_converter/languages.rb index cbcfee8d..4b1d510f 100644 --- a/lib/numbers_and_words/strategies/figures_converter/languages.rb +++ b/lib/numbers_and_words/strategies/figures_converter/languages.rb @@ -28,6 +28,7 @@ require 'numbers_and_words/strategies/figures_converter/languages/ru' require 'numbers_and_words/strategies/figures_converter/languages/ua' require 'numbers_and_words/strategies/figures_converter/languages/vi' +require 'numbers_and_words/strategies/figures_converter/languages/pl' module NumbersAndWords module Strategies diff --git a/lib/numbers_and_words/strategies/figures_converter/languages/pl.rb b/lib/numbers_and_words/strategies/figures_converter/languages/pl.rb new file mode 100644 index 00000000..4fcd9393 --- /dev/null +++ b/lib/numbers_and_words/strategies/figures_converter/languages/pl.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module NumbersAndWords + module Strategies + module FiguresConverter + module Languages + class Pl < Base + def megs + super({ number: @figures.number_in_capacity(@current_capacity) }) + end + + private + + def one? + words_in_capacity(@current_capacity) == [translations.ones(1)] + end + + def thousand? + FiguresArray::THOUSAND_CAPACITY == @current_capacity + end + end + end + end + end +end diff --git a/lib/numbers_and_words/translations.rb b/lib/numbers_and_words/translations.rb index c4c949fa..b1649fd4 100644 --- a/lib/numbers_and_words/translations.rb +++ b/lib/numbers_and_words/translations.rb @@ -27,6 +27,7 @@ require 'numbers_and_words/translations/vi' require 'numbers_and_words/translations/hy' require 'numbers_and_words/translations/kz' +require 'numbers_and_words/translations/pl' module NumbersAndWords module Translations diff --git a/lib/numbers_and_words/translations/pl.rb b/lib/numbers_and_words/translations/pl.rb new file mode 100644 index 00000000..69e12dae --- /dev/null +++ b/lib/numbers_and_words/translations/pl.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +module NumbersAndWords + module Translations + class Pl < Base + include NumbersAndWords::Translations::Families::Latin + include NumbersAndWords::Translations::Extensions::FractionSignificance + end + end +end diff --git a/lib/numbers_and_words/version.rb b/lib/numbers_and_words/version.rb index ca655a97..d65e47a5 100644 --- a/lib/numbers_and_words/version.rb +++ b/lib/numbers_and_words/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module NumbersAndWords - VERSION = '0.11.12' + VERSION = '0.11.11' end diff --git a/numbers_and_words.gemspec b/numbers_and_words.gemspec index 36645341..3488d9d9 100644 --- a/numbers_and_words.gemspec +++ b/numbers_and_words.gemspec @@ -52,6 +52,7 @@ Gem::Specification.new do |s| "lib/numbers_and_words/i18n/locales/numbers.tr.yml", "lib/numbers_and_words/i18n/locales/numbers.ua.yml", "lib/numbers_and_words/i18n/locales/numbers.vi.yml", + "lib/numbers_and_words/i18n/locales/numbers.pl.yml", "lib/numbers_and_words/i18n/pluralization.rb", "lib/numbers_and_words/i18n/plurals/cs.rb", "lib/numbers_and_words/i18n/plurals/fr.rb", @@ -60,6 +61,7 @@ Gem::Specification.new do |s| "lib/numbers_and_words/i18n/plurals/plurals.rb", "lib/numbers_and_words/i18n/plurals/ru.rb", "lib/numbers_and_words/i18n/plurals/ua.rb", + "lib/numbers_and_words/i18n/plurals/pl.rb", "lib/numbers_and_words/strategies.rb", "lib/numbers_and_words/strategies/array_joiner.rb", "lib/numbers_and_words/strategies/array_joiner/languages.rb", @@ -75,6 +77,7 @@ Gem::Specification.new do |s| "lib/numbers_and_words/strategies/array_joiner/languages/ru.rb", "lib/numbers_and_words/strategies/array_joiner/languages/ua.rb", "lib/numbers_and_words/strategies/array_joiner/languages/vi.rb", + "lib/numbers_and_words/strategies/array_joiner/languages/pl.rb", "lib/numbers_and_words/strategies/figures_converter.rb", "lib/numbers_and_words/strategies/figures_converter/decorators.rb", "lib/numbers_and_words/strategies/figures_converter/decorators/base.rb", @@ -118,6 +121,10 @@ Gem::Specification.new do |s| "lib/numbers_and_words/strategies/figures_converter/decorators/vi/base.rb", "lib/numbers_and_words/strategies/figures_converter/decorators/vi/fractional.rb", "lib/numbers_and_words/strategies/figures_converter/decorators/vi/integral.rb", + "lib/numbers_and_words/strategies/figures_converter/decorators/vi.rb", + "lib/numbers_and_words/strategies/figures_converter/decorators/pl/base.rb", + "lib/numbers_and_words/strategies/figures_converter/decorators/pl/fractional.rb", + "lib/numbers_and_words/strategies/figures_converter/decorators/pl/integral.rb", "lib/numbers_and_words/strategies/figures_converter/languages.rb", "lib/numbers_and_words/strategies/figures_converter/languages/base.rb", "lib/numbers_and_words/strategies/figures_converter/languages/cs.rb", @@ -145,6 +152,7 @@ Gem::Specification.new do |s| "lib/numbers_and_words/strategies/figures_converter/languages/tr.rb", "lib/numbers_and_words/strategies/figures_converter/languages/ua.rb", "lib/numbers_and_words/strategies/figures_converter/languages/vi.rb", + "lib/numbers_and_words/strategies/figures_converter/languages/pl.rb", "lib/numbers_and_words/strategies/figures_converter/options.rb", "lib/numbers_and_words/strategies/figures_converter/options/base.rb", "lib/numbers_and_words/strategies/figures_converter/options/base/gender.rb", @@ -208,6 +216,7 @@ Gem::Specification.new do |s| "lib/numbers_and_words/translations/tr.rb", "lib/numbers_and_words/translations/ua.rb", "lib/numbers_and_words/translations/vi.rb", + "lib/numbers_and_words/translations/pl.rb", "lib/numbers_and_words/version.rb", "lib/numbers_and_words/wrappers.rb", "lib/numbers_and_words/wrappers/float.rb", diff --git a/spec/numbers_and_words/array/fixture_examples/pl.yml b/spec/numbers_and_words/array/fixture_examples/pl.yml new file mode 100644 index 00000000..a2828111 --- /dev/null +++ b/spec/numbers_and_words/array/fixture_examples/pl.yml @@ -0,0 +1,32 @@ +to_words: + simple_example: + ? + - 1 + - 2 + - 3 + : + - jeden + - dwa + - trzy + complex_example: + ? + - 1001 + - 101 + - 21 + - 13 + : + - tysiąc jeden + - sto jeden + - dwadzieścia jeden + - trzynaście + complex_example_with_options: + options: + :remove_zero: true + ? + - 0.1 + - 0.31 + - 0.12 + : + - jedna dziesiętna + - trzydzieści i jedna setna + - dwanaście setnych diff --git a/spec/numbers_and_words/float/fixture_examples/pl.yml b/spec/numbers_and_words/float/fixture_examples/pl.yml new file mode 100644 index 00000000..776ab884 --- /dev/null +++ b/spec/numbers_and_words/float/fixture_examples/pl.yml @@ -0,0 +1,19 @@ +to_words: + fractional: + 0.1: jedna dziesiąta + 0.7: siedem dziesiątych + 0.01: jedna setna + 0.77: siedemdesąt siedem setnych + 0.777: siedemset siedemdesąt siedem tysięcznych + 0.7777: siedem tysięcy siedemset siedemdesąt siedem dziesięciotysięcznych + 0.21021: nula celých dvacet jeden tisíc dvacet jedna stotisícina + 0.293517431: zero dwa biliony dziewięćset trzydzieści pięć miliardów sto siedemdziesiąt cztery miliony trzysta piętnaście tysięcy sto dziewiętnaście dziesięciobilionowych + 21.77: dwadzieścia jeden całych i siedemdesąt siedem setnych + 111.999: sto jedenaście całych dziewięćset dziewięćdziesiąt dziewięć tysięcznych + 4242.7463: cztery tysiące dwieście czterdzieści dwa całych i siedem tysięcy czterysta sześćdziesiąt trzy dziesięciotysięcznych + fractions_without_zero: + options: + :remove_zero: true + 0.1: jedna dziesiąta + 0.7: siedem dziesiątych + 42.1: czterdzieści dwie całe i jedna dziesiąta diff --git a/spec/numbers_and_words/i18n/pluralization/pl_spec.rb b/spec/numbers_and_words/i18n/pluralization/pl_spec.rb new file mode 100644 index 00000000..daa48dc7 --- /dev/null +++ b/spec/numbers_and_words/i18n/pluralization/pl_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe I18n, '#pl' do + it 'pluralizes correctly' do + hash = {} + %w[one few many other].each { |key| hash[key.to_sym] = key } + + expect(described_class.backend.send(:pluralize, :pl, hash, 1)).to eq('one') + expect(described_class.backend.send(:pluralize, :pl, hash, 2)).to eq('few') + expect(described_class.backend.send(:pluralize, :pl, hash, 3)).to eq('few') + expect(described_class.backend.send(:pluralize, :pl, hash, 5)).to eq('many') + expect(described_class.backend.send(:pluralize, :pl, hash, 10)).to eq('many') + expect(described_class.backend.send(:pluralize, :pl, hash, 11)).to eq('many') + expect(described_class.backend.send(:pluralize, :pl, hash, 21)).to eq('one') + expect(described_class.backend.send(:pluralize, :pl, hash, 29)).to eq('many') + expect(described_class.backend.send(:pluralize, :pl, hash, 52)).to eq('few') + expect(described_class.backend.send(:pluralize, :pl, hash, 131)).to eq('one') + expect(described_class.backend.send(:pluralize, :pl, hash, 1.31)).to eq('other') + expect(described_class.backend.send(:pluralize, :pl, hash, 2.31)).to eq('other') + expect(described_class.backend.send(:pluralize, :pl, hash, 3.31)).to eq('other') + end +end diff --git a/spec/numbers_and_words/integer/fixture_examples/pl.yml b/spec/numbers_and_words/integer/fixture_examples/pl.yml new file mode 100644 index 00000000..1b035779 --- /dev/null +++ b/spec/numbers_and_words/integer/fixture_examples/pl.yml @@ -0,0 +1,144 @@ +to_words: + ones: + 0: zero + 1: jeden + 2: dwa + 3: trzy + 4: cztery + 5: pięć + 6: sześć + 7: siedem + 8: osiem + 9: dziewięć + "female ones": + options: + :gender: female + 0: zero + 1: jedna + 2: dwie + 3: trzy + 4: cztery + 5: pięć + 6: sześć + 7: siedem + 8: osiem + 9: dziewięć + "male ones": + options: + :gender: male + 0: zero + 1: jeden + 2: dwa + 3: trzy + 4: cztery + 5: pięć + 6: sześć + 7: siedem + 8: osiem + 9: dziewięć + "neuter ones": + options: + :gender: neuter + 0: zero + 1: jedno + 2: dwa + 3: trzy + 4: cztery + 5: pięć + 6: sześć + 7: siedem + 8: osiem + 9: dziewięć + teens: + 10: dziesięć + 11: jedenaście + 19: dziewiętnaście + 20: dwadzieścia + 21: dwadzieścia jeden + 80: osiemdziesiąt + 90: dziewięćdziesiąt + 99: dziewięćdziesiąt dziewięć + hundreds: + 100: sto + 101: sto jeden + 111: sto jedenaście + 120: sto dwadzieścia + 121: sto dwadzieścia jeden + 900: dziewięćset + 909: dziewięćset dziewięć + 919: dziewięćset dziewiętnaście + 990: dziewięćset dziewięćdziesiąt + 999: dziewięćset dziewięćdziesiąt dziewięć + thousands: + 1_000: tysiąc + 2_000: dwa tysiące + 4_000: cztery tysiące + 5_000: pięć tysięcy + 11_000: jedenaście tysięcy + 21_000: dwadzieścia jeden tysięcy + 21_345: dwadzieścia jeden tysięcy trzysta czterdzieści pięć + 999_999: dziewięćset dziewięćdziesiąt dziewięć tysięcy dziewięćset dziewięćdziesiąt dziewięć + miliony: + 1_000_000: milion + 2_000_000: dwa miliony + 4_000_000: cztery miliony + 5_000_000: pięć milionów + 999_000_000: dziewięćset dziewięćdziesiąt dziewięć milionów + 999_000_999: dziewięćset dziewięćdziesiąt dziewięć milionów dziewięćset dziewięćdziesiąt dziewięć + 999_999_000: dziewięćset dziewięćdziesiąt dziewięć milionów dziewięćset dziewięćdziesiąt dziewięć tysięcy + 999_999_999: dziewięćset dziewięćdziesiąt dziewięć milionów dziewięćset dziewięćdziesiąt dziewięć tysięcy dziewięćset dziewięćdziesiąt dziewięć + 123_456_789: sto dwadzieścia trzy miliony czterysta pięćdziesiąt sześć tysięcy siedemset osiemdziesiąt dziewięć + miliardy: + 1_174_315_110: miliard sto siedemdziesiąt cztery miliony trzysta pięćdziesiąt jeden tysięcy sto dziesięć + 35_568_717_692: trzydzieści pięć miliardów pięcset sześćdziesiąt osiem milionów siedemset siedemnaście tysięcy sześćset dziewięćdziesiąt dwa + biliony: + 2_935_174_315_119: dwa biliony dziewięćset trzydzieści pięć miliardów sto siedemdziesiąt cztery miliony trzysta piętnaście tysięcy sto dziewiętnaście + + "male ordinals": + options: + :ordinal: true + :gender: male + 0: zerowy + 1: pierwszy + 2: drugi + 3: trzeci + 4: czwarty + 5: piąty + 6: szósty + 7: siódmy + 8: ósmy + 9: dziewiąty + 10: dziesiąty + 11: jedenasty + 12: dwunasty + 13: trzynasty + 14: czternasty + 15: piętnasty + 16: szesnasty + 17: siedemnasty + 18: osiemnasty + 19: dziewiętnasty + 20: dwudziesty + 30: trzydziesty + 40: czterdziesty + 50: pięćdziesiąty + 60: sześćdziesiąty + 70: siedemdziesiąty + 80: osiemdziesiąty + 90: dziewięćdziesiąty + 100: setny + 21: dwudziesty pierwszy + 42: czterdziesty drugi + 133: sto trzydziesty trzeci + + "female ordinals": + options: + :ordinal: true + :gender: female + 2: druga + 3: trzecia + 8: ósma + 18: osiemnasta + 36: trzydziesta szósta + 100: setna + 999: dziewięćset dziewięćdziesiąta dziewiąta diff --git a/spec/numbers_and_words/numbers_and_words_spec.rb b/spec/numbers_and_words/numbers_and_words_spec.rb index d4b4667a..7281faca 100644 --- a/spec/numbers_and_words/numbers_and_words_spec.rb +++ b/spec/numbers_and_words/numbers_and_words_spec.rb @@ -15,7 +15,7 @@ end end -FLOAT_CAPABLE_LANGUAGES = %i[cs en-GB en es fr hu pt-BR ru ua vi].freeze +FLOAT_CAPABLE_LANGUAGES = %i[cs en-GB en es fr hu pt-BR ru ua vi pl].freeze [Float].each do |type| describe type do FLOAT_CAPABLE_LANGUAGES.each do |locale|