我的问题:我正在使用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'=>要翻译的字符串
最好的祝福
您必须先注册所有这些字符串才能进行翻译。
例如,您在某些模板文件中回显“Hello world”,如下所示:
<?php pll_e('Hello world'); ?>
要在“字符串翻译”中显示字符串,请在functions.php
中添加:
add_action('init', function() {
pll_register_string('mytheme-hello', 'Hello world');
});
将要翻译的所有自定义字符串添加到此功能。
正如Polylang qazxsw poi所说,首先检查polylang函数是否存在是好的 - 因此站点不会破坏Polylang插件更新 - 因为它首先删除旧文件。
所以我提出这种方法:在插件文件的docsfor主题中,如果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.
和l
创建了单个pl__
的函数,而原始的Polylang函数是pl_e
和pll__
。
这些将在您的主题中用于输出或返回已翻译的字符串。
如前所述,我们必须注册这些字符串,以便Polylang知道这些字符串应该被翻译。
如果您使用主题可能最好在pll_e
钩子中初始化它们,如下所示:
after_setup_theme