首页 >CMS教程 >WordPress >WordPress I18N:准备您的插件翻译

WordPress I18N:准备您的插件翻译

Jennifer Aniston
Jennifer Aniston原创
2025-02-19 12:37:11308浏览

WordPress I18N:准备您的插件翻译

在上一篇文章中,我涵盖了WordPress国际化的基本原理(缩写为I18N);如何安装WordPress的本地化版本以及如何轻松将现有WordPress站点转换为本地化版本。 在本文中,我将引导您完成WordPress插件的国际化过程。该过程并不困难,一旦获取知识,您就可以将WordPress插件轻松翻译成其他语言。

钥匙要点

国际化(I18N)是开发插件以容易翻译成其他语言的过程,而本地化(L10N)是将国际化插件转换为新语言的随后过程。

>“准备WordPress插件”翻译对于吸引全球受众,增强用户体验并通过使使用不同语言的用户可以访问用户群至关重要。

>
    准备翻译的插件的过程涉及设置翻译标题(文本域和域路径),加载文本域以及国际化各种元素,例如字符串,占位符,占位符,html,html,plurals,proceponts,context and context and casting translation strings。 >
  • > WordPress I18N使用GNU getText本地化框架,该框架提供了翻译文本的工具。这涉及将所有文本字符串包装在__()或_e()函数中,并创建.pot(Portable Object Template)文件,该文件包含插件中的所有可翻译字符串。
  • 国际化和本地化之间的差异
  • 多年来,开发人员倾向于误解这些术语的含义 - 国际化和本地化。
  • 国际化是开发插件的过程,因此可以轻松地翻译成其他语言。>
  • >本地化描述了将国际化插件转换为新语言的后续过程。
>值得注意的是,国际化通常被缩写为I18N(因为“ i”和“ n'之间有18个字母),并且本地化被缩写为L10N(因为“ L”和“ L'和之间有10个字母) 'n'。)

为什么国际化?

