Products
GG网络技术分享 2025-03-18 16:07 6
去年,我们推出了一个关于翻译 WordPress 不同方面的系列,重点关注现有主题或插件的国际化。
在今天的帖子中,我们将为主题和插件开发人员提供一些信息来扩展和补充该系列,即如何本地化您的主题或插件或准备翻译。
我们将看看您在创建新产品时需要做什么,以确保用户可以轻松地将它们翻译成他们自己的语言。 由于 29% 的 WordPress.com 网站使用外语,而且 WordPress 社区内的国际化日益受到重视,因此确保您的主题和插件准备好翻译比以往任何时候都更加重要。
因此,让我们详细了解该过程,以确保在创建主题和插件时使用正确的功能和方法。
在本文中,我们将介绍:
__()
_e()
_n()
sprintf()
功能_x()
, _ex()
和 _nx()
您需要做的第一件事是定义您的文本域。
什么是文本域? 文本域是一种标记属于一起的翻译的方式。 它使语言文件更具可移植性、模块化和可读性。
命名文本域是一件简单的事情,因为插件/主题的命名决定了它是什么。 文本域应该与您的主题或插件的 slug 匹配,这通常是它所在文件夹的名称。
对于即将到来的二十五主题 姓名 主题当然是二十五。 这 蛞蝓 - 这是文件夹的名称 - 是“二十五”。 由于文本域必须与 slug 相同,因此 文本域 也是“二十五”。
您需要显示您的文本域的第一个地方是您的主题或插件的初始评论块。 这用于定义插件的基本属性,如作者姓名、插件名称、主题标签等。 确保也添加“文本域”属性。 这是 25 岁的评论区 style.css
文件。
大多数开发人员都知道,要翻译字符串,您应该将它们包装在 __()
函数返回它们或 _e()
功能来呼应它们。 实际上,还有 11 种功能可以用于完美翻译,但在大多数情况下,您确实会使用上述两个。
让我们来看看我们所有的选项以及它们的用途:
__()
这是最基本的翻译功能之一。 像它的许多兄弟一样,它需要两个参数:要翻译的字符串和文本域。
当您想要标记一个简单的字符串进行翻译并返回值以在其他地方使用时使用它。 这在函数中经常出现——想想注册帖子类型。 在下面的 Codex 示例中,您可以看到数组的所有成员是如何标记为进行翻译的:
_e()
这与上面的函数几乎相同,只是它回显了值。 在 HTML 内容目录中翻译时可以使用它:
_n()
当翻译带有条件复数的字符串时使用此功能。 这意味着您事先不知道字符串是使用复数形式还是单数形式,因为它取决于某些参数的瞬时值。 一个很好的例子是评论计数。
例如,如果评论计数为 1,则您需要使用单数形式:“一条评论”。 如果评论数为 0 或多于 1,您将使用复数形式:“许多评论”。 这可以使用 _n()
功能。
它有四个参数:单数形式、复数形式、要检查的数字和文本域:
sprintf()
功能sprintf()
是一个原生的PHP函数,用来根据一些参数输出一个格式化的字符串。 它与一些经常使用变量的更复杂的翻译一起使用。 这是它的一般外观:
两个最常见的占位符是 %s
对于字符串和 %d
对于整数。 如果您使用这些占位符,则需要将尽可能多的附加参数传递给 sprintf
作为您正在使用的占位符的数量。 也可以索引占位符以首先使用第二个占位符,依此类推。 有关此函数的高级用法,请查看 PHP 文档。
为了使我们上面的翻译示例更好一点,我们可以使用 0 值 _n()
再加上 sprintf()
.
在这个例子中,使用 $comment_count
变量可能有点混乱。 内使用时 _n()
函数我们根据它的值确定使用哪个版本,单数或复数版本。 在该行后面使用时,作为第二个参数 sprintf()
我们用它的值来代替 %s
.
_x()
, _ex()
和 _nx()
存在“x”风格的功能以消除由类似翻译文本引起的任何混淆。 例如,“post”这个词被用作动词和博客中一种条目的名称。 在不同的语言中,他们可能会使用两个非常不同的词。 为了区分它们,我们使用 _x()
添加上下文并返回结果, _ex()
添加上下文并回显结果 _nx()
为复数翻译添加上下文。
有两组三个函数用于转义翻译的字符串。 一组负责属性中使用的字符串,另一组负责 HTML 的转义。 他们来了:
esc_attr__()
esc_attr_e()
esc_attr_n()
esc_html__()
esc_html_e()
esc_html_n()
因为我们已经查看了所有这些类型的函数,所以它们应该是非常不言自明的。 这是一个简单的例子:
这个函数的名字不是很好,只在某些情况下才有用,这使得解释起来非常困难。 _n_noop()
和 _nx_noop()
注册要翻译的字符串,但他们不会立即翻译。
英语非常简单,因为有一种单数和一种复数形式。 在其他语言中——比如俄语——并不是那么简单。 Nooped 函数允许您将翻译与它们的使用分开注册。 实际输出是使用 translate_nooped_plural()
功能。 Codex 提供了一个很好的例子来说明它是如何工作的:
Javascript没有翻译功能,但使用巧妙的 wp_localize_script()
功能我们可以在服务器端完成。 我们的想法是创建一个字符串对象,并通过将其添加到我们的文档中将其传递给我们的脚本。 如果有可用的翻译文件,则字符串将在输出之前进行翻译。
该脚本首先被排队,然后被本地化。 本地化函数的第一个参数是我们要本地化的脚本的名称。 第二个是用于保存字符串的唯一对象名称。 下一个参数是我们将在脚本中使用的键和值数组。 最后我们可以在 Javascript 端实现它:
为了启用我们翻译的字符串,我们需要提供一个翻译文件。 每当 WordPress 看到翻译函数时,它都会找到当前语言的翻译文件并查找函数中指定的文本。 如果找不到文本,则按原样返回。
我们需要告诉 WordPress 我们的插件/主题的翻译文件保存在哪里。 这可以使用 load_plugin_textdomain()
函数,需要挂接到 plugins_loaded
行动。
在这个阶段,一切都应该正常工作——你的 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 文件。
在我看来,国际化是 必须. 这很容易做到,没有任何借口可以将不会说或读英语的访问者排除在您的网站之外。
在本文中,我们了解了翻译的基础知识、什么是文本域、我们可以使用的功能以及如何创建翻译文件。
Demand feedback