我对加载我的主题.MO文件感到有些困惑。 我在google上做了很多搜索,但我得到了一个版本,但我不明白为什么。
首先,我在主题CSS文件中设置了我的文本域:
Text Domain: beauty
我开始使用Roots主题,它执行after_setup_theme并在那里加载MO文件:
load_theme_textdomain('beauty', get_template_directory() . '/lang');
此MO文件具有“美丽”上下文和“根”上下文。
MO文件正在加载,因为当我转储$l10n[$domain]
时,我看到我的3个值具有美丽背景。
为了空间,我只会显示一个条目:
array (size=3)
'beautyInloggen' =>
object(Translation_Entry)[218]
public 'is_plural' => boolean false
public 'context' => string 'beauty' (length=6)
public 'singular' => string 'Inloggen' (length=8)
public 'plural' => null
public 'translations' =>
array (size=1)
0 => string 'Login' (length=5)
public 'translator_comments' => string '' (length=0)
public 'extracted_comments' => string '' (length=0)
public 'references' =>
array (size=0)
empty
public 'flags' =>
array (size=0)
empty
我的网站中有2个本地人,nl_NL和en_UK。这是使用WPML设置的,并且正确加载。
我在主题的lang
文件夹中有一个nl_NL.mo和一个en_UK.mo文件。
所以,这一切看起来都不错。
但是,在我的header.php中,我有一个登录锚:
<a href="<?php echo $login_url; ?>" target="_self"><?php _e( 'Inloggen', 'beauty' ); ?></a>
在我的理解中应该加载上下文'beauty'和关键'Inloggen'。
所以,当我在我的语言环境nl_UK时,它不起作用,我看到标准的荷兰文本'Inloggen'而不是'登录'。
奇怪的是,当我从我的PO文件中删除msgctxt "beauty"
上下文并保存它以创建一个新的MO文件时,它可以正常工作。
我之前在我的插件中使用了上下文,我使用load_textdomain
来加载MO文件,并且工作正常。
我想使用上下文的原因是因为一个文件包含Roots和Beauty相关文本,我只对Beauty文本感兴趣。我不想删除Roots主题的所有_e
条目,因此在加载源代码时它不会出现。
这是一个问题。
问题2不那么重要,但也让我感到困惑:当我看到主题二十四的主题示例时,将他们的PO和MO文件放在wp-content / languages / themes /文件夹中为twentyfiftheen-nl_NL.mo。 我读了这篇很棒的文章(https://localise.biz/help/wordpress/loading-translations)和这篇文章(https://wordpress.stackexchange.com/questions/137427/themes-text-domain-language-po-file-not-working),并且明白你应该总是给MO文件指定语言环境的名称而不是contextname + locale。
在这个好文档(https://localise.biz/help/wordpress/loading-translations)中,我找到了
So in short, WordPress will look in only two places for a theme's MO file:
{absolute_path}/{locale}.mo
wp-content/languages/themes/{domain}-{locale}.mo
e.g. for twentyfourteen's French translations:
wp-content/themes/twentyfourteen/languages/fr_FR.mo
wp-content/languages/themes/twentyfourteen-fr_FR.mo
但是,当我在wp-content / languages / themes中使用我的MO / PO文件时,它无法正常工作,但它可能与我在上下文中遇到的问题有关(问题1)。
欢呼声
答案 0 :(得分:0)
好的,我发现我在POEdit中滥用了Context属性,好像它是一个域。 我被另一篇认为它会像那样工作的帖子感到困惑。 好吧它没有。
所以我做了@VáclavSlavík推荐的内容并将_e和__函数包装到我自己的函数中,以便POEdit可以搜索那些结束我不会在我的文件中获得Roots语言标记。 问题解决了。 它也从Wordpress的默认语言文件夹加载,它都与上下文/域混淆有关。