Code前端首页关于Code前端联系我们

Laravel5.5动态切换多语言运行模式

terry 2年前 (2023-09-25) 阅读数 48 #后端开发

第一步:创建所有语言包文件resources/lang

Laravel5.5 动态切换多语言的操作方式

messages.php

就是返回一个数组return[]格式

中文:

return [
 "test" => "这里是测试",
 "test1" => "继续测试",
 ......
];

英文:

return [
 "test" => "this is a test...",
 "test1" => "test again...",
 ......
];

不同语言的元素键名对应

第2步:配置文件app/config/

'locale' => 'zh',
'locales' => ['zh','en','cht'], //包含的语言种类
'fallback_locale' => 'cht',

第3步:处理多语言切换的控件和方法:表单模板

<meta name="csrf-token" content="{{ csrf_token() }}">
<select name="lang">
 <option value="zh" @if(Session::get('language') == 'zh') selected @endif>中文</option>
 <option value="cht" @if(Session::get('language') == 'cht') selected @endif>繁体</option>
 <option value="en" @if(Session::get('language') == 'en') selected @endif>English</option>
</select>

js部分

<script>
 $("#lang").change(function(){
  $.ajaxSetup({headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}});
  $.post(
    "{{url('lang')}}",
    {
     lang:$("#lang").val()
    },
    function(d){
     if(d){
      (d);
      (); //重新刷新页面
     }
    }
  );
 });
</script>

第五步:中间件设置-中间件(每个请求都会执行每个中间件)在app/http/middleware

<?php
namespace App\Http\Middleware;
 
use Closure;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Session;
 
class Language
{
 /**
  * @param $request
  * @param Closure $next
  * @return mixed
  */
 public function handle($request, Closure $next)
 {
  if (Session::has('language') AND in_array(Session::get('language'), Config::get(''))) {
   App::setLocale(Session::get('language'));
  }
  else { // This is optional as Laravel will automatically set the fallback language if there is none specified
   App::setLocale(Config::get(''));
  }
  return $next($request);
 }
 
}

/middleware-app/http下添加以下内容并添加语言

Laravel5.5 动态切换多语言的操作方式

基本上就是这样,尝试一下,希望对你有用。再见!

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门