多语言开发

概述

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返回数组形式,如:

  1. return array(
  2. 'ADMIN_CENTER' => 'Admin Center',
  3. 'WELCOME_USER' => 'Welcome, {$username}!',
  4. 'REFRESH_CURRENT_PAGE' => 'Refresh Current Page',
  5. 'WEBSITE_HOME_PAGE' => 'Website Home Page'
  6. );

2.也可以在代码中动态设置

  1. L('ADMIN_CENTER','后台管理中心');
  2. $lang_admin_center = L('ADMIN_CENTER');
变量传入支持

1.在定义语言包时也支持变量,如:

  1. return array(
  2. 'WELCOME_USER' => 'Welcome, {$username}!',
  3. );

2.在使用 L 方法获取时,可以传入$username 变量,如:

  1. $lang_welcome_user = L('WELCOME_USER',array('username'=>'无敌小夏'));
  2. echo $lang_welcome_user; // 这里输出的字符串就是:Welcome,无敌小夏!
获取语言包设置的值

1.在PHP代码里使用 L 方法,如:

  1. $lang_admin_center = L('ADMIN_CENTER');
  2. echo $lang_admin_center; // 这里输出的值是:Admin Center

2.在模板里使用 L 方法,如:

  1. <!--以下输出的字符串也是:Admin Center-->
  2. {:L('ADMIN_CENTER')}
  3. <!--以下输出的字符串也是:Welcome,无敌小夏!-->
  4. {:L('WELCOME_USER',array('username'=>'无敌小夏'))}

前台模板多语言

ThinkCMF前台模板多语言是使用多模板的方式来实现的,如:当前模板是simplebootx,如果想开启英文前台模板的话,就只要加一个模板名为 simplebootx_en-us模板就可以了;

前台模板多语言实现原理:

ThinkCMF在前台控制器加载模板文件时,会根据当前用户的浏览器语言或者用户指定的语言来加载模板文件,如果是中文用户就加载 simplebootx 里的模板文件,如果是英文用户就加载 simplebootx_en-us 里的模板文件;每个模板里数据调用是独立的,你可以在不同模板里做不同的配置,以调用不同的语言的内容;

为什么选用多模板形式实现前台多语言?

很多用户会疑问,这不是会增加维护的难度吗?为什么不用语言包的形式呢?
维护难度当然会增加,做一个模板和做两个模板是不一样的时间,但你想英文模板和中文模板无论从内容还风格都有可能会不同,一个模板,你要考虑很多布局上兼容的问题,同时,如果想对不同语言的用户做不同的体验上的界面设计,一个模板肯定无法满足,所以多模板形式才是前台多语言最好的选择,当然你在模板里也可以使用应用里设置的语言包.

输出?l=en-us就可以打开语言切换

默认语言为zh-cn,可用根据需要开发多个语言包,如后台设置模板为simplebootx,在themes目录下simplebootx目录为zh-cn语言模板,simplebootx_en-us为en-us语言模板,simplebootx_zh-tw对应的就是zh-tw语言包,simplebootx_mobile则为移动版模板,移动模板+”_language”则为移动版对应语言包,如simplebootx有三个语言版本,则对应目录为

  1. simplebootx // PC中文默认模板
  2. simplebootx_en-us // PC端zh-us语言模板
  3. simplebootx_zh-tw // PC端zh-tw语言模板
  4. simplebootx_mobile // 移动端中文默认模板
  5. simplebootx_mobile_en-us // 移动端en-us语言模板
  6. simplebootx_mobile_zh-tw // 移动端zh-tw语言模板