Skip to content

Commit

Permalink
#54. Support fractional form for Ukranian.
Browse files Browse the repository at this point in the history
  • Loading branch information
kslazarev committed Mar 17, 2013
1 parent 8446500 commit 8ef1039
Show file tree
Hide file tree
Showing 10 changed files with 126 additions and 13 deletions.
20 changes: 10 additions & 10 deletions lib/numbers_and_words/i18n/locales/numbers.ua.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,22 @@ ua:
numbers:
ones: {
male: [нуль, один, два, три, чотири, п’ять, шiсть, сiм, вiсiм, дев’ять],
female: [нуль, однa, двi, три, чотири, п’ять, шiсть, сiм, вiсiм, дев’ять],
neuter: [нуль, однe, два, три, чотири, п’ять, шiсть, сiм, вiсiм, дев’ять],
female: [нуль, одна, двi, три, чотири, п’ять, шiсть, сiм, вiсiм, дев’ять],
neuter: [нуль, одне, два, три, чотири, п’ять, шiсть, сiм, вiсiм, дев’ять],
}
teens: [десять, одинадцять, дванадцять, тринадцять, чотирнадцять, п’ятнадцять, шiстнадцять, сiмнадцять, вiсiмнадцять, дев’ятнадцять]
tens: [нуль, десять, двадцять, тридцять, сорок, п’ятдесят, шiстдесят, сiмдесят, вiсiмдесят, дев’яносто]
hundreds: [нуль, сто, двiстi, триста, чотириста, п’ятсот, шiстсот, сiмсот, вiсiмсот, дев’ятсот]
fraction_separator: 'и'
union: 'i'
micro:
one: [_, десятая, сотая, тысячная, миллионная, миллиардная, триллионная]
few: [_, десятых, сотых, тысячных, миллионных, миллиардных, триллионных]
many: [_, десятых, сотых, тысячных, миллионных, миллиардных, триллионных]
one: [_, десята, сота, тысячна, мiльйонна, мiльярдна, трильйонна]
few: [_, десятих, сотих, тисячних, мiльйонних, мiльярдних, трильйонних]
many: [_, десятих, сотих, тисячних, мiльйонних, мiльярдних, трильйонних]
sub_micro: [_, десяти, сто]
integral_word:
one: целая
few: целых
many: целых
integral:
one: цiла
few: цiлих
many: цiлих
thousands:
one: тисяча
few: тисячi
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
require 'numbers_and_words/strategies/figures_converter/decorators/en'
require 'numbers_and_words/strategies/figures_converter/decorators/ru'
require 'numbers_and_words/strategies/figures_converter/decorators/hu'
require 'numbers_and_words/strategies/figures_converter/decorators/ua'

module NumbersAndWords
module Strategies
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
require 'numbers_and_words/strategies/figures_converter/decorators/ua/base'
require 'numbers_and_words/strategies/figures_converter/decorators/ua/fractional'
require 'numbers_and_words/strategies/figures_converter/decorators/ua/integral'
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module NumbersAndWords
module Strategies
module FiguresConverter
module Decorators
module Ua
class Base < Decorators::Base
end
end
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
module NumbersAndWords
module Strategies
module FiguresConverter
module Decorators
module Ua
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| 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
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
module NumbersAndWords
module Strategies
module FiguresConverter
module Decorators
module Ua
class Integral < Base

def run
@options[:gender] = :female
"#{super} #{integral_significance}"
end

private

def integral_significance
@strategy.translations.integral figures.reverse.join.to_i
end

def figures
@strategy.language.figures
end
end
end
end
end
end
end
14 changes: 14 additions & 0 deletions lib/numbers_and_words/translations/ua.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,20 @@ module NumbersAndWords
module Translations
class Ua < Base
include NumbersAndWords::Translations::Families::Cyrillic
include NumbersAndWords::Translations::Extensions::FractionSignificance

def micros capacity, number = nil, separator = ' '
micro, prefix = capacity
micros = t(:micro, :count => number)[micro]
[micro_prefix(prefix), micros].compact.join separator
end

def micro_prefix capacity
case capacity
when 2 then t(:sub_micro)[2]
when 1 then t(:sub_micro)[1]
end
end
end
end
end
17 changes: 17 additions & 0 deletions spec/numbers_and_words/float/fixture_examples/ua.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
to_words:
fractions:
0.1: нуль цiлих i одна десята
0.7: нуль цiлих i сiм десятих
0.01: нуль цiлих i одна сота
0.77: нуль цiлих i сiмдесят сiм сотих
0.777: нуль цiлих i сiмсот сiмдесят сiм тисячних
0.7777: нуль цiлих i сiм тисяч сiмсот сiмдесят сiм десяти тисячних
0.77777: нуль цiлих i сiмдесят сiм тисяч сiмсот сiмдесят сiм сто тисячних
0.777777: нуль цiлих i сiмсот сiмдесят сiм тисяч сiмсот сiмдесят сiм мiльйонних
0.7777777: нуль цiлих i сiм мiльйонiв сiмсот сiмдесят сiм тисяч сiмсот сiмдесят сiм десяти мiльйонних
0.77777777: нуль цiлих i сiмдесят сiм мiльйонiв сiмсот сiмдесят сiм тисяч сiмсот сiмдесят сiм сто мiльйонних
0.777777777: нуль цiлих i сiмсот сiмдесят сiм мiльйонiв сiмсот сiмдесят сiм тисяч сiмсот сiмдесят сiм мiльярдних
0.2935174315119: нуль цiлих i два трильйона дев’ятсот тридцять п’ять мiльярдiв сто сiмдесят чотири мiльйона триста п’ятнадцять тисяч сто дев’ятнадцять десяти трильйонних
21.77: двадцять одна цiла i сiмдесят сiм сотих
111.999: сто одинадцять цiлих i дев’ятсот дев’яносто дев’ять тисячних
4242.7463: чотири тисячi двiстi сорок двi цiлих i сiм тисяч чотириста шiстдесят три десяти тисячних
4 changes: 2 additions & 2 deletions spec/numbers_and_words/integer/fixture_examples/ua.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@ to_words:
990: дев’ятсот дев’яносто
999: дев’ятсот дев’яносто дев’ять
thousands:
1000: однa тисяча
1000: одна тисяча
2000: двi тисячi
4000: чотири тисячi
5000: п’ять тисяч
11000: одинадцять тисяч
21000: двадцять однa тисяча
21000: двадцять одна тисяча
999000: дев’ятсот дев’яносто дев’ять тисяч
999999: дев’ятсот дев’яносто дев’ять тисяч дев’ятсот дев’яносто дев’ять
millions:
Expand Down
2 changes: 1 addition & 1 deletion spec/numbers_and_words/numbers_and_words_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

[Float].each do |type|
describe type do
[:en,:hu, :ru].each do |locale|
[:en,:hu, :ru, :ua].each do |locale|
context locale do
around(:each) { |example| ::I18n.with_locale(locale) { example.run } }

Expand Down

0 comments on commit 8ef1039

Please sign in to comment.