Polylang:如何翻译自定义字符串?

2022-08-30 17:28:13

我的问题:我正在使用Polylang翻译我的网站,但我很难进行自定义字符串翻译。字符串不会显示在WP仪表板的“字符串翻译”菜单中。

重要:我对PHP了解不多,所以pll_register_string函数对我来说非常混乱。

引自Polylang文档:

https://polylang.wordpress.com/documentation/documentation-for-developers/functions-reference/

pll_register_string

允许插件在“字符串翻译”面板中添加自己的字符串。必须在管理端调用该函数(函数.php文件对于主题是 OK)。可以注册空字符串(例如,当它们来自选项时),但它们不会出现在列表表中。

用法:

pll_register_string($name、$string、$group、$multiline);'$name' =>(必填)名称,为便于排序而提供(例如:'myplugin') '$string' =>(必填)要翻译 '$group' 的字符串 =>(可选)注册字符串的组,默认为 'polylang' '$multiline' =>(可选)如果设置为 true,则翻译文本字段将为多行,默认为 false

pll__

翻译以前在pll_register_string用法中注册的字符串:

pll__($string);唯一参数是必需的:

“$string” = >要翻译的字符串返回已翻译的字符串。

pll_e

回显以前注册到pll_register_string用法的已翻译字符串:

pll_e($string);唯一参数是必需的:

'$string' =>字符串转译

此致敬意


答案 1

您必须首先注册所有这些字符串以进行翻译。

例如,您在一些模板文件中回显“Hello world”,如下所示:

<?php pll_e('Hello world'); ?>

要在“字符串翻译”中显示字符串,请在您的:functions.php

add_action('init', function() {
  pll_register_string('mytheme-hello', 'Hello world');
});

将要翻译的所有自定义字符串添加到此函数。


答案 2

正如Polylang文档所说,最好先检查polylang函数是否存在 - 因此站点不会在Polylang插件更新时中断 - 因为它首先删除旧文件。

所以我建议这种方法:对于插件文件中的主题,您可以为所需的Polylang函数创建包装器,如果polylang被删除或更新,则可以使用回退,以便WP不会因未定义的函数错误而崩溃。functions.php

/**
 * Outputs localized string if polylang exists or  output's not translated one as a fallback
 *
 * @param $string
 *
 * @return  void
 */
function pl_e( $string = '' ) {
    if ( function_exists( 'pll_e' ) ) {
        pll_e( $string );
    } else {
        echo $string;
    }
}

/**
 * Returns translated string if polylang exists or  output's not translated one as a fallback
 *
 * @param $string
 *
 * @return string
 */
function pl__( $string = '' ) {
    if ( function_exists( 'pll__' ) ) {
        return pll__( $string );
    }

    return $string;
}

// these function prefixes can be either you are comfortable with.

注意:我们创建了具有单一 in 和原始 Polylang 函数的函数,并且是 和 。lpl__pl_epll__pll_e

这些将在您的主题中用于输出或返回已翻译的字符串。

如前所述,我们必须注册这些字符串,以便Polylang知道这些字符串应该被翻译。

如果你使用主题,那么最好在钩子中初始化它们,如下所示:after_setup_theme

function your_prefix_after_setup_theme() {

   // register our translatable strings - again first check if function exists.

    if ( function_exists( 'pll_register_string' ) ) {

        pll_register_string( 'ToggleNavigation', 'Toggle navigation', 'YourThemeName', false );

        pll_register_string( 'ToggleSearch', 'Toggle Search', 'YourThemeName', false );

        pll_register_string('404Message', 'It looks like nothing was found. Try getting back to the <a href="%s">home page</a>.', 'YourThemeName', true);

    }
}
 add_action( 'after_setup_theme', 'your_prefix_after_setup_theme' );

推荐