创建一个双语博客II,怎样创建一个双语博客

OK,在这一部分,我们将使用WordPress 2.1.3创建一个就想你正在阅读的这个博客一样的中英文双语博客。在这篇文章里,我将提供有关我自己的一些经验和一些图片说明,哦对了,我还将提供我的已经“gettexted”的WordPress主题模板,TypoXP-Reloaded (并且已经进行了Google Adsense的优化 🙂 )。而且,我很确定在这篇文章中介绍使用的一些方法也会同样适用于创建其他的双语博客!

但是首先,我想特别感谢Language Switcher的作者,Jennifer Hodgdon,感谢她非常耐心的回答我的E-mails和对Language Switcher这个非常棒的插件所做的改进。实际上,这篇文章就是基于在poplarware.com上的文章,Creating a Multilingual Blog with WordPress而写的。

好的,废话少说,让我们开始吧。

Language Switcher 如何工作和一个基本的工作概览
我想首先介绍一下Language Switcher插件是如果工作的。基本上,除了能够利用WordPress提供的多语言支持的语言文件提供软件界面的本地化以外,它还提供了一组“语言标记(language tags)”可被使用,这样你可以非常容易的提供多个语言版本的内容。Language Switcher负责处理像让网页显示正确的语言,设置博客的默认语言等等这样的工作。你将会需要找到你的语言的ISO代码(如果你不知道这是什么,进行一下Google的搜索就可以了),比如,英语的ISO代码是“en”(不包括引号),而中文的是“zh”(不包括引号)。语言标记将会利用这个ISO代码决定文章的内容是使用的那种语言文字。举个例子:<lang_en>internet is so great</lang_en><lang_zh>互联网是如此的美妙</lang_zh>,将会表示为,用英语,我们说“internet is so great”;用汉语,我们说“互联网是如此的伟大”;而Language Switcher将会根据你博客所选择显示的语言实时地将正确的“语言过滤”应用于你的网页内容上。

将一切都设置好的步骤的一个概览:
我将假设你已经在你的本地机和你的虚拟服务器的空间安装好了WordPress 2.1.3,因为我想,你真的需要在你的本地机上面有一个你正在运行的网站的备份。一下是我们需要进行的一个总的步骤:

  1. 对你的数据库的分类标题域进行必要的修改。
  2. poplarware下载修改好的WordPress的核心文件,并且把它们解压覆盖原来的文件。
  3. “gettext” 你的主题模板。
  4. 得到你的语言文件并且用poEdit工具,根据你的需要,编辑你的语言文件和主题模板文件。
  5. 下载 并安装 Language Switcher 插件。
  6. 测试。
  7. 上传所有必须的文件到你的网站服务器。
  8. 发表文章,开始建设你的双语博客吧!

修改你的数据库
需要修改数据库的原因实际上很明显。当你使用语言标记添加多个语言版本的分类标题时,像<lang_en>–YOUR TITLE–</lang_en><lang_zh>–你的标题–</lang_zh>,这个分类的标题的长度肯定会非常的长,特别时考虑到你的标题的实际内容不会很短的时候。修改你的数据库,我推荐使用phpmyadmin (一个非常好的MySQL数据库的管理工具)。首先,用浏览器打开phpmyadmin,到你的博客正在使用的数据库,然后点击wp_categories(大多数情况下,你的数据库表的前缀应该都是“wp_”,如果你在安装WordPress时选择或改变成了其他的数据库表的前缀,把你使用的表格前缀替换掉“wp_”就行了,你应该没有什么困难找到这个categorie表)表,然后,在这个屏幕上,就像图片显示的那样,对cat_name域选择“改变”动作。

change cat_name field

然后,在接下来的这个屏幕上,输入一个数据到那个长度/值的文本框里,我推荐200。这一步就完成了。

set the value

下载修改好的WordPress的核心文件
至少在目前,这一步是必须的,除非你有足够的PHP编程的知识,因为为了能让Language Switcher正常工作并且让WordPress的每一个子窜都显示为正确的语言,许多WordPress的核心文件需要修改。就像poplarware 所说的:

