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合并两个数组的两种方式的异同
Sep 14 PHP
基于Zend的Config机制的应用分析
May 02 PHP
解析smarty模板中类似for的功能实现
Jun 18 PHP
php使用mkdir创建多级目录入门例子
May 10 PHP
PHP实现返回JSON和XML的类分享
Jan 28 PHP
分享十款最出色的PHP安全开发库中文详细介绍
Mar 22 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
php二维码生成
Oct 19 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
php DES加密算法实例分析
Sep 18 PHP
php实现多站点共用session实现单点登录的方法详解
Sep 18 PHP
tp5.1框架数据库子查询操作实例分析
May 26 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
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
PHP 面向对象 final类与final方法
2010/05/05 PHP
PHP中实现生成静态文件的方法缓解服务器压力
2014/01/07 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
Django中通过定时任务触发页面静态化的处理方式
2018/08/29 PHP
PHP优化之批量操作MySQL实例分析
2020/04/23 PHP
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
var与Javascript变量隐式声明
2009/09/17 Javascript
JQuery Tips(3) 关于$()包装集内元素的改变
2009/12/14 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
Jquery性能优化详解
2014/05/15 Javascript
jQuery+AJAX实现无刷新下拉加载更多
2015/07/03 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
详解js数组的完全随机排列算法
2016/12/16 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
Vue自定义组件双向绑定实现原理及方法详解
2020/09/03 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
Python学习笔记之os模块使用总结
2014/11/03 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
C/C++程序员常见面试题一
2012/12/08 面试题
SQL SERVER面试资料
2013/03/30 面试题
《猴子种树》教学反思
2014/02/14 职场文书
文秘大学生求职信
2014/02/25 职场文书
超市商业计划书
2014/05/04 职场文书
运动会广播稿200字
2015/08/19 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS