【问题标题】:How to translate a Tab name and a TextField?如何翻译选项卡名称和文本字段?
【发布时间】:2016-07-26 07:15:28
【问题描述】:

我正在尝试翻译TabTextField,但目前没有翻译。当前设置如下:

语言环境设置为_config.php - 我已刷新。

i18n::set_locale('de_DE');

mysite/lang/de.yml

de:
  Page:
    FULLNAME: 'Testing this'
    CONTACTDETAILS: 'Root.Trying to change to this text'

Page.php

<?php
class Page extends SiteTree {

    private static $db = array(
        'FullName' => 'Varchar(255)'
    );

    public function getCMSFields()
    {
        $fields = parent::getCMSFields();
        $fields->addFieldsToTab(_t('Page.CONTACTDETAILS', 'Root.ContactDetails'), array(
            TextField::create('FullName', _t('Page.FULLNAME', 'Full Name'))
        ));
        return $fields;
    }

}

但是文本没有被翻译,它只是用英文显示。我做错了什么?

【问题讨论】:

    标签: silverstripe


    【解决方案1】:

    CMS 使用当前登录用户的 Locale 字段进行翻译 afaik。您可以通过转到Security,选择用户并将Interface Language 更改为German (Germany),将用户的区域设置更改为de_DE(此时您的翻译应该可以工作)。

    如果您只想翻译其中的字段,也可以在 getCMSFields 中设置语言环境:

    public function getCMSFields()
    {
        $oldLocale = i18n::get_locale();
        i18n::set_locale('de_DE');
        $fields = parent::getCMSFields();
        $fields->addFieldsToTab(_t('Page.CONTACTDETAILS', 'Root.ContactDetails'), array(
            TextField::create('FullName', _t('Page.FULLNAME', 'Full Name'))
        ));
        i18n::set_locale($oldLocale);
        return $fields;
    }
    

    通过 CMS 创建的新用户的 Locale 将根据创建它们的用户的 Locale 进行设置。

    【讨论】:

    • 啊,是的,按照您的说法更改了用户的界面语言并且它起作用了。我确实必须添加“根”。到我的 yml 文件,因此它可以在选项卡上工作,因为它会引发错误。例如CONTACTDETAILS: 'Root.Trying to change to this text' - 谢谢:)
    • 最好的做法是省略“Root”。从 yml 文件中改为:$fields-&gt;addFieldsToTab('Root.' . _t('Page.CONTACTDETAILS', 'Contact details'), [...]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 2019-05-24
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多