首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Yii Framework 多國語言實作完整指南:從配置到實戰

     編輯:PHP 綜合知識

前言

在開發面向全球用戶的 Web 應用時,國際化(i18n)是不可或缺的功能。Yi i Framework 內建強大的訊息翻譯機制,透過 Yii::t() 方法即可輕鬆實現多語言支援。本文將以實際範例,完整說明如何在 Yii 專案中加入中文支援,涵蓋配置、訊息來源建立、程式碼改寫等關鍵步驟。

核心原理:Yii::t() 翻譯機制

Yii 的翻譯核心在於 Yii::t($category, $message, $params=array(), $source=null, $language=null) 方法。它會根據應用程式設定的 源語言(sourceLanguage)與 目標語言(language),從對應的訊息來源載入翻譯。若找不到翻譯,則直接回傳原訊息。

實作三步驟

1. 應用程式配置

在 protected/config/main.php 中設定語言與訊息來源路徑:

<?php
return array(
    'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
    'sourceLanguage'=>'en',           // 來源語言:英文
    'language'=>'zh_cn',              // 目標語言:簡體中文
    'name'=>'i18nDemo',
    'components'=>array(
        'coreMessages'=>array(
            'basePath'=>'protected/messages', // 訊息檔案根目錄
        ),
    ),
);

2. 建立訊息翻譯檔案

於 protected/messages/zh_cn/ 目錄下建立 yii.php(類別名稱自訂),回傳鍵值對應的翻譯陣列:

<?php
return array(
    'Application Name' => '應用程式名稱',
    'Greetings from Santa' => '來自聖誕老人的問候',
    'firstName' => '名',
    'lastName' => '姓',
    'Choose your Christmas Gift' => '選擇你喜歡的聖誕禮物',
    'iPad' => 'iPad',
    'Remote control helicopter' => '遙控直升機',
    '60 inch 3D LED TV' => '60吋3D LED電視',
    'Holy Bible' => '聖經',
    'Choose your Christmas dinner' => '選擇你的聖誕晚餐',
    'Egg' => '雞蛋',
    'Ham' => '火腿',
    'Chicken' => '雞肉',
    'Pork' => '豬肉',
    'Beer' => '啤酒',
    'Coke' => '可樂',
    'Wine' => '紅酒',
    'Submit' => '送出',
    'Merry Christmas' => '聖誕快樂',
    'On Christmas Day,You will be given' => '聖誕節那天你將獲得',
    'And you will have' => '你可以擁有',
    'for Christmas dinner' => '作為聖誕晚餐',
    'Start Again' => '重新選擇'
);

3. 程式碼中呼叫 Yii::t()

將原本寫死的字串替換為翻譯呼叫。以資料模型為例:

<?php
class DataModel extends CFormModel
{
    public function getGifts()
    {
        return array(
            '1' => Yii::t('yii','iPad'),
            '2' => Yii::t('yii','Remote control helicopter'),
            '3' => Yii::t('yii','60 inch 3D LED TV'),
            '4' => Yii::t('yii','Holy Bible'),
        );
    }

    public function getMeals()
    {
        return array(
            '1' => Yii::t('yii','Egg'),
            '2' => Yii::t('yii','Ham'),
            '3' => Yii::t('yii','Chicken'),
            '4' => Yii::t('yii','Pork'),
            '5' => Yii::t('yii','Beer'),
            '6' => Yii::t('yii','Coke'),
            '7' => Yii::t('yii','Wine'),
        );
    }
}

進階應用與注意事項

  • 多語言切換:可透過使用者偏好或網域動態設定 Yii::app()->language,實現即時切換。
  • 參數替換:Yii::t('yii', 'Hello {name}', array('{name}'=>$user)) 支援變數插值。
  • 複數形式:搭配 CChoiceFormat 處理不同語言的複數規則。
  • 訊息來源擴充:除 CPhpMessageSource 外,亦可使用資料庫、Gettext 等儲存方式。

執行結果

Yii 多語言示例執行畫面

完整範例下載

本文完整程式碼可至 I18NDemo.zip 下載參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved