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算开始时间到过期时间的相隔的天数
Jan 12 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
Apr 25 PHP
php批量删除cookie的简单实现方法
Jan 26 PHP
ThinkPHP实现递归无级分类――代码少
Jul 29 PHP
10个php函数实用却不常见
Oct 13 PHP
微信获取用户地理位置信息的原理与步骤
Nov 12 PHP
深入浅析PHP无限极分类的案例教程
May 09 PHP
php中使用websocket详解
Sep 23 PHP
PHP脚本自动识别验证码查询汽车违章
Dec 20 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
Oct 17 PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 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使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
php 将json格式数据转换成数组的方法
2018/08/21 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
深入理解js中this的用法
2016/05/28 Javascript
JavaScript职责链模式概述
2016/09/17 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
Python端口扫描简单程序
2016/11/10 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
Python批量处理csv并保存过程解析
2020/05/16 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
Aurora London官网:奢华、负担得起的皮革手袋
2020/08/01 全球购物
what is the difference between ext2 and ext3
2015/08/25 面试题
师范应届生求职信
2013/11/15 职场文书
大学运动会通讯稿
2014/01/28 职场文书
优秀教师获奖感言
2014/01/31 职场文书
《池塘边的叫声》教学反思
2014/04/12 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
匿名信格式范文
2015/05/27 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
高中同学会致辞
2015/08/01 职场文书
python删除csv文件的行列
2021/04/06 Python
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏
css3 文字断裂效果
2022/04/22 HTML / CSS
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers