专栏首页TLingC's ZoneThinkPHP 6.0 多语言优化拓展包

ThinkPHP 6.0 多语言优化拓展包

think-lang

ThinkPHP 6.0 多语言优化拓展包

特色

  1. 支持通过如 mywebsite.com/zh-hans/ 的二级目录访问对应语言页面。
  2. 支持每种语言的语言包单独成目录,目录下可设有二级目录。

安装

composer require tlingc/think-lang

使用

基础配置

请参照 官方文档 进行相关配置。同时注意如下与官方文档的不同点。

开启和加载语言包

中间件名称为:

'tlingc\lang\middleware\LoadLangPack',

由于多语言通过二级目录访问,使用Cookie保存语言 功能无效。

语言文件定义

自动加载的应用语言文件:

// 单应用模式
app\lang\当前语言.php
app\lang\当前语言\*.php
app\lang\当前语言\*\*.php

// 多应用模式
app\应用\lang\当前语言.php
app\应用\lang\当前语言\*.php
app\应用\lang\当前语言\*\*.php

请注意此拓展包没有对语言包解析行为进行修改,语言文件的文件名不会影响语言分组,在多个文件中存在相同定义时会导致被覆盖。

路由设置

使用二级目录访问对应语言页面,必须使用路由定义,同时建议开启 强制路由 模式。

use think\facade\Config;

Route::view('/', 'index/index');

$langs = Config::get('lang.allow_lang_list');
foreach($langs as $lang){
    Route::rule($lang . '/', 'index/index');
    Route::rule($lang . '/welcome', 'index/welcome');
}

重写 url 助手函数

在应用公共文件 common.php 中加入。

use think\facade\Request;
use think\facade\Lang;
use think\facade\Route;
use think\route\Url as UrlBuild;

function url(string $url = '', array $vars = [], $suffix = true, $domain = false, $lang = true, $replace = false): UrlBuild
{
    if (!$lang) {
        if($replace) {
            $explode = explode('/', Request::url(), 3);
            $url = $url . $explode[2];
        }
        return Route::buildUrl($url, $vars)->suffix($suffix)->domain($domain);
    }
    $lang = Lang::getLangSet();
    return Route::buildUrl('/' . $lang . $url, $vars)->suffix($suffix)->domain($domain);
}

对比官方提供的助手函数,增加了 $lang$replace 参数。

普通跳转,生成url时会自动带上前方的语言名称。

url('/welcome')

如需仅替换url中的语言名称(如在语言选择器中使用),把 $replace 参数置为 true 即可。

TODO

  • [ ] 整合路由定义方法。
  • [ ] 整合重写url参数。

协议

MIT

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 小程序云开发 - 二维码生成工具

    二维码生成使用了qrcode库,可参考:https://www.npmjs.com/package/qrcode

    TLingC
  • 在ThinkPHP中使用Laravel Mix

    参照Laravel Mix文档,可以用在独立项目中,因此可以在ThinkPHP根目录下,参照Laravel项目,建立如下两个文件:

    TLingC
  • ThinkPHP 6.0 实现二级目录多语言功能

    ThinkPHP内置了多语言功能,但是它是通过判断URL参数、Cookies、HTTP_ACCEPT_LANGUAGE请求参数来返回语言包的,由于多种语言的UR...

    TLingC
  • python获取微信公众号文章里的网页图片

    昨天一番为electron写了个开篇,本来今天应该继续的,但一番回来收拾完了快10点了,吃了夜宵看了电影都12点了。好吧,工作太累,放松一下。现在开始写文章了。...

    efonfighting
  • “共享经济”的风催熟了“信用经济”

    数据猿导读 用信用代替押金,打造“信用社会”,是一种可行的解决方案。近日,6家共享单车接入支付宝,只要芝麻信用达到要求,用户就可通过支付宝的共享单车“扫一扫”轻...

    数据猿
  • 在微信小程序中实现商品曝光的统计

    在电商运营的工作中,运营人员需要关心很多数字,除了简单的PV和UV外,还有商品曝光量、商品浏览量、加入购物车、支付量,基于这些数字可以构建漏斗模型,帮助优化各个...

    用户1687375
  • Django url 反向解析 和 命令空间

    对于高质量的Web 应用来说,使用简洁、优雅的URL 模式是一个非常值得重视的细节。Django 让你随心所欲设计你的URL,不受框架束缚。

    KEVINGUO_CN
  • Spring Batch 在默认情况下的任务执行

    考察项目:https://github.com/cwiki-us-spring/cwiki-us-spring-batch-examples 你可以 Check...

    HoneyMoose
  • Spring Batch 在默认情况下的任务执行

    考察项目:https://github.com/cwiki-us-spring/cwiki-us-spring-batch-examples 你可以 Check...

    HoneyMoose
  • 软件工程实践专题第一次作业

    py3study

扫码关注云+社区

领取腾讯云代金券