php

Wordpress 语言包设置和翻译

多语言翻译设置

  1. 主题的functions.php添加多语言的初始代码
    1
    2
    3
    4
    
    function theme_languages_init(){   
        load_theme_textdomain('bluenight', get_template_directory() . '/languages');   
    }
    add_action ('init', 'theme_languages_init');
    

插件为:

1
2
3
4
5
6
add_action('plugins_loaded','MingPressAdmin::mingspress_textdomain');
class MingPressAdmin {
	static function mingspress_textdomain() {
		$result = load_plugin_textdomain( 'mingspress', false, dirname( plugin_basename( __FILE__ ) ) );
	}
}

将对应的语言包放在主题下,bluenight是主题名,也相当于翻译的命名空间


2. 在主题中使用_e__标记需要多语言翻译的内容,如:
1
2
3
4
// 普通的输出使用 _e() 函数   
<div class="post"><p><?php _e('Sorry, no posts matched your criteria.', 'bluenight'); ?></p></div>   
// 在函数中走参数或返回值输出使用 __() 函数   
echo the_tags('<h2>'.__('Related ','bluenight'), ' , ' , __(' Posts','bluenight').'</h2>').'<ul>';
  1. PoEdit 设置

下载地址:http://poedit.net/

安装后新建一个工程,

翻译的语言这里选择:简体中文/zh_CN

确认后再点击保存会提供保存的名称和位置,我们放在主题的language下,命名为zh_CN.po

如果可供其他人翻译的模板,则翻译语言一则选择英语,保存为主题名.pot

那么其他人翻译时可以用PoEdit中导入此模板进行翻译,wordpress官方主题就是这样的

保存后点击从源代码提取,填写翻译的属性,再保存一次

源路径填写为文件上一级目录:

源关键字:

__
_e
_n:1,2
_x:1,2c
_ex:1,2c

_n是单复数,如评论

<?php  
echo _n( 'There is a comment' , 'There are comments' , get_comments_number() );  
?>

_x和_ex是按上下文语义翻译,如:

名词:一篇文章

<?php _ex("Post","a post","mings");?>

动词:发布

<?php _ex("Post","To post","mings");?>

点击从源文件更新,此时PoEdit搜索到的翻译字符串为

确认后会自动导入翻译文本

修改wp-config.php的语言常量

define('WPLANG', 'zh_CN');      

参考文章:
http://www.wpdaxue.com/localize-wordpress-themes.html
http://www.wpdaxue.com/difference-between-__-_e-_x-_ex-and-_n.html
WordPress主题插件汉化教程 - 露兜博客

令插件支持语言包

function myplugin_init() {
  load_plugin_textdomain( 'wpdaxue', false , dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action('plugins_loaded', 'myplugin_init');

此时語言包命名方式为 wpdaxue-zh_CN.po,放在插件的languages目录下

php-fpm优化

当前内存使用情况

1
2
3
4
5
[root@cpp22 ~]# free -m
			total       used       free     shared    buffers     cached
Mem:          7870       7736        134          0       1009       5010
-/+ buffers/cache:       1716       6154
Swap:         2047          0       2047

查看php-fpm进程是否够用:

使用

1
netstat -napo |grep "php-fpm" | wc -l

查看一下当前fastcgi进程个数,如果个数接近conf里配置的上限,就需要调高进程数。

php最大执行时间的设置

如果file_get_contents请求的远程资源如果反应过慢,file_get_contents就会一直卡在那里不会超时。我们知道php.ini 里面max_execution_time 可以设置 PHP 脚本的最大执行时间,但是,在 php-cgi(php-fpm) 中,该参数不会起效。真正能够控制 PHP 脚本最大执行时间的是 php-fpm.conf 配置文件中的request_terminate_timeout参数。

pm.*的设置

如果设置成static,php-fpm进程数自始至终都是pm.max_children指定的数量,不再增加或减少。如果设置成 dynamic,则php-fpm进程数是动态的,最开始是pm.start_servers指定的数量,如果请求较多,则会自动增加, 保证空闲的进程数不小于pm.min_spare_servers,如果进程数较多,也会进行相应清理,保证多余的进程数不多于 pm.max_spare_servers。