关于翻译WordPress插件所需的一切

虽然有很多关于翻译WordPress的文章,但很少有人进入其在日常工作和管理的具体细节.

在代码中更改某些内容时会发生什么?添加新字符串时会发生什么?更新插件到新版本时会发生什么?

这些是我将在本文中回答的问题类型.我将逐步向您展示如何为新插件和更新完成此操作,因此您将能够将任何插件转换为任何语言.

让我们开始!

  • 创建插件
  • 在国际化插件中加入
  • 实施翻译
  • 创建翻译
  • 维护翻译
  • 接受翻译
  • 高级翻译

    • 逃脱翻译
    • noop翻译

  • 翻译javascript

WordPress is available in many languages. 虽然Wordpress在美国英语(EN_US)中显示默认情况下,软件具有内置的-IN以任何语言使用的能力.

创建插件

当然,您需要采取的第一步是创建一个插件.如果您已经拥有一个,伟大的,如果不是,请遵循我们的详细入门插件开发指南.如果您需要快速示例插件,让我们一起创建一个.

我们正在做的只是向标题添加一些励志文本.认为Hello Dolly插件用明确的,激励文本,而不是歌词.

首先,在插件目录中创建一个文件夹并将其命名为wp-admin-motivation.然后,在该文件夹中创建一个名为wp-admin-motivation.php的文件夹中的文件.在该文件中粘贴的代码在下面.

加载GIST 306DD5458CCF4FE47CD463E53AA79261

第一个功能get_motivation_text()包含一系列动机字符串.阵列被播放,第一个返回.这有效地是一个随机化器,该函数的结果将是来自阵列的随机挑选的项目.

然后我们将show_motivation_text()挂钩挂钩到admin_notices钩子.该函数获取随机动机文本,并在具有wp-admin-motivation ID的段落内将其回应.在此阶段,我们的文本将是可见的,但允许在屏幕选项/帮助选项卡附近使用一些CSS定位.

Hello Dolly插件通过简单地在标题中输出它来添加CSS.这不是真正的做事方式,所以让才能延长样式表.这是通过将motivation_assets()函数挂钩到admin_enqueue_scripts并在那里延长样式表来完成的.

样式表讲述文本并照顾RTL(右到左)问题.

加载GIST 3B619AEA4FCC27FB66F1252CADF651C7

完成所有这些,唯一的问题是它只用英语工作.如果您想要使用另一种语言,您需要创建完全相同的插件,将字符串替换为目标语言.这似乎是一种浪费,必须有-而且事实上有更好的方法.

国际化插件

在国际化插件的基本上意味着让它准备好转换.这涉及在稍后使用的特殊功能中包装可翻译字符串,以加载正确的翻译.

有许多国际化函数,但对于我们的简单插件,我们只需看一下,然后在理解示例后,后来稍后会谈论其他人.

我们使用的功能是__().此函数需要两个参数:要翻译的文本和文本域,它看起来像是这样的:

加载GIST C087A09255551F70AD47F142A50BB15.

如果存在,函数返回标记字符串的转换.如果没有,则返回原始字符串.

它使用当前语言来确定所需的翻译.您可以在"设置"部分中的WordPress中切换语言,无论选择哪些设置都会应用于所有翻译.

文本域是最终丢失的拼图.文本域是一个组成属于一起的翻译的方式.您正在运行的主题将有自己的文本域,所以所有的插件也是如此.这使得它们之间很容易区分.

请注意,对于插件,文本域应为插件文件夹的名称.在我们的示例中,这意味着文本域应为wp-admin-motivation.要国际化我们的插件我们需要做的就是在__()功能中包装我们的字符串.

加载GIST 580E7346CC11221B4D33740FA8B330

实现翻译

我们现在已经标记了翻译准备字符串,但视线中的任何地方都没有翻译.我们需要讲述WordPress我们的插件的翻译所在.该标准是我们插件中的lang目录.现在创建它并在主插件文件中使用以下代码来让WordPress了解在哪里寻找翻译.

加载GIST 8AA9E6109F23A0B500E130A07BDCAE33

