通过 gettext 扩展实现多语言

2019-06-11  本文已影响0人  yzw12138

第一步:确保本地启用 gettext 扩展,win 下,打开 php.ini 配置文件,去掉 extension=php_gettext.dll 前面的 “;”,保存重启服务;
第二步:现在语言包生成工具,gettext 工具(安装完成后将其添加进系统环境变量)和 Poedit工具(用来生成语言包二进制文件)
第三步:书写测试代码

$lan  =  isset($_GET [ 'lan' ]) ? $_GET [ 'lan' ] : 'en_US';  
if ( $lan  ==  'zh_CN' ) {  
    putenv('LANG=zh_CN');         //设置环境变量
} elseif ( $lan  ==  'en_US' ) {  
    putenv('LANG=en_US');
} else {
    putenv('LANG=zh_TW');
}
$domain  =  'index';     //域名,可以任意取个有意义的名字,不过要跟相应的.mo文件的文件名相同(不包括扩展名)。
                    
bindtextdomain($domain,  "../../locale/" ); //设置某个域的mo文件路径    
bind_textdomain_codeset($domain,  'UTF-8' );  //设置mo文件的编码为UTF-8    
textdomain($domain);
<div style="margin-left:200px">
    <div><?php echo gettext('test1');?></div>
</div>

xgettext -d index test.php --from-code=utf-8
index 为生成的 po 文件的名字

注意:
1、语言包的目录结构固定,必须按照下图书写

image.png
2、如果想要在老的 po 文件基础上添加新的字段,首先到开老的 po 文件,选择“编目->从 POT 文件更新”,在右下角选择 PO 翻译文件,找到新的 po 文件打开,两文件即能合并到一起;
3、重新编辑添加新的翻译字段后,可能翻译无法马上实现,修改语言包文件 mo 的名字即可生效。
上一篇 下一篇

猜你喜欢

热点阅读