จากเรื่องที่แล้ว ทำตาราง yii 2 ให้เก็บหลายภาษา โดยเราสามารถอ้างถึง attribute ตามรูปแบบ {attribute name}_{language} เช่น ในตาราง _lang ฟิลย์ชื่อ name ก็ใช้ $model->name_en, $model->name_jp, $model->name_th ในวิวถ้าต้องการแสดงผล
ในบทความที่ยังขาดตัวอย่างในการแสดงข้อมูล การใช้ในกริดที่แสดงรายการทั้งหมด, ฟอร์มที่จะกรอกข้อมูล และวิวที่จะแสดงสิ่งที่เราเก็บเอาไว้ออกมา ตัวอย่าง code ที่ผมใช้
GridView ต้องการให้แสดงภาษาอังกฤษเป็นหลัก อีกช่องที่เหลือแสดงสลับกันระหว่างภาษาไทย และญี่ปุ่น ทำได้โดยแทนที่จะอ้าง name_th หรือ name_jp ตรงๆ ก็อ้างผ่านตัวแปรไปแทน
... 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', ], ]); ...
form ก็สามารถใช้เหมือนรูบแบบปกติได้เลย โดยเราสามารถกรอกข้อมูล แก้ไขตัวแปลภาษาทั้งหมดได้พร้อมกันในครั้งเดียว เช่น
... <?= $form->field($model, 'name_en')->textInput() ?> <?= $form->field($model, 'name_jp')->textInput() ?> <?= $form->field($model, 'name_th')->textInput() ?> ...
วิวก็ตามรูปแบบเหมือนตัวอื่นๆตามปกติ
... <?= 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', ], ]) ?> ...
About the author