php nginx window系统 gettext方式实现UTF-8国际化多语言(i18n)
开始应用:
步骤一:搭建环境(服务器已经完成,环境已经搭建好了)
1、首先查看你的php扩展目录下是否有php_gettext.dll这个文件,如果没有,这就需要你下载一个或是从其他地方拷贝一个,然后放到php扩展目录。
2、打开php.ini,查找”;extension=php_gettext.dll“ ,然后去除注释,重启nginx。
若一切顺利,就可以在 phpinfo() 中看到 gettext 字样,至此服务器环境配置完毕。
步骤二:假如我们要翻译test.php页面里的hello word.这句话。
编辑test.php,将要翻译 的文字用gettext函数包含,表示这些被包含的文字是需要用来翻译的。
<?php $lan = isset($_REQUEST [ 'lan' ])?$_REQUEST [ 'lan' ]:'zh_CN';
if ( $lan == 'zh_CN' ){
putenv('LANG=zh_CN' );
setlocale(LC_ALL, 'zh_CN' ); //指定要用的语系,如:en_US、zh_CN、zh_TW
}elseif ( $lan == 'zh_TW' ){
putenv('LANG=zh_TW' );
setlocale(LC_ALL, 'zh_TW' ); //指定要用的语系,如:en_US、zh_CN、zh_TW
}elseif ( $lan == 'en_US' ) {
putenv('LANG=en_US' );
setlocale(LC_ALL, 'en_US' ); //指定要用的语系,如:en_US、zh_CN、zh_TW
} $domain = 'test' ; //域名,可以任意取个有意义的名字,不过要跟相应的.mo文件的文件名相同(不包括扩展名)。 bindtextdomain ( $domain , "locale/" ); //设置某个域的mo文件路径
bind_textdomain_codeset($domain , 'UTF-8' ); //设置mo文件的编码为UTF-8
textdomain($domain ); //设置gettext()函数从哪个域去找mo文件
?>
<html>
<head>
<meta http-equiv="Content-Type" content= "text/html; charset=utf-8" />
<title>title</title>
</head>
<body bgcolor="#FFFFFF" text= "#000000" link= "#FF9966" vlink= "#FF9966" alink= "#FFCC99" >
<?= gettext ( 'hello world.' ) ?>
<br>
<?= gettext ( 'hello world2.' ) ?>
</body>
</html>
步骤三:编辑好了test.php后,我们就应该对这个页面生成对应的语言包(test.po和test.mo文件)
要生成语言包,我们需要借助两款工具:
1、gettext工具下载地址:http://nchc.dl.sourceforge.net/sourceforge/gnuwin32/gettext-0.14.4.exe
(用来生成po文件,安装好了以后,需要把”安装路径/bin”添加到系统环境变量path里)
2、Poedit工具下载地址:http://www.poedit.net/download.php (用来编辑po文件,编辑需要翻译的语言,最后自动生成mo文件)
假设我们都安装好了这些软件,现在我们开始对test.php进行翻译工作。打开命令提示符cmd,切换到test.php所在的目录。
输入 xgettext -d test test.php --from-code=utf-8 (当你要翻译的页面为index.php,只需要将蓝色部分改为index即可),然后执行,这时候你可以在test.php所在目录看到新生成的文件test.po
用poedit工具打开test.po,然后针对这些语言翻译成我们对应的语言,保存后poedit会自动生产mo文件(unicode二进制码)。
将po文件和mo文件放入项目目录
如我们放入的是简体中文,则放入:
/locale/zh_CN/LC_MESSAGES/test.po
/locale/zh_CN/LC_MESSAGES/test.mo
如我们放入的是繁体中文,则放入:
/locale/zh_TW/LC_MESSAGES/test.po
/locale/zh_TW/LC_MESSAGES/test.mo
OK。一切都非常顺利,我们开始访问测试下多语言吧。
访问test.php?lan=zh_CN则显示简体,
访问test.php?lan=en_US则显示英文,
访问test.php?lan=zh_TW显示繁体(该功能本文没有实现)。
最后记得要 重启nginx,方可看到效果。
++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++
如何将多个文件的语言翻译放到同一个.mo文件中???
生成.po文件命令如下: (注意,此时多加了一个命令参数 -j ,表明是以追加的形式添加语言包的。)
xgettext -d test test.php -j --from-code=utf-8
php nginx window系统 gettext方式实现UTF-8国际化多语言(i18n)的更多相关文章
- php gettext方式实现UTF-8国际化多语言(i18n)
php gettext方式实现UTF-8国际化多语言(i18n) 一.总结 一句话总结: 二.php gettext方式实现UTF-8国际化多语言(i18n) 近 来随着i18n(国际化)的逐渐标准化 ...
- 学习window系统下的注册表
一直不明白注册表是一个什么鬼,查了资料后大概明白了注册表到底有什么用,其实简单来说注册表就是一个存放系统.硬件.应用配置信息的数据ku.##### 一.注册表的来历在最早的视窗操作系统win3.x中, ...
- 模拟window系统的“回收站”
若要模拟window系统的“回收站”功能,具体的要求如下: 对于列表中的图片,可以通过拖动或单击“删除”的链接,以动画的方式移至“回收站”. 对于“回收站的图片”,可以通过拖动和单击“还原”的链接,以 ...
- window系统的HOST详解
很多用户都知道在Window系统中有个Hosts文件(没有后缀名),在Windows 98系统下该文件在Windows目录,在Windows 2000/XP系统中位于C\Winnt\System32 ...
- kvm安装window系统及使用NFS动态迁移
验证是否开启虚拟化 # grep -E 'svm|vmx' /proc/cpuinfo - vmx is for Intel processors - svm is for AMD processor ...
- 用Window Authentication的方式去连接SQLServer
用Window Authentication的方式去连接SQLServer Connection String: jdbc:sqlserver://${serverName};databaseName ...
- [实战经验]Macbook pro 苹果系统换window系统
1. Macbook的window软件驱动备份 通过Boot Camp助手进行window支持苹果驱动下载 2. 拆机把SSD固态硬盘放在主盘位置,把苹果的机械盘放在光驱位置 ...
- 在window系统下配置login.sql
在window系统下配置login.sql 他的位置是登录用户的文件夹,我的win7系统位置是: C:\Users\Administrator 我的login.sql下载地址: http://file ...
- “canvas画布仿window系统自带画图软件"项目的思考
"canvas画布仿window系统自带画图软件"项目的思考 首先贴上DEMO图,并没有美化效果.对UI有要求的,请自带补脑技术. 思考一 在做项目的过程中,我发现"工具 ...
随机推荐
- 区别和认识.net四个判等方法
概要 本方介绍.net如何判断两个对象是否相等 .Net有四个判等函数 1)Object.ReferenceEquals 2)Object.Equals 3)对象实例的Equals 4)==操作符 这 ...
- Vue的响应式系统
Vue的响应式系统 我们第一次使用Vue的时候,会感觉有些神奇,举个例子: <div id="app"> <div>价格:¥{{price}}</di ...
- CF316G3 Good Substrings 广义后缀自动机
太累了,刷刷水~ code: #include <bits/stdc++.h> #define N 500005 #define LL long long #define setIO(s) ...
- RookeyFrame 信息 常用信息整理
博客 https://www.cnblogs.com/rookey/ gitee的地址: https://gitee.com/rookey/Rookey.Frame-v2.0 https://gite ...
- idea使用/***/单行注释格式化后会显示多行,如何能保持单行显示
- C语言scanf函数返回值小记
scanf scanf是C标准库stdio里面定义的用于获取用户输入的函数,具体的介绍可以在CppReference上看到.scanf的返回值是已经成功赋值的变量个数,也就是说在 scanf(&quo ...
- Lombok:小辣椒的安装与使用
0.简介 Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具, 通过使用对应的注解,可以在编译源码的时候生成对应的方法,官网有详细的使用说明和视频. ...
- Android中活动的最佳实践(如何很快的看懂别人的代码activity)
这种方法主要在你拿到别人的代码时候很多activity一时半会儿看不懂,用了这个方法以后就可以边实践操作就能够知道具体哪个activity是干什么用的 1.新建一个BaseActivity的类,让他继 ...
- Python在windows平台的多版本配置
Python在windows平台的多版本配置 快速阅读: python在windows平台的环境变量以及多版本配置 ,以及pycharm如何安装包,以及安装包出错时如何排查. 1.python环境 ...
- Oracle通过一个字段的值将一条记录拆分为多条记录
前言 之前遇到了一次这样的需求,当时没有记录,这一次又赶上了,简单的记录一下. 本文个人拙见,若有出入,请指出--来自菜的颤抖 场景 表A中存放了集装箱的信息,一个集装箱一条记录,表B中存放了对于集装 ...