【问题标题】:DataObject + TranslatableDataObject + ModelAdminDataObject + TranslatableDataObject + ModelAdmin
【发布时间】:2015-11-09 02:46:00
【问题描述】:

设置:SS 3.1.13、Translatable 2.0.8 和 TranslatableDataObject dev-master。

我有两个 DataObject 类:“Facility”($has_one)和“FacilityType”($has_many),我选择在 ModelAdmin 中进行管理(因为它们是站点所有者的全局属性)。然而,尽管仔细阅读了设置说明here,但我无法获得 TranslatableDataObject 扩展来实际为它们启用翻译。

这是我的 _config.php:

// Set the site locale
i18n::set_locale('en_US');

SiteConfig::add_extension('Translatable');

// Set allowed locales
Translatable::set_allowed_locales(array('en_US', 'pl_PL'));
TranslatableDataObject::set_locales(array('en_US', 'pl_PL'));
Facility::add_extension("Translatable");
Facility::add_extension("TranslatableDataObject"); // tried "TranslatableDataObject('Title')" as well
FacilityCategory::add_extension("Translatable");
FacilityCategory::add_extension("TranslatableDataObject");

谁能确认此设置是否适合我?

FacilityCategory.php

class FacilityCategory extends DataObject {
    private static $db = array(
      'Title' => 'Varchar'
    );

    private static $has_many = array(
      'Facilities' => 'Facility.FacilityCategory'
    );

    public function getCMSFields(){
        $fields = FieldList::create(
            TextField::create('Title')
        );
        return $fields;
    }
}

class FacilityCategoryAdmin extends ModelAdmin {
    private static $menu_title = 'Facility Categories';
    private static $url_segment = 'facility-categories';
    private static $managed_models = array(
        'FacilityCategory'
    );
}

Facility.php

class Facility extends DataObject {
    private static $db = array(
        'Title' => 'Varchar',
    );

    private static $has_one = array(
        'Category' => 'FacilityCategory'
    );

    private static $summary_fields = array(
        'Title' => 'Name',
        'Category.Title' => 'Type'
    );

    public function getCMSFields(){
        $fields = FieldList::create(
            TextField::create('Title'),
            DropdownField::create('CategoryID', 'Category')
                ->setSource(FacilityCategory::get()->map()->toArray())
                ->setEmptyString('-- select a category --')
        );
        return $fields;
    }
}

class FacilityAdmin extends ModelAdmin {
    private static $menu_title = 'Facilities';
    private static $url_segment = 'facilities';
    private static $managed_models = array(
        'Facility'
    );
}

【问题讨论】:

  • 您应该将 Translatable OR TranslatableDataObject 添加到每个 DataObject。
  • 感谢@wmk,但注释掉对 DataObjects 的 Translatable 调用并没有帮助。它只是一个旁注,还是你认为它绝对应该让它发挥作用?
  • 嗯,这只是一个旁注。为了让它正常工作,您需要与我们分享更多代码,例如您的 ModelAdmin、DataObjects 的 getCMSFields 方法等...
  • @wmk 当然。我用您提出的代码更新了问题(仅将FacilityType 重命名为FacilityCategory)。

标签: internationalization silverstripe data-objects modeladmin


【解决方案1】:

我已经帮你调查过了。

我使用以下方式安装了一个新的 SS 站点:

composer create-project silverstripe/installer

然后我添加了可翻译:

composer require silverstripe/translatable ~2.0.8

我的 _config.php 看起来像这样:

<?php

global $project;
$project = 'mysite';

global $database;
$database = '';

require_once('conf/ConfigureFromEnv.php');

// Set the site locale
i18n::set_locale('en_GB');
Translatable::set_default_locale('en_GB');
MyObj::add_extension('Translatable');

我创建了一个 ModelAdmin。

我在浏览器中导航到 /dev/build?flush=all

然后我导航到 CMS 中的 ModelAdmin,我看到了这个:

我认为部分问题是您同时使用两个可翻译模块,您只需要一个。

除此之外,我不知道您为什么看不到可翻译标签。您是否遇到任何 PHP 错误,是否已刷新或完成 /dev/build?

【讨论】:

  • 我在全新的设置中检查了这一点,但它不适用于我的班级机器人。只要对象之间不涉及任何关系,翻译就会出现(只是在两个类中留下$db 属性,devbuild/flushed 和翻译选项卡出现)。但是,它仍然没有完全工作,因为“创建”按钮死了 - 它没有在点击时创建翻译。
猜你喜欢
  • 2013-04-17
  • 2015-11-08
  • 2016-06-25
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 2011-08-12
相关资源
最近更新 更多