# 多語言開發
## 概述
ThinkCMF已經默認開啟了多語言的支持,后臺以語言包形式實現多語言,前臺以語言包和多模板的形式實現多語言.
######語言包
ThinkCMF開啟的語言有三個,分別是zh-cn,en-us,zh-tw,此項配置在application/Common/Conf/config.php配置文件下,可以通過更改`LANG_LIST`的值增加語言.
語言包分為框架核心語言包(在simplewind/Core/Lang目錄下)和應用語言包(在每個應用的Lang目錄下,如application/Portal/Lang),根據你設置的語言列表,在這些地方增加相應的語言包,就實現了多語言.
應用語言包具體位置說明:
| 語言包 | 文件位置 | 加載時間|
| ---------- | ------------- | ---------------|
| 應用公共語言包 | application/Common/Lang/語言.php | 都加載 |
| 應用語言包 | application/應用名/Lang/語言.php | 只在訪問應用時加載|
| 應用控制器語言包 | application/應用名/Lang/語言目錄/語言.php| 只在訪問控制器下方法時加載
| 應用控制器后臺菜單語言包| application/應用名/Lang/語言目錄/admin_menu.php| 登錄后臺首頁,和訪問后臺控制器時加載|
######語言文件定義
1.語言文件格式為PHP返回數組形式,如:
```php
return array(
'ADMIN_CENTER' => 'Admin Center',
'WELCOME_USER' => 'Welcome, {$username}!',
'REFRESH_CURRENT_PAGE' => 'Refresh Current Page',
'WEBSITE_HOME_PAGE' => 'Website Home Page'
);
```
2.也可以在代碼中動態設置
```php
L('ADMIN_CENTER','后臺管理中心');
$lang_admin_center = L('ADMIN_CENTER');
```
######變量傳入支持
1.在定義語言包時也支持變量,如:
```php
return array(
'WELCOME_USER' => 'Welcome, {$username}!',
);
```
2.在使用 L 方法獲取時,可以傳入$username 變量,如:
```php
$lang_welcome_user = L('WELCOME_USER',array('username'=>'無敵小夏'));
echo $lang_welcome_user; // 這里輸出的字符串就是:Welcome,無敵小夏!
```
######獲取語言包設置的值
1.在PHP代碼里使用 L 方法,如:
```php
$lang_admin_center = L('ADMIN_CENTER');
echo $lang_admin_center; // 這里輸出的值是:Admin Center
```
2.在模板里使用 L 方法,如:
```php
<!--以下輸出的字符串也是:Admin Center-->
{:L('ADMIN_CENTER')}
<!--以下輸出的字符串也是:Welcome,無敵小夏!-->
{:L('WELCOME_USER',array('username'=>'無敵小夏'))}
```
### 前臺模板多語言
ThinkCMF前臺模板多語言是使用多模板的方式來實現的,如:當前模板是`simplebootx`,如果想開啟英文前臺模板的話,就只要加一個模板名為 `simplebootx_en-us`模板就可以了;
###### 前臺模板多語言實現原理:
ThinkCMF在前臺控制器加載模板文件時,會根據當前用戶的瀏覽器語言或者用戶指定的語言來加載模板文件,如果是中文用戶就加載 simplebootx 里的模板文件,如果是英文用戶就加載 simplebootx_en-us 里的模板文件;每個模板里數據調用是獨立的,你可以在不同模板里做不同的配置,以調用不同的語言的內容;
###### 為什么選用多模板形式實現前臺多語言?
很多用戶會疑問,這不是會增加維護的難度嗎?為什么不用語言包的形式呢?
維護難度當然會增加,做一個模板和做兩個模板是不一樣的時間,但你想英文模板和中文模板無論從內容還風格都有可能會不同,一個模板,你要考慮很多布局上兼容的問題,同時,如果想對不同語言的用戶做不同的體驗上的界面設計,一個模板肯定無法滿足,所以多模板形式才是前臺多語言最好的選擇,當然你在模板里也可以使用應用里設置的語言包.
- 介紹
- 序言
- 關于ThinkCMF
- 關于BootStrap
- 基礎
- 開發規范
- 調試模式
- 應用
- 如何獲取
- 環境要求
- 安裝使用
- 配置
- 控制器
- URL生成
- AJAX返回
- 跳轉和重定向
- 輸入變量
- 請求類型
- 空操作
- 空控制器
- 視圖
- 模板定義
- 模板主題
- 模板賦值
- 獲取內容
- 模板渲染
- 模型
- 模型定義
- 模型實例化
- 連接數據庫
- 更多模型用法
- 系統函數
- 生成評論組件
- 添加鉤子
- URL美化函數
- 獲取文件相對路徑
- 用戶權限驗證
- 字符串解密
- 字符串加密
- 獲取當前語言包
- 手機驗證碼驗證
- 檢查用戶操作
- 圖片驗證碼驗證
- 清除系統緩存
- 文本內容分頁
- 密碼比較
- 獲取文件訪問地址
- 獲取CMF設置
- 獲取評論
- 獲取當前登錄管理員id
- 獲取當前主題名
- 獲取當前登錄用戶信息
- 獲取當前登錄用戶ID
- 獲取收藏安全Key
- 獲取文件下載鏈接
- 獲取文件擴展名
- 獲取系統域名
- 獲取圖片預覽地址
- 獲取圖片訪問地址
- 生成前臺導航
- 獲取插件類名
- 獲取插件配置
- 獲取URL相對路徑
- 獲取前臺模板根目錄地址
- 獲取用戶頭像地址
- 獲取用戶列表
- 獲取廣告
- 獲取幻燈片
- 判斷是否為手機訪問
- 獲取HTML內容中的圖片
- 判斷用戶是否登錄
- 判斷是否為微信訪問
- 解析字符串標簽
- 生成密碼
- 插件URL生成
- 生成隨意字符串
- 遍歷目錄
- 發送郵件
- 更新動態配置
- 設置系統配置
- 更新當前登錄用戶
- 系統擴展
- 應用開發流程
- 后臺隱藏的后臺菜單管理功能
- 幾個重要基類
- 引入第三方庫
- 模板
- 基礎
- 全局變量
- 模板結構
- 模板注釋
- 模板常量
- 前臺模板多語言
- 變量輸出
- 使用函數
- 默認值輸出
- 使用運算符
- 三元運算
- 包含文件
- 原樣輸出
- 模板標簽
- tc\_include
- foreach
- volist
- php
- if else
- for
- switch
- 比較標簽
- 范圍判斷標簽
- Present標簽
- Empty標簽
- Defined標簽
- Assign標簽
- Define標簽
- 標簽嵌套
- 前端組件
- js-count-btn
- js-favorite-btn
- js-ajax-dialog-btn
- js-ajax-delete
- js-date
- js-datetime
- js-ajax-form
- 公共模板
- 菜單導航制作
- 幻燈片制作
- 廣告位制作
- 友情鏈接制作
- 添加留言控件
- 如何收藏
- 點贊組件
- 最新評論組件制作
- 最新加入組件制作
- 本站用戶登錄模板制作
- 本站用戶注冊模板制作
- 忘記密碼模板制作
- 密碼重置模板制作
- 評論組件
- 進階
- 七牛圖片處理
- 門戶應用
- 基礎
- 主程序結構
- 模板結構
- 函數庫
- 指定分類下的所有子分類
- 獲取面包屑數據
- 查詢文章列表,不分頁
- 獲取指定ID的文章
- 獲取指定ID的分類
- 獲取分類列表
- 獲取指定分類下的子分類
- 獲取文章列表,分頁
- 獲取指定 ID 的頁面
- 獲取指定分類下所有文章,包括子類的
- 獲取指定分類下所有文章,包括子類的,分頁
- 門戶模板制作
- 文章列表頁制作
- 文章內頁制作
- 頁面制作
- 獲取文章的各種方式
- 熱門文章組件制作
- seo優化
- 文章相冊制作
- 文章列表推薦功能制作
- 文章列表置頂功能制作
- 插件
- 插件鉤子
- 插件配置文件
- 插件類主文件
- 插件開發流程
- 插件控制器
- 插件數據庫模型
- 插件后臺管理控制器
- 插件多語言
- 后臺管理
- SMTP配置
- 忘記后臺密碼?
- 后臺地址是啥?
- 后臺菜單管理
- 管理員權限管理
- 第三方登錄配置
- 專題
- 多語言開發
- Restful Api
- 數據分頁
- 緩存
- 安全
- SESSION支持
- Cookie支持
- 文件上傳
- 驗證碼
- 部署
- 遷移到正式環境
- URL重寫