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

时间:2015-11-10 07:31:10

标签: wordpress internationalization poedit mo

我对加载我的主题.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)。

欢呼声

1 个答案:

答案 0 :(得分:0)

好的,我发现我在POEdit中滥用了Context属性,好像它是一个域。 我被另一篇认为它会像那样工作的帖子感到困惑。 好吧它没有。

所以我做了@VáclavSlavík推荐的内容并将_e和__函数包装到我自己的函数中,以便POEdit可以搜索那些结束我不会在我的文件中获得Roots语言标记。 问题解决了。 它也从Wordpress的默认语言文件夹加载,它都与上下文/域混淆有关。

相关问题