When I originally got my bilingual blog working, I had to do quite a bit of PHP programming and sleuthing to get everything to appear in the right language. With Version 2.1 of WordPress, things are not quite so bad, but there are still a few modifications to core WordPress files that you will want, if you want everything in your blog to be multi-lingual (posts, categories, links, link categories, RSS feeds, etc.), and if you want the WordPress admin pages to display correctly. When WordPress 2.2 comes out (April 2007), these changes are scheduled to be integrated into the core WordPress files, but until then, if you want your multi-lingual blog to work correctly, you’ll need to download and install the modifications.

大意:当我最初想让我的双语博客正常工作时,我必须认真的(对WordPress的源代码)推理和做一定数量的PHP编码以使所有的东西显示为正确的语言。使用WordPress 2.1版本,事情要好得多了,但是那里还是有一些地方需要修改,如果你真的希望你博格上的所有东西都显示为“双语”(文章、分类、链接、链接分类、RSS新闻,等等),加上你的WordPress的系统管理页面。预计到WordPress 2.2出来时(2007年,四月),这里的这些修改已安排到会要集成到WordPress的核心文件里,但是,直到那时,如果你希望你的双语博客工作正常,你将需要下载和安装这些修改文件。

在下载完这个zip文件后,只要解压里面的所有文件并且覆盖你的WordPress安装的对应文件就可以了。如果你访问poplarware站点遇到困难,我也将我下的这个文件上传到了这里(但是你应该尽量从上面的地址下载,因为我不保证我所提供的文件和poplarware上的文件保持更新同步)。

其他插件,主题和Gettexted
虽然本文假设你是在你原有的博客上添加双语功能,但是,在任何时候,你都可以下载和安装其他的WordPress插件。在WordPress 插件列表网页和网上其他地方上简直有太多的插件可以下载了。但是,请确保你使用的主题支持你将要安装的插件,有些时候,一个插件需要你在你的主题文件里做一些修改才能使用它的功能。当然,你也没有任何理由不去下载一些其他的主题并且选择使用你最喜欢的一个。对那些对本博客所使用的主题感兴趣的读者,我特意上传了我的这个已经“gettexted”的主题,TypoXP Reloaded,在这里(特别感谢该主题的原作者Sunaryo Hadi,和Connected Internet )。 你也许希望使用此主题因为它已经优化了Google Adsense 🙂 。

为了确保你的Google Adsense帐号得到有效点击金额,你必须在这些文件中的google_ad_clinet= ;行的引号里填上你的内容发布者的序列号: adsensensecontent.php, adsensemiddle.php, adsenseskyscraper.php, adsensetop.php, adsenseupdates.php, 和 linkad.php. 两外,我还在footer.php文件里加上了我的 Google Analytics 的代码,如果那没有 Google Analytics 帐号,请把它们从那里删去。

Gettext 主题
那么,到底什么是“gettext”?Gettext代表GNU gettext本地化框架。根据翻译WordPress上的意思:

gettext is a mature, widely used framework for modular translation of software, and is the de facto standard for localization in the open source/free software realm.

大意:gettext是一格成熟的、广泛使用的软件模块化翻译的框架,而且,它是在开源和自由软件领域进行软件本地化的事实上的标准。

关于gettext的更多的信息,请访问翻译 WordPressGNU gettext。实际上,你所要做的工作就是把被你的主题输出到屏幕的字符放到这两个WordPress的函数之中的一个里面,“_e”函数和“__”(两连着的下划线)函数。“_e”函数用来使用于那些被直接输出到屏蔽上的文字,就是说,那些不是在某个PHP表达式里的文字(你应该在你的脑海里想象那些静态的html文档了 🙂 ),比如,在你的archive.php文件里,你可能会看见:

<h2 class="pagetitle">Blog Archives</h2>

而你将需要将它转换为:

<h2 class="pagetitle"><?php _e("Blog Archives"); ?></h2>

请注意,你需要使用 <?php 和 ?> 每当你运用 “_e” 这个函数,而且不要忘了PHP语句最后的那个分号!
那个“__”(两个连着的下划线)函数是在那些被输出到屏幕上的文字是由其他PHP函数所返回的文字时使用。比如,在你的archive.php文件里,你可能看到:

<?php the_excerpt('Read the rest of this entry »'); ?>

而你需要把它改成:

<?php the_excerpt(__('Read the rest of this entry »')); ?>

所以,实际上,你将需要找到所有那些在单引号和双引号里的最终被输出到屏幕的字符串,而且这些字符串是在一个PHP函数里,然后把它们用“__(”和“)”将它们包围;再者,你还需要找到所有那些直接被输出到屏幕的字符,然后进入PHP处理程序(用<?php 和 ?>) 用“_e”函数来输出这些文字。

