i18N Wordpress使用mo文件不接受上下文

i18N Wordpress使用mo文件不接受上下文,wordpress,internationalization,poedit,mo,Wordpress,Internationalization,Poedit,Mo,我对加载我的themes.MO文件感到有点困惑。 我在谷歌上做了很多搜索,我得到了一个可行的版本,但我不明白为什么 首先,我在主题CSS文件中设置了我的文本域: Text Domain: beauty 我从根主题开始,它执行after_setup_主题,并在那里加载MO文件: load_theme_textdomain('beauty', get_template_directory() . '/lang'); 此MO文件具有“beauty”上下文和“roots”上下文。

我对加载我的themes.MO文件感到有点困惑。 我在谷歌上做了很多搜索,我得到了一个可行的版本,但我不明白为什么

首先,我在主题CSS文件中设置了我的文本域:

Text Domain:        beauty
我从根主题开始,它执行after_setup_主题,并在那里加载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
我的网站上有两个本地人,nl_nl和en_UK。这是使用WPML设置的,并且已正确加载。 我在主题的
lang
文件夹中有一个nl_nl.mo和一个en_UK.mo文件

所以,这一切看起来都很好

但是,在my header.php中,我有一个登录锚:

<a href="<?php echo $login_url; ?>" target="_self"><?php _e( 'Inloggen', 'beauty' ); ?></a>
然而,当我在wp content/languages/themes中使用我的MO/PO文件时,它不起作用,但它可能与我在上下文中遇到的相同问题有关(问题1)


干杯

好吧,我发现我滥用了POEdit中的Context属性,就好像它是一个域一样。 我被另一篇文章弄糊涂了,认为它会像那样工作。 但事实并非如此

所以我按照@Václav Slavík的建议做了,并将_e和___)函数包装到了我自己的函数中,这样POEdit就可以搜索那些我不会在我的文件中得到根语言标记的结果。 问题解决了。
它也从Wordpress的默认语言文件夹加载,这都与上下文/域混淆有关。

如果我没记错的话,你的lang文件夹(英语文件夹)中应该有一个默认的po/mo文件,翻译应该只有nl.po/.mo(所以不是nl_nl.po/.mo)。有了它,您应该已经加载了已翻译的字符串,但即使这样,您也可以在WPML本身中进行字符串翻译,不是吗?是的,我可以在WPML中进行字符串翻译,但我喜欢MO文件与DB调用相比获得翻译的快速性。在我读过的所有文档中,明确指出文件应该命名为locale、nl_nl或uk_GB、uk_IRL等。我知道当我尝试将主题翻译为克罗地亚语(hr_hr)时,当我尝试
hr_hr.po/.mo
时,主题没有接受我的翻译。但当我将它重命名为
hr.po/.mo
时,它确实起了作用。我想我已经知道它为什么不起作用了,因为我把上下文和域混淆了。我会看看我的情况,重构它,然后发回
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