PHP项目多语言配置平台实现过程解析


Posted in PHP onMay 18, 2020

这个月用ant design的方式重构了我在15年的时候写的一个给主端项目写的多语言配置后台。发现当时的设计很“深”,深到有些功能根本就没用过,根据这几年的使用情况,重构了这一版本,无论是体验上还是实用性上都有所提高。今天抽时间把当时的一些想当然的需求拿出来总结下吧:

使用的技术

我们的项目主要是PHP为主要开发语言。使用gettext扩展实现国际化的。即通过人工的方式按照规则写入.po文件,然后调用某函数生成.mo 文件,放到生产环境的文件夹下,然后在代码里初始化一些内容进行引用。

gettext

gettext是php实现国际化的基本方式。使用方法如下:

安装php扩展gettext,这个同php其他扩展一样,这里就不详细介绍了。

linux环境安装msgfmt,安好后可用此命令将po文件生成.mo文件。

基本使用

建立文件如:zh_CN.po (.po是个文本文件),内容如下:

msgid "repeat content!"
msgstr "文本内容相同"

利用msgfmt将.po文件生成.mo文件。

msgfmt -o {$lang_path}/zh_CN.mo {$lang_path}/zh_CN.po

将生成的.po文件拷贝到你指定的文件夹 target_dir 下。

在php代码里面初始化。

$lang = 'zh_CN'; //
setlocale(LC_MESSAGES, 'en_US.UTF-8'); // 函数设置地区信息(地域信息)
bindtextdomain($lang, {$pofile_path})); // 用来设置文本域目录
textdomain($lang); // 设置默认域
bind_textdomain_codeset($lang, 'UTF-8');

在php的请求里面使用如下方法即可得到语境下对应词组的内容:

gettext("repeat content!") // 文本内容必须与1中的内容一致。

或者

_("repeat content!"); // 与上面函数相同

管理后台

以前都是开发人员自己上传,后来为了解放开发者,让产品自己操作,我们进行了如下改进:

  • 做成可配置后台,产品自己根据内容填写。
  • 配置后台分成入口(权限控制),展示列表页,即每个词组key对应各种语言下的内容。
  • 详情页,详情页支持批量添加。
  • 点击按钮触发发布。
  • 发布高级功能:生成列表和支持比对,对历史版本发布(拷贝历史版本到对应的文件夹下)。

改进

经过一段时间的使用,我决定根据实际使用情况重构一版。

  • 页面全部采用ant design pro为基础的框架,采用前后端分离的样式,我特别推崇ant design的设计思想,和人机交互的开发方法,是后端开发者的福音。
  • 淡化历史版本的记录。虽然有个好些,但是这个确实看的人少,基本没有。
  • 重新发布,如果有时间就做,没时间就不做。
  • 对于一些特殊内容的规定,如如果一个词组key在某种语言环境下显示为空,该怎么处理等等。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
模拟xcopy的函数
Oct 09 PHP
在任意字符集下正常显示网页的方法一
Apr 01 PHP
PHP 存储文本换行实现方法
Jan 05 PHP
Laravel中使用自己编写类库的3种方法
Feb 10 PHP
PHP实现连接设备、通讯和发送命令的方法
Oct 13 PHP
浅谈PHP eval()函数定义和用法
Jun 21 PHP
PHP常用算法和数据结构示例(必看篇)
Mar 15 PHP
一个实用的php验证码类
Jul 06 PHP
laravel实现于语言包的完美切换方法
Sep 29 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
May 02 PHP
PHP7 其他修改
Mar 09 PHP
Yii 框架使用Forms操作详解
May 18 #PHP
thinkphp 框架数据库切换实现方法分析
May 18 #PHP
PHP接口类(interface)的定义、特点和应用示例
May 18 #PHP
php + ajax 实现的写入数据库操作简单示例
May 16 #PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 #PHP
Yii框架应用组件用法实例分析
May 15 #PHP
Yii框架小部件(Widgets)用法实例详解
May 15 #PHP
You might like
如何在PHP中使用Oracle数据库(3)
2006/10/09 PHP
php访问查询mysql数据的三种方法
2006/10/09 PHP
PHP简单系统查询模块代码打包下载
2008/06/07 PHP
php获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
神盾加密解密教程(一)PHP变量可用字符
2014/05/28 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
PHP7多线程搭建教程
2017/04/21 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
在 IE 中调用 javascript 打开 Excel 表
2006/12/21 Javascript
jQuery数组处理代码详解(含实例演示)
2012/02/03 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
对vue中methods互相调用的方法详解
2018/08/30 Javascript
使用Jenkins部署React项目的方法步骤
2019/03/11 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python中os和shutil模块实用方法集锦
2014/05/13 Python
Python中关键字nonlocal和global的声明与解析
2017/03/12 Python
python-pyinstaller、打包后获取路径的实例
2019/06/10 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
使用phonegap进行提示操作的具体方法
2017/03/30 HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
params有什么用
2016/03/01 面试题
北京振戎融通Java面试题
2015/09/03 面试题
趣味运动会活动方案
2014/02/12 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
2016应届毕业生自荐信范文
2016/01/28 职场文书
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
Python将CSV文件转化为HTML文件的操作方法
2021/06/30 Python
Python获取字典中某个key的value
2022/04/13 Python
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL