如何让用户在 Laravel 5 中切换语言?

2023-12-01

我创建了一个双语 Laravel 5 应用程序,其中包含两个语言环境:en 和 ar。

我想要的是网站访问者能够通过单击标有语言名称的链接来更改网站的语言。


选项1:

  1. 将用户语言存储在数据库中,我的用户语言存储在用户表中。这是为了避免用户每次登录您的应用程序时询问用户。 您可以将“en”设置为默认值。但是,如果用户是访客,我们会将区域设置存储在会话中。

所以你的迁移可能看起来像这样:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration {

    /**
     * Run the migrations.
     * @return void
     */
    public function up()
    {
        Schema::create('users', function(Blueprint $table)
        {
            $table->increments('id');
            $table->string('email')->unique();
            $table->string('password', 60);
            $table->string('locale', 5)->default('en');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }

}
  1. 当用户或访客单击某种语言链接时,更新数据库中的用户区域设置或将访客选择存储在会话中

例子 : 对于控制器中经过身份验证的用户或访客

public function setLocale($locale){
 if(Auth::check()){
     $user = User::find(Auth::user()->id);
     $user->update(['locale'=>$locale]);
  }else{
    Session::put('locale',$locale);
  }
}
  1. 我们需要找到一种在每个请求上设置区域设置的方法,因为 Laravel 不存储使用以下命令设置的区域设置App::setLocale()因此我们将使用中间件在每个请求上设置Locale。

了解 Laravel 如何处理App::setLocale()这是 Illuminate\Foundation\Application.php 中处理区域设置的方法

    public function setLocale($locale)
    {
        $this['config']->set('app.locale', $locale);

        $this['translator']->setLocale($locale);

        $this['events']->fire('locale.changed', array($locale));
    }

该方法调用 Translator.php 中的另一个方法,如下所示:

/**
     * Set the default locale.
     *
     * @param  string  $locale
     * @return void
     */
    public function setLocale($locale)
    {
        $this->locale = $locale;
    }

正如您所看到的,没有像缓存或会话这样的东西可以用来记住区域设置,因此我们必须在每个请求上设置它。因此,让我们为其创建一个中间件。我将其称为 LocaleMiddleware。

<?php namespace App\Http\Middleware;

use Closure, Session, Auth;

class LocaleMiddleware {


    public function handle($request, Closure $next)
    {
        if(Auth::user()){
            app()->setLocale(Auth::user()->locale);
        }elseif($locale = Session::has('locale')){
            app()->setLocale($locale);
        }


        return $next($request);
    }

}
  1. 让我们通过将中间件添加到 App\Http\Kernel.php 中的 $middleware 堆栈来设置在每个请求上运行的中间件

protected $middleware = [ 'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode', 'Illuminate\Cookie\Middleware\EncryptCookies', 'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse', 'Illuminate\Session\Middleware\StartSession', 'Illuminate\View\Middleware\ShareErrorsFromSession', 'App\Http\Middleware\VerifyCsrfToken', 'App\Http\Middleware\LocaleMiddleware' ];

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让用户在 Laravel 5 中切换语言? 的相关文章

随机推荐

  • 无法导入包:InputHookManager 的问题

    我现在花了大约一个小时尝试解决这个问题 但失败了 我读过几个相关问题 例如this GitHub 问题如this但无法找到如何最好地解决这个问题 导致错误的步骤 import matplotlib pyplot as plt 错误信息 At
  • 批处理脚本 - 计算文件中字符的实例数

    在 Windows XP 中使用批处理脚本 bat 文件 我将如何读取文本文件并查找存在多少个字符实例 例如 我有一个包含以下内容的字符串 OIJEFJ JOIEJKAJF LKAJFKLJEIJ JKLFJALKJF LKJLKFA LK
  • 正确使用 Kivy 的 .kv 文件并将它们导入到您的 Python 脚本中

    我正在关注Kivy 教程我无法从 kv 文件正确加载属性 由于某种原因 我有时可以通过for kv in listdir kv path Builder load file kv path kv 但我不能通过简单地将 kv 文件放在同一个根
  • AndroidTestCompile 导入中无法识别依赖项

    实际上 我的项目有单元测试 所有这些都配置在 src test java 最近我需要添加仪器测试 src androidTest java 为此 我在中添加了 espresso 依赖项build gradle dependencies co
  • 扩展-THREE.MeshBasicMaterial

    我希望制作 THREE MeshBasicMaterial 的副本 并基于它创建我自己的修改材质 我需要稍微编辑一下着色器 并添加一些制服 但我可以处理这个 首先 我想让材质像 MeshBasicMaterial 一样工作 并从那里获取东西
  • 如何编写客户端-服务器视频流

    我正在开发一个实时工作的项目 我必须编写一个视频流客户端服务器应用程序 该服务器会将 AVI MPEG 等发送到 Web 应用程序 我有一些疑问 建议使用什么协议来执行此操作 http rtp 或其他 在网络应用程序中 如何向用户显示它 使
  • 实体框架 6:审核/跟踪变更

    我的核心项目是用 C 编写的 我在一个数据库上工作 其中一些表具有 user mod 和 date mod 列 用于标记谁以及何时制作了一些mod 并且与 data new 和 user new 相同 我的问题 有没有办法集中它并自动插入这
  • jquery ajax调用不是异步的

    我对 jQuery 的 AJAX 方法的实现很陌生 我有一个简单的设置 可以访问两个不同的页面 一个需要 10 秒才能完成 我在上面设置了一个计时器 另一个检查第一页的状态 这两个函数是progressCheck 它每秒请求其页面的最新状态
  • 使用邻接列表与邻接矩阵的图的大小?

    Suppose there are 236 web pages and on average each web page has 24 hyperlinks Consider the directed graph with one vert
  • 在 Python 中通过 Selenium 导航到新页面

    如何在 python 中使用与 Selenium 相同的驱动程序导航到另一个网页 我不想打开新页面 我想继续使用同一个驱动程序 我认为以下方法会起作用 driver navigate to https support tomtom com
  • 如何在 PHP 中构建跨数据库查询?

    在我们的最后一集中 我如何在 MySQL 中构建跨数据库查询 我学会了如何在MySQL中构建跨数据库查询 这很有效 但是当我们的英雄尝试在 PHP 中使用这些新知识时 他发现他最好的朋友失败了 我看了一下mysql select db对于
  • 如何在应用程序中的每个 MessageBox 处放置断点?

    如何在应用程序中的每个 MessageBox 处放置断点 在 Visual Studio IDE 中选择菜单Debug gt New breakpoint gt Breakpoint at Function 用文本 MessageBox 填
  • Retrofit 收到 400 错误请求,但与邮递员一起使用

    我的 api 基本网址是 https locodealapi herokuapp com api deals 在邮递员中 在标题中传递以下内容 效果很好 x access token eyJhbGciOiJIUzI1NiIsInR5cCI6
  • VBA - 如果 A 列中的单元格不为空,则 B 列等于

    我正在寻找一些代码来查看 A 列 只要 A 列中的单元格不为空 那么 B 列中的相应单元格将等于特定值 因此 如果 Cell A1 则 Cell B1 Value MyText 重复此操作 直到 A 列中的单元格为空白或为空 为了添加更多说
  • Mercurial - 添加不在存储库文件夹内的项目

    我是一个没有经验的 Mercurial 用户 我正在使用 VS2010 和 Mercurial 我让一切都在一个存储库上运行良好 该存储库包含一个解决方案文件和嵌套在 父 文件夹中的两个项目 每当我更改文件时 提交过程都会检测到更改等 然后
  • 如何为 Swing 中的 JTable 提供分页支持?

    我在 Swing Java 中创建了一个 GUI 其中使用了 JTable 现在我想通过使用分页在其中显示下一页信息 我该怎么做呢 实现此目的的另一个选项是使用无滚动条的滚动窗格和几个导航按钮来实现控制 已经添加的按钮都是正常的JButto
  • 如何从 Analytics Application Insights 获取 Qna Maker“Q”?

    我已经使用 Qna Maker 创建了聊天机器人的知识库 并尝试使用 Analytics Application Insights 可视化一些统计数据 我想做的事 我想创建一个图表 其中包含最常见的 Qna Maker 问题 我的问题 我在
  • 读取 React 应用程序 src 文件夹中的 excel

    我使用创建了一个反应应用程序react CLI 我现在创建了一个名为的文件夹data现在我想使用读取该数据xlsxnpm 包 但是 它不起作用 我认为这可能与我引用 Excel 文件的方式有关 因为我收到警告 字符串 类型上不存在属性 工作
  • 当我使用另一个控制器渲染页面时,表单验证停止工作

    我编写了一个快速 CI 库类来渲染我的页面 这样我就不必一直输入 this gt load gt view 并且保持 DRY 现在 当我在传递无效数据后重新呈现联系表单时 错误消息不会显示 图书馆类 class Page extends C
  • 如何让用户在 Laravel 5 中切换语言?

    我创建了一个双语 Laravel 5 应用程序 其中包含两个语言环境 en 和 ar 我想要的是网站访问者能够通过单击标有语言名称的链接来更改网站的语言 选项1 将用户语言存储在数据库中 我的用户语言存储在用户表中 这是为了避免用户每次登录