devgroup / yii2-multilingual
Allows building yii2 apps for multiple languages using regional URL's and domains
Installs: 2 635
Dependents: 7
Suggesters: 0
Security: 0
Stars: 14
Watchers: 10
Forks: 8
Type:yii2-extension
Requires
- devgroup/yii2-tag-dependency-helper: ~1.4.0
- kartik-v/yii2-icons: ~1.4.0
- yii2tech/filedb: ^1.0@dev
- yiisoft/yii2: ^2.0.6
Requires (Dev)
- devgroup/dotplant-dev: ~1.0.0
This package is auto-updated.
Last update: 2024-11-11 14:49:26 UTC
README
Allows building yii2 apps for multiple languages using regional URL's and domains
Quick start:
WARNING: This extension is under active development.
For support - join DotPlant2 gitter channel.
Installation
The preferred way to install this extension is through composer.
Either run
php composer.phar require --prefer-dist devgroup/yii2-multilingual "*"
or add
"devgroup/yii2-multilingual": "*"
to the require section of your composer.json
file.
Usage
Configure your application
In your web.php
config add the following components:
// URL Manager is needed to build correct URL's 'urlManager' => [ 'class' => \DevGroup\Multilingual\components\UrlManager::className(), 'excludeRoutes' => [ //'newsletter/index', //'newsletter/test', ], 'rules' => [ '' => 'post/index', ], ], // this is the main language and geo detection component 'multilingual' => [ 'class' => \DevGroup\Multilingual\Multilingual::className(), // the list of handlers that will try to detect information(see also sypex-geo-daemon provider) 'handlers' => [ [ 'class' => \DevGroup\Multilingual\DefaultGeoProvider::className(), 'default' => [ 'country' => [ 'name' => 'England', 'iso' => 'en', ], ], ], ], ], // this is simple storage for Languages configuration 'filedb' => [ 'class' => 'yii2tech\filedb\Connection', 'path' => __DIR__ . '/data', ],
Creating translatable ActiveRecord
As our implementation is based on creocoder/yii2-translatable
- the use creation of multilingual ActiveRecords is very similar.
The main differences from creocoder2/yii2translatable
:
- no need to set
translationAttributes
- they automatically detected from translation model - language field is
language_id
of integer type
In your ActiveRecord class(for example Post
) add trait and behavior:
use DevGroup\Multilingual\behaviors\MultilingualActiveRecord; use DevGroup\Multilingual\traits\MultilingualTrait; /** * Class Post * @property integer $author_id */ class Post extends \yii\db\ActiveRecord { use MultilingualTrait; /** * @inheritdoc */ public function behaviors() { return [ 'multilingual' => [ 'class' => MultilingualActiveRecord::className(), 'translationPublishedAttribute' => 'is_active', ], ]; } public static function tableName() { return '{{%post}}'; } }
HrefLang
Add one line into your HEAD section of layout view:
<?= \DevGroup\Multilingual\widgets\HrefLang::widget() ?>
Tips
- Remember to take care of language_id when caching multilingual or translatable content
- In requests to excluded routes there may be no
language_id
, but probably can becookie_language_id
- If you want to generate URL's from console application you may need to configure additional params(see https://github.com/DevGroup-ru/yii2-multilingual-demo/blob/master/config/console.php)
- MultilingualTrait adds default conditions to find and is not required for use. But if you don't use it - you must manually configure proper relations.
- Add indexes to your translation tables, especially for
language_id
andmodel_id
pair.
Credits and inspiration sources
- Michael Härtl - author of codemix/yii2-localeurls
- Company BINOVATOR - authors of SypexGeo database and php class
- Alexander Kochetov (@creocoder) - yii2-translatable package