1 Like

进阶WordPress主题翻译技巧

wordpress1 进阶WordPress主题翻译技巧

本文属于WordPress主题翻译教学系列,文章列表:

  1. 设计国际化的主题: WordPress主题翻译教学
  2. 如何翻译WordPress主题
  3. 进阶WordPress主题翻译技巧

继昨天的如何翻译WordPress主题之后,我又参考了一些文章,觉得有必要再补充一些东西,整个WordPress主题翻译教学系列才算完整。今天要讲的主要是一些设计主题时要注意的地方,以使翻译可以更完美。

设立文字命名空间(Text Domain)

文字命名空间(Text Domain)是为了避免本主题的翻译文字和其他主题或WordPress本身的文字发生冲突而设立的,它的意思就像一个文件夹,将本主题的文字都放在里面,需要这个主题的文字时,WordPress就会直接来到这里找,这样就不怕跟其他主题的文字弄乱了。

设立文字命名空间的方法很简单,假设我们要加入zack_theme作为Text Domain,只要在functions.php的开头加入以下程式码:

load_theme_textdomain(‘zack_theme’);

我在之前的文章里提过,要使用__()或_e()来标示需要翻译的文字,加入了Text Domain之后,有一点小变化:

  1. __($text, $domain):原本只需填入$text作为参数,现在要把Text Domain也加入作为第二参数。
  2. _e($text, $domain):同上。

这样WordPress知道文字是需于哪个Domain的,就能快速地找到相应翻译。

带参数的文字翻译

这种情况,我有稍微讲过,再来看一个例子,强化一下:

title="Permanent Link to <?php the_title(); ?>"
这个例子应该不陌生吧,这是标题连结的title设定,很明显"Permanent Link to"需要翻译,很多人第一反应就会想到这样做:
<?php _e('Permanent Link to', 'zack_theme') ?> <?php the_title(); ?>
这样做的问题是,只翻译"Permanent Link to",在其他语言中,句子未必通顺,甚至不成立。例如,以中文来讲,我会希望这句翻译出来的结果是:"第一篇文章的永久连结",就是把"Permanent Link to"放在了标题的后面,顺序完全相反了。所以这句话我们要把整句抽出来翻译:
<?php printf(__('Permanent Link to %s', 'zack_theme'), get_the_title())?>
现在我们用printf()来完成这个输出,这样做就能把标题插入到%s这个位置上。中文翻译时就是:"%s的永久连结"。出来的结果就是我上面希望的样子。把the_title()改为get_the_title()是因为,the_title()会把文字直接输出到网页,而get_the_title()则把文字返回给程式使用。情况跟_e()和__()一模一样。

日期与时间的翻译

日期跟时间的翻译有够烦的,单是中文(2010年01月22日)跟英文(22/01/2010)就已经差很多了。不过,WordPress使用PHP的Date()方法来处理日期与时间,因此我们可以直接使用PHP Date()的格式来翻译,就算在要翻译的文字未出现的格式代号也可以使用,例如:

<?php the_time(__(‘l, j F Y’, ‘zack_theme’)) ?>

跟据原文,我们只要翻译’l,j F Y’,但其实我们可以翻译成’Y年n月j日’;这样就可以得到年月日的格式了。如果你不太清楚Y,n,j,这些各代表什么或是想知道其他的代号,可以查看PHP Date()的说明

翻译的文字顺序

这种情况出现在要翻译句子中有两个参数的时候:

Hi, I am %s, Welcome to %s

这句话的完整版是:Hi, I am Zack, Welcome to ZackLive,其中ZackLive是网志名称。这在中文跟英文都似乎很通顺,但在其他语言却可能会要把两个%s调换位置,两个都是%s,怎么区别?我们可以这样做:

Hi, I am %1$s, Welcome to %2$s

如此更改后,我们就能任意的调整位置了。

JavaScript中的文字翻译

要翻译JavaScript中的文字并不如想像中那么难,只是有点烦。我们可以把所文JavaScript中的文字改为变量,并对变量进行翻译。请看以下例子:

function show_msg ()
{
  alert('This is You message');
}
我们先将这里改为:
function show_msg ()
{
  alert(your_msg);
}
然后在HTML头部,也就是<head>与</head>之间,加入:
<script type="text/javascript" charset="utf-8">
  var your_msg = '<?php _e('This is your message', 'zack_theme'); ?>';
</script>

翻译中单复数的处理

关于这一部分,我也还未完全弄明白,只是把我所知道的,跟大家分享一下,若你有更深入的见解,欢迎指教。我们要看的例子是显示留言数:

<?php comments_popup_link('No Comments &#187;',
                          '1 Comment &#187;',
                          '% Comments &#187;'); ?>

这里考虑了英文中的三种情况:没有回覆,一个回覆跟多个回覆。而中文则是这三种情况的翻译都一样。但是在其他语言,两个回覆跟三个回覆的写法,都不一样,据说__ngettext()能解决这个问题。先来看__ngettext()的用法:

<?php __ngettext($single, $plural, $number, $domain); ?>
__ngettext有四个参数,其中$domain就是Text Domain,另外三个分别是:
  1. $single:当$number等于1时,使用这个翻译;
  2. $plural:当$number大于1时,使用这个翻译;
  3. $number:具体的数目。

我在网上看到的解决方法是这样的:

<?php comments_popup_link(__('No Comments &#187;', 'kubrick'),
                          __('1 Comment &#187;', 'kubrick'),
                          __ngettext('% comment', '% comments',
                                      get_comments_number (),
                                      'kubrick')); ?>

没有回覆跟一个回覆是正常的做法,多个回覆那边,我也不太能够理解,有哪位高手可以详细讲解一下吗?

数字与货币的翻译

数字与货币要注意的是要将数字与货币符号整个标示以供翻译,数字格式可使用number_format()来处理。

总结

研究下来才知道光是翻译主题就要考虑这么多东西,设计主题时,要注意的地方又增加了不少。我想,我们没有办法考虑到所有语言的情况,只能够通过用户的反馈,不断地改进。

[参考:Urban Giraffe]


欢迎到我们的论坛发表你的看法

关于 Zack

喜欢WordPress,WordPress主题设计学习中; 关注网络,特别是Web2.0的发展.英文网志:http://ZackLive.com
本篇发表于 WordPress主题 并标签为 , , , , , 。将永久炼结加入书签。

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

进阶WordPress主题翻译技巧 有 3 则回应

  1. myflos 说道:

    hi,看了你写的教程有以下疑问
    1,我编译好语言包要放到什么地方才可以让程序识别
    2,需要在某个文件内告诉程序我这套主题有语言包以便于程序翻译么,要在那里?怎么写?我现在用的那套主题识别系统的语言包,自动汉化了一部分
    3,感觉最简单的地方才是出问题的地方……掐死我的快感

  2. Zack 说道:

    @myflos

    谢谢你的问题,确实我应该说明一下,有时间再写一篇补充教学:

    1.语言包放在你的主题文件夹里的languages文件夹里,你可以自己创建一个languages文件夹.

    2.要设定WordPress的语言,请打开config.php,找到:
    define (‘WPLANG’, ”);
    这是语言设定,简体中文请改为:
    define (‘WPLANG’, ‘zh_CN’);
    然后WordPress就会自行寻找简体中文的语言包,包括主题的。

    3.还有什么问题,欢迎提出,学生知无不言。

  3. 图玛奇 说道:

    我最近也打算自己翻译下自己喜欢的主题,通过搜索引擎找到了你自己,看到了你的文章,对我很有帮助。你的主题做的很棒。还有你的自我简介很幽默哈。

留下评论

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>