模板中的多语言
本文档介绍模板制作时与多语言相关的方法:如何制作语言切换器、如何显示当前语言、如何输出翻译内容。
官方默认模板static/trade/header.html中有一个完整的语言切换器示例,可直接参考或复制。
语言切换器
语言列表保存在 website 表中,用 loop 标签循环输出,切换链接使用 ?lang=切换标识:
<div class="lang-switch">
{php $now_lang = defined('LANG') ? strtolower(LANG) : (function_exists('current_lang') ? current_lang() : ''); /}
{loop table="website" orderby="is_default desc,id asc" isshow="1" as="lv"}
<a href="{fun get_domain()}?lang={$lv['change_lang']}" class="{if(strtolower($lv['lang'])==$now_lang)}on{/if}">{$lv['name']}</a>
{/loop}
</div>
说明:
{$lv['name']}:语言显示名称(后台语言管理中填写的"国家名称"){$lv['change_lang']}:切换标识,如en-US{$lv['lang']}:语言标识,如en,用来给当前语言加高亮样式(on)orderby="is_default desc,id asc":默认语言排在最前面
如果希望切换语言后仍然停留在当前页面(路径不变),可以基于当前地址追加切换参数:
{php $j = strpos(REQUEST_URI,'?')!==false ? '&' : '?'; /}
{loop table="website" orderby="is_default desc,id asc" isshow="1" as="lv"}
<a href="{fun REQUEST_URI}{$j}lang={$lv['change_lang']}">{$lv['name']}</a>
{/loop}
注意:切换语言后,页面内容(栏目、文章、配置)都会变成目标语言的版本,但当前页面路径中的栏目标识(htmlurl)各语言是相同的,所以可以停留在"同一个页面"。
多语言模式下(URL 带语言前缀),访问
{fun get_domain()}/en/会自动进入英文环境,再点栏目即为英文链接;两种方式可以混用。
显示当前语言
前台公共控制器为每个页面 assign 了 currentLang 变量(当前语言的完整信息,来自语言管理):
当前语言名称:{$currentLang['name']}
当前语言标识:{$currentLang['lang']}
当前切换标识:{$currentLang['change_lang']}
在 {fun} 或 {php} 中也可以直接使用函数:
{fun current_lang()}
// php 代码块中
$lang = current_lang(); // 当前语言标识,如 en
$L = current_lang_data(); // 当前语言的完整配置(数组)
按语言输出不同内容:
{if($currentLang['lang']=='en')}
<p>Welcome to our website!</p>
{else if($currentLang['lang']=='ja')}
<p>ようこそ!</p>
{else}
<p>欢迎访问我们的网站!</p>
{/if}
翻译系统固定文字(JZLANG)
模板中的按钮、提示语等固定文字使用语言包函数输出:
<a href="{fun U('login/index')}">{fun JZLANG('会员登录')}</a>
<button>{fun JZLANG('立即购买')}</button>
- 语言包文件:
app/home/lang/{语言标识}.php(前台)、app/admin/lang/{语言标识}.php(后台) - 语言包以"中文原文"为键:
'会员登录' => 'Sign in' - 可在后台【多语言】→【翻译配置】中在线维护,参考:翻译配置与语言包
系统配置按语言输出
后台系统设置中,每个配置项都可以按语言单独保存一份(多语言翻译)。模板中照常输出,系统自动取当前语言的值,当前语言没有单独设置时使用默认值:
{$webconf['web_name']}
{$webconf['web_desc']}
{$webconf['web_tel']}
<img src="{$webconf['web_logo']}">
导航与栏目链接
- 栏目、内容详情的链接(
$classtypedata、$v['url']、gourl()生成的地址)由系统按当前 URL 模式自动生成,多语言模式下自带语言前缀(如/en/news.html),模板中不需要任何处理。 - 如果使用了后台【导航管理】制作的多套导航,模板中通过
$jznav输出,参考:导航管理。
内容列表按语言自动切换
loop 标签输出内容列表时,系统自动读取当前语言的数据表,无需指定语言:
{loop table="article" tid="1" limit="10" as="v"}
<a href="{$v['url']}">{$v['title']}</a>
{/loop}
中文访客看到中文列表,英文访客看到英文列表,同一套模板通用。
