当前位置: 首页 > 文档资料 > ThinkCMF 中文文档 >

多语言开发

优质
小牛编辑
168浏览
2023-12-01

概述

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

return array(
     'ADMIN_CENTER' => 'Admin Center', 
     'WELCOME_USER' => 'Welcome, {$username}!',
     'REFRESH_CURRENT_PAGE' => 'Refresh Current Page',
     'WEBSITE_HOME_PAGE' => 'Website Home Page'
);

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

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

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

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

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

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

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

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

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

    <!--以下输出的字符串也是:Admin Center-->
    {:L('ADMIN_CENTER')} 

    <!--以下输出的字符串也是:Welcome,无敌小夏!-->
    {:L('WELCOME_USER',array('username'=>'无敌小夏'))}

前台模板多语言

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

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

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

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

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