From 2df6814c271b820f44fa5c7c6dcbb71f008ce544 Mon Sep 17 00:00:00 2001 From: Ruud Kamphuis Date: Wed, 5 Feb 2020 11:10:21 +0100 Subject: [PATCH] IntlExtension > Handle MissingResourceException --- extra/intl-extra/src/IntlExtension.php | 43 ++++++++++++++++--- .../tests/Fixtures/country_name.test | 2 + .../tests/Fixtures/country_timezones.test | 2 + .../tests/Fixtures/currency_name.test | 2 + .../tests/Fixtures/currency_symbol.test | 2 + .../tests/Fixtures/language_name.test | 2 + .../tests/Fixtures/locale_name.test | 2 + .../tests/Fixtures/timezone_name.test | 2 + 8 files changed, 50 insertions(+), 7 deletions(-) diff --git a/extra/intl-extra/src/IntlExtension.php b/extra/intl-extra/src/IntlExtension.php index 8bf122605e..acf928ad94 100644 --- a/extra/intl-extra/src/IntlExtension.php +++ b/extra/intl-extra/src/IntlExtension.php @@ -13,6 +13,7 @@ use Symfony\Component\Intl\Countries; use Symfony\Component\Intl\Currencies; +use Symfony\Component\Intl\Exception\MissingResourceException; use Symfony\Component\Intl\Languages; use Symfony\Component\Intl\Locales; use Symfony\Component\Intl\Timezones; @@ -156,37 +157,65 @@ public function getFunctions() public function getCountryName(string $country, string $locale = null): string { - return Countries::getName($country, $locale); + try { + return Countries::getName($country, $locale); + } catch (MissingResourceException $exception) { + return $country; + } } public function getCurrencyName(string $currency, string $locale = null): string { - return Currencies::getName($currency, $locale); + try { + return Currencies::getName($currency, $locale); + } catch (MissingResourceException $exception) { + return $currency; + } } public function getCurrencySymbol(string $currency, string $locale = null): string { - return Currencies::getSymbol($currency, $locale); + try { + return Currencies::getSymbol($currency, $locale); + } catch (MissingResourceException $exception) { + return $currency; + } } public function getLanguageName(string $language, string $locale = null): string { - return Languages::getName($language, $locale); + try { + return Languages::getName($language, $locale); + } catch (MissingResourceException $exception) { + return $language; + } } public function getLocaleName(string $data, string $locale = null): string { - return Locales::getName($data, $locale); + try { + return Locales::getName($data, $locale); + } catch (MissingResourceException $exception) { + return $data; + } } public function getTimezoneName(string $timezone, string $locale = null): string { - return Timezones::getName($timezone, $locale); + try { + return Timezones::getName($timezone, $locale); + } catch (MissingResourceException $exception) { + return $timezone; + } } public function getCountryTimezones(string $country): array { - return Timezones::forCountryCode($country); + try { + return Timezones::forCountryCode($country); + } catch (MissingResourceException $exception) { + return []; + } } public function formatCurrency($amount, string $currency, array $attrs = [], string $locale = null): string diff --git a/extra/intl-extra/tests/Fixtures/country_name.test b/extra/intl-extra/tests/Fixtures/country_name.test index d1b729dd1b..068aa6c746 100644 --- a/extra/intl-extra/tests/Fixtures/country_name.test +++ b/extra/intl-extra/tests/Fixtures/country_name.test @@ -1,6 +1,7 @@ --TEST-- "country_name" filter --TEMPLATE-- +{{ 'UNKNOWN'|country_name }} {{ 'FR'|country_name }} {{ 'US'|country_name }} {{ 'US'|country_name('fr') }} @@ -8,6 +9,7 @@ --DATA-- return []; --EXPECT-- +UNKNOWN France United States États-Unis diff --git a/extra/intl-extra/tests/Fixtures/country_timezones.test b/extra/intl-extra/tests/Fixtures/country_timezones.test index 224b80eab0..3c81440c11 100644 --- a/extra/intl-extra/tests/Fixtures/country_timezones.test +++ b/extra/intl-extra/tests/Fixtures/country_timezones.test @@ -1,10 +1,12 @@ --TEST-- "country_timezones" function --TEMPLATE-- +{{ country_timezones('UNKNOWN')|length }} {{ country_timezones('FR')|join(', ') }} {{ country_timezones('US')|join(', ') }} --DATA-- return []; --EXPECT-- +0 Europe/Paris America/Adak, America/Anchorage, America/Boise, America/Chicago, America/Denver, America/Detroit, America/Indiana/Knox, America/Indiana/Marengo, America/Indiana/Petersburg, America/Indiana/Tell_City, America/Indiana/Vevay, America/Indiana/Vincennes, America/Indiana/Winamac, America/Indianapolis, America/Juneau, America/Kentucky/Monticello, America/Los_Angeles, America/Louisville, America/Menominee, America/Metlakatla, America/New_York, America/Nome, America/North_Dakota/Beulah, America/North_Dakota/Center, America/North_Dakota/New_Salem, America/Phoenix, America/Sitka, America/Yakutat, Pacific/Honolulu diff --git a/extra/intl-extra/tests/Fixtures/currency_name.test b/extra/intl-extra/tests/Fixtures/currency_name.test index d0e1cf4aa2..eb221b0bda 100644 --- a/extra/intl-extra/tests/Fixtures/currency_name.test +++ b/extra/intl-extra/tests/Fixtures/currency_name.test @@ -1,6 +1,7 @@ --TEST-- "currency_name" filter --TEMPLATE-- +{{ 'UNKNOWN'|currency_name }} {{ 'EUR'|currency_name }} {{ 'JPY'|currency_name }} {{ 'EUR'|currency_name('fr') }} @@ -8,6 +9,7 @@ --DATA-- return []; --EXPECT-- +UNKNOWN Euro Japanese Yen euro diff --git a/extra/intl-extra/tests/Fixtures/currency_symbol.test b/extra/intl-extra/tests/Fixtures/currency_symbol.test index 9212d43169..2fc29744d9 100644 --- a/extra/intl-extra/tests/Fixtures/currency_symbol.test +++ b/extra/intl-extra/tests/Fixtures/currency_symbol.test @@ -1,10 +1,12 @@ --TEST-- "currency_symbol" filter --TEMPLATE-- +{{ 'UNKNOWN'|currency_symbol }} {{ 'EUR'|currency_symbol }} {{ 'JPY'|currency_symbol }} --DATA-- return []; --EXPECT-- +UNKNOWN € ¥ diff --git a/extra/intl-extra/tests/Fixtures/language_name.test b/extra/intl-extra/tests/Fixtures/language_name.test index 8339ae90b7..c74f63c161 100644 --- a/extra/intl-extra/tests/Fixtures/language_name.test +++ b/extra/intl-extra/tests/Fixtures/language_name.test @@ -1,6 +1,7 @@ --TEST-- "language_name" filter --TEMPLATE-- +{{ 'UNKNOWN'|language_name }} {{ 'de'|language_name }} {{ 'fr'|language_name }} {{ 'de'|language_name('fr') }} @@ -9,6 +10,7 @@ --DATA-- return []; --EXPECT-- +UNKNOWN German French allemand diff --git a/extra/intl-extra/tests/Fixtures/locale_name.test b/extra/intl-extra/tests/Fixtures/locale_name.test index e3dc5694cf..5b194b6301 100644 --- a/extra/intl-extra/tests/Fixtures/locale_name.test +++ b/extra/intl-extra/tests/Fixtures/locale_name.test @@ -1,6 +1,7 @@ --TEST-- "locale_name" filter --TEMPLATE-- +{{ 'UNKNOWN'|locale_name }} {{ 'de'|locale_name }} {{ 'fr'|locale_name }} {{ 'de'|locale_name('fr') }} @@ -9,6 +10,7 @@ --DATA-- return []; --EXPECT-- +UNKNOWN German French allemand diff --git a/extra/intl-extra/tests/Fixtures/timezone_name.test b/extra/intl-extra/tests/Fixtures/timezone_name.test index 501a40ad26..9ee40db55d 100644 --- a/extra/intl-extra/tests/Fixtures/timezone_name.test +++ b/extra/intl-extra/tests/Fixtures/timezone_name.test @@ -1,12 +1,14 @@ --TEST-- "timezone_name" filter --TEMPLATE-- +{{ 'UNKNOWN'|timezone_name }} {{ 'Europe/Paris'|timezone_name }} {{ 'America/Los_Angeles'|timezone_name }} {{ 'America/Los_Angeles'|timezone_name('fr') }} --DATA-- return []; --EXPECT-- +UNKNOWN Central European Time (Paris) Pacific Time (Los Angeles) heure du Pacifique nord-américain (Los Angeles)