, (*1)
, (*2)
Translatable behavior
, (*3)
Translatable behavior aggregates logic of linking translations to the primary model., (*4)
Installation
The preferred way to install this extension is through composer., (*5)
Either run, (*6)
$ composer require yiimaker/yii2-translatable
or add, (*7)
"yiimaker/yii2-translatable": "~1.0"
to the require
section of your composer.json
., (*8)
Usage
- Add behavior to the your primary model
public function behaviors()
{
return [
// ...
'translatable' => [
'class' => TranslatableBehavior::className(),
// 'translationRelationName' => 'translations',
// 'translationLanguageAttrName' => 'language',
// 'attributeNamePattern' => '%name% [%language%]',
'translationAttributeList' => [
'title',
'description',
],
],
];
}
- And use
getTranslation()
or translateTo()
methods
// product is an active record model with translatable behavior
$product = new Product();
// sets translation for default application language
$product->title = 'PhpStrom 2018.1';
$product->description = 'Лицензия PhpStrom IDE версия 2018.1';
// gets translation for English language
$translation = $product->getTranslation('en');
$translation->title = 'PhpStrom 2018.1';
$translation->description = 'License of the PhpStrom IDE version 2018.1';
// sets description for French language
$product->translateTo('fr')->description = 'La licence de PhpStorm IDE la version 2018.1';
$product->insert();
translateTo()
it's just an alias for getTranslation()
method., (*9)
After saving the model you can fetch this model from the database and translatable behavior will fetch all translations automatically., (*10)
$product = Product::find()
->where(['id' => 1])
->with('translations')
->one()
;
// gets translation for English language
$product->translateTo('en')->description; // License of the PhpStrom IDE version 2018.1
// gets translation for French language
$product->translateTo('fr')->description; // La licence de PhpStorm IDE la version 2018.1
// check whether Ukrainian translation not exists
if (!$product->hasTranslation('uk')) {
$product->translateTo('uk')->description = 'Ліцензія PhpStrom IDE версія 2018.1';
}
// update Enlish translation
$product->translateTo('en')->title = 'PhpStorm IDE';
$product->update();
Tests
You can run tests with composer command, (*11)
$ composer test
or using following command, (*12)
$ codecept build && codecept run
Contributing
For information about contributing please read CONTRIBUTING.md., (*13)
, (*14)
License
, (*15)
This project is released under the terms of the BSD-3-Clause license., (*16)
Copyright (c) 2017-2022, Yii Maker, (*17)