函数在此处是键,必须从挂钩到plugins_loaded的函数内调用它.第一个参数是我们已经谈过的文本域,第二个已被弃用,第三个是语言文件夹的位置.

我们的翻译文件将名为[plugin-name]-[locale].mo.我会告诉你如何在稍后制作这些,因为现在请记住您将在此处放置文件.在我们的示例中,德国文件将被命名为wp-admin-motivation-de_DE.mo.如果您不知道它,您可以查找WordPress Locale.

在这个阶段,如果我们有语言文件,一切都会正常工作,所以最后一步是创建翻译.

创建翻译

有多种方式可以创建翻译,但最终结果始终相同.您将最终使用两个文件,a po文件和mo文件.po文件是人类可读的翻译文件.您可以在任何文本编辑器中打开它并编辑它.mo文件是一个po文件,它已被转换为机器readbale格式.这尺寸小得多,但当然完全不可读.

以下是未转换的PO文件的示例.正如您所看到的,顶部有一些关于翻译,翻译和项目的基本信息,然后是可翻译字符串列表及其待翻译.

加载GIST A3B5C97892EE8D2E4BADAF1BAFE337BC

可通过以下方式推广可翻译的比特:

加载GIST 699B1041C90AF1D308EDBA38C68EE512.

由于字符串的位置直到线编号,您可能认为这将有点难以创建和维护.这就是为什么我们有自定义工具来帮助我们!在存储库中有插件后,管理工具允许您生成.po文件,但您也可以使用令人敬畏和免费的Poedit创建一个.

Basic Translation Details 翻译文件 的基本细节

下载并启动Poedit,单击 new 然后新目录.在弹出窗口的窗口中填写您的详细信息.您不需要担心现在的字符和复数表格,只是基本细节.

切换到源路径,让我们讨论基本路径和路径.标记为路径的大盒子告诉Poedit在哪里搜索与基础路径相关的可翻译字符串.

我们将把我们的翻译放在我们的插件的子目录中.这意味着我们有两个选项:

  • 将基本路径设置为../(父目录),并将路径部分中的路径设置为.(当前目录)
  • 将基本路径设置为.当前目录,并在路径部分中设置路径为../

在第一个例子中,我们告诉Poedit,我们的代码实际上驻留在语言文件夹的父目录中.它应该转到父目录,然后随后搜索该目录(因此在路径部分中使用.).

在第二个例子中,我们说我们的当前目录是此语言文件所在的.但是,我们需要检查的文件是我们上方的一个目录,这就是我们在路径部分中使用../的原因.

无论哪种方式都会很好,我认为第一个版本是语义上更正确的,虽然我倾向于直到现在地使用第二个版本.

下一步是设置我们在"源关键字"部分中使用的关键字.在这里,我们定义了我们使用的翻译函数的名称.在我们的情况下,我们只需要添加一个- __.比在此,您可以在此处添加至少2-3个功能,请参阅高级翻译.

当您单击通过时,Poedit将扫描文件并吐回任何可翻译的字符串.它将将它们组织成一个列表,您可以单击通过,在最底页中写入翻译.

Translated strings in Poedit Translated strings in Poedit 用poedit 翻译的字符串

一旦您对翻译保存文件,它应该自动为您自动生成Mo文件.默认情况下,文件名将是default您必须更改为上面讨论的一个:[plugin-name]-[locale].mo.虽然理智的缘故,你的PO文件的名称是无关紧要的,我会命名它.

在我的例子中,我翻译成匈牙利语,所以我的文件名是wp-admin-motivation-hu_HU.mo.一旦这个文件到位,插件将在匈牙利语中显示指定的文本,只要我的WordPress instalation设置为使用匈牙利语.

维护翻译

更新翻译不是它声音的痛苦.虽然Po文件是如此,但是当WordPress使用该文件时,不会考虑这些类型的位置.位置和行号是如果需要,可以将译者查找字符串.

只要您只是在不改变可翻译的字符串内容的情况下,您无需更新语言文件即可.我通常做的是创建一个pop文件,这是我每次更新插件本身时更新的唯一文件,即使字符串也不会改变.

