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函数memory_get_usage获取PHP内存清耗量的方法
Dec 06 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
Jun 28 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
php实现的ping端口函数实例
Nov 12 PHP
PHP+jquery+ajax实现即时聊天功能实例
Dec 23 PHP
php动态绑定变量的用法
Jun 16 PHP
帝国cms常用标签汇总
Jul 06 PHP
PHP设置进度条的方法
Jul 08 PHP
一波PHP中cURL库的常见用法代码示例
May 06 PHP
php求数组全排列,元素所有组合的方法总结
Mar 14 PHP
PHP实现一维数组与二维数组去重功能示例
May 24 PHP
PHP进阶学习之依赖注入与Ioc容器详解
Jun 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 header Content-Type类型小结
2011/07/03 PHP
如何使用PHP计算上一个月的今天
2013/05/23 PHP
PHP模板引擎Smarty的缓存使用总结
2014/04/24 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
JavaScript 继承详解(一)
2009/07/13 Javascript
jQuery实现的类flash菜单效果代码
2010/05/17 Javascript
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
jQuery Checkbox 全选 反选的简单实例
2016/11/29 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
2016/12/27 Javascript
canvas实现弧形可拖动进度条效果
2017/05/11 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
python list的index()和find()的实现
2020/11/16 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
小学老师对学生的评语
2014/12/29 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
体育教师研修感悟
2015/11/18 职场文书
如何利用map实现Nginx允许多个域名跨域
2021/03/31 Servers
python实现调用摄像头并拍照发邮箱
2021/04/27 Python
详解Django的MVT设计模式
2021/04/29 Python
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python