SetLocale.php 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Agent;
  4. use Closure;
  5. use Illuminate\Http\Request;
  6. use function app;
  7. class SetLocale
  8. {
  9. /**
  10. * 变更语言
  11. *
  12. * @return mixed
  13. */
  14. public function handle(Request $request, Closure $next)
  15. {
  16. if ($request->session()->has('locale')) {
  17. $lang = $request->session()->get('locale');
  18. } elseif ($request->query('locale')) {
  19. $lang = $request->query('locale');
  20. } elseif (Agent::languages()) {
  21. $langs = array_keys(config('common.language'));
  22. $langs_low = array_map('strtolower', $langs);
  23. $accept = array_map('strtolower', str_replace('-', '_', Agent::languages()));
  24. $intersects = array_intersect($accept, $langs_low);
  25. if ($intersects) {
  26. $lang = array_values($langs)[array_search(array_values($intersects)[0], $langs_low, true)];
  27. }
  28. }
  29. if (isset($lang) && $lang !== app()->getLocale()) {
  30. app()->setLocale($lang);
  31. session()->put('locale', $lang);
  32. }
  33. return $next($request);
  34. }
  35. }