建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

创建可翻译的 WordPress 主题和插件:开发人员指南

GG网络技术分享 2025-03-18 16:07 6


去年,我们推出了一个关于翻译 WordPress 不同方面的系列,重点关注现有主题或插件的国际化。

在今天的帖子中,我们将为主题和插件开发人员提供一些信息来扩展和补充该系列,即如何本地化您的主题或插件或准备翻译。

我们将看看您在创建新产品时需要做什么,以确保用户可以轻松地将它们翻译成他们自己的语言。 由于 29% 的 WordPress.com 网站使用外语,而且 WordPress 社区内的国际化日益受到重视,因此确保您的主题和插件准备好翻译比以往任何时候都更加重要。

因此,让我们详细了解该过程,以确保在创建主题和插件时使用正确的功能和方法。

在本文中,我们将介绍:

  • 文本域
  • 标记要翻译的字符串

    • __()
    • _e()
    • _n()
    • 使用 sprintf() 功能
    • _x(), _ex()_nx()
    • 转义属性
    • Nooped 翻译
  • 翻译 Javascript
  • 加载文本域
  • 翻译文件

文本域

您需要做的第一件事是定义您的文本域。

什么是文本域? 文本域是一种标记属于一起的翻译的方式。 它使语言文件更具可移植性、模块化和可读性。

命名文本域是一件简单的事情,因为插件/主题的命名决定了它是什么。 文本域应该与您的主题或插件的 slug 匹配,这通常是它所在文件夹的名称。

对于即将到来的二十五主题 姓名 主题当然是二十五。 这 蛞蝓 - 这是文件夹的名称 - 是“二十五”。 由于文本域必须与 slug 相同,因此 文本域 也是“二十五”。

您需要显示您的文本域的第一个地方是您的主题或插件的初始评论块。 这用于定义插件的基本属性,如作者姓名、插件名称、主题标签等。 确保也添加“文本域”属性。 这是 25 岁的评论区 style.css 文件。

加载要点 f3a3426f38efccb8e190db00bd35ba2a

标记要翻译的字符串

大多数开发人员都知道,要翻译字符串,您应该将它们包装在 __() 函数返回它们或 _e() 功能来呼应它们。 实际上,还有 11 种功能可以用于完美翻译,但在大多数情况下,您确实会使用上述两个。

让我们来看看我们所有的选项以及它们的用途:

__()

这是最基本的翻译功能之一。 像它的许多兄弟一样,它需要两个参数:要翻译的字符串和文本域。

加载要点 38520494733ecef68827cfcec47b9e67

当您想要标记一个简单的字符串进行翻译并返回值以在其他地方使用时使用它。 这在函数中经常出现——想想注册帖子类型。 在下面的 Codex 示例中,您可以看到数组的所有成员是如何标记为进行翻译的:

加载要点 0e48a7845e20db9d310f2a26c99b5f8c

_e()

这与上面的函数几乎相同,只是它回显了值。 在 HTML 内容目录中翻译时可以使用它:

加载要点 68ddacd1f60a825295b4570e2afb7148

_n()

当翻译带有条件复数的字符串时使用此功能。 这意味着您事先不知道字符串是使用复数形式还是单数形式,因为它取决于某些参数的瞬时值。 一个很好的例子是评论计数。

例如,如果评论计数为 1,则您需要使用单数形式:“一条评论”。 如果评论数为 0 或多于 1,您将使用复数形式:“许多评论”。 这可以使用 _n() 功能。

它有四个参数:单数形式、复数形式、要检查的数字和文本域:

加载要点 b9dd17ca47e6fe866ce77db9dd6ac024

使用 sprintf() 功能

sprintf() 是一个原生的PHP函数,用来根据一些参数输出一个格式化的字符串。 它与一些经常使用变量的更复杂的翻译一起使用。 这是它的一般外观:

加载要点 df266a46ff7375e65b1b227de33cc9aa

两个最常见的占位符是 %s 对于字符串和 %d 对于整数。 如果您使用这些占位符,则需要将尽可能多的附加参数传递给 sprintf 作为您正在使用的占位符的数量。 也可以索引占位符以首先使用第二个占位符,依此类推。 有关此函数的高级用法,请查看 PHP 文档。

为了使我们上面的翻译示例更好一点,我们可以使用 0 值 _n() 再加上 sprintf().

加载要点 53697387bae65a2d2eb62e0ca7594bea

在这个例子中,使用 $comment_count 变量可能有点混乱。 内使用时 _n() 函数我们根据它的值确定使用哪个版本,单数或复数版本。 在该行后面使用时,作为第二个参数 sprintf()我们用它的值来代替 %s.

_x(), _ex()_nx()

