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 相关文章推荐
GD输出汉字的函数的分析
Oct 09 PHP
PHP VS ASP
Oct 09 PHP
PHP图片上传类带图片显示
Nov 25 PHP
LotusPhp笔记之:Logger组件的使用方法
May 06 PHP
php实现的日历程序
Jun 18 PHP
在Mac上编译安装PHP7的开发环境
Jul 28 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
WordPress的主题编写中获取头部模板和底部模板
Dec 28 PHP
PHP提取字符串中的手机号正则表达式怎么写
Jul 17 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 PHP
php屏蔽错误及提示的方法
May 10 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
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
PHP编译安装时常见错误解决办法
2015/05/28 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
2009/11/14 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
JavaScript头像上传插件源码分享
2016/03/29 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
几个你不知道的技巧助你写出更优雅的vue.js代码
2018/06/11 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
python学习笔记:字典的使用示例详解
2014/06/13 Python
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
学Python 3的理由和必要性
2019/11/19 Python
python 使用shutil复制图片的例子
2019/12/13 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
Python实现分数序列求和
2020/02/25 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
jupyter notebook插入本地图片的实现
2020/04/13 Python
html2canvas生成的图片偏移不完整的解决方法
2020/05/19 HTML / CSS
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
小学运动会口号
2014/06/07 职场文书
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS