diff --git a/README.markdown b/README.markdown index 96c4fc1..51b40ba 100644 --- a/README.markdown +++ b/README.markdown @@ -92,6 +92,7 @@ Currently supported locales: * Thai: `:th` * Russian: `:ru` (except for decimals) * Portuguese: `:pt` +* Italian: `:it` ## Testing diff --git a/lib/humanize.rb b/lib/humanize.rb index c25eacb..8638b88 100644 --- a/lib/humanize.rb +++ b/lib/humanize.rb @@ -30,7 +30,7 @@ def humanize(locale: Humanize.config.default_locale, def self.for_locale(locale) case locale.to_sym # NOTE: add locales here in ealphabetical order - when :az, :de, :en, :es, :fr, :id, :pt, :ru + when :az, :de, :en, :es, :fr, :id, :pt, :ru, :it [Object.const_get("Humanize::#{locale.capitalize}"), SPACE] when :th [Humanize::Th, EMPTY] diff --git a/lib/humanize/locales.rb b/lib/humanize/locales.rb index 3195f03..b7b9d15 100644 --- a/lib/humanize/locales.rb +++ b/lib/humanize/locales.rb @@ -1,5 +1,5 @@ module Humanize - %w[az de en es fr id pt ru th tr].each do |locale| + %w[az de en es fr id pt ru th tr it].each do |locale| autoload locale.capitalize.to_sym, "humanize/locales/#{locale}.rb" end end diff --git a/lib/humanize/locales/constants/it.rb b/lib/humanize/locales/constants/it.rb new file mode 100644 index 0000000..86b372b --- /dev/null +++ b/lib/humanize/locales/constants/it.rb @@ -0,0 +1,10 @@ +module Humanize + class It + INFINITY = 'infinito'.freeze + UNDEFINED = 'indefinito'.freeze + NEGATIVE = 'meno'.freeze + POINT = 'punto'.freeze + LOTS = [nil, 'mila', 'milione', 'miliardo', 'trilione', 'quadrilione', 'quintilione', 'sestilione', 'settilione', 'ottilione', 'novilione', 'decilione', 'undecilione', 'duodecilione', 'tredecilione', 'quattuordecilione', 'quindecilione', 'sexdecilione', 'septedecilione', 'octodecilione', 'novemdecilione', 'vigintilione', 'unvigintilione', 'duovigintilione', 'trevigintilione', 'quadrivigintilione', 'quintivigintilione', 'sexvigintilione', 'septevigintilione', 'octovigintilione', 'novemvigintilione', 'trigintilione', 'untrigintilione', 'duotrigintilione', 'trestrigintilione', 'quattuortrigintilione', 'quintrigintilione', 'sextrigintilione', 'sepdiecitrigintilione', 'octotrigintilione', 'novemtrigintilione', 'quadragintilione', 'unquadragintilione', 'duoquadragintilione', 'trequadragintilione', 'quattuorquadragintilione', 'quinquadragintilione', 'sesquadragintilione', 'sepdieciquadragintilione', 'octoquadragintilione', 'novenquadragintilione', 'quinquagintilione'].freeze + SUB_ONE_GROUPING = ['zero', 'uno', 'due', 'tre', 'quattro', 'cinque', 'sei', 'sette', 'otto', 'nove', 'dieci', 'undici', 'dodici', 'tredici', 'quattordici', 'quindici', 'sedici', 'diciassette', 'diciotto', 'diciannove', 'venti', 'ventuno', 'ventidue', 'ventitre', 'ventiquattro', 'venticinque', 'ventisei', 'venttisette', 'ventotto', 'ventinove', 'trenta', 'trentuno', 'trentadue', 'trentatre', 'trentaquattro', 'trentacinque', 'trentasei', 'trentasette', 'trentotto', 'trentanove', 'quaranta', 'quarantuno', 'quarantadue', 'quarantatre', 'quarantaquattro', 'quarantacinque', 'quarantasei', 'quarantasette', 'quarantotto', 'quarantanove', 'cinquanta', 'cinquantuno', 'cinquantadue', 'cinquantatre', 'cinquantaquattro', 'cinquantacinque', 'cinquantasei', 'cinquantasette', 'cinquantotto', 'cinquantanove', 'sessanta', 'sessantuno', 'sessantadue', 'sessantatre', 'sessantaquattro', 'sessantacinque', 'sessantasei', 'sessantasette', 'sessantotto', 'sessantanove', 'settanta', 'settantuno', 'settantadue', 'sessantatre', 'settantaquattro', 'settantacinque', 'settantasei', 'settantasette', 'settantotto', 'settantanove', 'ottanta', 'ottantuno', 'ottantadue', 'ottantatre', 'ottantaquattro', 'ottantacinque', 'ottantasei', 'ottantasette', 'ottantotto', 'ottantanove', 'novanta', 'novantuno', 'novantadue', 'novantatre', 'novantaquattro', 'novantacinque', 'novantasei', 'novantasette', 'novantotto', 'novantanove', 'cento', 'centouno', 'centodue', 'centotre', 'centoquattro', 'centocinque', 'centosei', 'centosette', 'centootto', 'centonove', 'centodieci', 'centoundici', 'centododici', 'centotredici', 'centoquattordici', 'centoquindici', 'centosedici', 'centodiciassette', 'centodiciotto', 'centodiciannove', 'centoventi', 'centoventuno', 'centoventidue', 'centoventitre', 'centoventiquattro', 'centoventicinque', 'centoventisei', 'centoventtisette', 'centoventotto', 'centoventinove', 'centotrenta', 'centotrentuno', 'centotrentadue', 'centotrentatre', 'centotrentaquattro', 'centotrentacinque', 'centotrentasei', 'centotrentasette', 'centotrentotto', 'centotrentanove', 'centoquaranta', 'centoquarantuno', 'centoquarantadue', 'centoquarantatre', 'centoquarantaquattro', 'centoquarantacinque', 'centoquarantasei', 'centoquarantasette', 'centoquarantotto', 'centoquarantanove', 'centocinquanta', 'centocinquantuno', 'centocinquantadue', 'centocinquantatre', 'centocinquantaquattro', 'centocinquantacinque', 'centocinquantasei', 'centocinquantasette', 'centocinquantotto', 'centocinquantanove', 'centosessanta', 'centosessantuno', 'centosessantadue', 'centosessantatre', 'centosessantaquattro', 'centosessantacinque', 'centosessantasei', 'centosessantasette', 'centosessantotto', 'centosessantanove', 'centosettanta', 'centosettantuno', 'centosettantadue', 'centosettantatre', 'centosettantaquattro', 'centosettantacinque', 'centosettantasei', 'centosettantasette', 'centosettantotto', 'centosettantanove', 'centottanta', 'centottantuno', 'centottantadue', 'centottantatre', 'centottantaquattro', 'centottantacinque', 'centottantasei', 'centottantasette', 'centottantotto', 'centottantanove', 'centonovanta', 'centonovantuno', 'centonovantadue', 'centonovantatre', 'centonovantaquattro', 'centonovantacinque', 'centonovantasei', 'centonovantasette', 'centonovantotto', 'centonovantanove', 'duecento', 'duecentouno', 'duecentodue', 'duecentotre', 'duecentoquattro', 'duecentocinque', 'duecentosei', 'duecentosette', 'duecentootto', 'duecentonove', 'duecentodieci', 'duecentoundici', 'duecentododici', 'duecentotredici', 'duecentoquattordici', 'duecentoquindici', 'duecentosedici', 'duecentodiciassette', 'duecentodiciotto', 'duecentodiciannove', 'duecentoventi', 'duecentoventuno', 'duecentoventidue', 'duecentoventitre', 'duecentoventiquattro', 'duecentoventicinque', 'duecentoventisei', 'duecentoventtisette', 'duecentoventotto', 'duecentoventinove', 'duecentotrenta', 'duecentotrentuno', 'duecentotrentadue', 'duecentotrentatre', 'duecentotrentaquattro', 'duecentotrentacinque', 'duecentotrentasei', 'duecentotrentasette', 'duecentotrentotto', 'duecentotrentanove', 'duecentoquaranta', 'duecentoquarantuno', 'duecentoquarantadue', 'duecentoquarantatre', 'duecentoquarantaquattro', 'duecentoquarantacinque', 'duecentoquarantasei', 'duecentoquarantasette', 'duecentoquarantotto', 'duecentoquarantanove', 'duecentocinquanta', 'duecentocinquantuno', 'duecentocinquantadue', 'duecentocinquantatre', 'duecentocinquantaquattro', 'duecentocinquantacinque', 'duecentocinquantasei', 'duecentocinquantasette', 'duecentocinquantotto', 'duecentocinquantanove', 'duecentosessanta', 'duecentosessantuno', 'duecentosessantadue', 'duecentosessantatre', 'duecentosessantaquattro', 'duecentosessantacinque', 'duecentosessantasei', 'duecentosessantasette', 'duecentosessantotto', 'duecentosessantanove', 'duecentosettanta', 'duecentosettantuno', 'duecentosettantadue', 'duecentosettantatre', 'duecentosettantaquattro', 'duecentosettantacinque', 'duecentosettantasei', 'duecentosettantasette', 'duecentosettantotto', 'duecentosettantanove', 'duecentottanta', 'duecentottantuno', 'duecentottantadue', 'duecentottantatre', 'duecentottantaquattro', 'duecentottantacinque', 'duecentottantasei', 'duecentottantasette', 'duecentottantotto', 'duecentottantanove', 'duecentonovanta', 'duecentonovantuno', 'duecentonovantadue', 'duecentonovantatre', 'duecentonovantaquattro', 'duecentonovantacinque', 'duecentonovantasei', 'duecentonovantasette', 'duecentonovantotto', 'duecentonovantanove', 'trecento', 'trecentouno', 'trecentodue', 'trecentotre', 'trecentoquattro', 'trecentocinque', 'trecentosei', 'trecentosette', 'trecentootto', 'trecentonove', 'trecentodieci', 'trecentoundici', 'trecentododici', 'trecentotredici', 'trecentoquattordici', 'trecentoquindici', 'trecentosedici', 'trecentodiciassette', 'trecentodiciotto', 'trecentodiciannove', 'trecentoventi', 'trecentoventuno', 'trecentoventidue', 'trecentoventitre', 'trecentoventiquattro', 'trecentoventicinque', 'trecentoventisei', 'trecentoventtisette', 'trecentoventotto', 'trecentoventinove', 'trecentotrenta', 'trecentotrentuno', 'trecentotrentadue', 'trecentotrentatre', 'trecentotrentaquattro', 'trecentotrentacinque', 'trecentotrentasei', 'trecentotrentasette', 'trecentotrentotto', 'trecentotrentanove', 'trecentoquaranta', 'trecentoquarantuno', 'trecentoquarantadue', 'trecentoquarantatre', 'trecentoquarantaquattro', 'trecentoquarantacinque', 'trecentoquarantasei', 'trecentoquarantasette', 'trecentoquarantotto', 'trecentoquarantanove', 'trecentocinquanta', 'trecentocinquantuno', 'trecentocinquantadue', 'trecentocinquantatre', 'trecentocinquantaquattro', 'trecentocinquantacinque', 'trecentocinquantasei', 'trecentocinquantasette', 'trecentocinquantotto', 'trecentocinquantanove', 'trecentosessanta', 'trecentosessantuno', 'trecentosessantadue', 'trecentosessantatre', 'trecentosessantaquattro', 'trecentosessantacinque', 'trecentosessantasei', 'trecentosessantasette', 'trecentosessantotto', 'trecentosessantanove', 'trecentosettanta', 'trecentosettantuno', 'trecentosettantadue', 'trecentosettantatre', 'trecentosettantaquattro', 'trecentosettantacinque', 'trecentosettantasei', 'trecentosettantasette', 'trecentosettantotto', 'trecentosettantanove', 'trecentottanta', 'trecentottantuno', 'trecentottantadue', 'trecentottantatre', 'trecentottantaquattro', 'trecentottantacinque', 'trecentottantasei', 'trecentottantasette', 'trecentottantotto', 'trecentottantanove', 'trecentonovanta', 'trecentonovantuno', 'trecentonovantadue', 'trecentonovantatre', 'trecentonovantaquattro', 'trecentonovantacinque', 'trecentonovantasei', 'trecentonovantasette', 'trecentonovantotto', 'trecentonovantanove', 'quattrocento', 'quattrocentouno', 'quattrocentodue', 'quattrocentotre', 'quattrocentoquattro', 'quattrocentocinque', 'quattrocentosei', 'quattrocentosette', 'quattrocentootto', 'quattrocentonove', 'quattrocentodieci', 'quattrocentoundici', 'quattrocentododici', 'quattrocentotredici', 'quattrocentoquattordici', 'quattrocentoquindici', 'quattrocentosedici', 'quattrocentodiciassette', 'quattrocentodiciotto', 'quattrocentodiciannove', 'quattrocentoventi', 'quattrocentoventuno', 'quattrocentoventidue', 'quattrocentoventitre', 'quattrocentoventiquattro', 'quattrocentoventicinque', 'quattrocentoventisei', 'quattrocentoventtisette', 'quattrocentoventotto', 'quattrocentoventinove', 'quattrocentotrenta', 'quattrocentotrentuno', 'quattrocentotrentadue', 'quattrocentotrentatre', 'quattrocentotrentaquattro', 'quattrocentotrentacinque', 'quattrocentotrentasei', 'quattrocentotrentasette', 'quattrocentotrentotto', 'quattrocentotrentanove', 'quattrocentoquaranta', 'quattrocentoquarantuno', 'quattrocentoquarantadue', 'quattrocentoquarantatre', 'quattrocentoquarantaquattro', 'quattrocentoquarantacinque', 'quattrocentoquarantasei', 'quattrocentoquarantasette', 'quattrocentoquarantotto', 'quattrocentoquarantanove', 'quattrocentocinquanta', 'quattrocentocinquantuno', 'quattrocentocinquantadue', 'quattrocentocinquantatre', 'quattrocentocinquantaquattro', 'quattrocentocinquantacinque', 'quattrocentocinquantasei', 'quattrocentocinquantasette', 'quattrocentocinquantotto', 'quattrocentocinquantanove', 'quattrocentosessanta', 'quattrocentosessantuno', 'quattrocentosessantadue', 'quattrocentosessantatre', 'quattrocentosessantaquattro', 'quattrocentosessantacinque', 'quattrocentosessantasei', 'quattrocentosessantasette', 'quattrocentosessantotto', 'quattrocentosessantanove', 'quattrocentosettanta', 'quattrocentosettantuno', 'quattrocentosettantadue', 'quattrocentosettantatre', 'quattrocentosettantaquattro', 'quattrocentosettantacinque', 'quattrocentosettantasei', 'quattrocentosettantasette', 'quattrocentosettantotto', 'quattrocentosettantanove', 'quattrocentottanta', 'quattrocentottantuno', 'quattrocentottantadue', 'quattrocentottantatre', 'quattrocentottantaquattro', 'quattrocentottantacinque', 'quattrocentottantasei', 'quattrocentottantasette', 'quattrocentottantotto', 'quattrocentottantanove', 'quattrocentonovanta', 'quattrocentonovantuno', 'quattrocentonovantadue', 'quattrocentonovantatre', 'quattrocentonovantaquattro', 'quattrocentonovantacinque', 'quattrocentonovantasei', 'quattrocentonovantasette', 'quattrocentonovantotto', 'quattrocentonovantanove', 'cinquecento', 'cinquecentouno', 'cinquecentodue', 'cinquecentotre', 'cinquecentoquattro', 'cinquecentocinque', 'cinquecentosei', 'cinquecentosette', 'cinquecentootto', 'cinquecentonove', 'cinquecentodieci', 'cinquecentoundici', 'cinquecentododici', 'cinquecentotredici', 'cinquecentoquattordici', 'cinquecentoquindici', 'cinquecentosedici', 'cinquecentodiciassette', 'cinquecentodiciotto', 'cinquecentodiciannove', 'cinquecentoventi', 'cinquecentoventuno', 'cinquecentoventidue', 'cinquecentoventitre', 'cinquecentoventiquattro', 'cinquecentoventicinque', 'cinquecentoventisei', 'cinquecentoventtisette', 'cinquecentoventotto', 'cinquecentoventinove', 'cinquecentotrenta', 'cinquecentotrentuno', 'cinquecentotrentadue', 'cinquecentotrentatre', 'cinquecentotrentaquattro', 'cinquecentotrentacinque', 'cinquecentotrentasei', 'cinquecentotrentasette', 'cinquecentotrentotto', 'cinquecentotrentanove', 'cinquecentoquaranta', 'cinquecentoquarantuno', 'cinquecentoquarantadue', 'cinquecentoquarantatre', 'cinquecentoquarantaquattro', 'cinquecentoquarantacinque', 'cinquecentoquarantasei', 'cinquecentoquarantasette', 'cinquecentoquarantotto', 'cinquecentoquarantanove', 'cinquecentocinquanta', 'cinquecentocinquantuno', 'cinquecentocinquantadue', 'cinquecentocinquantatre', 'cinquecentocinquantaquattro', 'cinquecentocinquantacinque', 'cinquecentocinquantasei', 'cinquecentocinquantasette', 'cinquecentocinquantotto', 'cinquecentocinquantanove', 'cinquecentosessanta', 'cinquecentosessantuno', 'cinquecentosessantadue', 'cinquecentosessantatre', 'cinquecentosessantaquattro', 'cinquecentosessantacinque', 'cinquecentosessantasei', 'cinquecentosessantasette', 'cinquecentosessantotto', 'cinquecentosessantanove', 'cinquecentosettanta', 'cinquecentosettantuno', 'cinquecentosettantadue', 'cinquecentosettantatre', 'cinquecentosettantaquattro', 'cinquecentosettantacinque', 'cinquecentosettantasei', 'cinquecentosettantasette', 'cinquecentosettantotto', 'cinquecentosettantanove', 'cinquecentottanta', 'cinquecentottantuno', 'cinquecentottantadue', 'cinquecentottantatre', 'cinquecentottantaquattro', 'cinquecentottantacinque', 'cinquecentottantasei', 'cinquecentottantasette', 'cinquecentottantotto', 'cinquecentottantanove', 'cinquecentonovanta', 'cinquecentonovantuno', 'cinquecentonovantadue', 'cinquecentonovantatre', 'cinquecentonovantaquattro', 'cinquecentonovantacinque', 'cinquecentonovantasei', 'cinquecentonovantasette', 'cinquecentonovantotto', 'cinquecentonovantanove', 'seicento', 'seicentouno', 'seicentodue', 'seicentotre', 'seicentoquattro', 'seicentocinque', 'seicentosei', 'seicentosette', 'seicentootto', 'seicentonove', 'seicentodieci', 'seicentoundici', 'seicentododici', 'seicentotredici', 'seicentoquattordici', 'seicentoquindici', 'seicentosedici', 'seicentodiciassette', 'seicentodiciotto', 'seicentodiciannove', 'seicentoventi', 'seicentoventuno', 'seicentoventidue', 'seicentoventitre', 'seicentoventiquattro', 'seicentoventicinque', 'seicentoventisei', 'seicentoventtisette', 'seicentoventotto', 'seicentoventinove', 'seicentotrenta', 'seicentotrentuno', 'seicentotrentadue', 'seicentotrentatre', 'seicentotrentaquattro', 'seicentotrentacinque', 'seicentotrentasei', 'seicentotrentasette', 'seicentotrentotto', 'seicentotrentanove', 'seicentoquaranta', 'seicentoquarantuno', 'seicentoquarantadue', 'seicentoquarantatre', 'seicentoquarantaquattro', 'seicentoquarantacinque', 'seicentoquarantasei', 'seicentoquarantasette', 'seicentoquarantotto', 'seicentoquarantanove', 'seicentocinquanta', 'seicentocinquantuno', 'seicentocinquantadue', 'seicentocinquantatre', 'seicentocinquantaquattro', 'seicentocinquantacinque', 'seicentocinquantasei', 'seicentocinquantasette', 'seicentocinquantotto', 'seicentocinquantanove', 'seicentosessanta', 'seicentosessantuno', 'seicentosessantadue', 'seicentosessantatre', 'seicentosessantaquattro', 'seicentosessantacinque', 'seicentosessantasei', 'seicentosessantasette', 'seicentosessantotto', 'seicentosessantanove', 'seicentosessanta', 'seicentosessantuno', 'seicentosessantadue', 'seicentosessantatre', 'seicentosessantaquattro', 'seicentosessantacinque', 'seicentosessantasei', 'seicentosessantasette', 'seicentosessantotto', 'seicentosessantanove', 'seicentottanta', 'seicentottantuno', 'seicentottantadue', 'seicentottantatre', 'seicentottantaquattro', 'seicentottantacinque', 'seicentottantasei', 'seicentottantasette', 'seicentottantotto', 'seicentottantanove', 'seicentonovanta', 'seicentonovantuno', 'seicentonovantadue', 'seicentonovantatre', 'seicentonovantaquattro', 'seicentonovantacinque', 'seicentonovantasei', 'seicentonovantasette', 'seicentonovantotto', 'seicentonovantanove', 'settecento', 'settecentouno', 'settecentodue', 'settecentotre', 'settecentoquattro', 'settecentocinque', 'settecentosei', 'settecentosette', 'settecentootto', 'settecentonove', 'settecentodieci', 'settecentoundici', 'settecentododici', 'settecentotredici', 'settecentoquattordici', 'settecentoquindici', 'settecentosedici', 'settecentodiciassette', 'settecentodiciotto', 'settecentodiciannove', 'settecentoventi', 'settecentoventuno', 'settecentoventidue', 'settecentoventitre', 'settecentoventiquattro', 'settecentoventicinque', 'settecentoventisei', 'settecentoventtisette', 'settecentoventotto', 'settecentoventinove', 'settecentotrenta', 'settecentotrentuno', 'settecentotrentadue', 'settecentotrentatre', 'settecentotrentaquattro', 'settecentotrentacinque', 'settecentotrentasei', 'settecentotrentasette', 'settecentotrentotto', 'settecentotrentanove', 'settecentoquaranta', 'settecentoquarantuno', 'settecentoquarantadue', 'settecentoquarantatre', 'settecentoquarantaquattro', 'settecentoquarantacinque', 'settecentoquarantasei', 'settecentoquarantasette', 'settecentoquarantotto', 'settecentoquarantanove', 'settecentocinquanta', 'settecentocinquantuno', 'settecentocinquantadue', 'settecentocinquantatre', 'settecentocinquantaquattro', 'settecentocinquantacinque', 'settecentocinquantasei', 'settecentocinquantasette', 'settecentocinquantotto', 'settecentocinquantanove', 'settecentosessanta', 'settecentosessantuno', 'settecentosessantadue', 'settecentosessantatre', 'settecentosessantaquattro', 'settecentosessantacinque', 'settecentosessantasei', 'settecentosessantasette', 'settecentosessantotto', 'settecentosessantanove', 'settecentosettanta', 'settecentosettantuno', 'settecentosettantadue', 'settecentosettantatre', 'settecentosettantaquattro', 'settecentosettantacinque', 'settecentosettantasei', 'settecentosettantasette', 'settecentosettantotto', 'settecentosettantanove', 'settecentottanta', 'settecentottantuno', 'settecentottantadue', 'settecentottantatre', 'settecentottantaquattro', 'settecentottantacinque', 'settecentottantasei', 'settecentottantasette', 'settecentottantotto', 'settecentottantanove', 'settecentonovanta', 'settecentonovantuno', 'settecentonovantadue', 'settecentonovantatre', 'settecentonovantaquattro', 'settecentonovantacinque', 'settecentonovantasei', 'settecentonovantasette', 'settecentonovantotto', 'settecentonovantanove', 'ottocento', 'ottocentouno', 'ottocentodue', 'ottocentotre', 'ottocentoquattro', 'ottocentocinque', 'ottocentosei', 'ottocentosette', 'ottocentootto', 'ottocentonove', 'ottocentodieci', 'ottocentoundici', 'ottocentododici', 'ottocentotredici', 'ottocentoquattordici', 'ottocentoquindici', 'ottocentosedici', 'ottocentodiciassette', 'ottocentodiciotto', 'ottocentodiciannove', 'ottocentoventi', 'ottocentoventuno', 'ottocentoventidue', 'ottocentoventitre', 'ottocentoventiquattro', 'ottocentoventicinque', 'ottocentoventisei', 'ottocentoventtisette', 'ottocentoventotto', 'ottocentoventinove', 'ottocentotrenta', 'ottocentotrentuno', 'ottocentotrentadue', 'ottocentotrentatre', 'ottocentotrentaquattro', 'ottocentotrentacinque', 'ottocentotrentasei', 'ottocentotrentasette', 'ottocentotrentotto', 'ottocentotrentanove', 'ottocentoquaranta', 'ottocentoquarantuno', 'ottocentoquarantadue', 'ottocentoquarantatre', 'ottocentoquarantaquattro', 'ottocentoquarantacinque', 'ottocentoquarantasei', 'ottocentoquarantasette', 'ottocentoquarantotto', 'ottocentoquarantanove', 'ottocentocinquanta', 'ottocentocinquantuno', 'ottocentocinquantadue', 'ottocentocinquantatre', 'ottocentocinquantaquattro', 'ottocentocinquantacinque', 'ottocentocinquantasei', 'ottocentocinquantasette', 'ottocentocinquantotto', 'ottocentocinquantanove', 'ottocentosessanta', 'ottocentosessantuno', 'ottocentosessantadue', 'ottocentosessantatre', 'ottocentosessantaquattro', 'ottocentosessantacinque', 'ottocentosessantasei', 'ottocentosessantasette', 'ottocentosessantotto', 'ottocentosessantanove', 'ottocentosettanta', 'ottocentosettantuno', 'ottocentosettantadue', 'ottocentosettantatre', 'ottocentosettantaquattro', 'ottocentosettantacinque', 'ottocentosettantasei', 'ottocentosettantasette', 'ottocentosettantotto', 'ottocentosettantanove', 'ottocentottanta', 'ottocentottantuno', 'ottocentottantadue', 'ottocentottantatre', 'ottocentottantaquattro', 'ottocentottantacinque', 'ottocentottantasei', 'ottocentottantasette', 'ottocentottantotto', 'ottocentottantanove', 'ottocentonovanta', 'ottocentonovantuno', 'ottocentonovantadue', 'ottocentonovantatre', 'ottocentonovantaquattro', 'ottocentonovantacinque', 'ottocentonovantasei', 'ottocentonovantasette', 'ottocentonovantotto', 'ottocentonovantanove', 'novecento', 'novecentouno', 'novecentodue', 'novecentotre', 'novecentoquattro', 'novecentocinque', 'novecentosei', 'novecentosette', 'novecentootto', 'novecentonove', 'novecentodieci', 'novecentoundici', 'novecentododici', 'novecentotredici', 'novecentoquattordici', 'novecentoquindici', 'novecentosedici', 'novecentodiciassette', 'novecentodiciotto', 'novecentodiciannove', 'novecentoventi', 'novecentoventuno', 'novecentoventidue', 'novecentoventitre', 'novecentoventiquattro', 'novecentoventicinque', 'novecentoventisei', 'novecentoventtisette', 'novecentoventotto', 'novecentoventinove', 'novecentotrenta', 'novecentotrentuno', 'novecentotrentadue', 'novecentotrentatre', 'novecentotrentaquattro', 'novecentotrentacinque', 'novecentotrentasei', 'novecentotrentasette', 'novecentotrentotto', 'novecentotrentanove', 'novecentoquaranta', 'novecentoquarantuno', 'novecentoquarantadue', 'novecentoquarantatre', 'novecentoquarantaquattro', 'novecentoquarantacinque', 'novecentoquarantasei', 'novecentoquarantasette', 'novecentoquarantotto', 'novecentoquarantanove', 'novecentocinquanta', 'novecentocinquantuno', 'novecentocinquantadue', 'novecentocinquantatre', 'novecentocinquantaquattro', 'novecentocinquantacinque', 'novecentocinquantasei', 'novecentocinquantasette', 'novecentocinquantotto', 'novecentocinquantanove', 'novecentosessanta', 'novecentosessantuno', 'novecentosessantadue', 'novecentosessantatre', 'novecentosessantaquattro', 'novecentosessantacinque', 'novecentosessantasei', 'novecentosessantasette', 'novecentosessantotto', 'novecentosessantanove', 'novecentosessanta', 'novecentosessantuno', 'novecentosessantadue', 'novecentosessantatre', 'novecentosessantaquattro', 'novecentosessantacinque', 'novecentosessantasei', 'novecentosessantasette', 'novecentosessantotto', 'novecentosessantanove', 'novecentottanta', 'novecentottantuno', 'novecentottantadue', 'novecentottantatre', 'novecentottantaquattro', 'novecentottantacinque', 'novecentottantasei', 'novecentottantasette', 'novecentottantotto', 'novecentottantanove', 'novecentonovanta', 'novecentonovantuno', 'novecentonovantadue', 'novecentonovantatre', 'novecentonovantaquattro', 'novecentonovantacinque', 'novecentonovantasei', 'novecentonovantasette', 'novecentonovantotto', 'novecentonovantanove'].freeze + end +end diff --git a/lib/humanize/locales/it.rb b/lib/humanize/locales/it.rb new file mode 100644 index 0000000..f70eafb --- /dev/null +++ b/lib/humanize/locales/it.rb @@ -0,0 +1,53 @@ +require_relative 'constants/it' + +module Humanize + class It + def humanize(number) + iteration = 0 + parts = [] + use_and = false + until number.zero? + number, remainder = number.divmod(1000) + if remainder > 0 + add_grouping(parts, use_and, iteration) + parts << SUB_ONE_GROUPING[remainder] + end + + iteration += 1 + end + + used_lots = LOTS & parts.map {|part| part.delete(',')}.compact + used_lots.each do |lot| + i = (parts.index("#{lot},") || parts.index("#{lot}")) + prefix = parts[i+1] + parts -= [prefix] + + parts[i] = if lot == LOTS[1] + prefix == SUB_ONE_GROUPING[1] ? "mille" : "#{prefix}#{lot}" + else + plural = lot[0...-1] + 'i' + prefix == SUB_ONE_GROUPING[1] ? "un #{lot}" : "#{prefix} #{plural}" + end + + parts[i] += ',' if i + 1 != parts.size + end + + parts + end + + private + + def conjunction(parts, use_and) + return '' if parts.empty? + use_and ? ' e' : ',' + end + + def add_grouping(parts, use_and, iteration) + grouping = LOTS[iteration] + return unless grouping + + parts << "#{grouping}#{conjunction(parts, use_and)}" + end + + end +end diff --git a/spec/locales/it_spec.rb b/spec/locales/it_spec.rb new file mode 100644 index 0000000..f601de9 --- /dev/null +++ b/spec/locales/it_spec.rb @@ -0,0 +1,64 @@ +require 'spec_helper' + +RSpec.describe Humanize, "it locale" do + # rubocop:disable Metrics/LineLength + + before do + Humanize.configure do |config| + config.default_locale = :it + end + end + + it_tests = [ + [-1, "meno uno"], + [-0.042, "meno zero punto zero quattro due"], + [-0.00003345, "meno zero punto zero zero zero zero tre tre quattro cinque"], + [-0.0000017854, "meno zero punto zero zero zero zero zero uno sette otto cinque quattro"], + [0.000000123, "zero punto zero zero zero zero zero zero uno due tre"], + [0, "zero"], + [8.15, "otto punto uno cinque"], + [8.000015, "otto punto zero zero zero zero uno cinque"], + [8, "otto"], + [11, "undici"], + [21, "ventuno"], + [61, "sessantuno"], + [71, "settantuno"], + [99, "novantanove"], + [100, "cento"], + [101, "centouno"], + [111, "centoundici"], + [121, "centoventuno"], + [167, "centosessantasette"], + [1000, "mille"], + [1079, "mille settantanove"], + [1577, "mille cinquecentosettantasette"], + [2000, "duemila"], + [10_000, "diecimila"], + [10_079, "diecimila settantanove"], + [50_877, "cinquantamila ottocentosettantasette"], + [100_444, "centomila quattrocentoquarantaquattro"], + [235_409, "duecentotrentacinquemila quattrocentonove"], + [1_007_310, "un milione settemila, trecentodieci"], + [8_017_878, "otto milioni diciassettemila, ottocentosettantotto"], + [21_007_310, "ventuno milioni settemila, trecentodieci"], + [321_007_310, "trecentoventuno milioni settemila, trecentodieci"], + [4_321_007_310, "quattro miliardi trecentoventuno milioni, settemila, trecentodieci"], + [14_321_007_310, "quattordici miliardi trecentoventuno milioni, settemila, trecentodieci"], + [1_112_176_514_321_007_310, "un quintilione centododici quadrilioni, centosettantasei trilioni, cinquecentoquattordici miliardi, trecentoventuno milioni, settemila, trecentodieci"], + [15_000_000_000_000_000_333, "quindici quintilioni trecentotrentatre"], + [111_000_000_000_000_000_000_000, "centoundici sestilioni"], + ] + # rubocop:enable Metrics/LineLength + + it_tests.each do |num, output| + it "#{num} is equal to #{output}" do + expect(num.humanize).to eq(output) + end + end + + describe 'when called on bigdecimal' do + it 'reads correctly' do + expect(BigDecimal(it_tests.last.first).humanize).to eql(it_tests.last.last) + end + end +end