答案很简单; WordPress以许多不同的语言在世界范围内使用。当插件被国际化时,它们会吸引来自世界其他地区的较大受众,他们显然会通过使用自己的语言使用插件来受益。
    > 作为开发人员,您可能没有时间提供插件的本地版本,因为您不会说其他语言。但是,当您国际化插件时,您会为他人打开大门,以创建本地化而不一定要修改源代码。
  • 插件国际化

    >现在我们已经熟悉了插件国际化和本地化的概念,让我们开始研究准备翻译的插件的过程。

    >

    >设置翻译头

    进行插件可翻译的第一步是在插件标题中包含翻译标题。

    翻译标题是文本域和域路径。>

    >文本域用于表示属于插件的所有文本。 这是一个唯一的标识符,可确保WordPress可以区分所有加载的翻译。这增加了可移植性,并且使用已经存在的WordPress工具可以更好地发挥作用。

    >

    >文本域必须匹配插件的slug。例如,如果您的插件是一个称为sample-plugin.php的单个文件,或者它包含在称为sample-plugin的文件夹中,则应为sample-plugin。

    >文本域上的注释 文本域名必须使用破折号而不是下划线。

    >还记得我说过文本域必须与插件slug匹配吗?毕竟这可能不是真的。我对我的一个插件进行了快速实验,而不是插件的插件,我使用了一个唯一的文本,并且没有任何问题。

    道德:确保文本域是唯一的,以免与其他插件相冲突。

    >

    域路径是文件夹WordPress将搜索.mo Translation Files。

    默认情况下,WordPress搜索要使用的翻译文件的插件目录。将翻译文件放在插件的根文件夹中可能会使您的插件结构混乱。

    > 例如,如果您想将翻译文件保存在文件夹中,例如; /语言,您需要使用域路径标头通知WordPress。

    下面是WordPress插件的典型标题。

    >加载文本域

    >现在,我们将使用load_plugin_textdomain()函数告诉WordPress如果使用用户的语言,请加载翻译文件。

    >

    以下是函数概要。

    第一个参数$域应该是文本域; $ abs_rel_path已被弃用,应设置为false;最后,$ plugin_rel_path是翻译文件的相对路径。

    <span><span><?php
    </span></span><span><span>/*
    </span></span><span><span> Plugin Name: Enable Shortcode and PHP in Text widget
    </span></span><span><span> Plugin URI: http://w3guy.com/shortcode-php-support-wordpress-text-widget/
    </span></span><span><span> Description: Enable shortcode support and execute PHP in WordPress's Text Widget
    </span></span><span><span> Author: Agbonghama Collins
    </span></span><span><span> Version: 1.2
    </span></span><span><span> Author URI: http://w3guy.com
    </span></span><span><span> Text Domain: espw-plugin
    </span></span><span><span> Domain Path: /languages/
    </span></span><span><span> */</span></span>
    如果翻译mo文件在插件自己的目录中,则使用如下:>

    如果翻译mo文件在插件的语言子目录中。使用如下:

    >您不仅要调用load_plugin_textdomain函数,还应在插件中以插件_loaded这样的操作在插件中调用:

    >
    <span><span><?php load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) ?></span></span>

    >深入研究插件i18n

    >现在设置了文本域和域路径标头,是时候学习如何国际化插件了。

    <span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) );</span>
    该教程的这一段将分为以下:
    1. >字符串翻译
    2. 使用占位符
    3. html翻译
    4. 与复数打交道
    5. 通过上下文
    6. 逃脱翻译字符串

    请注意:字符串ESPW-Plugin将在本教程中用作文本域。

    1。字符串翻译

    要在插件中翻译一个字符串,请将原始字符串包装在__()函数调用中如下:
    <span><span><?php
    </span></span><span><span>/*
    </span></span><span><span> Plugin Name: Enable Shortcode and PHP in Text widget
    </span></span><span><span> Plugin URI: http://w3guy.com/shortcode-php-support-wordpress-text-widget/
    </span></span><span><span> Description: Enable shortcode support and execute PHP in WordPress's Text Widget
    </span></span><span><span> Author: Agbonghama Collins
    </span></span><span><span> Version: 1.2
    </span></span><span><span> Author URI: http://w3guy.com
    </span></span><span><span> Text Domain: espw-plugin
    </span></span><span><span> Domain Path: /languages/
    </span></span><span><span> */</span></span>

    如果您想将字符串与浏览器相呼应,而不是Echo语言构造,请使用_e函数:
    <span><span><?php load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) ?></span></span>

    2。使用占位符

    作为PHP和WordPress开发人员,我认为您知道什么是占位符。您可以快速浏览Sprintf和printf()PHP文档以获取更多信息。

    如果您在字符串中使用变量,例如下面的示例,则应使用占位符。

    >
    <span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) );</span>

    正确的方法是使用printf()函数如下:

    >
    <span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );</span>

    浏览WordPress插件存储库中某些插件的代码,我确实看到了这样的内容:

    >
    <span>function load_plugin_textdomain() {
    </span>  <span>load_plugin_textdomain( 'espw-plugin', FALSE, basename( dirname( __FILE__ ) ) . '/languages/' );
    </span><span>}
    </span>
    <span>add_action( 'plugins_loaded', 'load_plugin_textdomain' );</span>
    <span>$text =  __( 'Hello, SitePoint Readers!', 'espw-plugin' );</span>

    尽管现在可以翻译字符串,但php变量$ city也可以翻译。

    这是一个不好的做法,因为翻译器可能会错误地将变量或将恶意代码更改为插件代码库,这最终将导致插件故障。

    sprintf函数与printf相似,因为他们使用占位符格式字符串,而printf输出格式的字符串,sprintf返回字符串。

    >示例:以下代码将格式的字符串分配给变量$ text。

    3。 html翻译

    <span>_e( 'Hello, SitePoint Readers!', 'espw-plugin' );</span>
    在可翻译字符串中包括HTML取决于上下文。>

    一个示例是一个链接(与周围的文本分开):>

    另一个示例是段落中的链接(未与周围的文本分开):

    4。处理复数

    >当可以使用_n()函数国际化的项目数量时,该字符串会更改。
    <span>echo 'Your city is $city.'</span>
    >
    <span>printf(
    </span>    <span>__( 'Your city is %s.', 'espw-plugin' ),
    </span>    <span>$city
    </span><span>);</span>
    此函数接受4个参数,即:

    >

    单数 - 字符串的单数形式

    >

    复数 - 字符串的复数形式

      计数 - 将确定是否应返回单数或复数形式的对象数量
    • >文本域 - 插件文本域
    • >让我们来了解一些示例,以理解_n()函数的工作方式。
    • 在英语中,您有“一个评论”和“两个评论”。在其他语言中,您可以具有多种复数形式。
    • 下面的代码演示了如何使用_n()函数来处理此类情况。
    • >
    代码说明上面的代码由这三个函数组成-printf,_n和number_format_i18n。

    >易于同化,将用所述的每个函数组件剖析功能代码。
    <span><span><?php
    </span></span><span><span>/*
    </span></span><span><span> Plugin Name: Enable Shortcode and PHP in Text widget
    </span></span><span><span> Plugin URI: http://w3guy.com/shortcode-php-support-wordpress-text-widget/
    </span></span><span><span> Description: Enable shortcode support and execute PHP in WordPress's Text Widget
    </span></span><span><span> Author: Agbonghama Collins
    </span></span><span><span> Version: 1.2
    </span></span><span><span> Author URI: http://w3guy.com
    </span></span><span><span> Text Domain: espw-plugin
    </span></span><span><span> Domain Path: /languages/
    </span></span><span><span> */</span></span>

    第一个参数传递给_n函数是当评论数是单数时要显示的文本。

    第二个是当评论数大于一个时显示的文本。>

    占位符%s将包含number_format_i18n(get_comments_number())的值。

    第三个参数get_comments_number()被认为是返回注释计数的函数。

    如果它返回1,则第一个参数一个注释将由printf输出,否则第二个参数%s如果大于1。

    请注意:占位符%s被Number_format_i18n返回的整数(get_comments_number()),这是传递给printf函数的第二个参数。

    >最后,第四个参数是翻译

    文本域

    >。

    >函数number_format_i18n()根据语言环境将注释计数转换为格式。有关更多信息,请参见文档。

    >类似于number_format_i18n()是基于时间戳的局部格式的日期。 仍在_n()函数上,下面是该函数如何工作的另一个演示。

    >如果变量$ count返回1,我们将显示一条垃圾邮件消息的文本;但是,如果它大于1,我们将删除%d垃圾邮件消息,占位符%d被$ count的整数替换。

    >

    5。通过上下文

    歧义

    >有时在几种情况下使用一个术语,尽管它是英语中的一个和相同的单词,它必须以其他语言的方式翻译不同。

    >

    例如,单词帖子可以用作动词,例如“单击此处以发布您的评论”和名词“编辑此帖子”。
    <span><span><?php load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) ?></span></span>
    >

    在这种情况下,应使用_x或_ex函数。

    >

    它类似于__()和_e(),但是它有一个额外的参数 - $上下文。

    在两种情况下,使用此方法都使用此方法,我们将获得原始版本的字符串注释,但是翻译人员将在不同的上下文中看到两个评论字符串。

    >当通过poedit等翻译工具(例如poedit)解析函数_x()的字符串时,上下文参数为翻译器提供了在上下文上使用字符串/文本的提示。 在德语中,作为一个名词的帖子是beitrag,而动词为词。

    > 下面的

    是Poedit的屏幕截图,将字符串柱翻译为德语,并带有上下文平方。

    _x()检索翻译的字符串,_ex()显示它。

    >
    <span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) );</span>
    6。逃避翻译字符串

    具有许多用于验证和消毒数据的功能。

    列表中的

    是用于逃脱翻译文本的函数 - esc_html(),ESC_HTML_E(),ESC_HTML_X(),ESC_ATTR(),ESC_ATTR_E()和ESC_ATTR_E()和ESC_ATTR_X()。您可以在WordPress codex中获取有关这些功能的更多信息。

    >我不需要解释其中的每一个,但是他们所做的基本上是逃脱可翻译的文本。

    总结

    WordPress的目标之一是使世界各地的用户轻松发布内容。作为插件开发人员,您可以在国际化插件时帮助进一步简化用户的发布流程。

    >

    >本教程的第一部分本质上是关于您需要了解的有关插件I18N的所有内容。

    >结论部分将是关于如何准备插件翻译以及学习如何将插件定位到新语言的演练。

    >

    我希望您从本教程中学到了新知识。

    >

    >快乐编码!

    经常询问有关WordPress I18N和插件翻译的问题(常见问题解答)

    >使WordPress插件准备就绪?

    >使WordPress插件转换准备就绪对于吸引全球受众至关重要的重要性是什么。并非所有WordPress用户都是说英语的人。通过国际化您的插件,您可以将讲不同语言的用户访问,从而增加用户群。它还可以增强用户体验,因为用户可以用母语与您的插件进行交互,从而使其更友好。使插件的文本字符串可翻译成其他语言。这是通过将这些文本字符串包裹在一个特殊功能中,可以翻译它们来实现。 WordPress为此目的使用gnu getText本地化框架,该框架提供了一组用于翻译文本的工具。

    是哪些步骤可以使WordPress插件转换准备?插件翻译就绪涉及多个步骤。首先,您需要通过包装__()或_e()函数中的所有文本字符串来国际化插件。接下来,您需要创建一个.pot(Portable对象模板)文件,该文件包含插件中的所有可翻译字符串。该文件用作创建.po(Portable Object)和.mo(Machine Object)文件的模板,该模板包含翻译字符串。

    __()和_e()函数之间有什么区别WordPress I18N?

    __()和_e()函数都在WordPress I18N中使用,以使文本字符串可翻译。它们之间的主要区别是__()返回翻译的字符串,而_e()回声或直接输出翻译的字符串。因此,当要将翻译的字符串存储在变量中时,您将使用__(),当要向用户显示翻译字符串时_e()。

    >如何将WordPress插件转换为不同的语言?

    >将您的WordPress插件转换为不同的语言,您需要为每种语言创建.po和.mo文件。这些文件包含翻译的字符串,并根据ISO-639语言代码命名(例如,英语en_us,fr_fr,法语)。您可以使用poedit或loco等工具来创建和管理这些翻译文件。

    我可以使用哪些工具用于WordPress I18N?>

    >如何测试我的WordPress插件以进行翻译准备?可以通过更改WordPress设置中的语言并检查插件的文本字符串是否正确翻译来测试您的WordPress插件是否准备转换。您还可以使用WordPress I18N Checker插件之类的工具,该工具会检查您的插件中的常见i18n错误。

    >我如何为WordPress插件翻译贡献?

    您可以为WordPress插件翻译贡献通过WordPress Polyglots团队。他们负责将WordPress定位为不同的语言。您可以加入团队并开始将插件和主题转换为母语。

    > .pot,.po和.mo文件在WordPress I18N?

    进行WordPress主题翻译准备涉及与插件类似的过程。您需要通过将所有文本字符串包装在__()或_e()函数中来国际化主题。然后,您需要创建一个.pot文件并将其用作为每种语言创建.po和.mo文件的模板。

以上是WordPress I18N:准备您的插件翻译的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn