我正在使用Woocommerce建立一个多语言网站。
客户端要求我更改Sale Flash文本,经过一些研究后我发现了这段代码
add_filter('woocommerce_sale_flash', 'avia_change_sale_content', 10, 3);
function avia_change_sale_content($content, $post, $product){
$content = '<span class="onsale">'.__( 'Sale custom text!', 'woocommerce' ).'</span>';
return $content;
}
它运作得很好,但它也改变了德语和西班牙语文本 - 用英语替换它。
我检查了WPML字符串(希望通过该系统翻译它),但在那里找不到它。
有谁知道我必须设置什么过滤器来创建英语,西班牙语和德语的自定义Flash销售文本
由于
答案 0 :(得分:1)
您正在正确替换文本,但问题是在WooCommerce提供的语言文件中找不到新字符串。该插件将加载一个名为"woocommerce"
的域,然后在必要时用于定位字符串及其翻译。您正在将文字传递到__()
(more info on __()', '_e()
, _x()
, _n()
),但由于您的文字是新的,因此在WooCommerce提供的词典中找不到,因此默认为英文。
// the __() function can't find 'Sale custom text' in the 'woocommerce' text domain,
// so it does not translate.
__( 'Sale custom text!', 'woocommerce' )
要翻译此文本,您需要加载自己的语言文件和文本域,并使用自定义域将文本传递到__()
。
如何执行此操作的简短版本:
使用自定义文本域
// load text from 'my_text_domain'
__( 'Sale custom text!', 'my_text_domain' )
下载并安装PoEdit以创建* .po语言文件。它具有扫描PHP文件以查找翻译条目的选项,并将它们添加到您的字典中。互联网上有关于此的教程。
languages
的文件夹(这应该是Child Theme,以便更新不会覆盖您的工作)或插件目录(如果您正在以这种方式进行自定义) 更新您的functions.php
(或其他插件等)以加载自定义文本域。确保使用适当的路径,这假定它在主题中。
function load_textdomain_my_text_domain() {
$language_dir = get_template_directory() . '/languages/';
load_plugin_textdomain( 'my_text_domain', false, $language_dir );
}
add_action( 'plugins_loaded', 'load_textdomain_my_text_domain' );
使用我编写的插件在插件中执行此操作的示例:
/languages
directory。__()
using the custom text domain传递的文字。