craffft / translation-fields-bundle
Contao OpenSource CMS 的翻译字段
Requires
- php: ^7.1 || ^8.0
- contao/core-bundle: ~4.9
Requires (Dev)
- contao/manager-plugin: ^2.0
Conflicts
- contao/core: *
- contao/manager-plugin: <2.0 || >=3.0
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