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
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
Apr 16 PHP
php实现用户在线时间统计详解
Oct 08 PHP
PHP5.5和之前的版本empty函数的不同之处
Jun 13 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
Jun 30 PHP
php使用date和strtotime函数输出指定日期的方法
Nov 14 PHP
smarty模板引擎基础知识入门
Mar 30 PHP
使用PHP similar text计算两个字符串相似度
Nov 06 PHP
汇总PHPmailer群发Gmail的常见问题
Feb 24 PHP
PHP基于DOM创建xml文档的方法示例
Feb 08 PHP
php获取ip及网址的简单方法(必看)
Apr 01 PHP
php中字符串和整数比较的操作方法
Jun 06 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/04/15 PHP
Zend的Registry机制的使用说明
2013/05/02 PHP
用JS写的一个TableView控件代码
2010/01/23 Javascript
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
两种不同的方法实现js对checkbox进行全选和反选
2014/05/13 Javascript
javascript中函数作为参数调用的方法
2015/02/09 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
JavaScript实现打字效果的方法
2015/07/10 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
搭建vue开发环境
2018/07/19 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
Vuex模块化应用实践示例
2020/02/03 Javascript
Python实现句子翻译功能
2017/11/14 Python
python re模块findall()函数实例解析
2018/01/19 Python
Python爬虫beautifulsoup4常用的解析方法总结
2019/02/25 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
常用的10个Python实用小技巧
2020/08/10 Python
PyCharm 光标变成黑块的解决方式
2021/02/06 Python
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
采购部部门职责
2013/12/15 职场文书
办理生育手续介绍信
2014/01/14 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
人力资源部工作计划
2019/05/14 职场文书
详解PyTorch模型保存与加载
2022/04/28 Python