我的问题:我正在使用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的字符串
祝你好运
答案 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.
注意,我们已经在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' );
答案 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);