1
0

SetLocale.php 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. * @param Request $request
  13. * @param Closure $next
  14. * @return mixed
  15. */
  16. public function handle(Request $request, Closure $next)
  17. {
  18. if (session()->has('locale')) {
  19. $lang = session()->get('locale');
  20. } elseif ($request->query('locale')) {
  21. $lang = $request->query('locale');
  22. } elseif (Agent::languages()) {
  23. $langs = array_keys(config('common.language'));
  24. $langs_low = array_map('strtolower', $langs);
  25. $accept = array_map('strtolower', str_replace('-', '_', Agent::languages()));
  26. $intersects = array_intersect($accept, $langs_low);
  27. if ($intersects) {
  28. $lang = array_values($langs)[array_search(array_values($intersects)[0], $langs_low, true)];
  29. }
  30. }
  31. if (isset($lang) && $lang !== app()->getLocale()) {
  32. app()->setLocale($lang);
  33. session()->put('locale', $lang);
  34. }
  35. return $next($request);
  36. }
  37. }