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

问题描述 投票:3回答:2

我的问题:我正在使用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'=>要翻译的字符串

最好的祝福

php wordpress string translation polylang
2个回答
16
投票

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

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

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

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

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

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


2
投票

正如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_epll__

这些将在您的主题中用于输出或返回已翻译的字符串。

如前所述,我们必须注册这些字符串,以便Polylang知道这些字符串应该被翻译。

如果您使用主题可能最好在pll_e钩子中初始化它们,如下所示:

after_setup_theme
© www.soinside.com 2019 - 2024. All rights reserved.