pot文件就像po文件,但它们不包含任何实际翻译-它们是模板文件.只要更新此模板文件并包含每个字符串的正确行,即可轻松进行新的翻译.

如果 do 需要更新语言文件,您需要在Poedit中打开它,然后单击"更新"图标.Poedit将通知您更改和新字符串,然后您可以根据需要进入并编辑它们.

接受翻译

一个我看到困惑的地方(至少我首先被这个混淆)是翻译成插件.如果我下载插件如何添加自己的翻译?我认为这个过程是以某种方式自动化的,就像安装插件一样,但它不是.

如果有人喜欢插件,他们将它转换为自己的语言,使用插件中的pop文件,然后将结果发送给开发人员.然后,开发人员将其添加到LANG文件夹中,创建一个新版本并将其推向WordPress存储库.当用户收到更新时,如果在语言文件夹中,该插件将以他的语言发挥作用.

我在github上托管所有存储库,这使得开发人员非常容易使用拉请求向我发送这些文件.所有我需要做的就是按一个按钮并为WordPress存储库创建新版本.

高级翻译

现在知道如何使用返回值的__()函数来翻译基本字符串.有
总共14个功能,您可以用来微调你的翻译,虽然你最重要的是他们的3-4.让我们从最常见的开始.

__()

这是我们查看的基本功能,它需要一个字符串并返回它的翻译是否存在.

_e()

这个函数与前一个完全相同的事情是完全相同的,而是返回它直接将结果返回它.

_n()

此功能允许您优雅地处理复数.它需要4个参数,单个形式,复数形式,基于哪一个或另一个的数字和文本域.这是一个快速的例子:

加载GIST 6AB26C239D3C865920E7D942DD47CFD7

_x()

此功能的目的是防止类似单词的冲突.如果插件使用"对"在几个人的意义上使用"对",并且在通过蓝牙配对设备的意义上,可能会出现碰撞.外语可能会很好地使用两者的不同词语._x()允许您指示您的意图.

加载GIST CEAFB0114B6D84A1A3A2FD6C3404550B

_ex()_nx

这些与我们碰撞防止朋友从上面的碰撞相同,但第一次将结果直接回避,第二个允许您将复数添加到混合中.

转义翻译

有六个功能,允许我们在属性和HTML中逃避安全使用率的值.他们的名字非常描述,我相信你能猜出他们会做什么:

  • esc_attr__()
  • esc_attr_e()
  • esc_attr_x()
  • esc_html__()
  • esc_html_e()
  • esc_html_x()

noop翻译

这个是有点复杂的所以我会在理解_n_noop的情况下推荐你的好文章.Noop功能基本上寄存在POT文件中的多个字符串,但不要翻译它们.这样做的原因是预先知道该数字,这意味着我们需要添加另一个函数来抓住它们.

由于此,我们使用noop函数并稍后翻译实际值.您需要几个案例需要此功能,请查看上面的文章以获取更多信息.

在WordPress中发生这种情况的函数是:

  • _n_noop()
  • _nx_noop()
  • translate_nooped_plural()

翻译javascript

如果您有一些坐在您的JavaScript中,您可能会想知道该怎么办.WordPress通过wp_localize_script()功能为您提供解决方案.此函数需要三个参数:要翻译的脚本的句柄,要在脚本和翻译数组中使用的对象名称.这是一个例子:

加载GIST 32DE5E770DEDE83A26244A80FD7069C9

一旦添加了您的翻译,可以在注册的JS文件中使用它们.您需要使用转换阵列的对象名称和键:

加载GIST FD0AC5ED4583B15BB8C8262920027B0E

结论

数百万人以他们自己的语言使用WordPress,为什么不帮助他们使用我们的产品?使我们的插件翻译准备好很容易,维护它也不是麻烦.

通过标记我们的字符串进行翻译和创建PO/MO文件,我们正在帮助每个人,并在过程中更好地制作产品.

顺便问一下,如果您想看到我们在本教程中建立的小示例插件,您可以在此处下载并将其旋转.

现在你知道,为什么找不到你喜欢的插件并帮助翻译它?

您用于翻译插件的资源?让我们在下面的评论中知道.

2

发表回复