多语言

FastAdmin应用插件中支持多语言切换,如果我们在开发过程中需要使用到多语言展示,可以按以下方法进行修改。

QBJCZqpnkhydLorYy5tcXDvfM5+XnfmLG4Gm4Q==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

语言包文件

LKgkbNxnpMzlEYZufb5hPDy482ijbeVJ/GEoxw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

多语言目录为lang,其中存放以语言标识命名的语言包。

cIbkByotarwOdUzP/ZdW4x+E1Brk+3yMMucCeA==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
addons/mydemo/lang/zh-cn.php
addons/mydemo/lang/en.php
...
OHhRAnTBZuMKNvESRyuSnqKtAiWo/Ji9mVHNyw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

多语言输出

MjekKQpdNUfbTlYh/MwgHyfECoANkS2UU4ffWQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

我们在插件开发过程中可以使用多语言功能来自动输出相应的文字

YRPFTrwcDXHpKLgV7wqT580AxN+OdB2EbbrhoA==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

视图模板

xetANBmDgbWMpsJQjBJT2at29jydPO1J+xuC7g==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

如果我们需要在视图模板中实现多语言输出替换,可以使用如下的方式,例如:

AqUMEcHJFutDLgwYTQODxYUtKHC9uK8Q3nG2vg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
<a href="/">{:__('Home')}</a>
<a href="/">{:__('This is %s,base on %s', 'FastAdmin', 'ThinkPHP5')}</a>
QUjvoRDeEJMWPwfxjcy4wPNkoAm+RdXGaAxe9Q==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

此时我们需要在对应的多语言文件定义语言包,例如:

KtgLiQfydaNkOHhPTTIthM8ygCjjutcoQBIm/w==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
<?php

return [
    'Home'                             => '首页',
    'This is %s,base on %s'            => '这是%s,基于%s'
];
wsFXfyMEmkoKhLTARP129mVPm7askDeUwNETrg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

则在中文语言环境下展示效果为

QlONFJwquLjegSyUSEpw3dbvBSoNcOzdCK4QTQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
<a href="/">首页</a>
<a href="/">这是FastAdmin,基于ThinkPHP5</a>
ynNeLkbviUXqJmfTWb/Vc1gO9+ilOgmiGKWUHA==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

如果未定义语言包,默认会展示为

TqKiUQzSoFlOBvYaErTX9j6kjtVmDKBlJmNQVw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
<a href="/">Home</a>
<a href="/">This is FastAdmin,base on ThinkPHP5</a>
ZSmohlxdXMjkaCPYS666wrrXO8EHmuPqmvl6Ig==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

控制器

GfDIAJMRglnUrzQYfOXlPnFQpjStfhnqSMyiRg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

如果我们需要在控制器中使用多语言,我们仍然可以使用__方法来实现,例如:

OWstXTJkNgGExCAeelEOIHVDEv9h8mQHKDfbXg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
$title = __('Home');
$description = __('This is %s,base on %s', 'FastAdmin', 'ThinkPHP5');
QtsBrRxLPHCANWjUUNAZCYRQ8n/pBK+fxzGmUQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

此时$title$descripttion的值为自动进行多语言转换后的值。

qfANHKhwIzMGSvcirRBk9VFR3e7u0cpZQ7nDdg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

切换多语言

bUpuzXLwNFKHqsfj2JUAxS3I1s8QpXKdYPxJaA==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

当我们有多个语言世时,如果需要在前台切换多语言,我们可以通过以下几种方式进行切换

xvtpsLedNOQXZWcloYTrhZ3FMP201VNhjq0xUg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

URL参数切换

HdDRcnGmMiJvzpLsvivM/IMEwI/dZL0HTqzedw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

我们可以通过传递lang参数来强制使用指定语言包,例如

cKVAjlkGtTHewUdCssTbIUXtKbAOUdWZJvEz/A==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
http://www.example.com/addons/mydemo/?lang=en
http://www.example.com/addons/mydemo/?lang=zh-cn
RCOdHwjuagAZkcGJvFMXHR3bozJDAfoIHaXFGA==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

Cookie变量切换

czNpGhAfyojlrWegOf2p+RsNZJg2MRkkiKRn/g==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

很多时候我们切换一次多语言后,后续请求的页面也需要保持切换后的指定语言来显示,此时我们就需要使用到cookie来存储语言标识。
我们可以通过在PHP中或JS操作think_var这个cookie值来切换多语言。

NeJKknRZVjodElxpBqiiMQyJDk3cZ1LdYHQECw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
//php
setcookie('think_var', 'en');
//js
function setCookie(name,value,seconds) {
    var expires = "";
    if (seconds) {
        var date = new Date();
        date.setTime(date.getTime() + (seconds*1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name + "=" + (value || "")  + expires + "; path=/";
}
setCookie('think_var', 'en');
noSUFTKzLDRmrqYh6CsXwCeTpUErR/IZXjIlmA==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

常见问题

UWkHfpsRiZbemIvc3aHVM4UWhmkXRDSshl0euQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  1. 语言包定义是不区分大小写的
  2. LqiSBcHdCPXyWhJa8mhfvqgurU0guFZPOz3LZA==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  3. 默认多语言会自适应用户当前的浏览环境,如果需要关闭自适应,请修改application/config.php中的lang_switch_on修改为false
  4. KfEbPQogziycVHkt0lovA73DxEoajLaPtULeGg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
文档最后更新时间:2023-09-25 16:24:49
著作权归应用插件开发者所有,未经许可,禁止转载、复制此文档的任何内容。

文档
目录

深色
模式

切换
宽度