Yii2中做中英文網站

來源:互聯網
上載者:User
關鍵字 php yii2
網站要做成一個中英文的,資料也要是中英文的,要怎麼搞?

下面是我的一些想法:

建個模組,網站預設是中文,英文就放到英文的那個模組裡,是英文的時候就調用英文的資料?
中文一套模板,英文一套模板?

 'modules' => [        'en' => ['class' => '\app\modules\english\Module'],  ]

那資料要怎麼存呢?給每條資料都加一個欄位,lang = 'en' / lang = 'zh' 這樣?

還是個資料多加幾個欄位, 像下面這樣,title 存中文, title_en 存英文?

CREATE TABLE `courses` (    `id` int(11) unsigned NOT NULL auto_increment,    `title` varchar(255) NOT NULL default '',    `title_en` varchar(255) NOT NULL default '',    `cover` varchar(255) NOT NULL default '' comment '封面',    `text` text,    `text_en` text,    `start_date` int(11) unsigned NOT NULL default 0 comment '開始日期',    `end_date` int(11) unsigned NOT NULL default 0 comment '結束日期',    `days` int(11) unsigned NOT NULL default 0 comment '有效天數',    `maxnum` int(11) unsigned NOT NULL default 0 comment '最多報名人數',    `has_num` int(11) unsigned NOT NULL default 0 comment '已報名人數',    `price` decimal(10,2) comment '課程費',    `created_at` int(11) unsigned default '0',    `updated_at` int(11) unsigned default '0',    `status` varchar(16) default 'on' comment 'on開啟 off關閉 expire到期',    `extra` text comment '額外的一些資料 可以使用序列化資料 serialize',    PRIMARY KEY  (`id`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

求比較好的解決方案,像 蘋果官網 的多語言是如何做的,資料是怎麼存的?

回複內容:

網站要做成一個中英文的,資料也要是中英文的,要怎麼搞?

下面是我的一些想法:

建個模組,網站預設是中文,英文就放到英文的那個模組裡,是英文的時候就調用英文的資料?
中文一套模板,英文一套模板?

 'modules' => [        'en' => ['class' => '\app\modules\english\Module'],  ]

那資料要怎麼存呢?給每條資料都加一個欄位,lang = 'en' / lang = 'zh' 這樣?

還是個資料多加幾個欄位, 像下面這樣,title 存中文, title_en 存英文?

CREATE TABLE `courses` (    `id` int(11) unsigned NOT NULL auto_increment,    `title` varchar(255) NOT NULL default '',    `title_en` varchar(255) NOT NULL default '',    `cover` varchar(255) NOT NULL default '' comment '封面',    `text` text,    `text_en` text,    `start_date` int(11) unsigned NOT NULL default 0 comment '開始日期',    `end_date` int(11) unsigned NOT NULL default 0 comment '結束日期',    `days` int(11) unsigned NOT NULL default 0 comment '有效天數',    `maxnum` int(11) unsigned NOT NULL default 0 comment '最多報名人數',    `has_num` int(11) unsigned NOT NULL default 0 comment '已報名人數',    `price` decimal(10,2) comment '課程費',    `created_at` int(11) unsigned default '0',    `updated_at` int(11) unsigned default '0',    `status` varchar(16) default 'on' comment 'on開啟 off關閉 expire到期',    `extra` text comment '額外的一些資料 可以使用序列化資料 serialize',    PRIMARY KEY  (`id`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

求比較好的解決方案,像 蘋果官網 的多語言是如何做的,資料是怎麼存的?

1、英語翻譯成別的語言比較方便,Yii設定檔裡可以配置sourceLanguage=>‘en-US',lanaguae=>'zh-CN',同時Yii::$app->language是一個可讀可寫的全域變數。

Yii::t() 方法的用法如下,

echo \Yii::t('app', 'This is a string to translate!');
第一個參數指儲存訊息來源的類別名稱,第二個參數指需要被翻譯的訊息。

這個 Yii::t() 方法會調用 i18n 應用組件 來實現翻譯工作。這個組件可以在應用程式中按下面的代碼來配置,

'components' => [

// ...'i18n' => [    'translations' => [        'app*' => [            'class' => 'yii\i18n\PhpMessageSource',            //'basePath' => '@app/messages',            //'sourceLanguage' => 'en-US',            'fileMap' => [                'app' => 'app.php',                'app/error' => 'error.php',            ],        ],    ],], ], 在上面的代碼中,配置了由 yii\i18n\PhpMessageSource 所支援的訊息來源。模式 app* 表示所有以 app 開頭的訊息類別名稱都使用這個翻譯的訊息來源。該 yii\i18n\PhpMessageSource 類使用 PHP

檔案來儲存訊息翻譯。 每 PHP 檔案對應單一類別的訊息。預設情況下,檔案名稱應該與類別名稱相同。但是,你可以配置
yii\i18n\PhpMessageSource::fileMap 來映射一個類別到不同名稱的 PHP 檔案。在上面的例子中, 類別
app/error 被映射到PHP檔案 @app/messages/ru-RU/error.php(假設 ru-RU
為目標語言)。如果沒有此配置, 該類別將被映射到 @app/messages/ru-RU/app/error.php 。

除了在PHP檔案中儲存訊息來源,也可以使用下面的訊息來源在不同的儲存來儲存翻譯的訊息:

yii\i18n\GettextMessageSource 使用 GNU Gettext 的 MO 或 PO 檔案儲存翻譯的訊息。
yii\i18n\DbMessageSource 使用一個資料庫表來儲存翻譯的訊息。

補充一下Yii::t('app', 'This is a string to translate!',"zh-CN")這個方法可以傳入目標語言參數。
2、資料庫的內容,建議考慮多張表儲存不同語言的那部分。如果每個語言一張表的話,擴充性較差;可以在表裡加入language欄位,根據Yii::$app->language和外鍵配置好關聯也是很方便的。

資料庫考慮可以建立結構完全一致的2個表:article_en、article_zn
使用同一個model,用url參數或者其他方法判斷當前語言,在model中使用如下方法,切換對應的資料表:

public static function tableName(){    if (//如果是中文) {        $table_name = 'article_zn';    } else {        $table_name = 'article_en';    }    return $table_name;}

那要是支援10個國家的語言呢?都用資料庫太浪費了。

可以借鑒tp架構的多語言,它是把不同的語言放入檔案中。根據cookie或者session來區分語言,載入相應的語言檔案。不過局限性也在於它好像只能做靜態頁面。

現在的騷年們使用架構前都不過一遍文檔的嗎?

Yii是支援多語言機制的。

趕緊戳這裡看看吧。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.