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性能测试工具xhprof的详解
Jun 03 PHP
PHP判断图片格式的七种方法小结
Jun 03 PHP
深入PHP数据加密详解
Jun 18 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
php curl模拟post请求小实例
Nov 13 PHP
php格式化日期实例分析
Nov 12 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
php分割合并两个字符串的函数实例
Jun 19 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
Mar 01 PHP
详解PHP实现定时任务的五种方法
Jul 25 PHP
利用PHP抓取百度阅读的方法示例
Dec 18 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
Sep 30 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 翻页 实例代码
2009/08/07 PHP
ajax实现无刷新分页(php)
2010/07/18 PHP
Drupal简体中文语言包安装教程
2014/09/27 PHP
php操作mongoDB实例分析
2014/12/29 PHP
php header函数的常用http头设置
2015/06/25 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
offsetParent 算法分析
2010/04/05 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
Vue2.0使用过程常见的一些问题总结学习
2017/04/10 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
详解vue 组件
2020/06/11 Javascript
python 正则表达式 概述及常用字符
2009/05/04 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
Python小进度条显示代码
2019/03/05 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
Python过滤序列元素的方法
2020/07/31 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
交通事故检查书范文
2014/01/30 职场文书
总经理司机岗位职责
2014/02/06 职场文书
品质管理部岗位职责范文
2014/03/01 职场文书
企业员工集体活动方案
2014/08/17 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
社区母亲节活动总结
2015/02/10 职场文书