【问题标题】:How to make multi-language static website in cakephp 3.2?如何在 cakephp 3.2 中制作多语言静态网站?
【发布时间】:2017-07-23 09:21:11
【问题描述】:

需要在 CakePHP 3.2 中制作多语言网站的步骤。 网站内容是静态的

【问题讨论】:

  • 这部分在 CakePHP 食谱上有很好的记录
  • 我只需要了解静态内容,而不是所有类型的内容,而不需要使用翻译器。它没有记录。
  • 这部分正是你需要的book.cakephp.org/3.0/en/core-libraries/…
  • 我知道食谱在哪里我需要知道如何实现翻译

标签: php cakephp internationalization cakephp-3.0


【解决方案1】:

完成代码

使用印地语和英语的链接在网站中更改语言,也可以添加任何其他语言

<div class="navbar-brand pull-right" style='padding: 15px 0px;'>
        <button class="btn btn-default dropdown-toggle pull-right" data-toggle="dropdown">

        </button>
        <ul class="dropdown-menu">

            <li>
                <?php 

                echo $this->Html->link("Hindi", array("controller" => "App", "action" => "changeLanguage",'hi')); 
                ?>
            </li>
            <li class="divider"></li>

             <li>
                <?php 

                echo $this->Html->link("English", array("controller" => "App", "action" => "changeLanguage",'en')); 
                ?>
            </li>
        </ul>

    </div>

在 App Controller 中的初始化方法中添加以下代码

 $language = $this->Cookie->read('website_language');
    if (isset($language)) {
        I18n::locale($language);
    } else {
        I18n::locale('en_US');
    }

添加了一个新方法进行更改

  public function changeLanguage($lang) {

    if (!empty($lang)) {
        if ($lang == 'hi') {
            //$this->request->session()->write('website_language', 'hi_IN');
            $this->Cookie->write('website_language', 'hi_IN');
        } else if ($lang == 'en') {
            //$this->request->session()->write('website_language', 'en_US');
            $this->Cookie->write('website_language', 'en_US');
        }
        //in order to redirect the user to the page from which it was called
        $this->redirect($this->referer());
    }
}

创建文件夹和文件

/src
/Locale
    /en_US
        default.po
    /hi_IN
        default.po

  default.po

希望对您有所帮助。 如果人们不知道问题的答案,那么至少不要记下这个问题:)

【讨论】:

  • 您的问题没有被否决,因为人们不知道答案,它被否决是因为它研究不足,缺乏任何细节甚至问题描述,并且基本上要求一步一步-step 教程,在 StackOverflow 上被认为是题外话。有关asking good questions 的更多信息,请参阅询问指南。非常感谢您进行了一些研究并自己回答了问题,但这并没有使实际问题变得更好,因此您可能会收到更多的反对票。
  • 如果我必须阅读文档才能在 stackoverflow 上写一个问题,那么我认为最好在谷歌上搜索而不是在这里写问题......
  • 嗯,这由你决定。如果您只想快速获得答案,并且不想花太多精力询问,那么 StackOverflow 可能不适合您,因为这是一个应该对每个人都有用的社区,而不仅仅是对特定个人有用。如果你学会了如何正确地提出问题,那么你不仅会得到更好的答案,还会帮助未来的读者,随着时间的推移,你会更好地帮助自己,你可能会成为社区的一员可以帮助其他提问者,并有助于使 StackOverflow 成为对每个人都更好的地方。
【解决方案2】:

为了扩展Vinit的答案,在App Controller中你需要设置Cookie Component

use Cake\Controller\Component\CookieComponent;

同样初始化Class里面的组件

public $components = array('Cookie');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2014-06-28
    • 2014-07-24
    • 2013-06-14
    • 1970-01-01
    相关资源
    最近更新 更多