你需要注意的一些事情:

  1. 请留意你的主题文件里单引号和双引号的使用;有时候,你也许需要使用“.”来将一个字符串截开以便使用“__”函数。
  2. 记住,PHP的“echo”语句也是一个函数。
  3. 大多数情况下,你将只要修改主题文件。因为一般情况下都将只会要求修改你的主题文件以支持所安装的其他插件,而插件本身并不会涉及改变网页的布局,图片和颜色方面。然而,有个别的插件也许还是在它们的内部定义了如火输出一些特定文字的方式,这种情况下,你可能也需要gettext你的一些插件文件。
  4. 记住使用 <?php 和 ?> 每当你使用 “_e” 函数,并且不要忘了末尾的“;”号。
  5. 你应该给你原始的文件保存一个复本。

语言文件和poEdit tool
下一步就是得到WordPress的简体中文语言文件然后用poEdit工具在语言文件中加入新翻译的文字。就像我们已经在前一篇文章里已经讨论过的一样,你应该这样做才算是一个好的主意:与其你自己“重新发明轮子”不如去找一些边人已经翻译了的语言文件。在你的语言的WordPress上有不止一个版本的中文语言包,我推荐使用WordPress-简体中文化上的语言文件,因为我的博客就是基于它的语言文件而建的而且我发现它的语言文件只有很少的一些地方需要调整(这纯属个人意见)。这个语言文件,通常包括一个或两个文件。它至少包括一个MO文件;这也是你将要使用的最终的文件。而且,它还应该包括了另外一个PO文件,这个文件将被poEdit使用。你可以把PO文件比作你的语言文件的“源代码”文件,而MO文件比作语言文件的已经被编译好了的可以被WordPress软件直接使用的二进制文件。一般情况下,如果你只需要本地化你的原来的WordPress安装,你只需要下载MO文件,然后将他置于你的WordPress安装根目录下的wp-includes/language目录下,并且修改你的wp-config.php文件中的define("WPLANG","");行就可以了。但是,在我们这里使用Language Switcher创建一个双语博客的情况下,MO和PO文件你需要都下载并把它们放到wp-includes/languages目录下,而你并不需要去碰wp-config.php文件。

使用poEdit
请到poedit.net的下载 poEdit或到著名的sourceforge.net上去寻找它也可以。如果你是在Windows平台上,就下载那个setup.exe文件然后通过它安装就可以了。启动poEdit后,你将看到下面这个界面:

poEdit startup

然后,到File->Open(或直接点击“Open catalog”按钮),导航到你的WordPress的根目录下,然后到wp-includes/languages/目录下,打开那个PO文件,在我们这个情况下,就是那个zh_CN.po文件。现在,对于那些第一次使用poEdit的人们来说有两个比较重要的事情需要注意:1.到File->Preference下,然后到Editor面板,请一定确保那个“Automatically compile .mo file on save”选项是被选定的。

poEdit Preferences

2.打开Catalog->Settings,然后在Paths面板下,请一定确定这个路径的值指向你的硬盘上的WordPress安装的根目录;比如,我用的是XAMPP的缺省目录设置,那么在我的机子上就是“C:Program Filesxampphtdocswordpress”。

poEdit Catalog Settings

做过这两件事之后,你就已经准备好翻译新的文字和对原来的语言文件做一些修改了。

那些新加的要翻译的文字其实就是你在前一步用“_e”和“__”函数加入的那些文字。所以,到Catalog->Update from source, poEdit将会在你的WordPress的PHP源文件中扫描新加入的要翻译的文字。实际的翻译过程其实很简单,只要点击一下需要翻译的字符串,在下面的原始字符串的匡里就会马上显示你现在选择的字符串内容,而你只要在下面将这段字符翻译成我们需要的语言就可以。

poEdit Main Window

翻译的结果会马上反映在原始字串的右边。——基本的翻译过程查不多就是这样,当然有些时候,你也需要对PHP的一些函数,比如“sprintf”有些熟悉。如果你在这个翻译过程中有问题,请在Google上寻找一下答案;当然你也可以发表一下你的看法——在你满意了你的翻译成果之后,点击File->Save,这将会保存你的翻译到PO文件并且自动地生成一个新的MO文件。有一件事值得提一下,就是有些PO文件和MO文件不一定只包括它们语言的两个字母的ISO代码。比如,对于中文来说,简体中文语言文件名将会是zh_CN.po或zh_CN.mo以表示它们是对应于简体中文语言,而不是繁体中文语言。如果你想要你的WordPress的所有的文字都显示为正确的语言,你应该将MO文件名改为只包含两个ISO代码,即,zh.mo!

