From e5ac0c0f59e2e00a2af2a39049e9e6d06b3acdbe Mon Sep 17 00:00:00 2001 From: miks Date: Thu, 8 May 2014 17:21:21 +0300 Subject: [PATCH] Add Georgian language support --- README.rdoc | 10 +++ .../i18n/locales/numbers.ka.yml | 23 ++++++ .../strategies/figures_converter/languages.rb | 1 + .../figures_converter/languages/ka.rb | 43 +++++++++++ lib/numbers_and_words/translations.rb | 1 + lib/numbers_and_words/translations/ka.rb | 72 ++++++++++++++++++ .../array/fixture_examples/ka.yml | 21 ++++++ .../integer/fixture_examples/ka.yml | 74 +++++++++++++++++++ 8 files changed, 245 insertions(+) create mode 100644 lib/numbers_and_words/i18n/locales/numbers.ka.yml create mode 100644 lib/numbers_and_words/strategies/figures_converter/languages/ka.rb create mode 100644 lib/numbers_and_words/translations/ka.rb create mode 100644 spec/numbers_and_words/array/fixture_examples/ka.yml create mode 100644 spec/numbers_and_words/integer/fixture_examples/ka.yml diff --git a/README.rdoc b/README.rdoc index b5ff6d26..648db8e6 100644 --- a/README.rdoc +++ b/README.rdoc @@ -25,6 +25,7 @@ Számok betűvel írva az I18n könyvtár segítségével. * Lietuvių [lt] * Latviešu [lv] * Eesti [et] +* ქართული (Georgian) [ka] * Türkçe** [tr] * Deutsch** [de] * Italiano** [it] @@ -68,6 +69,9 @@ Számok betűvel írva az I18n könyvtár segítségével. I18n.with_locale(:et) { 42.to_words } => "nelikümmend kaks" + I18n.with_locale(:ka) { 42.to_words } + => "ორმოცდაორი" + 21.to_words => "twenty-one" => "veintiuno" @@ -79,6 +83,7 @@ Számok betűvel írva az I18n könyvtár segítségével. => "divdesmit viens" => "kakskümmend üks" => "yirmi bir" + => "ოცდაერთი" => "einundzwanzig" => "ventiuno" => "éénentwintig" @@ -94,6 +99,7 @@ Számok betűvel írva az I18n könyvtár segítségével. => "du šimtai trisdešimt vienas" => "divi simti trīsdesmit viens" => "kakssada kolmkümmend üks" + => "ორას ოცდათერთმეტი" => "iki yüz otuz bir" => "zweihunderteinunddreißig" => "2 cento trentauno" @@ -110,6 +116,7 @@ Számok betűvel írva az I18n könyvtár segítségével. => "keturi tūkstančiai trisdešimt" => "četri tūkstoši trīsdesmit" => "neli tuhat kolmkümmend" + => "ოთხი ათას ოცდაათი" => "dört bin otuz" => "viertausenddreißig" => "quattro mille trenta" @@ -126,6 +133,7 @@ Számok betűvel írva az I18n könyvtár segítségével. => "milijonas šimtas" => "viens miljons simts" => "üks miljon ükssada" + => "ერთი მილიონ ასი" => "bir milyon bir yüz" => "eine Million einhundert" => "uno milione 1 cento" @@ -157,6 +165,7 @@ Számok betűvel írva az I18n könyvtár segítségével. => ["vienas", "du", "trys"] => ["viens", "divi", "trīs"] => ["üks", "kaks", "kolm"] + => ["ერთი", "ორი", "სამი"] [11, 22, 133].to_words => ["eleven", "twenty-two", "one hundred thirty-three"] @@ -168,6 +177,7 @@ Számok betűvel írva az I18n könyvtár segítségével. => ["vienuolika", "dvidešimt du", "šimtas trisdešimt trys"] => ["vienpadsmit", "divdesmit divi", "simtu trīsdesmit trīs"] => ["üksteist", "kakskümmend kaks", "ükssada kolmkümmend kolm"] + => ["თერთმეტი", "ოცდაორი", "ას ოცდაცამეტი"] => ["on bir", "yirmi iki", "bir yüz otuz üç"] => ["elf", "zweiundzwanzig", "einhundertdreiunddreißig"] => ["undici", "ventidue", "1 cento trentatre"] diff --git a/lib/numbers_and_words/i18n/locales/numbers.ka.yml b/lib/numbers_and_words/i18n/locales/numbers.ka.yml new file mode 100644 index 00000000..c7ae8af4 --- /dev/null +++ b/lib/numbers_and_words/i18n/locales/numbers.ka.yml @@ -0,0 +1,23 @@ +ka: + numbers: + ones: [ნული, ერთი, ორი, სამი, ოთხი, ხუთი, ექვსი, შვიდი, რვა, ცხრა] + teens: [ათი, თერთმეტი, თორმეტი, ცამეტი, თოთხმეტი, თხუთმეტი, თექვსმეტი, ჩვიდმეტი, თვრამეტი, ცხრამეტი] + tens: [ნული, ათი, ოცი, ოცდაათი, ორმოცი, ორმოცდაათი, სამოცი, სამოცდაათი, ოთხმოცი, ოთხმოცდაათი] + twenty: ოცი + forty: ორმოცი + sixty: სამოცი + eighty: ოთხმოცი + one_hundred: ასი + one_thousand: ათასი + one_million: მილიონი + one_billion: მილიარდი + partials: + ones: [ნული, ერთი, ორ, სამ, ოთხ, ხუთ, ექვს, შვიდ, რვა, ცხრა] + twenty: ოცდა + forty: ორმოცდა + sixty: სამოცდა + eighty: ოთხმოცდა + one_hundred: ას + one_thousand: ათას + one_million: მილიონ + one_billion: მილიარდ diff --git a/lib/numbers_and_words/strategies/figures_converter/languages.rb b/lib/numbers_and_words/strategies/figures_converter/languages.rb index df219dcb..140473e8 100644 --- a/lib/numbers_and_words/strategies/figures_converter/languages.rb +++ b/lib/numbers_and_words/strategies/figures_converter/languages.rb @@ -25,6 +25,7 @@ require 'numbers_and_words/strategies/figures_converter/languages/ua' require 'numbers_and_words/strategies/figures_converter/languages/pt' +require 'numbers_and_words/strategies/figures_converter/languages/ka' module NumbersAndWords module Strategies diff --git a/lib/numbers_and_words/strategies/figures_converter/languages/ka.rb b/lib/numbers_and_words/strategies/figures_converter/languages/ka.rb new file mode 100644 index 00000000..6025169d --- /dev/null +++ b/lib/numbers_and_words/strategies/figures_converter/languages/ka.rb @@ -0,0 +1,43 @@ +module NumbersAndWords + module Strategies + module FiguresConverter + module Languages + class Ka < Base + include Families::Latin + + private + + def capacity_iteration + words = [] + capacity_words = words_in_capacity(@current_capacity) + words.push(megs) unless capacity_words.empty? + words += capacity_words unless is_a_thousand? and is_a_one? + words + end + + def is_a_one? + [translations.ones(1)] == words_in_capacity(@current_capacity) + end + + def is_a_thousand? + FiguresArray::THOUSAND_CAPACITY == @current_capacity + end + + def hundreds + super({only_hundreds: figures[0, 2] == [0, 0]}) + end + + def megs + if @figures.hundreds || @figures.tens || @figures.ones + prefix = :partials + else + prefix = nil + end + + super(prefix: prefix) + end + end + end + end + end +end diff --git a/lib/numbers_and_words/translations.rb b/lib/numbers_and_words/translations.rb index eea4d571..c2e0ec62 100644 --- a/lib/numbers_and_words/translations.rb +++ b/lib/numbers_and_words/translations.rb @@ -19,6 +19,7 @@ require 'numbers_and_words/translations/lt' require 'numbers_and_words/translations/de' require 'numbers_and_words/translations/pt' +require 'numbers_and_words/translations/ka' module NumbersAndWords module Translations diff --git a/lib/numbers_and_words/translations/ka.rb b/lib/numbers_and_words/translations/ka.rb new file mode 100644 index 00000000..3db0bbd9 --- /dev/null +++ b/lib/numbers_and_words/translations/ka.rb @@ -0,0 +1,72 @@ +module NumbersAndWords + module Translations + class Ka < Base + include NumbersAndWords::Translations::Families::Latin + TENS_VIGESIMAL_RANGES = [ + { + range: Range.new(0, 4, true), + name: :twenty, + multiplicative: 2 + }, + { + range: Range.new(0, 6, true), + name: :forty, + multiplicative: 4 + }, + { + range: Range.new(0, 8, true), + name: :sixty, + multiplicative: 6 + }, + { + range: Range.new(0, 9, false), + name: :eighty, + multiplicative: 8 + }, + ] + + def vigesimal_range number + range = nil + TENS_VIGESIMAL_RANGES.each do|item| + if item[:range].include? number + range = item + break + end + end + + range + end + + def tens_with_ones numbers, options = {} + range = vigesimal_range(numbers[1]) + + if numbers[1] - range[:multiplicative] > 0 + minor = teens(numbers) + else + minor = ones(numbers[0]) + end + + [t([:partials, range[:name]].join('.')), minor].join '' + end + + def hundreds number, options = {} + options[:prefix] ||= (options[:only_hundreds] == true) ? nil : :partials + + parts = [t([options[:prefix], :one_hundred].join('.'))] + parts.unshift(ones(number, prefix: :partials)) if number > 1 + + parts.join '' + end + + def megs capacity, options = {} + if capacity == 1 + t([options[:prefix], :one_thousand].join('.')) + elsif capacity == 2 + t([options[:prefix], :one_million].join('.')) + elsif capacity == 3 + t([options[:prefix], :one_billion].join('.')) + end + end + end + end +end diff --git a/spec/numbers_and_words/array/fixture_examples/ka.yml b/spec/numbers_and_words/array/fixture_examples/ka.yml new file mode 100644 index 00000000..6255fb38 --- /dev/null +++ b/spec/numbers_and_words/array/fixture_examples/ka.yml @@ -0,0 +1,21 @@ +to_words: + simple_example: + ? + - 1 + - 2 + - 3 + : + - ერთი + - ორი + - სამი + complex_example: + ? + - 100 + - 101 + - 21 + - 13 + : + - ასი + - ას ერთი + - ოცდაერთი + - ცამეტი diff --git a/spec/numbers_and_words/integer/fixture_examples/ka.yml b/spec/numbers_and_words/integer/fixture_examples/ka.yml new file mode 100644 index 00000000..561d67d2 --- /dev/null +++ b/spec/numbers_and_words/integer/fixture_examples/ka.yml @@ -0,0 +1,74 @@ +to_words: + ones: + 0: ნული + 1: ერთი + 2: ორი + 3: სამი + 4: ოთხი + 5: ხუთი + 6: ექვსი + 7: შვიდი + 8: რვა + 9: ცხრა + teens: + 10: ათი + 11: თერთმეტი + 12: თორმეტი + 13: ცამეტი + 14: თოთხმეტი + 15: თხუთმეტი + 16: თექვსმეტი + 17: ჩვიდმეტი + 18: თვრამეტი + 19: ცხრამეტი + 20: ოცი + 21: ოცდაერთი + 22: ოცდაორი + 30: ოცდაათი + 31: ოცდათერთმეტი + 38: ოცდათვრამეტი + 39: ოცდაცხრამეტი + 40: ორმოცი + 42: ორმოცდაორი + 47: ორმოცდაშვიდი + 99: ოთხმოცდაცხრამეტი + hundreds: + 100: ასი + 101: ას ერთი + 102: ას ორი + 121: ას ოცდაერთი + 200: ორასი + 201: ორას ერთი + 250: ორას ორმოცდაათი + 300: სამასი + 310: სამას ათი + 415: ოთხას თხუთმეტი + 600: ექვსასი + 909: ცხრაას ცხრა + 999: ცხრაას ოთხმოცდაცხრამეტი + thousands: + 1000: ათასი + 1001: ათას ერთი + 2000: ორი ათასი + 2010: ორი ათას ათი + 7892: შვიდი ათას რვაას ოთხმოცდათორმეტი + 10000: ათი ათასი + 121000: ას ოცდაერთი ათასი + 121100: ას ოცდაერთი ათას ასი + 120000: ას ოცი ათასი + 124000: ას ოცდაოთხი ათასი + 999000: ცხრაას ოთხმოცდაცხრამეტი ათასი + 999900: ცხრაას ოთხმოცდაცხრამეტი ათას ცხრაასი + 999990: ცხრაას ოთხმოცდაცხრამეტი ათას ცხრაას ოთხმოცდაათი + 999999: ცხრაას ოთხმოცდაცხრამეტი ათას ცხრაას ოთხმოცდაცხრამეტი + millions: + 1000000: ერთი მილიონი + 2000000: ორი მილიონი + 999000999: ცხრაას ოთხმოცდაცხრამეტი მილიონ ცხრაას ოთხმოცდაცხრამეტი + 999999999: ცხრაას ოთხმოცდაცხრამეტი მილიონ ცხრაას ოთხმოცდაცხრამეტი ათას ცხრაას ოთხმოცდაცხრამეტი + billions: + 1174315110: ერთი მილიარდ ას სამოცდათოთხმეტი მილიონ სამას თხუთმეტი ათას ას ათი + 1174315119: ერთი მილიარდ ას სამოცდათოთხმეტი მილიონ სამას თხუთმეტი ათას ას ცხრამეტი + 15174315110: თხუთმეტი მილიარდ ას სამოცდათოთხმეტი მილიონ სამას თხუთმეტი ათას ას ათი + 35174315119: ოცდათხუთმეტი მილიარდ ას სამოცდათოთხმეტი მილიონ სამას თხუთმეტი ათას ას ცხრამეტი + 935174315119: ცხრაას ოცდათხუთმეტი მილიარდ ას სამოცდათოთხმეტი მილიონ სამას თხუთმეტი ათას ას ცხრამეტი