laravel 有本地化功能,setLocale,但不是持久化的,需要借助session

采用策略,域名加语言后缀,laravel是可以使用路由后缀的,如www.exame.com/en

所以先配置路由,很简单,只需要在现有路由的基础上加一个前缀就可以了

Route::prefix('en')

要实时识别路由前缀并获取到当前语言,我借助了中间件middleware,新建中间件,如LangLocale

public function handle($request, Closure $next){$langs = ['zh-CN', 'en'];$local = 'zh-CN';// 获取路由前缀$routePrefix = $request->route()->getPrefix();if (!empty($routePrefix)) {// 是否有多个前缀$localeIndex = strrpos($routePrefix, "/");if ($localeIndex === false) {$local = $routePrefix == 'admin' ? 'zh-CN' : $routePrefix;} else {$local = substr($routePrefix, 0, $localeIndex);}}if (in_array($local, $langs)) {$request->session()->put('current_locale',  $local);if ($local == 'zh-CN') {$request->session()->put('prefix');} else {$request->session()->put('prefix',  '/'. $local);}app()->setLocale($local);}return $next($request);}

为什么判断多个前缀,因为可能有用户中心,至少也有个后台,也是需要中英文切换的

注册中间件, 在kernel.php中注册路由中间件

'lang_local' => \App\Http\Middleware\LangLocale::class,

使用中间件

protected function mapEnRoutes(){Route::prefix('en')->middleware('web', 'lang_local')->namespace($this->namespace)->group(base_path('routes/web.php'));}

url生成部分我们也需要处理

先建立2个全局函数,或者在主类建立,使用继承,一般都这样吧

public function getUrlPrefix(){$locale = session('current_locale');$url_prefix = 'backend';if(!empty($locale) && $locale != 'zh-CN'){$url_prefix = 'backend/' . $locale;}return $url_prefix; }public function showUrlPrefix(){$url_prefix = $this->getUrlPrefix();view()->share('url_prefix', $url_prefix);}

在构造函数中添加,这里注意,laravel中构造函数是先与session的,官网给出了相应解决方式

public function __construct() {$this->middleware(function ($request, $next) {$this->showUrlPrefix();return $next($request);});}

这样在前端view中使用url就可以这样

{{ url($url_prefix . '/index') }}

在controller中使用时可以这样

return redirect($this->getUrlPrefix() . '/index');

这样本地化部分基本完成了

但我们做中英文,不止本地化,数据库也的跟着

先把所有需要多语言的数据表复制一份

现在我们要做英文,则为复制出来的数据表加上en_前缀

然后在模型中建立构造函数,在构造函数中识别当前语言

如在Article.php中

protected $table = 'articles';public function __construct(array $attributes = []){parent::__construct($attributes);$locale = session('current_locale');if(!empty($locale) && $locale != 'zh-CN'){$this->table = $locale."_articles";}}

这里在提一次,session能不能识别的关键,是在controller中的构造函数中是否有做middleware处理

laravel 多语言切换相关推荐

  1. 网页中英文语言切换解决方案

    网页中英文语言切换解决方案 参考文章: (1)网页中英文语言切换解决方案 (2)https://www.cnblogs.com/seasons1987/archive/2012/10/09/27163 ...

  2. Java Web的Struts2的多语种网站的多语言切换实例

    先看图图: 图1: 图2: 图3: 图4: 一 首先下载Properties Editor插件,该插件是支持中文的资源文件编辑器:MyEclipse 10.6 以上不用安装该插件,使用自带资源文件编辑 ...

  3. html怎么实现多语言图片切换,JavaScript实现--中英语言切换功能

    最近弄的项目是面向国际的,所以老总说要有语言切换功能.第一感觉好像不难吧 网上查了下,感觉实现方法就2种: 一:2个版本的HTML.至于怎么切换,方法也很多. 不过这种方法,除了笨,我实在不知道用什么 ...

  4. 安卓换语言java_Android应用程序的语言切换

    最近项目中用用到语言切换功能,第一想到的就是资源文件,没错. 在资源文件中新建一个文件夹values-en,在里面新建一个strings.xml,把默认values文件夹中的strings.xml中的 ...

  5. qml中loader加载页面会闪屏_Qml动态语言切换

    此方法需要在Qt5.10或更高版本实现, 在Qt5.10或更高版本实现, 在Qt5.10或更高版本实现 重要的事情说三遍 首先在工程文件.pro中加入TRANSLATIONS = zh_CN.ts ...

  6. WPF ComboBox 使用 ResourceBinding 动态绑定资源键并支持语言切换

    WPF ComboBox 使用 ResourceBinding 动态绑定资源键并支持语言切换 独立观察员  2021 年 8 月 23 日 我们平常在 WPF 中进行资源绑定操作,一般就是用 Stat ...

  7. Delphi XE2 之 FireMonkey 入门(18) - TLang(多语言切换的实现)

    一个小小的 TLang 类, 实现多语言切换, 挺好的. 它的工作思路是: 1.首先通过 AddLang('语言代码') 添加语言类别, 如: AddLang('en').AddLang('cn'). ...

  8. mfc oninitdialog 中的hwnd == null_在SOUI中使用动态多语言切换

    动态语言切换是很多国际化产品的需求,SOUI之前的版本支持静态多语言翻译,通过在程序启动时设置好语言翻译模块,在程序中打开的UI都会自动调用该翻译模块进行文字翻译,但是不支持运行进语言切换. 最近几个 ...

  9. android 指定语言的资源,Android国际化多语言切换

    最近工作中突然要求要项目进行国际化,之前没遇到过.但是也很简单呀,只需要把添加一个相应语言的的strings.xml的资源文件就好了,不是吗?这样只要切换系统语言就能切换app的文字语言了. 但是由此 ...

最新文章

  1. MySQL · myrocks · myrocks统计信息
  2. Apache POI和EasyExcel 第四集:Apache POI的Excel基本读取(分为03版的xls、07版的xlsx)
  3. 诺贝尔物理学奖得主Arthur Ashkin去世,他发明了“激光镊子”,曾抱怨被诺奖遗忘...
  4. html body div height: 100%;
  5. Extjs关于alert显示不出—异步问题
  6. python2 csv 中文_Python 2.6中对csv文件的常规Unicode / UTF-8支持
  7. Git添加多个SSH key公钥
  8. 中国农业银行计算机专业笔试题,中国农业银行笔试题库
  9. 【网络安全】DRIDEX木马巧用VEH混淆API调用流程
  10. 6大关键词解析儿童学习桌消费市场
  11. Windows软件清单
  12. 什么是点对点?什么去中心化?
  13. 计算机输入d为啥返回桌面,按D键空格键就退出输入回到桌面
  14. 制作3D游戏时如何避免或减轻玩家的晕3D现象?
  15. 第2.1章 scrapy之国内高匿代理IP爬取
  16. FART脱壳机的使用与进阶(1)_FART的安装与使用(pixel为例)
  17. 【leetcode】644 最大子段和 II(二分查找,数组)
  18. S2B2C模式流程图
  19. C++ 中谓词是什么?
  20. sqlsever2019:控制流全解

热门文章

  1. 苹果天气无线网连接到服务器,苹果手机天气怎么设置?教你玩转天气应用
  2. 笔记本显示dns服务器,笔记本电脑显示无线网DNS设置错误该怎么解决
  3. java mp4 合并_使用 Python 把多个 MP4 合成一个视频
  4. kafka中的offset理解
  5. Error: [$injector:unpr] Unknown provider: $scopeProvider - $scope -错误解决方案
  6. 《财富》公布40岁以下美国富豪榜 戴尔居榜首 [我在IT meets Coupon里提到的两个均在其列]...
  7. Windows环境下Nginx配置本地虚拟域名和Nginx代理
  8. 如何为管理者设计 360 评估调查题目?
  9. 微信小程序之获取百度天气
  10. 华为hcie认证-链路聚合作用