请记住,每一次你对你的主题或插件文件做了一些修改,你都需要重新用poEdit扫描新的未翻译的字符,然后添加新的翻译,最后生成一个新的MO文件。并且别忘了核对MO文件是否只含有两个字母的ISO代码。

下载和安装Language Switcher插件
好了,现在我们已经快接近安装一个双语博客的末尾了。你现在需要做的是到poplarware去下载Language Switcher 插件。如果你访问poplarware网站有困难,我也上传了我使用的Language Switcher版本在 这里(但是请注意这个文件也许不会有最新的更新或升级)。下载了这个zip文件后,把它解压到wp-content/plugins/目录,然后在系统管理面板里像安装其他插件一样激活这个插件。

测试
在我们最终将我们的成果上传到我们的Web服务器之前,我们需要做一些测试,也许,还有一些纠错工作。首先,我们需要在系统管理面板里将Language Switcher设置好;到站点管理->选现->Language Switcher,在缺省语言框里里输入你的博客默认语言的ISO代码,设置好语言的国旗图片图片的文件名,(对应语言)文字缺失时的消息,时间格式等等。然后,我们需要添加一个语言选择的链接到我们博客的侧边栏,使用函数langswitch_list_langs;而且我们也同样需要对任何一个拥有双语言的文章添加能够在不同语言间切换的链接,这一次,用函数langswitch_post_other_langs。更详细的设置Language Switcher的信息,请参考 Language Switcher 主页上的关于安装和设置部分。

在我们设置好Language Switcher后,我们就可以开始添加一些多语言的内容了。这里的“内容”不仅只包括实际的文章主体内容,还包括文章的标题,你博客的名字,分类的标题,其他博客的链接描述或着任何你相信那些最终会输出到屏幕的文字;然后,点击侧边栏里的语言选择链接,确认所有的东西是不是都转换到了正确的语言;点击多语言版的一个文章的不同语言版本,确认该文章是不是转换到了对应的语言;确认,当一个文章还没有两个语言版本时,是否显示你刚在系统管理里设置的对应的语言缺失时的消息;检查在你点击了另外一个语言选择后,再点击一下网页上其他的链接,所选择的语言是否保持不变;检查是否RSS新闻是显示的正确的语言版本。对分类归档页面,日期归档页面,搜索结果页面,单独显示一篇文章具体内容的页面重复做这些测试。如果你发现什么事情不对,基本上有两个方面你可以进一步的检查:查看是否所有的被你的主题或插件输出到屏幕的字符串都“gettexted”了;查看是否你添加的双语语言的内容是否正确无误,即,看看它们是不是都包括在了正确的语言标记里,像 <lang_en>, </lang_en> and <lang_zh></lang_zh> 这些标记(注意,在你使用语言标记时,你需要切换到WordPress提供的编辑器的源代码界面;如果你在视图,即所见即所得界面的化,你可以用“[”和“]”代替“<”和“>”)。

升级你的现用博客到双语言版本
终于,我们到了将我们做的对我们博客的修改上传到Web服务上去的时候了。如果你是重新开始创建你的博客,那么你可以简单的把所有的东西上传到你的网页空间服务器,包括你的数据库。关于如何将本地准备发布的博客发布到你的网页空间服务器的具体方法我想已经超出了本文的范围。但是,你自然能够搜索一下网络以得到更多的关于这个主题的信息。如果你是升级你已经在运行的博客到双语版,你将需要上传一下文件到你的网页空间服务器:

  1. 所有新的插件文件,当然包括Language Switcher插件
  2. 你“gettexted”的所有的主题文件
  3. MO语言文件
  4. 作了必要修改的WordPress的核心文件

另外,你将需要在你的网站服务器上对你的数据库做本文稍早时候介绍的第一不的修改。最后,在系统的站点管理里面的选项->Language Switcher下做好相关设置。

开始将你的内容转换成双语言病期开始给你的新的双语博客添加新的文章!

