2017 © Pedro Peláez
 

yii2-extension yii2-multilanguages

The translateable behavior for the Yii2 framework

image

noname9/yii2-multilanguages

The translateable behavior for the Yii2 framework

  • Thursday, May 11, 2017
  • by noname9
  • Repository
  • 1 Watchers
  • 0 Stars
  • 18 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 5 Versions
  • 0 % Grown

The README.md

yii2-multilanguages

A translateable behavior for the Yii2 framework., (*1)

Installation

The preferred way to install this extension is through composer., (*2)

Either run, (*3)

$ composer require noname9/yii2-multilanguages

or add, (*4)

"noname9/yii2-multilanguages": "~1.0"

to the require section of your composer.json file., (*5)

Migrations

Run the following command, (*6)

$ yii migrate/create create_post_table

Open the /path/to/migrations/m_xxxxxx_xxxxxx_create_post_table.php file, inside the up() method add the following, (*7)

$this->createTable('{{%post}}', [
    'id' => $this->primaryKey(),
]);

Run the following command, (*8)

$ yii migrate/create create_post_translation_table

Open the /path/to/migrations/m_xxxxxx_xxxxxx_create_post_translation_table.php file, inside the up() method add the following, (*9)

$this->createTable('{{%post_translation}}', [
    'id' => $this->primaryKey(),
    'post_id' => $this->integer()->notNull(),
    'language' => $this->string(8)->notNull(),
    'title' => $this->string(1024)->notNull(),
    'body' => $this->text(),
]);

Configuring

Configure model as follows, (*10)

use creocoder\translateable\TranslateableBehavior;

/**
 * ...
 * @property string $title
 * @property string $body
 * ...
 */
class Post extends \yii\db\ActiveRecord
{
    public function behaviors()
    {
        return [
            'translateable' => [
                'class' => TranslateableBehavior::className(),
                'translationAttributes' => ['title', 'body'],
                // translationRelation => 'translations',
                // translationLanguageAttribute => 'language',
            ],
        ];
    }

    public function transactions()
    {
        return [
            self::SCENARIO_DEFAULT => self::OP_INSERT | self::OP_UPDATE,
        ];
    }

    public function getTranslations()
    {
        return $this->hasMany(PostTranslation::className(), ['post_id' => 'id']);
    }
}

Model PostTranslation can be generated using Gii., (*11)

Usage

Setting translations to the entity

To set translations to the entity, (*12)

$post = new Post();

// title attribute translation for default application language
$post->title = 'Post title';

// body attribute translation for default application language
$post->body = 'Post body';

// title attribute translation for German
$post->translate('de-DE')->title = 'Post titel';

// body attribute translation for German
$post->translate('de-DE')->body = 'Post inhalt';

// title attribute translation for Russian
$post->translate('ru-RU')->title = 'Заголовок поста';

// body attribute translation for Russian
$post->translate('ru-RU')->body = 'Тело поста';

// save post and its translations
$post->save();

Getting translations from the entity

To get translations from the entity, (*13)

$posts = Post::find()->with('translations')->all();

foreach ($posts as $post) {
    // title attribute translation for default application language
    $title = $post->title;

    // body attribute translation for default application language
    $body = $post->body;

    // title attribute translation for German
    $germanTitle = $post->translate('de-DE')->title;

    // body attribute translation for German
    $germanBody = $post->translate('de-DE')->body;

    // title attribute translation for Russian
    $russianTitle = $post->translate('ru-RU')->title;

    // body attribute translation for Russian
    $russianBody = $post->translate('ru-RU')->body;
}

Checking for translations in the entity

To check translations in the entity, (*14)

$post = Post::findOne(1);

// checking for default application language translation
$result = $post->hasTranslation();

// checking for German translation
$result = $post->hasTranslation('de-DE');

// checking for Russian translation
$result = $post->hasTranslation('ru-RU');

Advanced usage

Collecting tabular input

Example of view form, (*15)

<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;

$form = ActiveForm::begin();

foreach (['en-US', 'de-DE', 'ru-RU'] as $language) {
    echo $form->field($model->translate($language), "[$language]title")->textInput();
    echo $form->field($model->translate($language), "[$language]body")->textarea();
}

//...

ActiveForm::end();

Language specific translation attribute labels

Example of model attribute labels, (*16)

class PostTranslation extends \yii\db\ActiveRecord
{
    public function attributeLabels()
    {
        switch ($this->language) {
            case 'de-DE':
                return [
                    'title' => 'Titel',
                    'body' => 'Inhalt',
                ];
            case 'ru-RU':
                return [
                    'title' => 'Заголовок',
                    'body' => 'Тело',
                ];
            default:
                return [
                    'title' => 'Title',
                    'body' => 'Body',
                ];
        }
    }
}

The Versions

11/05 2017

dev-master

9999999-dev

The translateable behavior for the Yii2 framework

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

by Alexander Kochetov
by Sergey Kalita

yii2 translation multilanguage translateable

11/05 2017

1.1.1

1.1.1.0

The translateable behavior for the Yii2 framework

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

by Alexander Kochetov
by Sergey Kalita

yii2 translation multilanguage translateable

29/01 2016

1.1

1.1.0.0

The translateable behavior for the Yii2 framework

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

by Alexander Kochetov
by Sergey Kalita

yii2 translation multilanguage translateable

29/01 2016

1.0.1

1.0.1.0

The translateable behavior for the Yii2 framework

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

by Alexander Kochetov
by Sergey Kalita

yii2 translation multilanguage translateable

29/01 2016

1.0

1.0.0.0

The translateable behavior for the Yii2 framework

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

by Alexander Kochetov
by Sergey Kalita

yii2 translation multilanguage translateable