1
sxysxy 2011-02-11 23:20:00 +08:00
sprintf当然不能去掉了~~那是get_author_posts_url 函数里的一个参数吧, 你删了它就会报错了。
|
2
darasion 2011-02-11 23:23:25 +08:00
试试:
<span class="author"><?php printf(__('Posted by %1$s at %2$s', 'suf_theme'), '<a href="'.get_author_posts_url(get_the_author_meta('ID')).'">'.get_the_author_meta('display_name').'</a>', ''); ?> <?php the_time_ago('d M, Y'); ?></span> |
3
benzhe 2011-02-11 23:27:31 +08:00
楼上的说法是错的,详看这里:http://www.w3school.com.cn/php/func_string_printf.asp
下面应该没问题: <span class="author"> <?php printf(__('Posted by %1$s', 'suf_theme'), '<a href="'.get_author_posts_url(get_the_author_meta('ID')).'">'.get_the_author_meta('display_name').'</a>'); ?> <?php the_time_ago('d M, Y'); ?></span> |
4
xinzhi OP @benzhe 您给的代码运行良好。问题好像出现在,WP没法应用国际化了,中文翻译没出来,直接是“Posted by XXX 1 天 之前 ”(后面的中文是JS处理的)
|
5
benzhe 2011-02-12 00:40:51 +08:00
@xinzhi 不清楚wp替换语言的机制,不过要是想弄中文的话把代码里的“Posted by”直接修改成中文不就成了?
像这样: <span class="author"><?php printf(__('由 %1$s 发表于 ', 'suf_theme'), '<a href="'.get_author_posts_url(get_the_author_meta('ID')).'">'.get_the_author_meta('display_name').'</a>'); ?> <?php the_time_ago('d M, Y'); ?></span> 没有考虑中文编码问题,如果printf出问题就直接不用,get_the_author_meta这类函数直接返回字符串的 |
6
darasion 2011-02-12 00:43:11 +08:00
@xinzhi 记得好像带下划线的这个函数就是国际化函数。__(),里边这个:'Posted by %1$s at %2$s' 参数不能变。变了国际化就找不到相应的对应了。可以看做是数据库中的一个key。
我想到俩办法, 1、你可以把 sprintf(....xxxxx..x.x.x) 替换成一个空值。 2、如果只用中文,就干脆自己用汉字直接写。不管英文什么的了。。 |
7
darasion 2011-02-12 00:55:47 +08:00
国际化是用 gettext 的。
大概原理就是 用一个po文件做翻译,然后编译成mo文件。 po文件里边很多这种东西: #: src/name.c:36 msgid "My name is %s.\n" msgstr "我的名字是 %s \n" 刚才wp代码里__()函数的参数 'Posted by %1$s at %2$s' ,就是po文件里边的一个msgid,翻译后的就是 msgstr。wp 通过 __() 函数读取编译好的mo文件,得到相应的翻译文字。 好像大概是这样吧,没仔细看。。 参考: http://en.wikipedia.org/wiki/Gettext http://www.gnu.org/software/gettext/ |
8
xinzhi OP 直接写中文吧,Jquery timeago插件里面也是用中文的。再次感谢大家!
|
9
POPOEVER 2011-02-12 12:08:48 +08:00
估计在 po 文件里直接是整句翻译,一句里有几个参数,这边删掉一个参数,po 文件里对不上所以就出不来了,试试看到 po 文件里找找 Posted by 对应的翻译字串,看看一个字串里是不是有几个参数,把对应 get_the_time(); 的那个参数直接删掉看看
|