http://blog.wpjam.com/article/localizing-a-wordpress-plugin-using-poedit/

翻译或者说本地化 WordPress 插件和主题可以让更多的国家和地区的人使用,而 WordPress 对 i18n 的支持使这一切都变得非常简单,插件和主题的作者非常容易就能让人们把他们的插件翻译成各种语言。

这篇日志首先将会详细讲解应该如何修改插件和主题,使得插件和主题能够被翻译。然后将介绍一个叫做 poEdit 的翻译软件,通过它来 本地化 WordPress 插件和主题。

WordPres 插件和主题本地化的好处和 .po 文件

WordPress 插件和主题有越多的语言版本,就会有越多的不同国家的人下载和使用。

如果 WordPress 插件和主题很流行,很多人使用,就会有用户把它翻译成不同的语言以方便其他地区的人能够使用它。当然最麻烦最原始的翻译方法就是逐行逐字的翻译源代码。不过现在采用的是简单轻便的翻译方法:通过 .po 文件。

通过 .po 文件,任何人都能翻译你的插件或者主题,只要他熟悉插件使用的原始语言。并且 .po文件还有一个好处就是,如果源代码作了任何修改,翻译者不必查看源代码来重新翻译,因为所有需要翻译的文本都会自动保存在一个后缀名为 .po 文件中,翻译者所需要做的只是重新更新下.po 文件,翻译新增或修改的部分。

下面以插件为例,详细讲解 WordPress 插件和主题翻译的所有过程:

本地化的准备工作

WordPress 使用 GNU gettext 机制来实现本地化。WordPress 有两个可以被调用的函数:_e 和__。为了使得插件或者主题能够被翻译,每次输出文本的时候,都应该使用这两个函数。

  • 这两个函数使用方法是:__($message, $domain) 和 _e($message, $domain)
  • _e 和 __的区别是:_e 直接输出文本,而 __ 是返回文本,需要自己输出,所以 __ 一般用在字符串连接当中。
  • 这两个函数都用 $message 作为第一个参数和 $domain 作为第二个参数。第一个参数就是要输出的文本,而第二个参数 $domain不是可选的,它应该是一个和你插件或者主题对应的唯一的名字,举个例子,如果你开发一个叫做 Related Posts 的插件,这里 $domain 就是related_posts$domain 一般是在 load_plugin_textdomain 函数中定义,下面有具体介绍。

导入本地化文件

在确保输出的文本可以被本地化之后,你必须设置你的插件或者主题的 .mo 文件的路径(.mo 是编译后的 .po 文件,它是在 poEdit 保存的时候会自动产生的)。

在你插件中的代码大致如下所示:

load_plugin_textdomain('your-plugin-domain', "/wp-content/plugins/your-plugin-directory/");
  • 函数具体语法:load_plugin_textdomain($domain, $path)
  • $domain 变量就是前面 __ 和 _e 函数中使用的第二个参数。$path 是定义 .mo 文件的路径。可以使用相对于 ABSPATH 的相对路径。如果插件没有自己的目录,这里也可以设置为空。

这里需要注意的一件事情是,产生的任何 .mo 文件都应该以 $domain 变量的值作为文件名的前缀。如果插件的 $domain 是 related_posts 的话,那么 .mo 文件将会被命名为 related_posts-zh_CN.mo(假设插件被翻译成中文)。

使用 poEdit 进行翻译

WordPress Codex 已经有一个非常好的如何使用 poEdit 翻译插件或者主题的 step-by-step 教程,但是我这里将通过一个实例展示这些步骤。

第一步:下载 poEdit

第二步:找一个插件翻译:这里以我写的插件 Related Posts 作为例子。

第三步:打开 poEdit 并打开菜单 File -> New catalog…

在弹出的 ‘Settings’ 对话框中,输入你项目的名称,并设置字符集为 UTF-8。

第四步:输入插件的路径

在刚才的 ‘Settings’ 对话框,点击 ‘Paths’ 标签页并点击建立新条目的图标。假设插件在自己的子目录下并且你会把 .po 保存在子目录中,输入”.”(这将告诉 poEdit 去扫描当前目录和所有子目录)。

