sichkarev / yii2-translatable-attributes
组件支持ActiveRecord模型的可翻译属性
1.1
2020-11-21 12:29 UTC
Requires
- php: >=5.6
- ext-json: *
- yiisoft/yii2: ^2.0
Requires (Dev)
- codeception/codeception: ^4.1
- codeception/module-yii2: ^1.1
- codeception/verify: ^1.2
- yiisoft/yii2-faker: ^2.0
This package is auto-updated.
Last update: 2024-09-24 00:45:00 UTC
README
如果您需要将ActiveRecord模型的某些属性翻译成多种语言,则此组件对您非常有用。
要求
- Yii2
- PHP 5.6及以上
安装
通过composer安装
composer require sichkarev/yii2-translatable-attributes "dev-master"
连接
- 创建一个用于存储翻译的json(最佳)、text或varchar类型的字段
$this->addColumn('table','translations', $this->json()->comment('Переводы'));
- 在Yii2配置文件的components部分连接TranslatableComponent,并指定使用的语言列表
'components' => [
/* другие компоненты */
'translate' => [
'class' => TranslatableComponent::class,
'languages' => [
Russian::class,
Ukrainian::class,
English::class,
],
'defaultLanguage' => Russian::class
]
]
为了添加新语言,在类中实现LanguageInterface,填写必要的数据,并将其添加到属性languages
- 将TranslateActiveRecordTrait连接到需要翻译属性的模型类
use TranslateActiveRecordTrait;
- 连接TranslatableBehavior,例如使用addTranslatableBehavior(在TranslateActiveRecordTrait中实现)
- 为类实现TranslatableInterface并创建方法attributeNameForTranslate()。此方法应返回在步骤1中创建的现有字段名称。
class TestTranslatableModel extends ActiveRecord implements TranslatableInterface
{
public function behaviors()
{
return ArrayHelper::merge (
parent::behaviors(),
self::addTranslatableBehavior()
);
}
public function attributeNameForTranslate()
{
return 'translations';
}
}
- 在类的注释中,指出具有每个语言特定值的字段,并添加单词@translate。为了便于使用,需要描述具有翻译的属性,但它们可以物理上不创建(它们将被动态创建)。这些属性是模型的一部分,可以参与验证和其他应用任务(例如在CRUD中)。如果需要自定义标签,则可以在方法attributeLabels()中添加字段名称。
/**
* This is comment of class TestTranslatableModel
* @property string name @translate
* @property string description @translate
*
* Translatable properties:
* @property string nameEn
* @property string nameUa
* @property string descriptionEn
* @property string descriptionUa
*/
- 添加在CRUD表单中编辑字段的功能
<?=$form->field($model, 'name')->widget(TranslateInput::class, [
'className' => 'col-md-6'
]);?>
属性className指定将应用于块的外部CSS类
函数
- setContextLanguage(LanguageInterface $lang) - 设置语言上下文
- clearLangContext() - 清除语言上下文
- andFilterWhereTranslate - 添加对字段的筛选
$query->andFilterWhereTranslate(['like', 'nameEn', '%' . $this->nameEn . '%'])
例如
if ($promocodeType = PromocodeType::findOne(1)) {
$promocodeType->name = 'Русский';
$promocodeType->nameUa = 'Украинский';
$promocodeType->setLangContext(new Ukrainian());
echo $promocodeType->name; //Украинский
}
在测试用例src/Tests/TranslateActiveRecordTest.php中展示了各种功能的完整示例。
测试CRUD
为了理解项目中的所有工作,有一个测试CRUD。要启动测试CRUD,请执行以下操作:
- 将模块连接到您的目录之一(后端、前端)
'modules' => [
/* другие модули */
'translate' => [
'class' => TranslatableCrudModule::class
],
]
- 运行迁移以创建测试表
php yii migrate --migrationPath=@vendor/sichkarev/yii2-translatable-attributes/src/Migrations --interactive=0
- 打开您目录的/translate/地址的CRUD
好像就这样了,如果有什么问题,请留言、修改代码并提交请求。