Created
March 31, 2016 13:13
-
-
Save VladaHejda/a5aa93dce7871d0d3cda3c9bd6dd77fa to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php declare(strict_types = 1); | |
namespace Slevomat\Number; | |
class NumberToWordTranslator extends \Consistence\Object | |
{ | |
public function translate(int $number): string | |
{ | |
$word = $this->translateSpecial($number); | |
if ($word !== null) { | |
return $word; | |
} | |
$number = (string) $number; | |
$magnitudes = strlen($number); | |
$word = ''; | |
for ($magnitude = $magnitudes; $magnitude > 0; $magnitude--) { | |
$wordPart = $this->translateMagnitude($magnitude, (int) $number[$magnitudes - $magnitude]); | |
if ($magnitude < $magnitudes) { | |
$wordPart = \Nette\Utils\Strings::lower($wordPart); | |
} | |
$word .= $wordPart; | |
} | |
return $word; | |
} | |
/** | |
* @param int $number | |
* @return string|null | |
*/ | |
private function translateSpecial(int $number) | |
{ | |
switch ($number) { | |
case 11: | |
return _('Jedenáct'); | |
case 12: | |
return _('Dvanáct'); | |
case 13: | |
return _('Třináct'); | |
case 14: | |
return _('Čtrnáct'); | |
case 15: | |
return _('Patnáct'); | |
case 16: | |
return _('Šestnáct'); | |
case 17: | |
return _('Sedmnáct'); | |
case 18: | |
return _('Osmnáct'); | |
case 19: | |
return _('Devatenáct'); | |
default: | |
return null; | |
} | |
} | |
private function translateMagnitude(int $magnitude, int $digit): string | |
{ | |
switch ($magnitude) { | |
case 1: | |
return $this->translateFirstMagnitude($digit); | |
case 2: | |
return $this->translateSecondMagnitude($digit); | |
default: | |
throw new \Slevomat\Number\NotImplementedException(); | |
} | |
} | |
private function translateFirstMagnitude(int $digit): string | |
{ | |
switch ($digit) { | |
case 1: | |
return _('Jedna'); | |
case 2: | |
return _('Dva'); | |
case 3: | |
return _('Tři'); | |
case 4: | |
return _('Čtyři'); | |
case 5: | |
return _('Pět'); | |
case 6: | |
return _('Šest'); | |
case 7: | |
return _('Sedm'); | |
case 8: | |
return _('Osm'); | |
case 9: | |
return _('Devět'); | |
default: | |
throw new \LogicException(); | |
} | |
} | |
private function translateSecondMagnitude(int $digit): string | |
{ | |
switch ($digit) { | |
case 1: | |
return _('Deset'); | |
case 2: | |
return _('Dvacet'); | |
case 3: | |
return _('Třicet'); | |
case 4: | |
return _('Čtyřicet'); | |
case 5: | |
return _('Padesát'); | |
case 6: | |
return _('Šedesát'); | |
case 7: | |
return _('Sedmdesát'); | |
case 8: | |
return _('Osmdesát'); | |
case 9: | |
return _('Devadesát'); | |
default: | |
throw new \LogicException(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment