laravel-5 - 如何检测 Laravel 5 中的语言偏好

标签 laravel-5 locale

我想通过获取浏览器推荐的语言来检测我的客户端语言。

例如,如果您在日本打开浏览器,它将为我提供当前用户打开的国家代码或国家名称,如“en-jp”或“japan”。

我尝试了这段代码,但它似乎显示了我之前选择的语言,默认情况下是英语。

我设置了一个中间件,我需要排除 api 部分,因为我有一些路由器 ping 这个地址,而路由器浏览器没有语言信息,这会使系统变砖。

class BeforeMiddleware
{

/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request $request
 * @param  \Closure $next
 * @return mixed
 */

protected $except_urls = [
    'api/*'
];

public function handle($request, Closure $next)
{
    $langArr = array("en", "fr");
    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
        $languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
    } else {
        $languages[0] = "en";
    }
    if (Session::has('locale')) {
        App::setLocale(Session::get('locale'));
    } else {
        if (in_array($languages[0], $langArr))
            App::setLocale($languages[0]);
    }
    return $next($request);
}


} /* end class */

谢谢你的帮助。

最佳答案

或者您可以使用 Illuminate\Http\Request::getPreferredLanguage
像这样,在中间件中:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Session\Session;
use Illuminate\Http\Request;

class Locale {

  const SESSION_KEY = 'locale';
  const LOCALES = ['en', 'cs'];

  public function handle(Request $request, Closure $next) {
    /** @var Session $session */
    $session = $request->getSession();

    if (!$session->has(self::SESSION_KEY)) {
      $session->put(self::SESSION_KEY, $request->getPreferredLanguage(self::LOCALES));
    }

    if ($request->has('lang')) {
      $lang = $request->get('lang');
      if (in_array($lang, self::LOCALES)) {
        $session->put(self::SESSION_KEY, $lang);
      }
    }

    app()->setLocale($session->get(self::SESSION_KEY));

    return $next($request);
  }
}

关于laravel-5 - 如何检测 Laravel 5 中的语言偏好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36986236/

相关文章:

php - Laravel 急切加载并加入其他表

java - Java java.util.Calendar 中语言环境设置的目的是什么?

javascript - Java:Java 中 JavaScript localeCompare() 的替代方案是什么?

ios - 如何重用 NSString 方法?

mysql - 如何从模型中的不同区域设置获取 ID 号

laravel - 每次触发 Log::error 时发送一个 slack 通知

javascript - 如何使用laravel从数据库更新tinymce数据

php - 目标不可实例化。 Laravel 5 - 应用绑定(bind)服务提供者

laravel - 在 Laravel Homestead 上使用 SSL

java - 在 Java 中动态更改 ResourceBundle Locale