今天给大家带来的是 getText 之 PHP。
多语言事件很头疼的事,特别是对于在全球发行的公司的同学们。之前一直用 Python 的 Django 框架,处理多语言上虽然繁琐,但是相对还是很简单。跟着文档走一遍就能解决这个问题。前几天公司从外包公司拿到一个 PHP 项目让我实现多语言,在这里讲一下我处理的流程。
废话不多说直接上图
一.前期准备
1.echo phpinfo()查询是否支持 gettext,若没有需要安装 gettext。在这里我用-brew install gettext 安装
2.安装 poedit - brew install Caskroom/cask/poedit (用于将.po 文件生成.mo 文件)
3.PHP扩展目录下是否有php_gettext.dll这个文件,若没有可网上搜一下 cp过去
4.取消 php.ini --extension=php_gettext.dll
5.查找支持语言 -- locale -a
二.前期准备已好,上主题
1.创建一个获取语言的文件在这里我取名为 setLan_.php
我这里是通过浏览器的 header 头抓取语言信息,也可以$lan=$_REQUEST['lan'];url 抓取。putenv()对应的是上面 --locale -a 里面的语言,setlocale()作用下面再说。----注意:如果 locale -a 没有你想识别的语言,以上这些配了也不会显示多语言,可以自行添加。
2.在要翻译的 PHP 页面添加如下代码
如果页面较多可以 include 到所需页面
图5可以看到$domain 和 bindtextdomain()方法,请看下图
这些文件夹 就是语言翻译的文件,图5对应其路径可随意设置,在这里解释-图4-的setlocale()作用,就是当抓取到浏览器语言后。找到当前语言所匹配的翻译文件。用 gettext 方法翻译文字
3.生成.po 文件 -- xgettext -d TRANS_ index.php --from-code=utf-8
这个命令是将 index.php 言语进行翻译生成.po 文件
将多个文件翻译后方到一个.po 文件里 -- xgettext -d TRANS_ gallery.php -j --from-code=utf-8
将.po文件放到对应文件夹-如图6,用 Poedit(在前期准备中已经安装)打开.po 文件,
左面是页面中需要翻译的文字,右面是翻译的对应问题。如上我要将英语翻译为韩语。保存后会在.po 同一目录生成.mo 文件。
打开浏览器测试。
本问只是简单介绍了 php 用 gettext 进行多言语。深层的机制请自行查阅,至于.po 生成.mo 可调用接口命令行操作,在这里不做讲解。多谢~