存在“x”风格的功能以消除由类似翻译文本引起的任何混淆。 例如,“post”这个词被用作动词和博客中一种条目的名称。 在不同的语言中,他们可能会使用两个非常不同的词。 为了区分它们,我们使用 _x() 添加上下文并返回结果, _ex() 添加上下文并回显结果 _nx() 为复数翻译添加上下文。

加载要点 d0fa466e6504cd16620954a12f71ee2e

转义属性

有两组三个函数用于转义翻译的字符串。 一组负责属性中使用的字符串,另一组负责 HTML 的转义。 他们来了:

  • esc_attr__()
  • esc_attr_e()
  • esc_attr_n()
  • esc_html__()
  • esc_html_e()
  • esc_html_n()

因为我们已经查看了所有这些类型的函数,所以它们应该是非常不言自明的。 这是一个简单的例子:

加载要点 237322a1ea9804062e0b833dffd7df96

Nooped 翻译

这个函数的名字不是很好,只在某些情况下才有用,这使得解释起来非常困难。 _n_noop()_nx_noop() 注册要翻译的字符串,但他们不会立即翻译。

英语非常简单,因为有一种单数和一种复数形式。 在其他语言中——比如俄语——并不是那么简单。 Nooped 函数允许您将翻译与它们的使用分开注册。 实际输出是使用 translate_nooped_plural() 功能。 Codex 提供了一个很好的例子来说明它是如何工作的:

加载要点 958a351186e7c6def1bf58ac8748fe96

翻译 Javascript

Javascript没有翻译功能,但使用巧妙的 wp_localize_script() 功能我们可以在服务器端完成。 我们的想法是创建一个字符串对象,并通过将其添加到我们的文档中将其传递给我们的脚本。 如果有可用的翻译文件,则字符串将在输出之前进行翻译。

加载要点 5b1635bcbb097b3e68e39de1bcd1d1e0

该脚本首先被排队,然后被本地化。 本地化函数的第一个参数是我们要本地化的脚本的名称。 第二个是用于保存字符串的唯一对象名称。 下一个参数是我们将在脚本中使用的键和值数组。 最后我们可以在 Javascript 端实现它:

加载要点 b51f60e7305a0da4d275ffc4ec06ac5a

加载文本域

为了启用我们翻译的字符串,我们需要提供一个翻译文件。 每当 WordPress 看到翻译函数时,它都会找到当前语言的翻译文件并查找函数中指定的文本。 如果找不到文本,则按原样返回。

我们需要告诉 WordPress 我们的插件/主题的翻译文件保存在哪里。 这可以使用 load_plugin_textdomain() 函数,需要挂接到 plugins_loaded 行动。

加载要点 e881bc43d51a489c090d50e547a38d36

在这个阶段,一切都应该正常工作——你的 HTML 和 Javascript 应该很容易翻译。 为了帮助我们的用户,我们真的应该生成一个 pot 文件,它是一个翻译模板文件。

翻译文件

在翻译过程中,您将看到三种文件类型。 第一个是 .POT 文件,是翻译模板文件。 这些文件是人类可读的翻译文件,而 .MO 文件是另一种翻译文件,是机器可读的翻译文件。 创建新语言文件时,它通常从 POT 文件开始。 它使用区域设置进行复制和命名,例如 zh_CH.PO(zh 是中文的语言代码,CH 是中国的国家代码)。 然后使用 Poedit 之类的工具打开它,并翻译所有字符串。 保存后,Poedit 会创建一个 .MO 版本。

最后 WordPress 使用 .MO 版本,因为它高度压缩以提高效率。 这一切都很好,但是我们如何创建我们的初始 .POT 文件?

有很多方法,我建议你第一次使用 Poedit。

安装打开的 Poedit 并转到 文件 > 新目录 并填写详细信息。

目录属性
一些填写的目录属性

切换到下一个选项卡(源路径)并设置路径。 该路径应该是相对于您的 .POT 文件的位置。 如果您正在开发插件并且目录文件将在 languages 你应该使用 ../ 为您的源路径。

在“源关键字”选项卡中,您需要选择要检查的功能。 如果您只使用基本功能,您可以简单地添加 ___e, 但最好是添加所有内容。

来源关键词
一些来源关键字集

单击“确定”后,您将能够选择文件的位置。 Poedit 实际上会创建 .PO 和 .MO 文件。 您可以通过简单地复制粘贴空的 .PO 文件并重命名它来创建 POT 文件。

概述

在我看来,国际化是 必须. 这很容易做到,没有任何借口可以将不会说或读英语的访问者排除在您的网站之外。

在本文中,我们了解了翻译的基础知识、什么是文本域、我们可以使用的功能以及如何创建翻译文件。

标签: WordPress op

提交需求或反馈

Demand feedback