关于Language Switcher插件的一些使用建议
Language Switcher是一个非常棒的工具。实际上,我想创建一个双语的网站有很长一段时间了,当时尝试了很多CMS系统,特别是在Drupal上的i8n模块,之后,我感觉似乎我不能找到合适的工具——简单易用;直到我发现WordPress上的Language Switcher。以下是我使用Language Switcher的一些经验和建议:

  1. Language Switcher是一个为你提供人工添加双语内容的工具。尽量现为每篇文章的标题都提供两个语言版本,然后先为每篇文章提供默认语言的版本,再在以后将默认语言版本的文章翻译成另外的一种语言。如果不是这样做, 当你的用户第一次访问到你的博客的时候,将会发现在你的网站上有很多像“对不起,该文章还没有你所要求的语言版本”这样的信息。
  2. 如果你使用WordPress的特殊标记<!–more–>来用文章的开始几句文字作为每篇文章的概览,你将需要将所有的语言的概览内容都置于这个标记之上,因为WordPress从你的文章里提出概览的过程发生于它将你的文章内容发送到Language Switcher以判断何种语言应该被显示之前。
  3. 出于WordPress的代码内部原因,至少现阶段,Language Switcher不能对使用非默认语言的文章内容利用WordPress的特殊标记<!–nextpage–>分页的情况。所以,请暂时不要在文章里使用<!–nextpage–>标记。
  4. 不要鼓励你的访问者在留评价时使用Language Switcher的语言标记。这是因为,如果评价是用一种特定的语言留的,那么它的实际评价内容在另一种语言之下将不会被显示,但是关这个评价已经被留的信息却会显示出来。
  5. 你需要手动的设置文章和你添加的静态页面的别名。因为,WordPress的缺省行为是自动地从文章或页面的标题里产生文章和静态页面的链接;但是如果你的文章或页面的标题里有像 “<lang_en>…” 这样的东西,那么这个url链接自然就不会怎么好看了!

以上就是这篇文章的所有内容。我期待着更多的改进和新的功能将被不断地加到这个不错插件里。希望你能享受你的双语博客!

9 Comments - Leave a comment
  1. Yangtx说道:

    好资料,不知数据库的修改是否通用?比如最新版的2.5.

  2. David Adam说道:

    Hi, 对于最新版的wordpress, 工具和方法差不多,但是,wordpress的数据库结构比以前版本有很大变化。最好参考 http://poplarware.com/languageplugin.html 上面的步骤。 不过,现在,它上面有一点好像说锝不对,就是,我们应该把wp-config.php里的
    define(‘DB_CHARSET’, ‘utf8’);
    define(‘DB_COLLATE’, ”);
    设置成数据库里实际用的值。我的分别是 utf8 和 utf8_unicode_ci.

    而不是像它说的,把这两行删除掉。

  3. hello说道:

    i can only see the first page of each article. 2, 3 4 do not work. After clicking it, no update. anything wrong?

  4. David Adam说道:

    Hi, I am sorry. It seems the tag has some problem with the latest version of wordpress and the language switch plugin. I have remove the multi-page.

  5. li说道:

    hi,
    为何我的poedit中Catalog->Update from source 不可用?
    每次发布文章时,是自动翻译成其它语言的吗,过程原理如何?
    翻译出来会不会不准?
    谢谢回复。

  6. David Adam说道:

    检查一下你的settings下的keywords里有没有对应的php函数名: _e 和 __。
    我现在很少发双语的文章了,原因在我的另外一篇文章有说明:
    http://readtheweb.info/2008/05/11/wordpress-problem-url-encoding-tags-slug/
    如果你知道怎么解决那个tags的问题,还请告诉我哦。

    我以前发文章时,当然不是自动翻译成其他语言的,而是手动翻译。

  7. li说道:

    感谢博主的回复!
    Update from source解决了,下来又有个问题。
    安装了插件,可是要发布多语言文章时,右边侧栏始终没看到语言选择项啊?是哪个步骤出了差错?
    目前正在实施WP与online store的改造,很大可能用到多语言版本,完成发布后与博主分享。

  8. HYaN说道:

    浏览,是一份难得的雅致

  9. quoted on WP升级到2.3 « 云居说道:

    […] 留言本已经清理完毕,以前的页面评论就不改了,不过旧文的Tag还是补上的好,要是还有时间倒想试试阅读网络那样的双语版…… […]

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*