จากเรื่องที่แล้ว ทำตาราง yii 2 ให้เก็บหลายภาษา โดยเราสามารถอ้างถึง attribute ตามรูปแบบ {attribute name}_{language} เช่น ในตาราง _lang ฟิลย์ชื่อ name ก็ใช้ $model->name_en, $model->name_jp, $model->name_th ในวิวถ้าต้องการแสดงผล

ในบทความที่ยังขาดตัวอย่างในการแสดงข้อมูล การใช้ในกริดที่แสดงรายการทั้งหมด, ฟอร์มที่จะกรอกข้อมูล และวิวที่จะแสดงสิ่งที่เราเก็บเอาไว้ออกมา ตัวอย่าง code ที่ผมใช้

GridView ต้องการให้แสดงภาษาอังกฤษเป็นหลัก อีกช่องที่เหลือแสดงสลับกันระหว่างภาษาไทย และญี่ปุ่น ทำได้โดยแทนที่จะอ้าง name_th หรือ name_jp ตรงๆ ก็อ้างผ่านตัวแปรไปแทน [code lang=”php” title=”index.php”]

if(Yii::$app->language == ‘jp’)
{
$name = ‘name_jp’;
}
else
{
$name = ‘name_th’;
}

echo GridView::widget([
‘dataProvider’ => $dataProvider,
‘filterModel’ => $searchModel,
‘columns’ => [
[‘class’ => ‘yii\grid\SerialColumn’],

‘name_en’,
$name,

‘post_id’,
‘status’,
],
]);

[/code]

form ก็สามารถใช้เหมือนรูบแบบปกติได้เลย โดยเราสามารถกรอกข้อมูล แก้ไขตัวแปลภาษาทั้งหมดได้พร้อมกันในครั้งเดียว เช่น[code lang=”php” title=”_form.php”]

<?= $form->field($model, ‘name_en’)->textInput() ?>
<?= $form->field($model, ‘name_jp’)->textInput() ?>
<?= $form->field($model, ‘name_th’)->textInput() ?>

[/code]

วิวก็ตามรูปแบบเหมือนตัวอื่นๆตามปกติ[code lang=”php” title=”view.php”]

<?= DetailView::widget([
‘model’ => $model,
‘attributes’ => [
‘post_id’,
‘status’,

‘name_en’,
‘name_jp’,
‘name_th’,

‘date_publish’,
‘date_expire’,
‘log_created’,
‘log_created_by’,
‘log_updated’,
‘log_updated_by’,
],
]) ?>
…[/code]