第五步:设置适当的关键字

因为 WordPress 使用 _e 和 __ 函数来本地化,所以你应该让 poEdit 知道这就是它应该查找的。点击 ‘Keywords’ 标签页并输入 _e 和 __ 作为关键字,你可以通过点击 ‘New Item’ 图标输入关键字。

第六步:点击 OK 并开始翻译

点击 “Okay” 按钮并保存 .po 文件到你的插件目录下。

在你保存 .po 文件之后,会有一个窗口弹出并告诉你所有它找到相匹配的文本。

如果你不准备翻译该插件,你可以保存.po 文件并把它和插件一起分发出去,让别人能够直接使用它进行翻译。

第七步:翻译插件

一旦所有需要翻译的文本都找到了,就该开始翻译插件了。你所做的就是只要简单的找到你想翻译的文本,并增加你自己的语言。

上面的 poEdit 界面就是插件翻译界面。

第八步:保存 Catalog

还记得前面提到的 $domain 吗?举个例子,我想生成一个西班牙文的翻译文件,我将会保存这个文件并以 $domain 作为前缀,然后语言和地区代码作为后缀。在这里,$domain 是related_posts 并且语言和地区代码是 es_ES。所以文件名应该为:related_posts-es_ES

通过保存新文件,我将自动生成一个可以让别人使用的 .po的文件,和一个可以被 WordPress 直接读取来本地化插件的 .mo 文件。

现在如果用户已经在他们的 wp-config.php 文件中设置了适当的 WPLANG 的值,他们插件的选项和输出的文本将会使他们当地的语言。

总结

本地化一个 WordPress 插件是让更多地区用户使用你的插件的一个非常好的方法。本地化首先需要插件作者保证插件能够真正本地化,最后翻译者使用 PoEdit 进行翻译。

备注:

对于 WordPress 插件,建议大家使用 PoEdit 进行汉化。直接修改源代码也是可以的,但没有注意编码格式的话,可能会导致插件设置页面出现乱码。而且,插件升级之后旧文件被新文件覆盖,汉化也随之消失……使用 PoEdit 一般不会出现这些问题。

那么,使用 PoEdit 进行汉化的原理是什么呢?WordPress 使用 GNU gettext 机制来汉化,关键之处在于两个函数『 _e 和 __ 』。 PoEdit 通过识别并提取调用了这两个函数里的字符串,然后你只需要输入那些字符串所对应的中文语句,其他的交给 PoEdit 就行了,所有翻译的语句都会在 .po 文件中。

世界上只有两种插件不能被汉化:这种和那种。对于这种插件,他本身就是中文,当然不需要汉化啦。而那种插件呢,由于作者在编写插件过程中没有调用函数『 _e 和 __ 』,使得 PoEdit 无法识别其中需要被汉化的字符串,因此那种插件就不能被汉化。

PoEdit 汉化时注意一点:一般来说 PHP 函数或过程可以不用去看了(用『 _e 和 __ 』),你需要注意的是那些 HTML 代码。

