devgroup/yii2-multilingual

Allows building yii2 apps for multiple languages using regional URL's and domains

Maintainers

๐Ÿ‘ bethrezen

Package info

github.com/DevGroup-ru/yii2-multilingual

Homepage

Issues

Type:yii2-extension

pkg:composer/devgroup/yii2-multilingual

Statistics

Installs: 2โ€‰647

Dependents: 7

Suggesters: 0

Stars: 14

0.2.1 2016-10-24 13:21 UTC

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT e0a49ec43ee07e667701a9201d207b48094a6f71

  • Alexander Kozhevnikov <b37hr3z3n.woop@gmail.com>

i18nextensionlanguagel10nyii2multilingualhreflang

This package is auto-updated.

Last update: 2026-06-11 18:08:09 UTC


README

Allows building yii2 apps for multiple languages using regional URL's and domains

๐Ÿ‘ Build Status
๐Ÿ‘ codecov.io

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

  1. Remember to take care of language_id when caching multilingual or translatable content
  2. In requests to excluded routes there may be no language_id, but probably can be cookie_language_id
  3. 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)
  4. 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.
  5. Add indexes to your translation tables, especially for language_id and model_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