<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.1" -->
<rss version="2.0"
	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/"
	>

<channel>
	<title>荷塘月色 &#187; 软件开发</title>
	<link>http://blog.tanggaowei.com</link>
	<description>荷塘，月色下，宁静的夜晚，宁静的心</description>
	<pubDate>Thu, 07 Aug 2008 02:43:17 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.1</generator>
	<language>en</language>
			<item>
		<title>为什么要给HTML中的图片加上标题</title>
		<link>http://blog.tanggaowei.com/2008/06/html.html</link>
		<comments>http://blog.tanggaowei.com/2008/06/html.html#comments</comments>
		<pubDate>Mon, 02 Jun 2008 07:26:26 +0000</pubDate>
		<dc:creator>Neot</dc:creator>
		
		<category><![CDATA[软件开发]]></category>

		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.tanggaowei.com/2008/06/html.html</guid>
		<description><![CDATA[有些时候，我们要将浏览器的图片显示关闭，以节省网络流量。特别是在用手机上网的时候。
如果图片标签没有添加标题属性，关闭图片显示后，用户就无法知道图片的用途。特别是将图片用做按钮 ( 比如“搜索”按钮 ) 时，甚至无法进行点击操作，丧失了按钮的功能。
一般网站还算影响不大，手机版的网站就是致命的了。许多手机用户为了节省流量，平时都将浏览器的图片显示关掉。这部份用户很可能被迫放弃对网站的访问。
[ 标签： html ] [ 固定链接：http://blog.tanggaowei.com/2008/06/html.html ]]]></description>
			<content:encoded><![CDATA[<p>有些时候，我们要将浏览器的图片显示关闭，以节省网络流量。特别是在用手机上网的时候。</p>
<p>如果图片标签没有添加标题属性，关闭图片显示后，用户就无法知道图片的用途。特别是将图片用做按钮 ( 比如“搜索”按钮 ) 时，甚至无法进行点击操作，丧失了按钮的功能。</p>
<p>一般网站还算影响不大，手机版的网站就是致命的了。许多手机用户为了节省流量，平时都将浏览器的图片显示关掉。这部份用户很可能被迫放弃对网站的访问。</p>
[ 标签： <a href="http://blog.tanggaowei.com/tag/html">html</a> ] <br>[ 固定链接：<a href='http://blog.tanggaowei.com/2008/06/html.html'>http://blog.tanggaowei.com/2008/06/html.html</a> ]<br/>]]></content:encoded>
			<wfw:commentRss>http://blog.tanggaowei.com/2008/06/html.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>WordPress 中 get_option(&#8217;home&#8217;) 和 get_option(&#8217;siteurl&#8217;) 的区别</title>
		<link>http://blog.tanggaowei.com/2008/05/wordpress-get_optionhome-get_optionsiteurl.html</link>
		<comments>http://blog.tanggaowei.com/2008/05/wordpress-get_optionhome-get_optionsiteurl.html#comments</comments>
		<pubDate>Sun, 18 May 2008 06:48:02 +0000</pubDate>
		<dc:creator>传说一梦</dc:creator>
		
		<category><![CDATA[软件开发]]></category>

		<category><![CDATA[WordPress插件开发]]></category>

		<guid isPermaLink="false">http://blog.tanggaowei.com/2008/05/wordpress-get_optionhome-get_optionsiteurl.html</guid>
		<description><![CDATA[原来一直搞不懂 get_option(&#8217;home&#8217;) 和 get_option(&#8217;siteurl&#8217;) 的区别，因为我的网站，这两个值是相同的。今天看了&#8220;Giving WordPress Its Own Directory&#8221;这篇文章才明白它们之间的区别。
&#8216;home&#8217; 和 &#8217;siteurl&#8217; 变量分别对应后台&#8220;Setting (设置) -&#62; General (常规)&#8220;里的&#8220;Blog address (Blog 地址)&#8221;和&#8220;WordPress address (WordPress 地址)&#8221;。&#8217;home&#8217; 是 blog 的首地址，用于对外发布，供浏览用户访问；&#8217;siteurl&#8217; 是 WordPress 的首地址，用于后台管理，供管理员访问。
WordPress 允许将源码安装到站点的子目录。这是导致 &#8216;home&#8217; 和 &#8217;siteurl&#8217; 的值不同的根本原因。所以 &#8216;home&#8217; 一般包含 &#8217;siteurl&#8217; 。这种典型的站点目录结构如下：
/index.php (从 /blog 目录拷贝后，经修改得到)       /blog/wp-admin      /blog/wp-content   [...]]]></description>
			<content:encoded><![CDATA[<p>原来一直搞不懂 get_option(&#8217;home&#8217;) 和 get_option(&#8217;siteurl&#8217;) 的区别，因为我的网站，这两个值是相同的。今天看了&#8220;<a href="http://codex.wordpress.org/Giving_WordPress_Its_Own_Directory">Giving WordPress Its Own Directory</a>&#8221;这篇文章才明白它们之间的区别。</p>
<p>&#8216;home&#8217; 和 &#8217;siteurl&#8217; 变量分别对应后台&#8220;Setting (设置) -&gt; General (常规)&#8220;里的&#8220;Blog address (Blog 地址)&#8221;和&#8220;WordPress address (WordPress 地址)&#8221;。&#8217;home&#8217; 是 blog 的首地址，用于对外发布，供浏览用户访问；&#8217;siteurl&#8217; 是 WordPress 的首地址，用于后台管理，供管理员访问。</p>
<p>WordPress 允许将源码安装到站点的子目录。这是导致 &#8216;home&#8217; 和 &#8217;siteurl&#8217; 的值不同的根本原因。所以 &#8216;home&#8217; 一般包含 &#8217;siteurl&#8217; 。这种典型的站点目录结构如下：</p>
<blockquote><p>/index.php <font color="#008000">(从 /blog 目录拷贝后，经修改得到)       <br /></font>/blog/wp-admin      <br />/blog/wp-content      <br />/blog/wp-includes</p>
</blockquote>
[ 标签： <a href="http://blog.tanggaowei.com/tag/wordpress%e6%8f%92%e4%bb%b6%e5%bc%80%e5%8f%91">WordPress插件开发</a> ] <br>[ 固定链接：<a href='http://blog.tanggaowei.com/2008/05/wordpress-get_optionhome-get_optionsiteurl.html'>http://blog.tanggaowei.com/2008/05/wordpress-get_optionhome-get_optionsiteurl.html</a> ]<br/>]]></content:encoded>
			<wfw:commentRss>http://blog.tanggaowei.com/2008/05/wordpress-get_optionhome-get_optionsiteurl.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>SVN 项目的目录结构</title>
		<link>http://blog.tanggaowei.com/2008/05/svn.html</link>
		<comments>http://blog.tanggaowei.com/2008/05/svn.html#comments</comments>
		<pubDate>Sat, 17 May 2008 09:21:37 +0000</pubDate>
		<dc:creator>传说一梦</dc:creator>
		
		<category><![CDATA[软件开发]]></category>

		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://blog.tanggaowei.com/2008/05/svn.html</guid>
		<description><![CDATA[一个 SVN 项目的良好目录结构如下：
project1        &#160;&#160;&#160; trunk         &#160;&#160;&#160; branches         &#160;&#160;&#160; tags&#160;&#160;&#160; 

1. project1
项目名。
2. trunk
主干目录，用于主干产品的维护。大部分操作都在此目录下完成。
3. branches
分支目录，用于分支产品的维护。
分支目录通过 trunk 的&#8220;右键菜单 -&#62; TortoiseSVN -&#62; Branch / Tag&#8221; 进行操作。
4. tags
标签目录，用于保存产品的稳定版本。比如 project1/tags/product1/1.0 目录中，保存 product1 产品的 1.0 稳定版。如果没有分支产品，目录结构类似 project1/tags/1.0 。
标签目录通过 trunk [...]]]></description>
			<content:encoded><![CDATA[<p>一个 SVN 项目的良好目录结构如下：</p>
<blockquote><p><font color="#0000ff">project1        <br />&#160;&#160;&#160; trunk         <br />&#160;&#160;&#160; branches         <br />&#160;&#160;&#160; tags&#160;&#160;&#160; </font></p>
</blockquote>
<p><strong>1. project1</strong></p>
<p>项目名。</p>
<p><strong>2. trunk</strong></p>
<p>主干目录，用于主干产品的维护。大部分操作都在此目录下完成。</p>
<p><strong>3. branches</strong></p>
<p>分支目录，用于分支产品的维护。</p>
<p>分支目录通过 trunk 的&#8220;右键菜单 -&gt; TortoiseSVN -&gt; Branch / Tag&#8221; 进行操作。</p>
<p><strong>4. tags</strong></p>
<p>标签目录，用于保存产品的稳定版本。比如 project1/tags/product1/1.0 目录中，保存 product1 产品的 1.0 稳定版。如果没有分支产品，目录结构类似 project1/tags/1.0 。</p>
<p>标签目录通过 trunk 的&#8220;右键菜单 -&gt; TortoiseSVN -&gt; Branch / Tag&#8221; 进行操作。</p>
[ 标签： <a href="http://blog.tanggaowei.com/tag/svn">svn</a> ] <br>[ 固定链接：<a href='http://blog.tanggaowei.com/2008/05/svn.html'>http://blog.tanggaowei.com/2008/05/svn.html</a> ]<br/>]]></content:encoded>
			<wfw:commentRss>http://blog.tanggaowei.com/2008/05/svn.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>让自己的 WordPress 插件支持&#8220;新版本&#8221;提醒</title>
		<link>http://blog.tanggaowei.com/2008/05/wordpress-5.html</link>
		<comments>http://blog.tanggaowei.com/2008/05/wordpress-5.html#comments</comments>
		<pubDate>Sat, 17 May 2008 09:21:08 +0000</pubDate>
		<dc:creator>传说一梦</dc:creator>
		
		<category><![CDATA[软件开发]]></category>

		<category><![CDATA[svn]]></category>

		<category><![CDATA[WordPress插件开发]]></category>

		<guid isPermaLink="false">http://blog.tanggaowei.com/2008/05/wordpress-5.html</guid>
		<description><![CDATA[开发一个 WordPress 插件的新版本后，想提醒老版本的用户有&#8220;新版本&#8221;可供下载。开始，每次版本更新，我都要在博客里发布&#8220;新版本&#8221;信息，以提醒插件用户。但是，很多插件用户并不会经常浏览我的博客，因而得不到提醒。
如果将插件注册到 WordPress 官方网站，那么，只要使用此插件的用户，都能即时在他们的 WordPress 站点的&#8220;插件管理&#8221;页面，看到&#8220;新版本&#8221;的提醒信息。即使是在插件注册之前就使用了插件的用户，也能获得提醒。
要让自己的 WordPress 插件支持&#8220;新版本&#8221;提醒，操作如下：
1. 注册一个 WordPress.org 网站的帐号
网址：http://wordpress.org/support/register.php
2. 添加你的插件信息
网址：http://wordpress.org/extend/plugins/add/
需要填写如下信息：

你插件的名字 
一到两句话的插件描述 
你的插件的原始链接（可选的） 

3. 等待审批
审批需要 3-4 天，可能更长。
审批通过后，会在注册时提供的邮箱里收到 WordPress.org 的通知。通知中最重要的是插件的 subversion 目录。比如我的 WP-T-WAP 插件，subversion 目录为 http://svn.wp-plugins.org/wp-t-wap 。
subversion 是一个版本控件软件，简称 SVN。据说是 CVS 替代产品。（要了解 SVN 请访问：http://www.subversion.org.cn/）
4. 下载和安装 TortoiseSVN
网址：http://tortoisesvn.net/downloads
TortoiseSVN 是 SVN 的客户端。主要操作在&#8220;目录&#8221;和&#8220;文件&#8221;的右键菜单中。
5. 创建 SVN 项目目录
比如我的 WP-T-WAP 插件的 SVN 项目目录为 d:\svn-home\wp-t-wap\ 。
6. 从 WordPress.org 取出插件的 SVN 项目
以我的 WP-T-WAP 插件为例。对 [...]]]></description>
			<content:encoded><![CDATA[<p>开发一个 WordPress 插件的新版本后，想提醒老版本的用户有&#8220;新版本&#8221;可供下载。开始，每次版本更新，我都要在博客里发布&#8220;新版本&#8221;信息，以提醒插件用户。但是，很多插件用户并不会经常浏览我的博客，因而得不到提醒。</p>
<p>如果将插件注册到 WordPress 官方网站，那么，只要使用此插件的用户，都能即时在他们的 WordPress 站点的&#8220;插件管理&#8221;页面，看到&#8220;新版本&#8221;的提醒信息。即使是在插件注册之前就使用了插件的用户，也能获得提醒。</p>
<p>要让自己的 WordPress 插件支持&#8220;新版本&#8221;提醒，操作如下：</p>
<p><strong>1. 注册一个 WordPress.org 网站的帐号</strong></p>
<p>网址：<a title="http://wordpress.org/support/register.php" href="http://wordpress.org/support/register.php">http://wordpress.org/support/register.php</a></p>
<p><strong>2. 添加你的插件信息</strong></p>
<p>网址：<a title="http://wordpress.org/extend/plugins/add/" href="http://wordpress.org/extend/plugins/add/">http://wordpress.org/extend/plugins/add/</a></p>
<p>需要填写如下信息：</p>
<ul>
<li>你插件的名字 </li>
<li>一到两句话的插件描述 </li>
<li>你的插件的原始链接（可选的） </li>
</ul>
<p><strong>3. 等待审批</strong></p>
<p>审批需要 3-4 天，可能更长。</p>
<p>审批通过后，会在注册时提供的邮箱里收到 WordPress.org 的通知。通知中最重要的是插件的 subversion 目录。比如我的 WP-T-WAP 插件，subversion 目录为 <a href="http://svn.wp-plugins.org/wp-t-wap">http://svn.wp-plugins.org/wp-t-wap</a> 。</p>
<p>subversion 是一个版本控件软件，简称 SVN。据说是 CVS 替代产品。（要了解 SVN 请访问：<a title="http://www.subversion.org.cn/" href="http://www.subversion.org.cn/">http://www.subversion.org.cn/</a>）</p>
<p><strong>4. 下载和安装 TortoiseSVN</strong></p>
<p>网址：<a title="http://tortoisesvn.net/downloads" href="http://tortoisesvn.net/downloads">http://tortoisesvn.net/downloads</a></p>
<p>TortoiseSVN 是 SVN 的客户端。主要操作在&#8220;目录&#8221;和&#8220;文件&#8221;的右键菜单中。</p>
<p><strong>5. 创建 SVN 项目目录</strong></p>
<p>比如我的 WP-T-WAP 插件的 SVN 项目目录为 d:\svn-home\wp-t-wap\ 。</p>
<p><strong>6. 从 WordPress.org 取出插件的 SVN 项目</strong></p>
<p>以我的 WP-T-WAP 插件为例。对 d:\svn-home\wp-t-wap\ 目录单击右键，选择 &quot;SVN Checkout&#8230;&quot;菜单。在 &quot;URL of repository&quot; 项里填入 &quot;<a href="http://svn.wp-plugins.org/wp-t-wap">http://svn.wp-plugins.org/wp-t-wap</a>&quot; （实际操作，应修改为第 3 步中 WordPress 通知邮件里提供的 SVN 目录）。</p>
<p>如果操作正确，会在 d:\svn-home\wp-t-wap\ 目录里出现 branches、tags 和 trunk 三个目录。</p>
<p><strong>7. 创建 readme.txt 文件</strong></p>
<p>readme.txt 文件用于存放插件的名称、版本、简介、安装方法等信息。为了让全世界的用户都可以使用，最好使用英文填写。模块如下：</p>
<p><a title="http://wordpress.org/extend/plugins/about/readme.txt" href="http://wordpress.org/extend/plugins/about/readme.txt">http://wordpress.org/extend/plugins/about/readme.txt</a></p>
<p>一般只填写&quot;Plugin Name&quot;、&quot;Description&quot;和&quot;Installation&quot;三段就好了。后面的可以删除。（如果需要的话，填写更详细的信息当然更好）</p>
<p>&quot;Plugin Name&quot;段中，&quot;Contributors&quot; 字段填写作者名字，&quot;Donate link&quot;字段填写作者主页，&quot;Tags&quot;字段填写插件相关的关键字，&quot;Requires at least&quot;字段填写能适用的 WordPress 的最低版本，&quot;Tested up to&quot;字段填写测试的 WordPress 版本，&quot;Stable tag&quot;字段填写插件的版本号。</p>
<p>&quot;Stable tag&quot;是关键字段，用于比较两个版本的新旧。</p>
<p>&quot;Description&quot;段应填写 HTML 格式信息。如果要换行，需加入 &lt;br&gt; 标签。</p>
<p>&quot;Installation&quot;段填写插件的安装步骤。</p>
<p><strong>8. 拷贝插件到 trunk 目录</strong></p>
<p>将插件的所有文件拷贝至第 6 步中从 WordPress 取出的 trunk 目录。（注意，是拷贝插件的文件，而不是插件的目录）</p>
<p>readme.txt 文件也拷贝至 trunck 目录。</p>
<p><strong>9. 提交 trunk 目录至 WordPress 的 SVN 服务器</strong></p>
<p>右键单击 Trunk 目录，选择 &quot;SVN Commit&quot; 菜单。在 &quot;Message&quot; 项里填写操作备注。点击 &quot;OK&quot; 按钮提交。</p>
<p><strong>10. 添加插件的版本</strong></p>
<p>上一步只是提交插件源码至服务器，这一步要从源码生成一个插件版本。</p>
<p>右健单击 trunk 目录，选择 &quot;TortoiseSVN &#187; Branch/Tag&quot; 。在 &quot;To URL&quot; 项里填入版本存放路径。</p>
<p>比如 WP-T-WAP 1.8 的版本存放路径应为 &quot;<a title="http://svn.wp-plugins.org/wp-t-wap/tags/1.8" href="http://svn.wp-plugins.org/wp-t-wap/tags/1.8">http://svn.wp-plugins.org/wp-t-wap/tags/1.8</a>&quot; 。&quot;1.8&quot; 代表版本号，必须与此时 trunk 目录的 readme.txt 文件中的 &quot;Stable tag&quot; 字段对应。</p>
<p>下次再添加更新的版本时，记得修改 &quot;Stable tag&quot; 字段。</p>
<p><strong>11. 等待 WordPress 从 SVN 里更新插件信息</strong></p>
<p>新添加的插件版本，在 15 分钟内，将更新至 WordPress.org 的插件发布页（比如：<a title="http://wordpress.org/extend/plugins/wp-t-wap/" href="http://wordpress.org/extend/plugins/wp-t-wap/">http://wordpress.org/extend/plugins/wp-t-wap/</a>）。更新后，插件用户就能在 WordPress 站点的&#8220;插件管理&#8221;页面里，看到插件的&#8220;新版本&#8221;提醒信息了。</p>
<p>参考文章：<a href="http://fairyfish.net/2008/03/07/listing-your-plugin-at-the-wordpressorg-plugin-directory/">发布你的插件到 WordPress 官方插件目录</a></p>
[ 标签： <a href="http://blog.tanggaowei.com/tag/svn">svn</a>, <a href="http://blog.tanggaowei.com/tag/wordpress%e6%8f%92%e4%bb%b6%e5%bc%80%e5%8f%91">WordPress插件开发</a> ] <br>[ 固定链接：<a href='http://blog.tanggaowei.com/2008/05/wordpress-5.html'>http://blog.tanggaowei.com/2008/05/wordpress-5.html</a> ]<br/>]]></content:encoded>
			<wfw:commentRss>http://blog.tanggaowei.com/2008/05/wordpress-5.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Wordpress 的国际化</title>
		<link>http://blog.tanggaowei.com/2008/05/wordpress-4.html</link>
		<comments>http://blog.tanggaowei.com/2008/05/wordpress-4.html#comments</comments>
		<pubDate>Mon, 12 May 2008 12:55:38 +0000</pubDate>
		<dc:creator>传说一梦</dc:creator>
		
		<category><![CDATA[软件开发]]></category>

		<category><![CDATA[国际化]]></category>

		<guid isPermaLink="false">http://blog.tanggaowei.com/2008/05/wordpress-4.html</guid>
		<description><![CDATA[Wordpress 是使用 mo 文件进行国际化的。mo 文件是二进制文件，由 po 文件生成。从 po 文件生成 mo 文件，可使用 poEdit 编辑器。用 poEdit 编辑器打开 po 文件后，按 [Ctrl + S] 保存时，就可自动生成同名的 mo 文件。
po 文件是文本文件，可以用记事本、Editplus 等文本编辑器编辑。po 文件的格式类似如下：
1&#160; msgid &#34;&#34;      2&#160; msgstr &#34;&#34;       3&#160; &#34;Project-Id-Version: WP-T-WAP\n&#34;       4&#160; &#34;POT-Creation-Date: \n&#34;  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wordpress.org">Wordpress</a> 是使用 mo 文件进行国际化的。mo 文件是二进制文件，由 po 文件生成。从 po 文件生成 mo 文件，可使用 <a href="http://www.poedit.net">poEdit</a> 编辑器。用 poEdit 编辑器打开 po 文件后，按 [Ctrl + S] 保存时，就可自动生成同名的 mo 文件。</p>
<p>po 文件是文本文件，可以用记事本、Editplus 等文本编辑器编辑。po 文件的格式类似如下：</p>
<blockquote><p>1&#160; msgid &quot;&quot;      <br />2&#160; msgstr &quot;&quot;       <br />3&#160; &quot;Project-Id-Version: WP-T-WAP\n&quot;       <br />4&#160; &quot;POT-Creation-Date: \n&quot;       <br />5&#160; &quot;PO-Revision-Date: 2008-05-12 12:14+0800\n&quot;       <br />6&#160; &quot;Last-Translator: tanggaowei &lt;tanggaowei@gmail.com&gt;\n&quot;       <br />7&#160; &quot;Language-Team: TangGaowei.com &lt;tanggaowei@gmail.com&gt;\n&quot;       <br />8&#160; &quot;MIME-Version: 1.0\n&quot;       <br />9&#160; &quot;Content-Type: text/plain; charset=utf-8\n&quot;       <br />10 &quot;Content-Transfer-Encoding: 8bit\n&quot;       <br />11 &quot;X-Poedit-KeywordsList: _e;__\n&quot;       <br />12 &quot;X-Poedit-Basepath: .\n&quot;       <br />13 &quot;X-Poedit-SearchPath-0: .\n&quot;       <br />14       <br />15 #: index.php:57       <br />16 msgid &quot;Last Comments&quot;       <br />17 msgstr &quot;最新评论&quot;       <br />18       <br />19 #: index.php:54       <br />20 msgid &quot;Categories&quot;       <br />21 msgstr &quot;分类&quot;       <br />&#8230;</p>
</blockquote>
<p>文件最上面两行可能是定义数据的格式。将 msgid 引号里的内容定义为信息 ID，将 msgstr 引号里的内容定义为 ID 对应的内容。如第 16 行的 &quot;Last Comments&quot; 就是 ID，&quot;最新评论&quot; 翻译成的内容。</p>
<p>第 3 行到第 13 行是文件信息和编辑成 mo 文件要使用的参数。poEdit 的 &quot;设置&quot; 里可设置这部分内容，保存时能自动生成。</p>
<p>第 15 行和第 19 行是注释，不写也可以。注释是为了下次修改时，查看所有使用过此翻译的位置。一定格式的注释能在 poEdit 里直接定位到被翻译的文件位置。</p>
<p>Wordpress 有 4 个方法用于加载 mo 文件到内容，以供页面使用：</p>
<blockquote><p>1. <strong>load_textdomain($domain, $mofile)</strong></p>
<p>$domain - 域名，用于区分其它域的 mo 数据。      <br />$mofile - mo 文件的物理地址，含文件名。</p>
<p>load_textdomain 函数是下面 3 个函数的基础。</p>
<p>2. <strong>load_default_textdomain()</strong></p>
<p>用于加载 Wordpress 站点自己使用的 mo 文件。（实际将 $domain 缺省为 &#8216;default&#8217;。）</p>
<p>3. <strong>load_plugin_textdomain($domain, $path = false)</strong></p>
<p>$domain - 域名，用于区分其它域的国际化数据。      <br />$path - mo 文件相对于 Wordpress 站点根目录的相对路径，不含文件名。（不一定非得是插件目录，站点的任何目录都可以）</p>
<p>用于加载 Wordpress 插件所使用的 mo 文件。假设 $domain = &#8216;wap&#8217;，Language = &#8216;zh_CN&#8217;，则 mo 文件名应为 wap-zh_CN.mo 。</p>
<p>4. <strong>load_theme_textdomain($domain)</strong></p>
<p>$domain - 域名，用于区分其它域的国际化数据。假设 $domain = &#8216;wap&#8217;，Language = &#8216;zh_CN&#8217;，则 mo 文件名应为 zh_CN.mo ，mo 文件的目录为当前模板的目录。</p>
<p>用于加载 Wordpress 模板所使用的 mo 文件。</p>
</blockquote>
<p>以上 4 个函数都在 /wp-includes/l10n.php 文件里定义。它们的生命周期都是 Page，也就是当页面加载完时失效，并不是一个页面执行一次，其它页面都可使用。</p>
<p>Language 在 /wp-config.php 文件的 &quot;define (&#8217;WPLANG&#8217;, &#8216;zh_CN&#8217;);&quot; 行定义。</p>
<p>mo 文件被正确的加载后，就可以在页面里使用这些数据了：</p>
<blockquote><p>1. 返回值函数</p>
<p><strong>__(&#8217;Last Comments&#8217;)</strong></p>
<p>返回 load_default_textdomain() 函数加载的， ID 为 &#8216;Last Comments&#8217; 所对应的数据。如上例，应返回 &#8216;最新评论&#8217; 。（函数名为 2 个下划线）</p>
<p><strong>__(&#8217;Last Comments&#8217;, &#8216;wap&#8217;)</strong></p>
<p>返回 &#8216;wap&#8217; 域中，ID 为 &#8216;Last Comments&#8217; 所对应的数据。如上例，应返回 &#8216;最新评论&#8217; 。</p>
<p>2. 输出函数</p>
<p><strong>_e(&#8217;Last Comments&#8217;)</strong></p>
<p>输出 load_default_textdomain() 函数加载的， ID 为 &#8216;Last Comments&#8217; 所对应的数据。如上例，应返回 &#8216;最新评论&#8217; 。</p>
<p><strong>_e(&#8217;Last Comments&#8217;,'wap&#8217;)</strong></p>
<p><strong></strong>输出 &#8216;wap&#8217; 域中，ID 为 &#8216;Last Comments&#8217; 所对应的数据。如上例，应返回 &#8216;最新评论&#8217; 。       </p>
</blockquote>
[ 标签： <a href="http://blog.tanggaowei.com/tag/%e5%9b%bd%e9%99%85%e5%8c%96">国际化</a> ] <br>[ 固定链接：<a href='http://blog.tanggaowei.com/2008/05/wordpress-4.html'>http://blog.tanggaowei.com/2008/05/wordpress-4.html</a> ]<br/>]]></content:encoded>
			<wfw:commentRss>http://blog.tanggaowei.com/2008/05/wordpress-4.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>智能设备应用程序的菜单怎么修改不了</title>
		<link>http://blog.tanggaowei.com/2008/05/post-12.html</link>
		<comments>http://blog.tanggaowei.com/2008/05/post-12.html#comments</comments>
		<pubDate>Thu, 08 May 2008 08:45:46 +0000</pubDate>
		<dc:creator>传说一梦</dc:creator>
		
		<category><![CDATA[软件开发]]></category>

		<category><![CDATA[资源菜单]]></category>

		<guid isPermaLink="false">http://blog.tanggaowei.com/2008/05/vs2005-c-mfc-2.html</guid>
		<description><![CDATA[调试VS2005 C++ MFC 智能设备应用程序时，系统总是显示项目的初始菜单（在手机上运行可能正常）。要使用自己的菜单，请注释掉 res\MyProjectsp.rc2 中以下内容： 
/////////////////////////////////////////////////////////////////////////////      //       // 数据       //       /*       IDR_MAINFRAME SHMENUBAR DISCARDABLE       BEGIN     [...]]]></description>
			<content:encoded><![CDATA[<p>调试VS2005 C++ MFC 智能设备应用程序时，系统总是显示项目的初始菜单（在手机上运行可能正常）。要使用自己的菜单，请注释掉 res\MyProjectsp.rc2 中以下内容： </p>
<p><font color="#00ea3a">/////////////////////////////////////////////////////////////////////////////      <br />//       <br />// 数据       <br />//       <br />/*       <br />IDR_MAINFRAME SHMENUBAR DISCARDABLE       <br />BEGIN       <br />&#160;&#160;&#160; IDR_MAINFRAME,       <br />&#160;&#160;&#160; 1,       <br />&#160;&#160;&#160; I_IMAGENONE, IDOK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,       <br />&#160;&#160;&#160; IDS_OK, 0, NOMENU,       <br />END       <br />*/</font></p>
[ 标签： <a href="http://blog.tanggaowei.com/tag/%e8%b5%84%e6%ba%90%e8%8f%9c%e5%8d%95">资源菜单</a> ] <br>[ 固定链接：<a href='http://blog.tanggaowei.com/2008/05/post-12.html'>http://blog.tanggaowei.com/2008/05/post-12.html</a> ]<br/>]]></content:encoded>
			<wfw:commentRss>http://blog.tanggaowei.com/2008/05/post-12.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>怎样恢复 Edit 控件的 BackSpace 键功能</title>
		<link>http://blog.tanggaowei.com/2008/05/edit-backspace.html</link>
		<comments>http://blog.tanggaowei.com/2008/05/edit-backspace.html#comments</comments>
		<pubDate>Thu, 08 May 2008 08:44:02 +0000</pubDate>
		<dc:creator>传说一梦</dc:creator>
		
		<category><![CDATA[软件开发]]></category>

		<category><![CDATA[BackSpace]]></category>

		<category><![CDATA[Edit控件]]></category>

		<category><![CDATA[TBACK]]></category>

		<guid isPermaLink="false">http://blog.tanggaowei.com/2008/05/vs2005-c-mfc-edit-backspace.html</guid>
		<description><![CDATA[VS2005 C++ MFC 智能设备应用程序中，在 Edit 控件里按&#8220;TBack&#8221;键时，并没有删除光标前的字符，而是最小化当前应用程序。要恢复 Edit 控件的 BackSpace 键功能，方法如下：
1. 函数申明：在 MyProjectDlg.h 中写到&#8220;DECLARE_MESSAGE_MAP()&#8221;语句之前 
afx_msg LRESULT OnHotKey ( WPARAM wParam, LPARAM lParam );&#160; // 一定要在 DECLARE_MESSAGE_MAP() 之前 
DECLARE_MESSAGE_MAP() 
2. 消息映射：在 MyProjectDlg.cpp 的 BEGIN_MESSAGE_MAP() 段添加代码 
BEGIN_MESSAGE_MAP(&#8230;.)      &#8230;       ON_MESSAGE( WM_HOTKEY, OnHotKey )      [...]]]></description>
			<content:encoded><![CDATA[<p>VS2005 C++ MFC 智能设备应用程序中，在 Edit 控件里按&#8220;TBack&#8221;键时，并没有删除光标前的字符，而是最小化当前应用程序。要恢复 Edit 控件的 BackSpace 键功能，方法如下：</p>
<p>1. 函数申明：在 MyProjectDlg.h 中写到&#8220;DECLARE_MESSAGE_MAP()&#8221;语句之前 </p>
<p><font color="#0000ff">afx_msg LRESULT OnHotKey ( WPARAM wParam, LPARAM lParam );&#160; </font><font color="#00ec3c"><font color="#00db00">// 一定要在 DECLARE_MESSAGE_MAP() 之前</font> </font></p>
<p><font color="#0000ff">DECLARE_MESSAGE_MAP()</font> </p>
<p>2. 消息映射：在 MyProjectDlg.cpp 的 BEGIN_MESSAGE_MAP() 段添加代码 </p>
<p><font color="#0000ff">BEGIN_MESSAGE_MAP(&#8230;.)      <br />&#8230;       <br />ON_MESSAGE( WM_HOTKEY, OnHotKey )       <br />&#8230;       <br />END_MESSAGE_MAP() </font></p>
<p>3. 函数定义：在 MyProjectDlg.cpp 中实现代码 </p>
<p><font color="#0000ff">LRESULT CMyProjectDlg::OnHotKey ( WPARAM wParam, LPARAM lParam )      <br />{       <br />&#160;&#160;&#160; if(VK_TBACK == HIWORD(lParam))       <br />&#160;&#160;&#160; {&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; SHSendBackToFocusWindow( WM_HOTKEY , wParam, lParam); </font></p>
<p><font color="#0000ff">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return 1;      <br />&#160;&#160;&#160; } </font></p>
<p><font color="#0000ff">&#160;&#160;&#160; return 0;      <br />}</font></p>
[ 标签： <a href="http://blog.tanggaowei.com/tag/backspace">BackSpace</a>, <a href="http://blog.tanggaowei.com/tag/edit%e6%8e%a7%e4%bb%b6">Edit控件</a>, <a href="http://blog.tanggaowei.com/tag/tback">TBACK</a> ] <br>[ 固定链接：<a href='http://blog.tanggaowei.com/2008/05/edit-backspace.html'>http://blog.tanggaowei.com/2008/05/edit-backspace.html</a> ]<br/>]]></content:encoded>
			<wfw:commentRss>http://blog.tanggaowei.com/2008/05/edit-backspace.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>VS2005 C++ 字符串相关处理</title>
		<link>http://blog.tanggaowei.com/2008/05/vs2005-c-4.html</link>
		<comments>http://blog.tanggaowei.com/2008/05/vs2005-c-4.html#comments</comments>
		<pubDate>Thu, 08 May 2008 08:41:10 +0000</pubDate>
		<dc:creator>传说一梦</dc:creator>
		
		<category><![CDATA[软件开发]]></category>

		<category><![CDATA[字符串]]></category>

		<guid isPermaLink="false">http://blog.tanggaowei.com/2008/05/vs2005-c-4.html</guid>
		<description><![CDATA[&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-    分割字符串     &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-     #include &#60;string.h&#62;     #include &#60;stdio.h&#62; 
char data[] = &#34;A string\tof ,,tokens\nand some&#160; more tokens&#34;;    char seps[]&#160;&#160; = &#34; ,\t\n&#34;;&#160;&#160; // 分隔符字符集     char *token; 
void main( void )    { [...]]]></description>
			<content:encoded><![CDATA[<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-    <br />分割字符串     <br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-     <br />#include &lt;string.h&gt;     <br />#include &lt;stdio.h&gt; </p>
<p>char data[] = &quot;A string\tof ,,tokens\nand some&#160; more tokens&quot;;    <br />char seps[]&#160;&#160; = &quot; ,\t\n&quot;;&#160;&#160; // 分隔符字符集     <br />char *token; </p>
<p>void main( void )    <br />{     <br />&#160;&#160; printf( &quot;%s\n\nTokens:\n&quot;, data );     <br />&#160;&#160; /* Establish string and get the first token: */     <br />&#160;&#160; token = strtok( data, seps );     <br />&#160;&#160; while( token != NULL )     <br />&#160;&#160; {     <br />&#160;&#160;&#160;&#160;&#160; /* While there are tokens in &quot;string&quot; */     <br />&#160;&#160;&#160;&#160;&#160; printf( &quot; %s\n&quot;, token );     <br />&#160;&#160;&#160;&#160;&#160; /* Get next token: */     <br />&#160;&#160;&#160;&#160;&#160; token = strtok( NULL, seps );     <br />&#160;&#160; }     <br />} </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-    <br />字符串转换成数字     <br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-     </p>
<p> char* token = &quot;20&quot;;&#160;&#160;&#160; <br />int nHour;   </p>
<p>nHour = atoi( token);   <br /> 
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-    <br />数字转换成字符串     <br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-     <br />_itoa( nHour,buf, 10);&#160; // 10 代表十进制 </p>
<p>char* token = &quot;20&quot;;&#160;&#160;&#160; <br />char* buf;     <br />int r;     <br />int nHour;     <br />string sHour;     <br />nHour = atoi( token);     <br />nHour += 8;     <br />_itoa( nHour,buf, 10);     <br />sHour = buf; </p>
[ 标签： <a href="http://blog.tanggaowei.com/tag/%e5%ad%97%e7%ac%a6%e4%b8%b2">字符串</a> ] <br>[ 固定链接：<a href='http://blog.tanggaowei.com/2008/05/vs2005-c-4.html'>http://blog.tanggaowei.com/2008/05/vs2005-c-4.html</a> ]<br/>]]></content:encoded>
			<wfw:commentRss>http://blog.tanggaowei.com/2008/05/vs2005-c-4.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>VS2005 C++ MFC 怎样添加事件、映射消息和重载函数</title>
		<link>http://blog.tanggaowei.com/2008/05/vs2005-c-mfc.html</link>
		<comments>http://blog.tanggaowei.com/2008/05/vs2005-c-mfc.html#comments</comments>
		<pubDate>Thu, 08 May 2008 08:40:20 +0000</pubDate>
		<dc:creator>传说一梦</dc:creator>
		
		<category><![CDATA[软件开发]]></category>

		<category><![CDATA[mfc]]></category>

		<category><![CDATA[映射消息]]></category>

		<category><![CDATA[添加事件]]></category>

		<category><![CDATA[重载方法]]></category>

		<guid isPermaLink="false">http://blog.tanggaowei.com/2008/05/vs2005-c-mfc.html</guid>
		<description><![CDATA[VS2005 的 MFC 添加事件、映射消息和重载函数的操作 和 VS6.0 不一样，是在窗口类的属性页里。操作如下：
在&#8220;类视图&#8221;中，右键单击想要操作的窗口类，点击&#8220;属性&#8221;。在打开的属性页中，最上一排按钮中的&#8220;事件&#8221;、&#8220;信息&#8221;和&#8220;重写&#8221;分别对应&#8220;添加事件&#8221;、&#8220;映射消息&#8221;和&#8220;重载函数&#8221;的操作。
[ 标签： mfc, 映射消息, 添加事件, 重载方法 ] [ 固定链接：http://blog.tanggaowei.com/2008/05/vs2005-c-mfc.html ]]]></description>
			<content:encoded><![CDATA[<p>VS2005 的 MFC 添加事件、映射消息和重载函数的操作 和 VS6.0 不一样，是在窗口类的属性页里。操作如下：</p>
<p>在&#8220;类视图&#8221;中，右键单击想要操作的窗口类，点击&#8220;属性&#8221;。在打开的属性页中，最上一排按钮中的&#8220;事件&#8221;、&#8220;信息&#8221;和&#8220;重写&#8221;分别对应&#8220;添加事件&#8221;、&#8220;映射消息&#8221;和&#8220;重载函数&#8221;的操作。</p>
[ 标签： <a href="http://blog.tanggaowei.com/tag/mfc">mfc</a>, <a href="http://blog.tanggaowei.com/tag/%e6%98%a0%e5%b0%84%e6%b6%88%e6%81%af">映射消息</a>, <a href="http://blog.tanggaowei.com/tag/%e6%b7%bb%e5%8a%a0%e4%ba%8b%e4%bb%b6">添加事件</a>, <a href="http://blog.tanggaowei.com/tag/%e9%87%8d%e8%bd%bd%e6%96%b9%e6%b3%95">重载方法</a> ] <br>[ 固定链接：<a href='http://blog.tanggaowei.com/2008/05/vs2005-c-mfc.html'>http://blog.tanggaowei.com/2008/05/vs2005-c-mfc.html</a> ]<br/>]]></content:encoded>
			<wfw:commentRss>http://blog.tanggaowei.com/2008/05/vs2005-c-mfc.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>捕捉手机 Home 键</title>
		<link>http://blog.tanggaowei.com/2008/05/home-2.html</link>
		<comments>http://blog.tanggaowei.com/2008/05/home-2.html#comments</comments>
		<pubDate>Thu, 08 May 2008 08:33:55 +0000</pubDate>
		<dc:creator>传说一梦</dc:creator>
		
		<category><![CDATA[软件开发]]></category>

		<category><![CDATA[HOME键]]></category>

		<guid isPermaLink="false">http://blog.tanggaowei.com/2008/05/home-2.html</guid>
		<description><![CDATA[（虽然能捕捉到，但是好像最后还是执行了返回桌面操作）
1. 注册热键 
BOOL CMyProjectDlg::OnInitDialog()      {       &#160;&#160;&#160; &#8230; 
&#160;&#160;&#160; // 处理 VK_HOME      &#160;&#160;&#160; BYTE appkey = SHGetAppKeyAssoc(_T(&#34;MiniBlogClient.exe&#34;));       &#160;&#160;&#160; ::RegisterHotKey ( m_hWnd, appkey, MOD_WIN, VK_THOME); 
&#160;&#160;&#160; &#8230;      } 
2. 重写 [...]]]></description>
			<content:encoded><![CDATA[<p>（虽然能捕捉到，但是好像最后还是执行了返回桌面操作）</p>
<p>1. 注册热键 </p>
<p><font color="#0000ff">BOOL CMyProjectDlg::OnInitDialog()      <br />{       <br />&#160;&#160;&#160; &#8230; </font></p>
<p><font color="#0000ff">&#160;&#160;&#160; // 处理 VK_HOME      <br />&#160;&#160;&#160; BYTE appkey = SHGetAppKeyAssoc(_T(&quot;MiniBlogClient.exe&quot;));       <br />&#160;&#160;&#160; ::RegisterHotKey ( m_hWnd, appkey, MOD_WIN, VK_THOME); </font></p>
<p><font color="#0000ff">&#160;&#160;&#160; &#8230;      <br />} </font></p>
<p>2. 重写 PreTranslateMessage 函数 </p>
<p><font color="#0000ff">BOOL CMyProjectDlg::PreTranslateMessage(MSG* pMsg)      <br />{       <br />&#160;&#160;&#160; // TODO: 在此添加专用代码和/或调用基类       <br />&#160;&#160;&#160; if( pMsg-&gt;message == WM_HOTKEY )       <br />&#160;&#160;&#160; {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; SetForegroundWindow(); </font></p>
<p><font color="#0000ff">&#160;&#160;&#160;&#160;&#160;&#160;&#160; return TRUE;      <br />&#160;&#160;&#160; } </font></p>
<p><font color="#0000ff">&#160;&#160;&#160; return CDialog::PreTranslateMessage(pMsg);      <br />} </font></p>
[ 标签： <a href="http://blog.tanggaowei.com/tag/home%e9%94%ae">HOME键</a> ] <br>[ 固定链接：<a href='http://blog.tanggaowei.com/2008/05/home-2.html'>http://blog.tanggaowei.com/2008/05/home-2.html</a> ]<br/>]]></content:encoded>
			<wfw:commentRss>http://blog.tanggaowei.com/2008/05/home-2.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
