使用GNU gettext来实现网站多语言支持

本文介绍了如何利用GNU gettext在服务器上为PHP网站实现多语言支持。首先,详细讲述了安装gettext库和PHP扩展的步骤,接着讨论了初始化gettex、在页面中应用翻译的方法,以及如何通过xgettext工具提取和编辑po文件,最后生成mo文件以供程序使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务器支持第三方插件

1,安装第三方插件本身

centos: yum install gettext
ubuntu: apt-get install gettext

2,安装php对该插件的支持

1)cd /home/developer/php-5.6.5/ext/gettext
2)/usr/local/php-5.6/bin/phpize
3)./configure –with-php-config=/usr/local/php-5.6/bin/php-config
4)make
5)make install
6)cd /usr/local/php-5.6/lib/php/extensions/no-debug-non-zts-20131226 成功安装后会产生gettext.so
7)change php.ini add extension=gettext.so
8)ps -aux | grep php-fpm
9)killall php-fpm
10)/usr/local/php-5.6/sbin/php-fpm

初始化init gettext

        $locale = 'zh_CN';
        if( isset($_COOKIE['locale']) && in_array($_COOKIE['locale'], array('en_US', 'ko_KR', 'zh_CN')) ){
            $locale = $_COOKIE['locale'];
        }
        else {
            $_COOKIE['locale'] = $locale;
        }


        $charset='UTF-8';
        setlocale(LC_ALL, "{$locale}.{$charset}");

        if (!function_exists("gettext")) {
            throw new \Exception('not support gettext');
        }

        $segment = 'home';
        bindtextdomain($segment, LOCALEPATH);
        textdomain($segment); //默认翻译源mo文件名

        bindtextdomain('www_layout', LOCALEPATH); //共用的部分页面,指定翻译mo源文件
        bindtextdomain('exception', LOCALEPATH); //非页面,exception翻译集合

前台页面gettext方法使用

<?php echo gettext('购物车');?> //默认当前$segment使用

不是连续的句子

<?php
function replaceLngMessage($msg, $replaces){
    foreach($replaces AS $key=>$replace) {
        $msg = str_replace("v:{$key};", $replace, $msg);
    }
    return $msg;
}
?>

<?php echo replaceLngMessage(gettext('您有¥v:0;余额可用'), array($blance));?>

共用Layout,Header,Footer,Siderbar指定翻译

<?php echo dgettext('www_layout', '在线客服');?>

页面都添加后,xgettext提取出po文件

xgettext -j –from-code=UTF-8 /home/projectA/host/www/control/home/index.view.php –default-domain=www_base –output-dir=/home/projectA/locale/en_US/LC_MESSAGES

-j 是附加的意思,第一次生成不需要添加这个参数

po编辑翻译后,生成mo文件

msgfmt -o /home/ProjectA/locale/en_US/LC_MESSAGES/www_base.mo /home/projectA/locale/en_US/LC_MESSAGES/www_base.po

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值