SilverStripe文件标题翻译

时间:2016-07-26 15:13:25

标签: file internationalization silverstripe

是否可以为资产文件夹中的所有文件翻译File Title

我安装了可翻译插件,但在i18n SilverStripe章节或插件文档中没有文件翻译文档。

CMS File Title field screenshot

在我的ProductPage我有File上传的自定义字段:

$fields->addFieldToTab(
    'Root.Attachments',
    $uploadField = UploadField::create('Files', 'Dateien')
);

这些文件可以在英语和德语网站上。我需要为每种语言翻译File Title

我尝试了以下操作,但当我更改File Title时,它会更改德语和英语:

// Apply Translatable modifications
$this->applyTranslatableFieldsUpdate($fields, 'updateCMSFields');

2 个答案:

答案 0 :(得分:2)

要在我们的File课程中启用可翻译模块,我们必须在Translatable文件中将File扩展名添加到mysite/_config.php

File::add_extension('Translatable');

但是,我不认为Translatable模块目前正在处理文件。

访问资产时出错,因为Translatable类尝试向Folder类添加字段,这会导致错误。现在已使用此pull request to fix the Folder error修复了最新版本。

下一个问题是Translatable要求对象具有CMSEditLink功能。 SiteTreeSiteConfig具有CMSEditLink功能,但File(和DataObject)却没有。

要解决此问题,我们可以创建FileExtension来为CMSEditLink定义File函数:

class FileExtension extends DataExtension {
    public function CMSEditLink() {
        return singleton('AssetAdmin')->Link('EditForm/field/File/item/' . $this->owner->ID . '/edit');
    }
}

要启用此扩展程序,我们会将以下内容添加到config.yml

File:
  extensions:
    - FileExtension

完成所有这些后,我们可以创建文件翻译并查看每个文件的翻译列表,但翻译文件链接重定向到根管理员屏幕。如果设置了?Locale= URL参数,资产链接似乎会重定向。此URL参数由可翻译模块设置。

因此,在完成所有工作后,这仍然无效。

答案 1 :(得分:1)

当你开始使用它时,我建议你read the docs

要回答每当您创建字段,然后指定标题,您需要使用_t or internationalisation function

_t函数是silverstripe用于所有字段的函数,因此您只需要为指定的函数找到正确的命名空间和实体名称字符串...

_t("Namespace.Entity","This is a string") 

对于突出显示的字段,它位于对象File中,它是命名空间,实体是Name,您可以在framework\lang\en.yml

中看到这一点

要覆盖它,你可以在mysite或你的模块文件夹中创建你自己的lang文件,并在其中详细覆盖它......

en:
  File:
    Name: My New Name Title