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 相关文章推荐
人大复印资料处理程序_输入篇
Oct 09 PHP
追求程序速度,而不是编程的速度
Apr 23 PHP
php中的数组操作函数整理
Aug 18 PHP
PHP 获取远程文件内容的函数代码
Mar 24 PHP
php下批量挂马和批量清马代码
Feb 27 PHP
Parse正式发布开源PHP SDK
Aug 11 PHP
FastCGI 进程意外退出造成500错误
Jul 26 PHP
CodeIgniter配置之autoload.php自动加载用法分析
Jan 20 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
Mar 21 PHP
浅谈php中curl、fsockopen的应用
Dec 10 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
Apr 04 PHP
PHP异常类及异常处理操作实例详解
Dec 19 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实现的封装验证码类详解
2013/06/18 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
拖拉表格的JS函数
2008/11/20 Javascript
jQuery 跨域访问问题解决方法
2009/12/02 Javascript
为Extjs加加速(javascript加速)
2010/08/19 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
JavaScript中的对象的extensible属性介绍
2014/12/30 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
vue中v-for循环选中点击的元素并对该元素添加样式操作
2020/07/17 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
[40:27]完美世界DOTA2联赛PWL S3 PXG vs GXR 第一场 12.19
2020/12/24 DOTA
requests和lxml实现爬虫的方法
2017/06/11 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
护士个人简历自荐信
2013/10/18 职场文书
2015年元旦活动总结
2014/05/09 职场文书
党委书记群众路线对照检查材料思想汇报
2014/10/04 职场文书
颐和园导游词
2015/01/30 职场文书
校长师德表现自我评价
2015/03/05 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
Python中tqdm的使用和例子
2022/09/23 Python