静态数据的CakePHP本地化

静态数据的CakePHP本地化,cakephp,localization,cakephp-3.0,Cakephp,Localization,Cakephp 3.0,CakePHP版本:3.6.6 我为这么长的帖子提前道歉,但我相信这是所有需要帮助的人所需要的信息 ============================================================================================================================ 第1节 //我想要实现的目标 最后,我希望我的应用程序能够自动检测用户的语言,并相应地更改以下内容: 文本 日期格式 数字格式 货币 为了实现这一点,

CakePHP版本:3.6.6

我为这么长的帖子提前道歉,但我相信这是所有需要帮助的人所需要的信息

============================================================================================================================ 第1节

//我想要实现的目标

最后,我希望我的应用程序能够自动检测用户的语言,并相应地更改以下内容:

  • 文本
  • 日期格式
  • 数字格式
  • 货币
  • 为了实现这一点,我开始简化它,不尝试自动检测用户的语言,而是在config/app.php中手动更改区域设置

    ============================================================================================================================ 第2节

    //我引用的信息

  • 国际化与本地化-

  • I18N壳-

  • ============================================================================================================================ 第3节

    //开始之前我拥有的

    config/app.php
    'defaultLocale'=>env('APP\u DEFAULT\u LOCALE','en\u GB')

    config/bootstrap.php
    ini_set('intl.default_locale',Configure::read('App.defaultLocale')

    //欢迎控制器

    ?php
    namespace App\Controller;
    
    use App\Controller\AppController;
    use Cake\Event\Event;
    
    // For translation
    use Cake\I18n\I18n;
    use Cake\I18n\Time;
    use Cake\I18n\Number;
    
    class WelcomeController extends AppController
    {   
        public function index()
        {
            // Get the default locale
            $defaultLocale = I18n::getDefaultLocale();
            echo $defaultLocale . '<br />';
    
            // Date
            $date = new Time('2017-12-05 23:00:00'); 
            echo $date . '<br />';
    
            // Number
            echo Number::format(123.50) . '<br />';
    
            // Currency
            echo Number::currency(1250.00) . '<br /><br />';        
        }     
    }
    
    ============================================================================================================================ 第4节

    //我所做的

    1。在src中创建了一个名为Locale的文件夹
    2.在区域设置中创建了一个名为de_de的文件夹

    3.使用cli导航到bin。
    4.键入cake i18n extract并单击enter。
    5.单击enter后,cli将显示以下内容:

    当前路径:无
    您要提取的路径是什么?
    [Q] uit[D]one
    [C:xampp\htdocs\app\u name\src]>

    然后在>之后添加以下内容,并单击enter
    C:xampp\htdocs\app\u name\src\Template\Welcome

    6.单击enter后,cli将显示以下内容:

    当前路径:C:xampp\htdocs\app\u name\src\Template\Welcome
    您要提取的路径是什么?
    [Q] uit[D]one
    [D] >

    7。I然后单击enter,cli将显示以下内容:

    是否要从CakePHP核心提取消息?(是/否)
    [n] >

    8。I然后单击enter,cli将显示以下内容:

    您希望输出的路径是什么?
    [Q] uit
    [C:xampp\htdocs\app\u name\src\Template\Welcome\Locale]>

    然后在>之后添加以下内容,并单击enter
    C:xampp\htdocs\app\u name\src\Locale

    9。I然后单击enter,cli将显示以下内容:

    是否要将所有域字符串合并到default.pot文件中?(是/否)
    [n] >

    10。I然后单击enter,cli将显示以下内容:

    正在提取…
    路径:C:xampp\htdocs\app\u name\src\Template\Welcome
    输出目录:C:xampp\htdocs\app\u name\src\Locale\
    ===========================================================================================>100%
    完成。

    11。之后,我在src/Locale文件夹中有一个default.pot文件。我将此文件复制并粘贴到de_de文件夹中。

    该文件夹的内容如下:

    # LANGUAGE translation of CakePHP Application
    # Copyright YEAR NAME <EMAIL@ADDRESS>
    #
    #, fuzzy
    msgid ""
    msgstr ""
    "Project-Id-Version: PROJECT VERSION\n"
    "POT-Creation-Date: 2018-09-05 09:20+0000\n"
    "PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n"
    "Last-Translator: NAME <EMAIL@ADDRESS>\n"
    "Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=utf-8\n"
    "Content-Transfer-Encoding: 8bit\n"
    "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
    
    #: Template/Welcome/index.ctp:52
    msgid "Welcome"
    msgstr ""
    
    #: Template/Welcome/index.ctp:58
    msgid "What would you like to do today!"
    msgstr ""
    
    然后,我将config/app.php中的默认区域设置更改为:
    'defaultLocale'=>env('APP\u DEFAULT\u LOCALE','de\u de')

    然后刷新浏览器并显示以下内容:

    de_DE
    05.12.15, 23:00
    123,5
    1.250,00 €
    Welcome
    What would you like to do today!
    
    de_DE
    05/12/2015, 23:00
    123.5
    £1,250.00
    Welcome
    What would you like to do today!  
    
    ============================================================================================================================ 第5节

    //结果

    区域设置、日期、编号和货币已更改,但文本未更改。它仍然显示:

    Welcome
    What would you like to do today!
    
    我希望它能显示:

    abc
    xyz
    
    ============================================================================================================================ 第6节

    //我试图解决的问题

    我在中间件Application.php中添加了以下内容:

    // Add middleware and set the valid locales
    $middlewareQueue->add(new LocaleSelectorMiddleware(['en_GB', 'de_DE']));
    
    这就是浏览器显示的内容:

    de_DE
    05.12.15, 23:00
    123,5
    1.250,00 €
    Welcome
    What would you like to do today!
    
    de_DE
    05/12/2015, 23:00
    123.5
    £1,250.00
    Welcome
    What would you like to do today!  
    
    区域设置仍然是de_de,但日期、数字和货币已恢复为英语

    ============================================================================================================================ 第7节

    //摘要

    我真的非常感谢在这方面的任何帮助,因为如果我能将我的应用程序本地化,并具有允许用户以他们的母语使用我的应用程序的功能,那将是非常棒的。如果我做不到这一点,我真的在限制我的市场

    如果还有什么我没有写但你需要的,请不要犹豫,让我知道

    非常感谢您的帮助。Z

    ============================================================================================================================

    @ndm-感谢您的回复,已经学到了很多,但仍然没有雪茄

    我下载了Poedit并打开了它。然后我单击“编辑翻译”,并从Locale文件夹打开default.pot文件

    一切看起来都很好,并显示以下内容:
    欢迎光临
    你今天想做什么

    然后单击“创建新翻译”并从下拉列表中选择德语,窗口分为两半:

    左侧-源文本-英语。
    右图-翻译-德语

    我突出显示“欢迎”,并选择德语对应的“Willkomen”,然后在右侧窗口中填充。我也这么做
    de_DE
    05/12/2015, 23:00
    123.5
    £1,250.00
    Welcome
    What would you like to do today!  
    
    # LANGUAGE translation of CakePHP Application
    # Copyright YEAR NAME <EMAIL@ADDRESS>
    #
    msgid ""
    msgstr ""
    "Project-Id-Version: PROJECT VERSION\n"
    "POT-Creation-Date: 2018-09-05 09:41+0000\n"
    "PO-Revision-Date: 2018-09-05 14:26+0100\n"
    "Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Content-Transfer-Encoding: 8bit\n"
    "Plural-Forms: nplurals=2; plural=(n != 1);\n"
    "X-Generator: Poedit 2.1.1\n"
    "Last-Translator: \n"
    "Language: de\n"
    
    #: Template/Welcome/index.ctp:52
    msgid "Welcome"
    msgstr "Willkommen"
    
    #: Template/Welcome/index.ctp:58
    msgid "What would you like to do today!"
    msgstr "Was würden Sie heute gerne machen!"