diff --git a/composer.json b/composer.json index 5db76790..8c681e5f 100644 --- a/composer.json +++ b/composer.json @@ -17,6 +17,7 @@ "ext-mbstring": "*" }, "require-dev": { + "ext-intl": "*", "friendsofphp/php-cs-fixer": "^3.8", "laravel/laravel": "^9.1", "livewire/livewire": "^2.10", diff --git a/src/Prime/Translation/Language.php b/src/Prime/Translation/Language.php new file mode 100644 index 00000000..cce9f3c0 --- /dev/null +++ b/src/Prime/Translation/Language.php @@ -0,0 +1,63 @@ + + */ + +namespace Flasher\Prime\Translation; + +final class Language +{ + const LTR = 'ltr'; + const RTL = 'rtl'; + + /** + * @param string $locale + * + * @return string + */ + public static function direction($locale) + { + if (!\extension_loaded('intl')) { + return self::LTR; + } + + $resource = \ResourceBundle::create($locale, 'ICUDATA', true); + if (null === $resource) { + return self::LTR; + } + + $layout = $resource->get('layout'); + if (!$layout instanceof \ResourceBundle) { + return self::LTR; + } + + $characters = $layout->get('characters'); + if (!\is_string($characters)) { + return self::LTR; + } + + return 'right-to-left' === $characters ? self::RTL : self::LTR; + } + + /** + * @param string $locale + * + * @return bool + */ + public static function isRTL($locale) + { + return self::RTL === self::direction($locale); + } + + /** + * @param string $locale + * + * @return bool + */ + public static function isLTR($locale) + { + return self::LTR === self::direction($locale); + } +}