2020-10-28
PHP项目多语言配置平台实现过程解析

PHP项目多语言配置平台实现过程解析

这个月用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在某种语言环境下显示为空,该怎么处理等等。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持梦主博客。...
技术教程 1160次浏览 0条评论
2020-10-27
如何通过Apache在本地配置多个虚拟主机

如何通过Apache在本地配置多个虚拟主机

如何使用 Apache 在本地配置出多个虚拟主机呢?而且使用不同的“域名”来访问本地不同的站点呢? 一般情况下,咱们都使用 localhost 来访问本机上的服务器,在我们的 C:/WINDOWS/system32/drivers/etc/hosts 文件中默认有一个: 127.0.0.1 localhost 当我们在浏览器地址栏键入: http://localhost 的时候,会显示出服务器根目录中的许多文件夹(若你的根目录不是只有一个站点的话),就像: Index of / * BAK/ * B_Discuz/ * B_Supesite/ * B_UCenter/ * B_Uchome/ * B_Uchome_Bak/ * B_XSpace/ * DiscuZ_X1/ * Javascript/ * NewUch/ * PHP/ * UchUtf8/ * Zend Framework_1.10.8/ * Zendphpweb20/ * mycms/ * phpMyAdmin/ * userAdminManager/ 现在我想通过一个自定义的“域名”来访问我的根目录中的站点,譬如: 1,根目录中有一个 phpMyAdmin/ 的文件夹(倒数第二个),它是一个网页版的数据库管理系统(肯定不会陌生的吧!),我想通过访问一个简单的: http://dbmanager 来进入这个系统(而不用输入 localhost,再点击 phpMyAdmin/ 才进入); 2,根目录中有一个 Zendphpweb20/ 的文件夹(倒数第三个),它只是一个本地应用站点,我想通过访问: http://phpweb20 来进入这个本地站点; 现在要干些什么呢?跟我来吧!看下面: 1> 修改系统的 hosts 文件: 打开之前说过的系统的 hosts 文件,来给我们的电脑添加两个“假的”DNS 项,加入代码: 127.0.0.2 dbmanager 127.0.0.3 phpweb20 这样,我们的浏览器就会将 dbmanager 主机名解析为 127.0.0.2,将 phpweb20 主机名解析为 127.0.0.3。 2> 修改 Apache 配置文件: 在我的本机内 Apache 的主配置文件在: D:/usr/local/apache2/conf/httpd.conf 说是修改 Apache 的配置文件,其实只是添加了一些内容,因为不想修改 Apache 的主配置文件,所以我们最好在各个站点写好自己的虚拟主机配置子文件,然后使用 Include 指令将其包含到 Apache 的主配置文件里。 其实在 Apache 的主配置文件的最下方有虚拟主机的配置示例,只不过都被注释掉了: # 基于名称的虚拟主机示例: #<VirtualHost 127.0.0.2:80> # ServerAdmin [email protected] # DocumentRoot D:\usr\webroot\webhosting1 # ServerName 127.0.0.2 # ErrorLog logs/dummy-host.example.com-error_log # CustomLog logs/dummy-host.example.com-access_log common #</VirtualHost> #<VirtualHost 127.0.0.3:80> # ServerAdmin [email protected] # DocumentRoot D:\usr\webroot\webhosting2 # ServerName 127.0.0.3 # ErrorLog logs/dummy-host.example.com-error_log # CustomLog logs/dummy-host.example.com-access_log common #</VirtualHost> #<VirtualHost 127.0.0.4:80> # ServerAdmin [email protected] # DocumentRoot D:\usr\webroot\webhosting3 # ServerName 127.0.0.4 # ErrorLog logs/dummy-host.example.com-error_log # CustomLog logs/dummy-host.example.com-access_log common #</VirtualHost> 在配置文件的最下方添加代码: # 包含 dbmanager 虚拟主机配置文件 Include D:/usr/webroot/phpMyAdmin/httpd.conf # 包含 phpweb20 虚拟主机配置文件 Include D:/usr/webroot/Zendphpweb20/httpd.conf (我的 localhost 的根目录为 D:/usr/webroot/) 3> 创建各个虚拟主机的子配置文件: 创建 dbmanager 的配置文件:D:/usr/webroot/phpMyAdmin/httpd.conf #dbmanager 虚拟主机设置 <VirtualHost 127.0.0.2:80> ServerName dbmanager DocumentRoot D:/usr/webroot/phpMyAdmin <Directory D:/usr/webroot/phpMyAdmin> AllowOverride All Options All </Directory> </VirtualHost> 创建 phpweb20 的配置文件:D:/usr/webroot/Zendphpweb20/httpd.conf #phpweb20 虚拟主机设置 <VirtualHost 127.0.0.3:80> ServerName phpweb20 DocumentRoot D:/usr/webroot/Zendphpweb20/htdocs <Directory D:/usr/webroot/Zendphpweb20/htdocs> AllowOverride All Options All </Directory> #修改 PHP 配置(可选) php_value include_path .;D:/usr/webroot/Zendphpweb20/include;D:/usr/local/php5/PEAR php_value magic_quotes_gpc off php_value register_globals off </VirtualHost> 各个虚拟主机的配置就看应用站点的不同需要了,DocumentRoot 为其根目录(php_value 是修改此站点的 PHP 运行参数,根据自己应用的需要来写,这样就不必修改 PHP 主配置文件)。 4> 重启 Apache 服务: 这个就不多说了。 完毕!好了,在浏览器地址栏输入分别输入: http://dbmanager http://phpweb20 我们的目的达到了! 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持梦主博客。...
技术教程 930次浏览 0条评论
微信二维码