美文网首页
通过 gettext 扩展实现多语言

通过 gettext 扩展实现多语言

作者: yzw12138 | 来源:发表于2019-06-11 11:09 被阅读0次
    • 由于准备做一个国际商城,因此避免不了要进行多语言的切换,目前第一版只做中英文的切换;在网上查找了很多资料,实现的方式基本大同小异;不同的语言生成不同的语言包文件,或者通过前端调用渲染页面,或者直接通过后端渲染;比较之后决定采取 php 的 gettext 来实现多语言;

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

    • 新建 setLan.php 文件,接收前台传入参数,决定使用那个语言包
    $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);
    
    • 新建 test.php 渲染 html 页面
    <div style="margin-left:200px">
        <div><?php echo gettext('test1');?></div>
    </div>
    
    • 进入 cmd 界面,cd 到 test.php 目录下,执行命令

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

    • 通过 Poedit 打开 index.po 文价,编辑保存,生成 index.mo 二进制文件,此文件为语言包文件,通过该文件实现多语言切换

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

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

    相关文章

      网友评论

          本文标题:通过 gettext 扩展实现多语言

          本文链接:https://www.haomeiwen.com/subject/klsffctx.html