wordpress 插件 汉化的更多相关文章

  1. wordpress插件汉化包,和使用教程

    点击下载汉化包 解压后上传到该插件的 languages 目录即可

  2. Joomla插件汉化小程序

    这两天在搞joomla插件,在看peter的视频,在此谢过他了.看到它汉化插件那个视频.反正闲着无聊,就写了一个Java小程序,方便使用joomla的人汉化插件.这个程序的方法很简单,你只要先运行ou ...

  3. IOS越狱插件汉化工具

    提取插件文件“*.plist"进行制作汉化文件plist文件路径查看方法:安装插件后在cydia中查看该插件页底部“文件系统内容”使用文件管理软件提取(filza;ifile.....) 如 ...

  4. sublimeText3最新教程-自带插件汉化(sublime-text_build-3175_amd64)

    一.可用注册码 1.更改dns 在linux下的目录是     /etc/hosts 在win7中,hosts文件的位置:C:\Windows\System32\drivers\etc 127.0.0 ...

  5. sublime text3083 破解 插件汉化

      sublime text  注册码 1. Sublime Text 2.x 版本 —– BEGIN LICENSE —– Andrew Weber Single User License EA7E ...

  6. android studio 汉化 svn插件汉化。布局文件 属性 汉化 public.xml

    android studio 汉化 SvnBundle.properties D:\Android Studio\plugins\svn4idea\lib resources_en.jar\org\j ...

  7. 常见问题:bootstrap datepicker日期插件汉化

    引入简体中文js(bootstrap-datepicker.zh-CN.js),并在datepicker属性配置language为‘zh-CN’即可,示例如下: $(".form_datet ...

  8. WordPress 前端投稿/编辑发表文章插件 DJD Site Post(支持游客和已注册用户)汉化版 免费下载

    插件简介 前面逍遥乐给大家推荐了 WordPress用户前端化专业版WP User Frontend Pro WordPress中文汉化插件v2.1.9 今天逍遥乐给大家带来的wordpress插件是 ...

  9. AE插件:能量激光描边光效特效Saber Mac汉化版

    与大家分享一款非常好用的AE插件Saber插件汉化版.videocopilot saber是一款能量激光描边光效特效AE插件,可以帮助用户制作出能量激光.传送门.霓虹灯.电流.光束.光剑等效果.小编现 ...

随机推荐

  1. Vim 指令一览表

    vim 程序编辑器 移动光标的方法 h 或 向左箭头键(←) 光标向左移动一个字符 j 或 向下箭头键(↓) 光标向下移动一个字符 k 或 向上箭头键(↑) 光标向上移动一个字符 l 或 向右箭头键( ...

  2. HNOI2019梦游记

    \(Day_0\) 十点半开始睡觉,开始了八个小时的不眠之夜,整晚都没睡着,这状态明天肯定挂了 \(Day_1\) 开局一条鱼,计算几何只会\(20\) 还是\(T2\)的\(20\)纯暴力好打,\( ...

  3. LVS/DR 配置

    LVS/DR 配置 实验环境 三台主机:Linux Centos 6.4 32位 调度器Director:192.168.1.160(公网IP).192.168.1.100(VIP) HTTP真实服务 ...

  4. Pandas的 loc iloc ix 区别

    先看代码: In [46]: import pandas as pd In [47]: data = [[1,2,3],[4,5,6]] In [48]: index = [0,1] In [49]: ...

  5. [RK3288][Android6.0] TS-ADC驱动流程小结【转】

    本文转载自:https://blog.csdn.net/kris_fei/article/details/55045936 Platform: RK3288OS: Android 6.0Kernel: ...

  6. Kubernetes StatefulSets

    StatefulSets对于需要以下一项或多项的应用程序非常有用. 稳定,唯一的网络标识符. 稳定,持久的存储. 有序,优雅的部署和缩放. 有序,优雅的删除和终止. 有序的自动滚动更新. POD Id ...

  7. 安装mysql5.7后无法启动,/var/run/mysqld 目录每次重启后都需要手动去创建--终极解决方案

    鉴于很多童鞋反应,mysql5.7安装后出现无法启动,建立/var/run/mysqld 并赋权mysql用户解决了启动的问题,但是重启系统后又出现无法启动的问题,导致/var/run/mysqld ...

  8. <转>xshell的快捷键

    xshell中现有的快捷键 快捷方式键 说明 Alt + N 与文件菜单的新建相同 Alt + O 与文件菜单的打开相同 Alt + C 与文件菜单的断开相同 Alt + Enter 切换到全屏模式 ...

  9. 查找文件【TLCL】

    locate locate 执行快速的路径名数据库搜索,输出每个与指定子字符串相匹配的路径名. locate bin/zip locate 命令的数据库是updatedb命令创建的. find loc ...

  10. 解决fasterxml中string字符串转对象json格式错误问题

    软件152 尹以操 springboot中jackson使用的包是fasterxml的.可以通过如下代码,将一个形如json格式string转为一个java对象: com.fasterxml.jack ...