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

时间:2017-10-04 06:03:04

标签: php wordpress string 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   文件适用于主题)。可以注册空字符串(for   例如,当它们来自选项时)但它们不会出现在列表中   表

     

用法:

     

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'=> transla的字符串

祝你好运

4 个答案:

答案 0 :(得分:16)

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

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

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

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

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

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

答案 1 :(得分:2)

如Polylang docs所说,最好先检查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.

注意,我们已经在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' );

答案 2 :(得分:0)

谢谢你! 我添加了此设置,然后在其他地方找到了另一个技巧,将我的可翻译文本添加到functions.php文件中:

 __(pll__('string to translate'), 'text-domain')

答案 3 :(得分:0)

您好,有什么方法可以使用名称翻译?

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

$translated_string =  pll_translate_string('footer-Newsletter-form', $lang);