craffft/translation-fields-bundle

Contao OpenSource CMS 的翻译字段

2.0.1 2022-02-02 22:44 UTC

This package is auto-updated.

Last update: 2024-08-29 04:48:39 UTC


README

Translation Fields 是一个用于 Contao 开发者的库,允许在 Contao Open Source CMS 中获得优美的翻译字段。每个翻译字段都会获得一个语言标志,并且可以通过将标志更改为另一种语言来进行翻译。翻译将保存到 tl_translation_fields 表中,并且该表的一个键将被存储在字段本身中。

安装

步骤 1:下载包

打开命令行控制台,进入您的项目目录,并执行以下命令以下载此包的最新稳定版本

$ composer require craffft/translation-fields-bundle "dev-master"

此命令要求您已全局安装 Composer,有关说明,请参阅 Composer 文档中的安装章节

步骤 2:启用包

然后,通过将其添加到项目 app/AppKernel.php 文件中注册的包列表中,来启用该包

<?php
// app/AppKernel.php

// ...
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            // ...

            new Craffft\TranslationFieldsBundle\CraffftTranslationFieldsBundle(),
        );

        // ...
    }

    // ...
}

文档

输入类型

您可以在后端使用三种输入类型。

  • TranslationTextField(与输入类型 text 相同)
  • TranslationTextArea(与输入类型 textarea 相同)
  • TranslationInputType(与输入类型 inputType 相同)

如何在 DCA 中定义字段

要使用翻译字段,您必须在您的 DCA 代码中进行以下更改。

  • 为您的字段添加索引
  • 更改输入类型
  • 更改 sql 为 int(10)
  • 为您的字段添加关系

每个字段都使用不同的设置。您可以在以下代码中看到这一点。

示例

文本字段

原始字段

$GLOBALS['TL_DCA']['tl_mytable']['fields']['myfield'] = array
(
    'label'                   => &$GLOBALS['TL_LANG']['tl_mytable']['myfield'],
    'exclude'                 => true,
    'inputType'               => 'text',
    'eval'                    => array('maxlength'=>255),
    'sql'                     => "varchar(255) NOT NULL default ''"
);

更改后的字段

$GLOBALS['TL_DCA']['tl_mytable']['config']['sql']['keys']['myfield'] = 'index';
$GLOBALS['TL_DCA']['tl_mytable']['fields']['myfield'] = array
(
    'label'                   => &$GLOBALS['TL_LANG']['tl_mytable']['myfield'],
    'exclude'                 => true,
    'inputType'               => 'TranslationTextField',
    'eval'                    => array('maxlength'=>255),
    'sql'                     => "int(10) unsigned NOT NULL default '0'",
    'relation'                => array('type'=>'hasOne', 'load'=>'lazy')
);

文本区域字段

原始字段

$GLOBALS['TL_DCA']['tl_mytable']['fields']['myfield'] = array
(
    'label'                   => &$GLOBALS['TL_LANG']['tl_mytable']['myfield'],
    'exclude'                 => true,
    'inputType'               => 'textarea',
    'eval'                    => array('rte'=>'tinyFlash', 'tl_class'=>'long'),
    'sql'                     => "text NULL"
);

更改后的字段

$GLOBALS['TL_DCA']['tl_mytable']['config']['sql']['keys']['myfield'] = 'index';
$GLOBALS['TL_DCA']['tl_mytable']['fields']['myfield'] = array
(
    'label'                   => &$GLOBALS['TL_LANG']['tl_mytable']['myfield'],
    'exclude'                 => true,
    'inputType'               => 'TranslationTextArea',
    'eval'                    => array('rte'=>'tinyFlash', 'tl_class'=>'long'),
    'sql'                     => "int(10) unsigned NOT NULL default '0'",
    'relation'                => array('type'=>'hasOne', 'load'=>'lazy')
);

输入单元字段

原始字段

$GLOBALS['TL_DCA']['tl_mytable']['fields']['myfield'] = array
(
    'label'                   => &$GLOBALS['TL_LANG']['tl_mytable']['myfield'],
    'exclude'                 => true,
    'inputType'               => 'inputUnit',
    'options'                 => array('h1', 'h2', 'h3', 'h4', 'h5', 'h6'),
    'eval'                    => array('maxlength'=>200, 'tl_class'=>'w50'),
    'sql'                     => "blob NULL"
);

更改后的字段

$GLOBALS['TL_DCA']['tl_mytable']['config']['sql']['keys']['myfield'] = 'index';
$GLOBALS['TL_DCA']['tl_mytable']['fields']['myfield'] = array
(
    'label'                   => &$GLOBALS['TL_LANG']['tl_mytable']['myfield'],
    'exclude'                 => true,
    'inputType'               => 'TranslationInputUnit',
    'options'                 => array('h1', 'h2', 'h3', 'h4', 'h5', 'h6'),
    'eval'                    => array('maxlength'=>200, 'tl_class'=>'w50'),
    'sql'                     => "blob NULL",
    'relation'                => array('type'=>'hasOne', 'load'=>'lazy')
);

如何翻译字段值

要翻译当前字段中的键,您可以使用以下方法

翻译值

将字段键翻译为当前语言的翻译值。

$intId = '1485'; // Example value

/* @var $objTranslator Translator */
$objTranslator = \System::getContainer()->get('craffft.translation_fields.service.translator');

$strTranslated = $objTranslator->translateValue($intId);

echo $strTranslated; // Returns e.g. "Hi there!"

您可以选择将强制语言添加到 translateValue 方法中。

$intId = '1485'; // Example value
$strForceLanguage = 'de';

/* @var $objTranslator Translator */
$objTranslator = \System::getContainer()->get('craffft.translation_fields.service.translator');

$strTranslated = $objTranslator->translateValue($intId, $strForceLanguage);

echo $strTranslated; // Returns e.g. "Hallo zusammen!"

翻译数据容器对象

将数据容器对象中的所有翻译字段值翻译为翻译值。

$objDC->exampleValue = '1485'; // Example value

/* @var $objTranslator Translator */
$objTranslator = \System::getContainer()->get('craffft.translation_fields.service.translator');

$objDC = $objTranslator->translateDCObject($objDC);

echo $objDC->exampleValue; // Returns e.g. "Hi there!"

翻译 DCA

将数据容器数组中的所有翻译字段值翻译为翻译值。

$arrDC['exampleValue'] = '1485'; // Example value

/* @var $objTranslator Translator */
$objTranslator = \System::getContainer()->get('craffft.translation_fields.service.translator');

$arrDC = $objTranslator->translateDCArray($arrDC, $strTable);

echo $arrDC['exampleValue']; // Returns e.g. "Hi there!"

一次性执行

如果您已经在您的应用程序字段中有了内容,您必须确保翻译字段不会删除您的数据内容。因此,您必须创建一个一次性脚本,该脚本将当前值插入到 tl_translation_fields 表中,并将键与字段关联起来。

您可以像以下代码那样做

class MyApplicationRunconce extends \Controller
{
    public function run()
    {
        // Code ...

        \Craffft\TranslationFieldsBundle\Util\Updater::convertTranslationField('tl_my_table_name', 'my_field_name');

        // Code ...
    }

    // Code ...
}

例如,您可以从我的扩展 Photoalbums2 的 runonce.php 中查看:https://github.com/Craffft/contao-photoalbums2/blob/master/config/runonce.php