美文网首页
通过 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 扩展实现多语言

    由于准备做一个国际商城,因此避免不了要进行多语言的切换,目前第一版只做中英文的切换;在网上查找了很多资料,实现的方...

  • 多语言之 getText

    今天给大家带来的是 getText 之 PHP。 多语言事件很头疼的事,特别是对于在全球发行的公司的同学们。之前一...

  • PHP环境gettext使用指引

    gettext简介 gettext是一种国际化与本地化系统,在类Unix系统中编写多语言程序时经常被使用。gett...

  • 本地化(Localization)

    需求 有些情况下需要支持多语言系统,本文将会结合官方教程,探讨多语言系统的组织及实现。当然了最后可以根据需要扩展。...

  • superset 汉化(国际化 本地化)

    简介 Superset的国际化是通过Flask-Babel中的lazy_gettext()和gettext()来实...

  • Flutter 多语言&多主题实现

    目录 多语言实现 多主题实现 状态管理 切换多语言 切换多主题 多语言实现 1. AndroidStudio-> ...

  • zbus 详细介绍

    小巧而极速的MQ, RPC实现, 支持HTTP/TCP代理,开放易扩展,多语言支撑微服务,系统总线架构 zbus核...

  • 绘制圆角

    通过MaskView 来实现圆角功能 image 扩展

  • 自定义clang的Attribute

    前言 如果想要扩展clang的特定操作,通过Attribute(属性)是最便捷的方式,通过扩展属性,我们可以实现自...

  • 一款非常不错的Cloud IDE,云端IDE会不会是未来的趋势?

    介绍 Eclipse Theia 是开源的、可扩展的平台,通过使用最先进的web技术开发支持多语言的云端和桌面端I...

网友评论

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

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