Yii ~ 超神奇多國語言作法XD


會想做出這東西

是因為作多國語言的網站很麻煩

在實作上免不了這樣

<?php print t('首頁'); ?>

這已經是我簡化過的樣子.......

其實在yii要這樣寫

Yii::t('zzzzzzzz', 'zzzzzzz');

我只是加入了一些東西 讓我方便只要傳預設顯示文字就好

所以我再做這部分已經是有簡化過的寫法了

但依然很難實作這東西

因為只要是任何文字的部分

我都要

print t('balbalblablalbalbla');

而當中還有一個問題就是

時常因為加上了這些東西

Aptana就會起笑無法排code了.............所以我個人真的很賭爛做多國語言的網站

光是改裝顯示部分就累死了..............更何況還要建立語言陣列包

囧rz....


所以肛我就想出一種做法 .......

因為yii本身的語言包就是return一個array

所以我就先研究怎麼抓出這個陣列

大致長這樣

因為他的loadMessage是protected

所以我才需要多包一個public的function

class PhpMessageSource extends CPhpMessageSource {
public function getMessages($category, $language) {
return $this -> loadMessages($category, $language);
}
}


然後再寫一個抓語言包的function

public function getLanguageSource($category = null) {

$temp = new PhpMessageSource();

$temp -> init();

if ($category == null) {

$category = $this -> controllerName;

}

$language = $this -> language;

return $temp -> getMessages($category, $language);

}
然後在主板面的view叫他每次都要輸出語言包的陣列

$languageTemp =$this->getLanguageSource();

print $this -> printJson('language', $languageTemp);


這樣我在網頁上就有語言包的陣列變數叫作language

這是輸出的樣子
var language = {"\u4f5c\u54c1\u540d\u7a31":"zxczxczxczx","zzz qqqqq":"\u985e\u578b"};

其實他在php的語言包是這樣

return array (
  '作品名稱' => 'zxczxczxczx',
  'zzz qqqqq' => '類型',
);

由於這時在網頁有了這些 語言data

只要寫段簡單的js就可以把所有需要翻譯的東西自動翻譯成指定的語言

function setLanguageSource() {
$('*[t]').each(function() {
var text = $.trim($(this).text());
$(this).text(language[text]);
});
}


所以我只要在開發過程中 針對需要翻譯的東西加上

t

他就會通通自動翻譯成使用者指定的語言

例如 <div t>作品名稱</div>

網頁讀完他就自動變成了zxczxczxczx


總之突發奇想.............想出了這個做法並實作出來

將會大大大大大大大大大大大大大幅減少我做多國語言網站的時間

沒有留言: