PHP:帮忙修改一段代码呗,修改“由XXX 发表于 14:18 1 天 之前”为“由XXX 发表于 1 天 之前”

2011-02-11 23:05:44 +08:00
 xinzhi
一边帮亲戚刷机,一边帮朋友改WP, 两边忙不过来了。

<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>', sprintf(get_the_time(get_option('time_format')))); ?>&nbsp;<?php the_time_ago('d M, Y'); ?></span>

// 直接去掉sprintf这一段,报错,连同逗号什么的,去掉,WP整站崩溃了。。。还是求助吧。

最后送给对子大家看:
RT @xie107: 【程序猿】上联:为系统而生,为框架而死,为debug奋斗一辈子 下联:吃符号的亏,上大小写的当,最后死在需求上! 横批:杯具程序员。

谢谢帮忙!
5569 次点击
所在节点    问与答
9 条回复
sxysxy
2011-02-11 23:20:00 +08:00
sprintf当然不能去掉了~~那是get_author_posts_url 函数里的一个参数吧, 你删了它就会报错了。
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>', ''); ?>&nbsp;<?php the_time_ago('d M, Y'); ?></span>
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>'); ?>

&nbsp;

<?php the_time_ago('d M, Y'); ?></span>
xinzhi
2011-02-12 00:21:07 +08:00
@benzhe 您给的代码运行良好。问题好像出现在,WP没法应用国际化了,中文翻译没出来,直接是“Posted by XXX 1 天 之前 ”(后面的中文是JS处理的)
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>'); ?> &nbsp; <?php the_time_ago('d M, Y'); ?></span>

没有考虑中文编码问题,如果printf出问题就直接不用,get_the_author_meta这类函数直接返回字符串的
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、如果只用中文,就干脆自己用汉字直接写。不管英文什么的了。。
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/
xinzhi
2011-02-12 01:23:31 +08:00
直接写中文吧,Jquery timeago插件里面也是用中文的。再次感谢大家!
POPOEVER
2011-02-12 12:08:48 +08:00
估计在 po 文件里直接是整句翻译,一句里有几个参数,这边删掉一个参数,po 文件里对不上所以就出不来了,试试看到 po 文件里找找 Posted by 对应的翻译字串,看看一个字串里是不是有几个参数,把对应 get_the_time(); 的那个参数直接删掉看看

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/8327

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX