CodeIgniter 內建語言類別支援多語系,結合 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 可實現根據瀏覽器語言偏好自動載入對應語言包。
application/language/
├── english/
│ └── bm_lang.php
├── zh-cn/
│ └── bm_lang.php
├── zh-tw/
│ └── bm_lang.php
└── jp/
└── bm_lang.php
<?php
// english/bm_lang.php
$lang['title'] = 'Welcome';
$lang['login'] = 'Login';
$lang['register'] = 'Register';
// zh-cn/bm_lang.php
$lang['title'] = '歡迎光臨';
$lang['login'] = '登入';
$lang['register'] = '註冊';
<?php
class Welcome extends CI_Controller {
public function index() {
$this->load->helper('language');
// 1. 解析瀏覽器語言偏好
$acceptLang = $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? 'en';
$langs = explode(',', $acceptLang);
$primary = strtolower(trim($langs[0])); // 如 en-us, zh-cn, zh-tw
// 2. 對應 CodeIgniter 語言目錄名稱
$langMap = [
'en' => 'english',
'en-us' => 'english',
'en-gb' => 'english',
'zh' => 'zh-cn',
'zh-cn' => 'zh-cn',
'zh-tw' => 'zh-tw',
'zh-hk' => 'zh-tw',
'ja' => 'japanese',
'ja-jp' => 'japanese',
'ko' => 'korean',
'ko-kr' => 'korean',
];
$ciLang = $langMap[$primary] ?? 'english';
// 3. 設定配置並載入語言包
$this->config->set_item('language', $ciLang);
$this->lang->load('bm', $ciLang); // 載入 bm_lang.php
// 4. 使用
$data['title'] = $this->lang->line('title');
$data['login'] = $this->lang->line('login');
$this->load->view('welcome', $data);
}
}
?>
<!DOCTYPE html>
<html lang="<?= $this->config->item('language') ?>">
<head><title><?= $title ?></title></head>
<body>
<h1><?= $title ?></h1>
<a href="/login"><?= $login ?></a>
<a href="/register"><?= $this->lang->line('register') ?></a>
</body>
</html>
public function set_lang($lang = 'english') {
$allowed = ['english', 'zh-cn', 'zh-tw', 'japanese'];
if (!in_array($lang, $allowed)) $lang = 'english';
// 寫入 Cookie(1 年)
$this->input->set_cookie('lang_pref', $lang, 31536000);
// 重導回來源頁
redirect($this->input->server('HTTP_REFERER') ?? '/');
}
// 在 index() 最開頭優先讀取 Cookie
$cookieLang = $this->input->cookie('lang_pref');
if ($cookieLang && in_array($cookieLang, $allowed)) {
$ciLang = $cookieLang;
} else {
// 否則依瀏覽器語言
// ... 上述自動偵測邏輯
}
| 方法 | 用途 |
|---|---|
$this->lang->load('file', 'lang') | 載入語言檔(file_lang.php) |
$this->lang->line('key') | 取得翻譯字串 |
$this->lang->line('key', true) | 若無翻譯回傳 false 而非原鍵名 |
lang('key') | Helper 函數(需 $this->load->helper('language')) |
模組名_lang.php,避免衝突config.php 設定 $config['language'] = 'english';/en/, /zh/ 有利 SEO 與快取自動語言偵測 + 手動偏好記住 = 完整的多語系體驗。