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

MIk*_*eMo 6 php string wordpress translation polylang

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

重要提示:我对PHP 知之甚少,所以pll_register_string函数对我来说非常困惑.

引自Polylang doc:

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

pll_e

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

pll_e($字符串); 唯一参数是必需的:

'$ string'=>要翻译的字符串

最好的祝福

dra*_*ski 24

您必须先注册所有这些字符串才能进行翻译.

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

<?php pll_e('Hello world'); ?>
Run Code Online (Sandbox Code Playgroud)

要在"字符串翻译"中显示字符串,请在以下位置添加functions.php:

add_action('init', function() {
  pll_register_string('mytheme-hello', 'Hello world');
});
Run Code Online (Sandbox Code Playgroud)

将要翻译的所有自定义字符串添加到此功能.

  • 有没有办法自动检测这些蜇伤?我之前使用过 WPML,然后这样做了,例如: `&lt;?php _e('Here the string text', 'my-string-group'); ?&gt;` 然后我被 WPML 认可了... (3认同)
  • 对于那些感兴趣的人,我使用了一个额外的字符串翻译插件。请参阅:https://wordpress.org/plugins/theme-translation-for-polylang/ (3认同)

Mik*_*oot 10

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

所以我提出了这种方法:在functions.php你的插件文件的主题中,如果 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.
Run Code Online (Sandbox Code Playgroud)

注意我们已经创建了具有单l输入pl__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' );
Run Code Online (Sandbox Code Playgroud)