2023-04-12 18:50:52 2778次浏览 3条回答 0 悬赏 10 金钱

我现在遇到这样一个问题,网站多语言,默认为英文
http://www.test.com/ http://www.test.com/aboutus 这是默认语言英文的路径
http://www.test.com/zh-TW http://www.test.com/zh-TW/aboutus 这是语言繁体的路径
http://www.test.com/zh-CN http://www.test.com/zh-CN/aboutus 这是语言简体的路径

要怎么实现这样的功能,请大神们多指教,新手学习中。。。

  • 回答于 2023-04-14 13:39 举报

    要实现 Yii2.0 框架网站的多语言功能,需要以下步骤:

    安装 Yii2.0 的扩展包 yii2-i18n(Internationalization)。

    在应用程序配置文件中(一般是 config/web.php)配置语言包和翻译文件:

    'components' => [
        'i18n' => [
            'translations' => [
                'app*' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                    'basePath' => '@app/messages',
                ],
            ],
        ],
    ],
    

    其中,app* 是消息分类,@app/messages 是翻译文件的存储路径。

    在应用程序中使用 Yii2.0 提供的翻译函数 Yii::t() 来输出翻译文本。例如:

    echo Yii::t('app', 'Hello, World!');
    

    在 URL 中加入语言参数。可以使用 Yii2.0 的 URL 管理器来实现。例如:

    'urlManager' => [
        'class' => 'yii\web\UrlManager',
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
            '<language:\w{2}>/<controller:\w+>/<action:\w+>' => '<controller>/<action>',
            '<language:\w{2}>' => 'site/index',
        ],
    ],
    

    其中,<language:\w{2}> 是 URL 规则,表示匹配两个字母的语言代码;<controller:\w+> 和 <action:\w+> 是控制器和操作的参数名,表示匹配控制器和操作的名称;/ 是实际的路由地址。

    在控制器和视图中获取当前语言参数,并加载对应的翻译文件。例如:

    public function actionIndex($language = 'en')
    {
        Yii::$app->language = $language;
        $this->view->title = Yii::t('app', 'Home');
        // ...
    }
    

    在视图中也可以使用 Yii::t() 函数来翻译文本。

    在翻译文件中添加对应语言的翻译。例如:

    // 英文翻译文件 messages/en/app.php
    return [
        'Hello, World!' => 'Hello, World!',
        'Home' => 'Home',
        // ...
    ];
    
    // 繁体中文翻译文件 messages/zh-TW/app.php
    return [
        'Hello, World!' => '你好,世界!',
        'Home' => '主頁',
        // ...
    ];
    
    // 简体中文翻译文件 messages/zh-CN/app.php
    return [
        'Hello, World!' => '你好,世界!',
        'Home' => '首页',
        // ...
    ];
    

    以上就是实现 Yii2.0 框架网站多语言功能的完整步骤。

    , , 觉得很赞
  • 回答于 2023-04-25 13:34 举报

    提供个简单的思路
    像你这个写法首先需要重写路由规则

    $route['en']              = 'index';
    $route['en/(.*)'] = "$1";
    $route['zh-cn']              = 'index';
    $route['zh-cn/(.*)'] = "$1";
    $route['zh-tw']              = 'index';
    $route['zh-tw/(.*)'] = "$1";
    

    然后在获取url的时候,将第一个参数拿来判断,为空则是英文,否则对应的语言

    个人觉得这样的多语言切换太麻烦

    个人想法:
    定义一个全局变量或session,用来存储语言,默认en
    用户切换语言版本后改变这个变量

    觉得很赞
  • 回答于 2024-06-12 01:01 举报

    你要先讲清楚你是多语言还是多地区

    多语言的话靠路由就行了,你这种全站都要的话路由太多了最好在nginx里写,改成query参数或者header头转发给Yii

    多地区的话就一个地区写一个模块吧

您需要登录后才可以回答。登录 | 立即注册
abel88
实习生

abel88

注册时间:2023-04-12
最后登录:2023-04-12
在线时长:0小时17分
  • 粉丝0
  • 金钱0
  • 威望0
  • 积分0

热门问题