From 4eecd25251335114f0f9fb9cea5d141609a07f21 Mon Sep 17 00:00:00 2001 From: Bryce-Colton <142520814+Bryce-Colton@users.noreply.github.com> Date: Mon, 4 Nov 2024 22:09:14 +0100 Subject: [PATCH] Added alias fr_FR for french locale (fr) (#175) Co-authored-by: Karol Wnuk --- README.md | 76 ++++++++++---------- src/Concerns/ManagesCurrencyTransformers.php | 13 +++- src/Concerns/ManagesLocaleAlias.php | 19 +++++ src/Concerns/ManagesNumberTransformers.php | 13 +++- tests/LocaleAliasTest.php | 35 +++++++++ 5 files changed, 116 insertions(+), 40 deletions(-) create mode 100644 src/Concerns/ManagesLocaleAlias.php create mode 100644 tests/LocaleAliasTest.php diff --git a/README.md b/README.md index c345ecb..34a94fa 100644 --- a/README.md +++ b/README.md @@ -75,44 +75,44 @@ Note: The Currency Transformer within this library processes integers; ensure yo ## Available locale -| Language | Identifier | Number | Currency | -|----------------------|-----------| ------ | -------- | -| Albanian | al | + | + | -| Arabic | ar | + | + | -| Azerbaijani | az | + | + | -| Belgian French | fr_BE | + | - | -| Brazilian Portuguese | pt_BR | + | + | -| Bulgarian | bg | + | + | -| Czech | cs | + | - | -| Danish | dk | + | + | -| Dutch | nl | + | - | -| English | en | + | + | -| Estonian | et | + | - | -| Georgian | ka | + | + | -| German | de | + | + | -| French | fr | + | + | -| Hungarian | hu | + | + | -| Indonesian | id | + | + | -| Italian | it | + | - | -| Kurdish | ku | + | - | -| Lithuanian | lt | + | + | -| Latvian | lv | + | + | -| Macedonian | mk | + | - | -| Malay | ms | + | + | -| Persian | fa | + | - | -| Polish | pl | + | + | -| Romanian | ro | + | + | -| Serbian | sr | + | + | -| Slovak | sk | + | + | -| Spanish | es | + | + | -| Russian | ru | + | + | -| Swahili | sw | + | + | -| Swedish | sv | + | - | -| Turkish | tr | + | + | -| Turkmen | tk | + | + | -| Ukrainian | ua | + | + | -| Uzbek | uz | + | + | -| Yoruba | yo | + | + | +| Language | Identifier | Number | Currency | Alias | +|----------------------|------------| ------ | -------- |-------| +| Albanian | al | + | + | | +| Arabic | ar | + | + | | +| Azerbaijani | az | + | + | | +| Belgian French | fr_BE | + | - | | +| Brazilian Portuguese | pt_BR | + | + | | +| Bulgarian | bg | + | + | | +| Czech | cs | + | - | | +| Danish | dk | + | + | | +| Dutch | nl | + | - | | +| English | en | + | + | | +| Estonian | et | + | - | | +| Georgian | ka | + | + | | +| German | de | + | + | | +| French | fr | + | + | fr_FR | +| Hungarian | hu | + | + | | +| Indonesian | id | + | + | | +| Italian | it | + | - | | +| Kurdish | ku | + | - | | +| Lithuanian | lt | + | + | | +| Latvian | lv | + | + | | +| Macedonian | mk | + | - | | +| Malay | ms | + | + | | +| Persian | fa | + | - | | +| Polish | pl | + | + | | +| Romanian | ro | + | + | | +| Serbian | sr | + | + | | +| Slovak | sk | + | + | | +| Spanish | es | + | + | | +| Russian | ru | + | + | | +| Swahili | sw | + | + | | +| Swedish | sv | + | - | | +| Turkish | tr | + | + | | +| Turkmen | tk | + | + | | +| Ukrainian | ua | + | + | | +| Uzbek | uz | + | + | | +| Yoruba | yo | + | + | | ## Contributors diff --git a/src/Concerns/ManagesCurrencyTransformers.php b/src/Concerns/ManagesCurrencyTransformers.php index c22057e..5a0f0c8 100644 --- a/src/Concerns/ManagesCurrencyTransformers.php +++ b/src/Concerns/ManagesCurrencyTransformers.php @@ -5,9 +5,12 @@ use NumberToWords\CurrencyTransformer as Transformer; use NumberToWords\Exception\InvalidArgumentException; use NumberToWords\CurrencyTransformer\CurrencyTransformer; +use NumberToWords\Exception\NumberToWordsException; trait ManagesCurrencyTransformers { + use ManagesLocaleAlias; + private array $currencyTransformers = [ 'ar' => Transformer\ArabicCurrencyTransformer::class, 'al' => Transformer\AlbanianCurrencyTransformer::class, @@ -41,6 +44,7 @@ trait ManagesCurrencyTransformers */ public function getCurrencyTransformer(string $language): CurrencyTransformer { + $language = $this->resolveAlias($language); if (!array_key_exists($language, $this->currencyTransformers)) { throw new InvalidArgumentException(sprintf( 'Currency transformer for "%s" language is not implemented.', @@ -51,8 +55,15 @@ public function getCurrencyTransformer(string $language): CurrencyTransformer return new $this->currencyTransformers[$language](); } + /** + * @throws NumberToWordsException + * @throws InvalidArgumentException + */ public static function transformCurrency(string $language, int $number, string $currency): string { - return (new static())->getCurrencyTransformer($language)->toWords($number, $currency); + $static = new static(); + $language = $static->resolveAlias($language); + + return $static->getCurrencyTransformer($language)->toWords($number, $currency); } } diff --git a/src/Concerns/ManagesLocaleAlias.php b/src/Concerns/ManagesLocaleAlias.php new file mode 100644 index 0000000..06c0d7b --- /dev/null +++ b/src/Concerns/ManagesLocaleAlias.php @@ -0,0 +1,19 @@ + 'fr', + ]; + + private function resolveAlias(string $alias): string + { + if (array_key_exists($alias, $this->aliasedLocale)) { + return $this->aliasedLocale[$alias]; + } + + return $alias; + } +} diff --git a/src/Concerns/ManagesNumberTransformers.php b/src/Concerns/ManagesNumberTransformers.php index 0b31d5f..9ef9c54 100644 --- a/src/Concerns/ManagesNumberTransformers.php +++ b/src/Concerns/ManagesNumberTransformers.php @@ -2,12 +2,15 @@ namespace NumberToWords\Concerns; +use NumberToWords\Exception\NumberToWordsException; use NumberToWords\NumberTransformer as Transformer; use NumberToWords\Exception\InvalidArgumentException; use NumberToWords\NumberTransformer\NumberTransformer; trait ManagesNumberTransformers { + use ManagesLocaleAlias; + private array $numberTransformers = [ 'ar' => Transformer\ArabicNumberTransformer::class, 'al' => Transformer\AlbanianNumberTransformer::class, @@ -52,6 +55,7 @@ trait ManagesNumberTransformers */ public function getNumberTransformer(string $language): NumberTransformer { + $language = $this->resolveAlias($language); if (!array_key_exists($language, $this->numberTransformers)) { throw new InvalidArgumentException(sprintf( 'Number transformer for "%s" language is not implemented.', @@ -62,8 +66,15 @@ public function getNumberTransformer(string $language): NumberTransformer return new $this->numberTransformers[$language](); } + /** + * @throws NumberToWordsException + * @throws InvalidArgumentException + */ public static function transformNumber(string $language, int $number): string { - return (new static())->getNumberTransformer($language)->toWords($number); + $static = new static(); + $language = $static->resolveAlias($language); + + return $static->getNumberTransformer($language)->toWords($number); } } diff --git a/tests/LocaleAliasTest.php b/tests/LocaleAliasTest.php new file mode 100644 index 0000000..426eb67 --- /dev/null +++ b/tests/LocaleAliasTest.php @@ -0,0 +1,35 @@ +getNumberTransformer($locale); + $originalCurrencyTransformer = $original->getCurrencyTransformer($locale); + + $numberToWords = new NumberToWords(); + $aliasedNumberTransformer = $numberToWords->getNumberTransformer($alias); + $aliasedCurrencyTransformer = $numberToWords->getCurrencyTransformer($alias); + + $this->assertInstanceOf(get_class($originalNumberTransformer), $aliasedNumberTransformer); + $this->assertInstanceOf(get_class($originalCurrencyTransformer), $aliasedCurrencyTransformer); + } + + public function providerItUsesSameTransformersWithLocaleAlias(): array + { + return [ + ['fr', 'fr_FR'], + ]; + } +}