tp5多语言开启

在config.php中配置文件

// 是否开启多语言
    'lang_switch_on'         => true,
    'lang_list'              => ['zh-cn','en-us'],
    'default_filter'         => '',
    'lang_auto_detect'       => true,
    'VAR_LANGUAGE'          => 'lang',  // 默认语言切换变量
    // 默认全局过滤方法 用逗号分隔多个
    'default_filter'         => '',
    // 默认语言
    'default_lang'           => 'zh-cn',

然后在application目录下新建lang文件夹

在html中

<script>
    $('.but').click(function () {
        var data = {'lang': $(this).attr('lang')}
        $.get("{:url('index/index/lang')}", data, function () {
            location.reload();
        })
    })
</script>

<a id="dd-wzqz" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Change language:<span class="caret"></span></a>
                    <ul class="dropdown-menu" aria-labelledby="dd-wzqz">
                        <li><a href="" lang="cn" class="but">Chinese (Simplified)</a></li>
                        <li><a href="" lang="en" class="but">English</a></li>
                        <li><a href="" lang="jp" class="but">Japanese</a></li>
                    </ul>

请求控制器:

构造函数中:

//多语言
        if(!(Cookie::has('think_var'))){
            $this->lang();
        }
        $this->assign('think_lang',Cookie::get('think_var'));

//语言切换
    public function lang() {
        $lang = input('?get.lang') ? input('get.lang') : 'cn';
        switch ($lang) {
            
            case 'cn':   //中文
                cookie('think_var', 'zh-cn');
                break;
            
            case 'en':   //英文
                cookie('think_var', 'en-us');
                break;
            
            case 'jp':    //日语
                cookie('think_var', 'jp');
                break;
            
            //默认语言
            default:
                cookie('think_var', 'zh-cn');
        }
    }

在语言包里lang/en-us.php中

<?php

return [
    "HEANDER_LANG"=>"HEANDER_LANG",
    "HEANDER_LANG_CHT"=>"HEANDER_LANG_CHT",
    "HEANDER_LANG_EN"=>"English",
    'name'=>'english name',
];

?>

最后替换D:\WWW\picture\thinkphp\library\think\Lang.php文件的detect方法   


    public static function detect() {
// 自动侦测设置获取语言选择
        $langSet = Config::get('default_lang');
        if (isset($_GET[self::$langDetectVar])) {
// url中设置了语言变量
            $langSet = strtolower($_GET[self::$langDetectVar]);
            Cookie::set(self::$langCookieVar, $langSet, 3600);
        } elseif (Cookie::get(self::$langCookieVar)) {
// 获取上次用户的选择
            $langSet = strtolower(Cookie::get(self::$langCookieVar));
        } elseif ($langSet) {
// 获取默认语言
            Cookie::set(self::$langCookieVar, $langSet, 3600);
        } elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
// 自动侦测浏览器语言
            preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);
            $langSet = strtolower($matches[1]);
            Cookie::set(self::$langCookieVar, $langSet, 3600);
        }
        if (empty(self::$allowLangList) || in_array($langSet, self::$allowLangList)) {
// 合法的语言
            self::$range = $langSet;
        }
        return self::$range;
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: TP5.0.24 是一个开源框架,其中提供了多语言支持功能。然而,有时候在使用TP5.0.24进行开发时,我们可能会遇到多语言不生效的问题。 造成多语言不生效的原因可能有以下几种: 1. 配置错误:首先,我们需要确保在应用配置文件(config/app.php)中设置了正确的语言包路径。一般情况下,我们会将语言包文件存放在resource/lang目录下,并在配置文件中指定相应的路径。 ``` 'lang_switch_on' => true, 'lang_detect_var' => 'lang', 'lang_list' => ['zh-cn', 'en-us'], 'default_lang' => 'zh-cn', 'pathinfo_depr' => '/', 'allow_lang_list' => ['zh-cn', 'en-us'], ``` 2. 语言包文件错误:其次,我们需要确保语言包文件存在,并且文件名符合TP5语言包命名规范。通常情况下,一个语言包文件包含一个数组,数组的键值对表示相应的语言项和对应的翻译内容。 ``` <?php return [ 'hello' => '你好', 'welcome' => '欢迎', ... ]; ``` 3. 语言切换错误:最后,我们需要确保在应用中正确地切换语言。可以通过URL传递参数、Cookie、Session等方式进行语言切换,具体的实现方式与项目需求相关。 通过检查以上问题并逐一解决,我们就可以解决TP5.0.24多语言不生效的问题。如果以上步骤都已检查无误而仍然无法解决问题,可能是其他代码或配置问题导致的,可以进一步检查和排除。如果实在无法解决,我们可以参考官方文档或者在TP5的开源社区中寻求帮助。 ### 回答2: 在TP5.0.24中,多语言不生效可能有以下几个原因: 1. 未正确配置语言文件路径:TP5.0.24采用了新的语言文件路径配置方式,需要在应用的`config`目录下的`app.php`文件中配置正确的语言文件路径,确保语言文件存在。 2. 语言文件编码不一致:如果语言文件的编码格式与应用的编码格式不一致,会导致多语言不生效。请确保语言文件的编码格式和应用的编码格式匹配。 3. 语言包名称设置问题:在应用的`config`目录下的`app.php`文件中,需要设置`lang_switch_on`为`true`来启用语言包功能,同时需要设置`default_lang`为默认语言包的名称。检查是否正确设置了这两个参数。 4. 缓存问题:多语言不生效可能是由于缓存问题导致的,解决方法是清除应用的缓存,在应用的根目录下执行`php think clear`命令清除缓存。 5. 使用语言变量时的写法问题:在应用代码中使用多语言时,要使用`lang()`函数,同时确保语言包文件中存在要使用的语言变量。 通过检查以上几个方面,可以解决TP5.0.24多语言不生效的问题。如果仍然无法解决,可以考虑更新应用到最新版本,或在官方文档、论坛等渠道寻求进一步帮助。 ### 回答3: 在使用TP5.0.24开发多语言功能时,如果发现多语言不生效,可能有以下几个可能的原因: 1. 配置错误:首先,确保在应用的`config`文件夹下的`app.php`文件中,`default_lang`配置项的值正确设置为你所需要的默认语言。其次,在同一个文件中,确保`lang_switch_on`配置项值为`true`,以启用语言切换功能。另外,检查`lang_list`配置项的值,确保包含了你需要支持的语言列表。 2. 语言包文件问题:多语言功能需要将不同语言的翻译内容存储在语言包文件中。确保你的应用的`lang`文件夹下,已经创建了对应语言语言包文件夹,并在其中创建了用于存放不同语言翻译的PHP文件(如以语言代码为文件名的文件)。 3. 错误的语言切换参数:在切换语言时,确保参数的值正确。在URL中传递`lang`参数或使用`Cookie`进行语言切换时,参数的值需要与你应用中提供的语言代码一致。 以上是一些常见的导致TP5.0.24多语言不生效的原因,希望能对你有所帮助。如果问题仍然存在,建议检查代码中的相关部分,如控制器、视图和配置等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值