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和XSL stylesheets转换XML文档
Oct 09 PHP
php 在文件指定行插入数据的代码
May 08 PHP
php 过滤英文标点符号及过滤中文标点符号代码
Jun 12 PHP
PHP开发框架kohana3 自定义路由设置示例
Jul 14 PHP
php获取当前页面完整URL地址
Dec 30 PHP
php简单实现短网址(短链)还原的方法(测试可用)
May 09 PHP
注意!PHP 7中不要做的10件事
Sep 18 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
Oct 25 PHP
PHP页面跳转实现延时跳转的方法
Dec 10 PHP
thinkphp5+layui实现的分页样式示例
Oct 08 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 PHP
PHP实现文件上传与下载
Aug 28 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 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
JQuery筛选器全系列介绍
2013/08/27 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
2013/11/22 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python网络爬虫学习笔记(1)
2018/04/09 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
幼教简历自我评价
2014/01/28 职场文书
骨干教师考核评语
2014/12/31 职场文书
自我评价优缺点范文
2015/03/11 职场文书
联谊活动总结范文
2015/05/09 职场文书
导游词之淮安明祖陵
2019/11/25 职场文书
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python
Vue图片裁剪组件实例代码
2021/07/02 Vue.js