<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>Andor Chen</title>
	
	<link>http://about.ac</link>
	<description>WordPress 私人顾问</description>
	<lastBuildDate>Thu, 23 Feb 2012 03:53:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/AndorChen" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="andorchen" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>WordPress 的 i18n 和 l10n 流程</title>
		<link>http://about.ac/t/wordpress-i18n-l10n/</link>
		<comments>http://about.ac/t/wordpress-i18n-l10n/#comments</comments>
		<pubDate>Sun, 12 Feb 2012 09:58:33 +0000</pubDate>
		<dc:creator>Andor</dc:creator>
				<category><![CDATA[主题制作]]></category>

		<guid isPermaLink="false">http://about.ac/?p=17</guid>
		<description><![CDATA[WordPress 对 i18n 和 l10n 有着很完善的支持。最近在做 V2Press 的时候把 i18n 和 l10n 的流程走了一遍，在此做个记录，备查。 我的开发环境架设在 Mac OS X 上，所以以下操作均在此系统中完成。Windows 系统请酌情参考。 安装组件 WordPress 的 i18n 和 l10n 是通过 GNU gettext 实现的，因此在进行实际工作之前，首先需要安装相关的组件。 XCode XCode 是 Mac OS 中的常用 IDE 之一，其中也包含了编译相关的库，比如 gcc，在后面会用到 gcc 库，所以首先要安装 XCode。XCode 在购买苹果电脑产品的附带安装盘中有。安装过程中一定要选择安装编译组件。 homebrew homebrew &#8211; The missing package manager for OS X，用来安装 *nix 系统中常用的库包。homebrew 的安装方法请参照 homebrew [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress 对 i18n 和 l10n 有着很完善的支持。最近在做
<a href="http://v2press.com">V2Press</a> 的时候把 i18n 和 l10n
的流程走了一遍，在此做个记录，备查。</p>

<p>我的开发环境架设在 Mac OS X
上，所以以下操作均在此系统中完成。Windows 系统请酌情参考。</p>

<h3>安装组件</h3>

<p>WordPress 的 i18n 和 l10n 是通过 <a href="http://www.gnu.org/software/gettext/">GNU gettext</a> 实现的，因此在进行实际工作之前，首先需要安装相关的组件。</p>

<h4>XCode</h4>

<p>XCode 是 Mac OS 中的常用 IDE 之一，其中也包含了编译相关的库，比如
gcc，在后面会用到 gcc 库，所以首先要安装 XCode。XCode
在购买苹果电脑产品的附带安装盘中有。安装过程中一定要选择安装编译组件。</p>

<h4>homebrew</h4>

<p><a href="http://mxcl.github.com/homebrew/">homebrew</a> &#8211; The missing package manager for OS X，用来安装 *nix 系统中常用的库包。homebrew 的安装方法请参照 <a href="https://github.com/mxcl/homebrew/wiki/installation">homebrew wiki Installation</a>。</p>

<h4>gettext</h4>

<p>如果以上所需组件已经安装完毕，那么可以继续以下步骤。打开
Terminal，运行以下命令：</p>
<figure class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">brew install gettext
</span></code></pre></td></tr></tbody></table></figure>
<p>等待片刻，自动编译完成后即可。gettext 被安装在 <code>/usr/local/Cellar</code>
中。</p>

<p>为了能够使用 gettext 中相关的命令，还需要修改 $PATH，打开 <code>~/.profile</code>
将 <code>/usr/local/Cellar/gettext/0.18.1.1/bin</code> 加入其中：</p>
<figure class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line"><span class="nb">export </span><span class="nv">PATH</span><span class="o">=</span><span class="s2">"/usr/local/bin:/usr/local/sbin:/usr/local/Cellar/gettext/0.18.1.1/bin:/Developer/usr/bin:$PATH"</span>
</span></code></pre></td></tr></tbody></table></figure>
<p>关闭该文件，在 Terminal 中执行以下命令加载新的 $PATH：</p>
<figure class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line"><span class="nb">source</span> ~/.profile
</span></code></pre></td></tr></tbody></table></figure>
<h4>WordPress i18n 工具</h4>

<p>WordPress 的 i18n 和 l10n 相关工具放在 svn
中。这些工具可以方便的为我们添加 textdomain，生成 POT 文件。</p>

<p>在 Terminal 中执行以下命令安装：</p>
<figure class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">svn co http://svn.automattic.com/wordpress-i18n/tools/trunk/ ./
</span></code></pre></td></tr></tbody></table></figure>
<p>以上命令将这些工具安装到当前目录中。</p>

<span id="more-17"></span>

<h3>工作流程</h3>

<p>WordPress 的 i18n 和 l10n 的工作流程大概是这样的：</p>

<ol>
<li><p>在主题或插件中为 l10n 留下接口，也就是合理的使用
<code>__()</code>、<code>_e()</code>、<code>_x()</code>、<code>_n()</code> 等函数；</p></li>
<li><p>在上述的接口函数中指定 textdomain；</p></li>
<li><p>生成 POT 文件；</p></li>
<li><p>生成 PO 文件；</p></li>
<li><p>本地化，即翻译相应的词条；</p></li>
<li><p>生成 MO 文件。</p></li>
</ol>

<h4>l10n 接口</h4>

<p>WordPress 定义了很多 l10n 接口函数，详细用法可以参照
<code>wp-includes/l10n.php</code>。在主题制作或插件开发的过程中，最好同时加入相应的
textdomain。如果没加入，后期可以通过 WordPress 的 i18n
工具来加入，在 Terminal 执行以下命令：</p>
<figure class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">php add-textdomain.php -i domain phpfile phpfile ...
</span></code></pre></td></tr></tbody></table></figure>
<h4>生成 POT 文件</h4>

<p>主题制作完成或插件开发完成后，便可以通过前期预留的接口将需要本地化的词条摘出来，放到一个特殊的文件中，这个文件就是
POT 模板文件。执行以下命令来生成主题的 POT 文件：</p>
<figure class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">php makepot.php wp-theme /path/to/theme /path/to/potfile.pot
</span></code></pre></td></tr></tbody></table></figure>
<p>如果需要生成插件的 POT 文件，将上述命令中的 <code>wp-theme</code> 换成 <code>wp-plugin</code>
即可。更多用法可以执行 <code>php makepot.php</code> 命令查看。</p>

<p>一个好的习惯是，将生产的 POT 及下面生成的 PO、MO
文件放在主题文件夹或插件文件夹下的 <code>languages</code> 目录中。</p>

<h4>生成 PO 文件</h4>

<p>上一步中生成的 POT
只是一个模板，是为各语言本地化提供的一个样板，也就是指明哪些词条需要翻译。真正的翻译过程是在
PO 文件中进行的。</p>

<p>复制上一步生成的 POT 文件，修改文件后缀为
<code>po</code>，并重命名为相应语言代码。比如简体中文，其文件名为 <code>zh_CN.po</code>。注意，插件的 PO 文件命名规则是：<code>plugin-slug-zh_CN.po</code>。</p>

<p>使用文本编辑器打开 PO 文件，然后进行词条的翻译。</p>

<h4>生成 MO 文件</h4>

<p>PO 文件是给人类用的，机器则需要 MO 文件。执行以下代码生产 MO 文件：</p>
<figure class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">msgfmt -o zh_CN.mo zh_CN.mo
</span></code></pre></td></tr></tbody></table></figure>
<p>作为一个开发者，只需提供 POT
文件即可。而在生产环境中，只需上传相应的 MO 文件即可。</p>

<h3>参考文章</h3>

<ul>
<li>  <a href="http://codex.wordpress.org/I18n_for_WordPress_Developers">I18n for WordPress Developers</a></li>
<li>  <a href="http://codex.wordpress.org/Translating_WordPress">Translating WordPress</a></li>
<li>  <a href="http://urbangiraffe.com/articles/translating-wordpress-themes-and-plugins/">Translating WordPress Plugins &amp; Themes</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://about.ac/t/wordpress-i18n-l10n/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>修改基于日期的归档页面的 URL 结构</title>
		<link>http://about.ac/t/alter-date-archives-url-structure/</link>
		<comments>http://about.ac/t/alter-date-archives-url-structure/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 07:28:22 +0000</pubDate>
		<dc:creator>Andor</dc:creator>
				<category><![CDATA[技巧分享]]></category>

		<guid isPermaLink="false">http://about.ac/?p=16</guid>
		<description><![CDATA[WordPress 的链接格式是很灵活的，几乎可以任意的定制 URL 的格式。如果你所用的服务器支持 mod_rewrite 的话就可以设置“精美”的 URL 格式。WordPress 默认提供了 5 种 URL 格式供选择，而且还可以自由定制。WordPress 还提供了针对“分类”和“标签”的 rewrite base 设置选项。 默认的，WordPress 的分类 URL 格式是 host&#47;category&#47;xxx&#47;，其中 category 就是 rewrite base，这是可定制的部分，例如本站分类 URL 的 rewrite base 就设置为“go”了。同理，可以设置标签 URL 的 rewrite base。 在设置 WordPress 链接格式的时候我遇到一个问题。我设置的 URL 格式是 &#47;t&#47;%postname%，rewrite base 是固定的，不再是占位符，这时文章页面的 URL 是没问题的，页面的 URL 是没问题的，分类、标签的页面 URL 也是没问题的，但是，基于时间的页面就出现问题了，其 URL 结构变成 &#47;t&#47;2012&#47;01 的格式，这个“t”是我不需要的。 查看 wp-includes&#47;rewrite.pnp [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress 的链接格式是很灵活的，几乎可以任意的定制 URL 的格式。如果你所用的服务器支持 mod_rewrite 的话就可以设置“精美”的 URL 格式。WordPress 默认提供了 5 种 URL 格式供选择，而且还可以自由定制。WordPress 还提供了针对“分类”和“标签”的 rewrite base 设置选项。</p>

<p>默认的，WordPress 的分类 URL 格式是 <code>host&#47;category&#47;xxx&#47;</code>，其中 <code>category</code> 就是 rewrite base，这是可定制的部分，例如本站分类 URL 的 rewrite base 就设置为“go”了。同理，可以设置标签 URL 的 rewrite base。</p>

<p>在设置 WordPress 链接格式的时候我遇到一个问题。我设置的 URL 格式是 <code>&#47;t&#47;%postname%</code>，rewrite base 是固定的，不再是占位符，这时文章页面的 URL 是没问题的，页面的 URL 是没问题的，分类、标签的页面 URL 也是没问题的，但是，基于时间的页面就出现问题了，其 URL 结构变成 <code>&#47;t&#47;2012&#47;01</code> 的格式，这个“t”是我不需要的。</p>

<p>查看 <code>wp-includes&#47;rewrite.pnp</code> 第 862 行 <code>get_date_permastruct()</code> 函数的定义可以发现，最终返回的结果加入了 <code>$front</code>，这就是“t”为什么会出现的原因。</p>
<figure class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>861</span>
<span class='line-number'>862</span>
<span class='line-number'>863</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="o">....</span>
</span><span class='line'><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">date_structure</span> <span class="o">=</span> <span class="nv">$front</span> <span class="o">.</span> <span class="nv">$date_endian</span><span class="p">;</span>
</span><span class='line'><span class="o">....</span>
</span></code></pre></td></tr></table></figure>
<p>那么只需要覆盖类 <code>WP_Rewrite</code> 的 <code>$date_structure</code> 变量即可。将以下代码片段写入主题的 <code>functions.php</code>：</p>
<figure class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="k">function</span> <span class="nf">ac_re_rewrite</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>  <span class="k">global</span> <span class="nv">$wp_rewrite</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>  <span class="c1">// Not need the $wp_rewrite-&gt;front</span>
</span><span class='line'>  <span class="nv">$wp_rewrite</span><span class="o">-&gt;</span><span class="na">date_structure</span> <span class="o">=</span> <span class="s1">&#39;%year%/%monthnum%/%day%&#39;</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>  <span class="nv">$wp_rewrite</span><span class="o">-&gt;</span><span class="na">flush_rules</span><span class="p">();</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'><span class="nx">add_action</span><span class="p">(</span> <span class="s1">&#39;init&#39;</span><span class="p">,</span> <span class="s1">&#39;ac_re_rewrite&#39;</span> <span class="p">);</span>
</span></code></pre></td></tr></table></figure>
<p>如此一来，基于日期的存档 URL 格式就定制好了，利用同样的方法还可以定制作者归档等页面的 URL 格式。</p>]]></content:encoded>
			<wfw:commentRss>http://about.ac/t/alter-date-archives-url-structure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>禁用 WordPress 的 Toolbar</title>
		<link>http://about.ac/t/disable-wordpress-toolbar/</link>
		<comments>http://about.ac/t/disable-wordpress-toolbar/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 05:57:28 +0000</pubDate>
		<dc:creator>Andor</dc:creator>
				<category><![CDATA[技巧分享]]></category>

		<guid isPermaLink="false">http://about.ac/?p=14</guid>
		<description><![CDATA[WordPress 3.3 之后，用户可以在个人资料页面设置访问前台时是否显式 Toolbar。如果不想把决定权给用户，可以通过一些代码设置前台不显式 Toolbar，具体方法可以参照“Disable Admin Bar in WordPress 3.3”一文。但是该文提供的方法有个弊端：虽然 Toolbar “不显式”了，但是它所用到的文件（样式表文件和Javascript 脚本文件）一个都没少，而且还多加了一个样式表。 其实，有个更简单、更有效的方法可以完全去除 Toolbar：使用 show_admin_bar() 函数。将以下代码片段加入主题的 functions.php 文件： 1 2 3 4 5 6 // 全局禁用 Toolbar show_admin_bar( false ); // 只在前台禁用 Toolbar if ( !is_admin() ) show_admin_bar( false ); 可以根据需要选择禁用全局还是只在前台禁用。 这个方法的好处是，1）代码量少；2）禁用的更彻底，Toolbar 所需的样式表文件和 Javascript 脚本文件均不会加载。]]></description>
			<content:encoded><![CDATA[<p>WordPress 3.3 之后，用户可以在个人资料页面设置访问前台时是否显式 Toolbar。如果不想把决定权给用户，可以通过一些代码设置前台不显式 Toolbar，具体方法可以参照“<a href="http://wp.tutsplus.com/tutorials/how-to-disable-the-admin-bar-in-wordpress-3-3/">Disable Admin Bar in WordPress 3.3</a>”一文。但是该文提供的方法有个弊端：虽然 Toolbar “不显式”了，但是它所用到的文件（样式表文件和Javascript 脚本文件）一个都没少，而且还多加了一个样式表。</p>

<p>其实，有个更简单、更有效的方法可以完全去除 Toolbar：使用 <code>show_admin_bar()</code> 函数。将以下代码片段加入主题的 <code>functions.php</code> 文件：</p>

<figure class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
</pre></td><td class="code"><pre><code class="php"><span class="line"><span class="c1">// 全局禁用 Toolbar</span>
</span><span class="line"><span class="nx">show_admin_bar</span><span class="p">(</span> <span class="k">false</span> <span class="p">);</span>
</span><span class="line">
</span><span class="line"><span class="c1">// 只在前台禁用 Toolbar</span>
</span><span class="line"><span class="k">if</span> <span class="p">(</span> <span class="o">!</span><span class="nx">is_admin</span><span class="p">()</span> <span class="p">)</span>
</span><span class="line">  <span class="nx">show_admin_bar</span><span class="p">(</span> <span class="k">false</span> <span class="p">);</span>
</span></code></pre></td></tr></tbody></table></figure>

<p>可以根据需要选择禁用全局还是只在前台禁用。</p>

<p>这个方法的好处是，1）代码量少；2）禁用的更彻底，Toolbar 所需的样式表文件和 Javascript 脚本文件均不会加载。</p>]]></content:encoded>
			<wfw:commentRss>http://about.ac/t/disable-wordpress-toolbar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

