24

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

重要提示:我对 PHP 了解不多,所以pll_register_string 函数让我很困惑。

引用自 Polylang 文档:

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

pll_register_string

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

用法:

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' => 要翻译的字符串

此致

4

4 回答 4

58

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

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

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

要在“字符串翻译”中显示字符串,请添加functions.php

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

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

于 2017-10-04T22:30:00.577 回答
10

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

所以我提出了这种方法:在functions.php插件文件的主题中,如果 polylang 被删除或更新,你可以为所需的 Polylang 函数创建包装器,如果 polylang 被删除或更新,因此 WP 不会因未定义的函数错误而崩溃。

/**
 * 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.

注意我们已经创建了带有单lpl__pl_e的函数,原始的 Polylang 函数是pll__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' );
于 2018-08-31T20:19:25.237 回答
0

这次真是万分感谢!我添加了这个设置,然后我在其他地方找到了另一个技巧,可以在 functions.php 文件中添加我的可翻译文本:

 __(pll__('string to translate'), 'text-domain')
于 2019-12-16T18:03:54.547 回答
0

嗨,有什么方法可以使用名称进行翻译吗?

add_action('init', function() {
    pll_register_string('footer-Newsletter-form', 'Subscribe to Newsletter');
});

$translated_string =  pll_translate_string('footer-Newsletter-form', $lang);
于 2020-09-07T15:21:03.077 回答