我对加载我的主题 .MO 文件有点困惑。我在谷歌上做了很多搜索,我得到了一个可以工作的版本,但我不明白为什么。
首先,我在主题 CSS 文件中设置了我的文本域:
Text Domain: beauty
我从 Roots 主题开始,它执行 after_setup_theme 并在那里加载 MO 文件:
load_theme_textdomain('beauty', get_template_directory() . '/lang');
这个 MO 文件有一个 'beauty' 上下文和一个 'roots' 上下文。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 设置并正确加载的。我在主题文件夹中有一个 nl_NL.mo 和一个 en_UK.mo 文件lang
。
所以,这一切看起来都不错。
但是,在我的 header.php 中,我有一个登录锚点:
<a href="<?php echo $login_url; ?>" target="_self"><?php _e( 'Inloggen', 'beauty' ); ?></a>
在我的理解中应该加载上下文'beauty'和关键'Inloggen'。
因此,当我在我的语言环境 nl_UK 中时,它不起作用,我看到的是标准荷兰语文本“Inloggen”而不是“登录”。
奇怪的是,当我msgctxt "beauty"
从 PO 文件中删除上下文并将其保存以创建新的 MO 文件时,它确实有效。
我之前在我的插件中使用过上下文,load_textdomain
用于加载 MO 文件并且效果很好。
我想使用上下文的原因是因为一个文件包含 Roots 和 Beauty 相关的文本,而我只对 Beauty 文本感兴趣。我不想删除_e
Roots 主题的所有条目,所以当我加载源时它不会出现。
所以这是一个问题。
问题 2 不那么重要,但也让我感到困惑:当我查看主题为 205 的示例时,它们的 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 文件提供语言环境的名称,而不是上下文名称 + 语言环境的名称。
在这个不错的文档(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)。
干杯