Dedikisme's Blog

Ngeblog biar dibilang eksis

Implementasi I18n Yii2 Framework

i18n atau yang biasa di sebut Internationalization sebenernya cukup mudah pada Yii2 Langkah pertama tambahkan config berikut pada config/main.php tambahkan beberapa baris berikut

main.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
$params = array_merge(
    require(__DIR__ . '/../../common/config/params.php'),
    require(__DIR__ . '/../../common/config/params-local.php'),
    require(__DIR__ . '/params.php'),
    require(__DIR__ . '/params-local.php')
);

return [
    'id' => 'app-backend',
    'basePath' => dirname(__DIR__),
    'language' => 'id', // Tambahkan  baris ini
    'controllerNamespace' => 'backend\controllers',
    'bootstrap' => ['log'],
    'modules' => [],
    'components' => [
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
 'i18n' => [                                          // tambahkan juga baris ini
            'translations' => [                       // ini
                '*' => [
                    'class' => 'yii\i18n\PhpMessageSource',
//                'basePath' => '@app/messages', 
//                'sourceLanguage' => 'en',
                    'fileMap' => [
                        'app' => 'app.php',
                        'app/error' => 'error.php',
                    ],
                ],
            ],
        ], //sampe sini
    ],
    'params' => $params,
];

buat folder dan files baru buat dictionary i18n pada ‘@app/messages/id/app.php’ dan ‘id’ adalah kode bahasa

kemudian pada file app.php yang barusan dibuat isi dengan array translation, contoh:

app.php
1
2
3
4
5
6
7
8
<?php
return [
  'emp' =>'Karyawan',
  'sex'=>'Gender',
  'Master Emp'=>'Master Karyawan',
  'Master Sex'=>'Penjahat Kelamin'
  ];
?>

untuk penggunaanya

view.php
1
2
<?php
echo  \Yii::t('app', 'sex');  // Muncul: Gender 

oh ya ‘app’ pada kode diatas merupakan kategori dari dictionary, misal mau buat lagi tinggal tambahkan di array fileMap i18n pada main.php menjadi

main.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
$params = array_merge(
    require(__DIR__ . '/../../common/config/params.php'),
    require(__DIR__ . '/../../common/config/params-local.php'),
    require(__DIR__ . '/params.php'),
    require(__DIR__ . '/params-local.php')
);

return [
    'id' => 'app-backend',
    'basePath' => dirname(__DIR__),
    'language' => 'id',
    'controllerNamespace' => 'backend\controllers',
    'bootstrap' => ['log'],
    'modules' => [],
    'components' => [
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
 'i18n' => [
            'translations' => [
                '*' => [
                    'class' => 'yii\i18n\PhpMessageSource',
//                'basePath' => '@app/messages', 
//                'sourceLanguage' => 'en',
                    'fileMap' => [
                        'app' => 'app.php',
                        'emp'=> 'emp.php',          //Tambahkan kategori emp
                        'app/error' => 'error.php',
                    ],
                ],
            ],
        ], //sampe sini
    ],
    'params' => $params,
];

dan untuk menjalankan set kategori ‘emp’ sehingga jadi

view.php
1
2
<?php
echo  \Yii::t('emp', 'sex');

Pada model generator gii sudah ada fitur i18n, sehingga untuk menggunakannya tinggal translate langsung dari atribute label yang sudah di generate, contoh

view.php Article:php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Model Article
...
 public function attributeLabels()
    {
        return [
            'id' => Yii::t('app', 'ID'),
            'title' => Yii::t('app', 'Title'),
            'content' => Yii::t('app', 'Content'),
            'slug' => Yii::t('app', 'Slug'),
            'meta_desc' => Yii::t('app', 'Meta Desc'),
            'meta_keywords' => Yii::t('app', 'Meta Keywords'),
            'created_at' => Yii::t('app', 'Created At'),
            'updated_at' => Yii::t('app', 'Updated At'),
            'user_id' => Yii::t('app', 'User ID'),
        ];
    }
...

dan pada dictionarynya

app.php Article:php
1
2
3
4
5
6
7
8
9
10
11
12
<?php
return [
  'ID' =>'id',
  'Title'=>'Judul',
  'Content'=>'Konten',
  'Slug'=>'Slug',
  'Meta Desc'=>'Meta Description',
  'Meta Keywords'=>'Meta Keywords',
  ....

  ];
?>

Thanks

Comments