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 相关文章推荐
解析PHP汉字转换拼音的类
Jun 18 PHP
使用CodeIgniter的类库做图片上传
Jun 12 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
Jul 02 PHP
php编写的抽奖程序中奖概率算法
May 14 PHP
学习php设计模式 php实现观察者模式(Observer)
Dec 09 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
Mar 17 PHP
php生成txt文件实例代码介绍
Apr 28 PHP
PHP数组去重的更快实现方式分析
May 09 PHP
PHP命令Command模式用法实例分析
Aug 08 PHP
PHP通过文件路径获取文件名的实例代码
Oct 14 PHP
ThinkPHP5&5.1实现验证码的生成、使用及点击刷新功能示例
Feb 07 PHP
laravel与thinkphp之间的区别与优缺点
Mar 02 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
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
PHP 正则表达式小结
2015/02/12 PHP
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
2015/09/28 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
使用vue2实现购物车和地址选配功能
2018/03/29 Javascript
详解NodeJs开发微信公众号
2018/05/25 NodeJs
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
2019/01/23 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
Python中super()函数简介及用法分享
2016/07/11 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
Android分包MultiDex策略详解
2017/10/30 Python
Flask框架信号用法实例分析
2018/07/24 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
教师档案管理制度
2014/01/23 职场文书
房产买卖委托公证书
2014/04/04 职场文书
环保倡议书100字
2014/05/15 职场文书
上班离岗检讨书
2014/09/10 职场文书
2015年科室工作总结
2015/04/10 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
Python - 10行代码集2000张美女图
2021/05/23 Python
使用python创建股票的时间序列可视化分析
2022/03/03 Python