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

吾爱主题 阅读:127 2021-09-15 16:09:00 评论:0

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

messages.php

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

中文的:

  1. return [
  2. "test" => "这里是测试",
  3. "test1" => "继续测试",
  4. ......
  5. ];

英文的:

  1. return [
  2. "test" => "this is a test...",
  3. "test1" => "test again...",
  4. ......
  5. ];

各种语言中的元素键名是对应

第二步:配置文件 app/config/app.php

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

第三步:处理多语言切换的控制器以及方法

  1. <?php
  2. namespace App\Http\Controllers\Home;
  3. use App\Http\Controllers\Controller;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\App;
  6. use Session;
  7. class LangController extends Controller{
  8. /**
  9. * 切换语言包
  10. * @param Request $request
  11. */
  12. public function language(Request $request){
  13. if($request->ajax()) { //Ajax请求访问
  14. $lang = $request->all();
  15. $lang = $lang['lang'];
  16. App::setLocale($lang); //配置默认语言
  17. $request->session()->put('language',$lang); //存到session
  18. return App::getLocale();
  19. }else{
  20. if($request->session()->has('language')){
  21. $res = $request->session()->get('language'); //获取session
  22. return $res;
  23. }
  24.  
  25. }
  26. }
  27. }

第四步:blade模板

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

js部分

  1. <script>
  2. $("#lang").change(function(){
  3. $.ajaxSetup({headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}});
  4. $.post(
  5. "{{url('lang')}}",
  6. {
  7. lang:$("#lang").val()
  8. },
  9. function(d){
  10. if(d){
  11. console.log(d);
  12. location.reload(); //重新刷新页面
  13. }
  14. }
  15. );
  16. });
  17. </script>

第五步: 中间件的设置-middleware(每一次请求,每个中间件都会执行) app/http/middleware下添加Language.php 内容如下

  1. <?php
  2. namespace App\Http\Middleware;
  3.  
  4. use Closure;
  5. use Illuminate\Support\Facades\App;
  6. use Illuminate\Support\Facades\Config;
  7. use Illuminate\Support\Facades\Session;
  8.  
  9. class Language
  10. {
  11. /**
  12. * @param $request
  13. * @param Closure $next
  14. * @return mixed
  15. */
  16. public function handle($request, Closure $next)
  17. {
  18. if (Session::has('language') AND in_array(Session::get('language'), Config::get('app.locales'))) {
  19. App::setLocale(Session::get('language'));
  20. }
  21. else { // This is optional as Laravel will automatically set the fallback language if there is none specified
  22. App::setLocale(Config::get('app.locale'));
  23. }
  24. return $next($request);
  25. }
  26.  
  27. }

配置app/http/middleware/kernel.php 添加Language

基本上就是这样了,试试看,希望可以对你有帮助。告辞!

以上这篇Laravel5.5 动态切换多语言的操作方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

原文链接:https://blog.csdn.net/Gino_tkzzz/article/details/81080328

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容