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
![]() |
| Tampilan Multibahasa |
Nah situs multibahasa telah siap.Nantikan tutorial selanjutnya !

No comments:
Post a Comment