Translation.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. namespace support\bootstrap;
  3. use Symfony\Component\Translation\Translator;
  4. use Symfony\Component\Translation\Loader\PhpFileLoader;
  5. /**
  6. * Class Translation
  7. * @package support\bootstrap
  8. * @method static string trans(?string $id, array $parameters = [], string $domain = null, string $locale = null)
  9. * @method static void setLocale(string $locale)
  10. * @method static string getLocale()
  11. */
  12. class Translation{
  13. /**
  14. * @var array
  15. */
  16. protected static $_translator = [];
  17. public static function start()
  18. {
  19. if (!class_exists('\Symfony\Component\Translation\Translator')) {
  20. return;
  21. }
  22. $config = config('translation', []);
  23. static::$_translator = $translator = new Translator($config['locale']);
  24. $translator->addLoader('phpfile', new PhpFileLoader());
  25. $translator->setFallbackLocales($config['fallback_locale']);
  26. if (!$translations_path = realpath($config['path'])) {
  27. return;
  28. }
  29. foreach (glob($translations_path . DIRECTORY_SEPARATOR . '*' . DIRECTORY_SEPARATOR . '*.php') as $file) {
  30. $domain = basename($file, '.php');
  31. $dir_name = pathinfo($file, PATHINFO_DIRNAME);
  32. $locale = substr(strrchr($dir_name, DIRECTORY_SEPARATOR), 1);
  33. if ($domain && $locale) {
  34. $translator->addResource('phpfile', $file, $locale, $domain);
  35. }
  36. }
  37. }
  38. /**
  39. * @param $name
  40. * @param $arguments
  41. * @return mixed
  42. */
  43. public static function __callStatic($name, $arguments)
  44. {
  45. return static::$_translator->{$name}(... $arguments);
  46. }
  47. }