Situs Multibahasa? Itu Mudah Cuy

7 Nov 2012
Internet merupakan jaringan dunia yang saling berhubungan satu sama lain. Jutaan informasi berlalu lalang setiap menitnya tanpa bisa dicegah atau di hentikan. Website seakan menjadi ladang minyak bagi para pencari informasi. Tapi pada kenyataannya informasi yang disajikan tidak dapat dinikmati secara nyaman bagi orang. Kendala bahasa seringkali menjadi momok untuk memahami informasi apa yang terkandung dalam situs tersebut. Walaupun banyak tersedia layanan penerjemah online, tetapi terkadang kurang akurat daripada terjemahan manusia. Pada postingan kali ini kita akan belajar membuat sistem website multibahasa sederhana. Nantinya sistem ini dapat dikembangkan lebih jauh menjadi sistem yang lebih kompleks lagi. Penasaran ayo ikuti!
Teknik pembuatannya diambil dari situs wiki Yii. Namun di post kali ini kita buat sedikit berbeda!.
Ubah main.php
'behaviors'=>array(
        'onBeginRequest' => array(
            'class' => 'application.components.behaviors.BeginRequest'
        ),
    ),
... 
'components'=>array(
        'request'=>array(
            'enableCookieValidation'=>true,
            'enableCsrfValidation'=>true,
        ), 
 ...
'params'=>array(
       ...
        'languages'=>array('id'=>'Bahasa', 'en'=>'English'),
    ), 

buat folder widgets di protected/component dan buat file dengan isian
LanguageSelector.php
<?php
class LanguageSelector extends CWidget
{
    public function run()
    {
        $currentLang = Yii::app()->language;
        $languages = Yii::app()->params->languages;
        $this->render('languageSelector', array('currentLang' => $currentLang, 'languages'=>$languages));
    }
} 
isi kode di views/LanguageSelector.php
<?php echo CHtml::form(); ?>
    <div id="language-select">
        <?php 
        if(sizeof($languages) < 4) {
            $lastElement = end($languages);
            foreach($languages as $key=>$lang) {
                if($key != $currentLang) {
                    echo CHtml::ajaxLink($lang,'',
                        array(
                            'type'=>'post',
                            'data'=>'_lang='.$key.'&YII_CSRF_TOKEN='.Yii::app()->request->csrfToken,
                            'success' => 'function(data) {window.location.reload();}'
                        ),
                        array()
                    );
                } else echo '<b>'.$lang.'</b>';
                if($lang != $lastElement) echo ' | ';
            }
        }
        else {
            echo CHtml::dropDownList('_lang', $currentLang, $languages,
                array(
                    'submit' => '',
                    'csrf'=>true,
                )
            ); 
        }
        ?>
    </div>
<?php echo CHtml::endForm(); ?>

pada folder protected/components/behaviors (kalo belum ada buat foldernya)
<?php

class BeginRequest extends CBehavior {

    // The attachEventHandler() mathod attaches an event handler to an event. 

    // So: onBeginRequest, the handleBeginRequest() method will be called.

    public function attach($owner) {

        $owner->attachEventHandler('onBeginRequest', array($this, 'handleBeginRequest'));

    }



    public function handleBeginRequest($event) {        

        $app = Yii::app();

        $user = $app->user;



        if (isset($_POST['_lang']))

        {

            $app->language = $_POST['_lang'];

            $app->user->setState('_lang', $_POST['_lang']);

            $cookie = new CHttpCookie('_lang', $_POST['_lang']);

            $cookie->expire = time() + (60*60*24*365); // (1 year)

            Yii::app()->request->cookies['_lang'] = $cookie;

        }

        else if ($app->user->hasState('_lang'))

            $app->language = $app->user->getState('_lang');

        else if(isset(Yii::app()->request->cookies['_lang']))

            $app->language = Yii::app()->request->cookies['_lang']->value;

        else

            $app->language = 'en';

    }

}


buka layout tema (protected/views/layouts/main.php)
isikan kode di bawah (letak kode disesuaikan dengan keinginan anda), kalo aye sih di bawah header
<?php $this->widget('application.widgets.LanguageSelector');  ?>
Jika telah selesai, maka kita akan mencoba menerjemahkan Navigation Menu heloyii. Mari kita ubah layout main.php
<?php $this->widget('zii.widgets.CMenu',array(
            'items'=>array(
                array('label'=>Yii::t('general','_HOME_'), 'url'=>array('/site/index')),
                array('label'=>Yii::t('general','_ABOUT_'), 'url'=>array('/site/page', 'view'=>'about')),
                array('label'=>Yii::t('general','_CONTACT_'), 'url'=>array('/site/contact')),
                array('label'=>Yii::t('general','_LOGIN_'), 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest),
                array('label'=>Yii::t('general','_LOGOUT_').'('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest)
            ),
        )); ?>
Buat file di protected/messages/en.php
<?php
return array(
    '_HOME_'=>'Home',
    '_ABOUT_'=>'About Us',
    '_CONTACT_'=>'Contact Us',
    '_LOGIN_'=>'Login',
    '_LOGOUT_'=>'Logout',
);
dan file id.php
<?php
return array(
    '_HOME_'=>'Beranda',
    '_ABOUT_'=>'Tentang Kami',
    '_CONTACT_'=>'Hubungi Kami',
    '_LOGIN_'=>'Masuk',
    '_LOGOUT_'=>'Keluar',
);
Jika berhasil maka menu akan berubah jika di klik link Bahasa tersebut
Multibahasa dengan Yii
Tampilan Multibahasa

Nah situs multibahasa telah siap.Nantikan tutorial selanjutnya !

No comments:

Post a Comment