使Wordpress PHP变量可翻译

时间:2015-11-16 12:28:08

标签: php wordpress wordpress-theming translation

我再次提出有关WordPress和PHP的问题。事实上,它并不完全与WordPress有关,但在这种情况下对它的思考使其更容易理解。

我开发了一个框架,可以让主题开发尽可能简单。因此,我想让主题自动翻译。使用框架的开发人员不应该在每次将字符串传递到某个地方时使用__(...)。

问题是PHP gettext函数无法按设计处理变量。这确实很有意义,因为动态内容无法翻译,并且还需要翻译生成器不仅要解析,而且还要执行脚本文件 - 但是在内容以某种方式修复的情况下(至少固定为PHP中的字符串将是。)

以下是开发人员目前要做的事情的示例:

new EaseWidgetArea(
    __('Notificationbar', 'themedomain'),
    "notificationbar",
    __("Top bar supposed to hold emergency information.", 'themedomain')
);

以下是我的目标:

new EaseWidgetArea(
    "Notificationbar",
    "notificationbar",
    "Top bar supposed to hold emergency information."
);

在最终注册小部件区域的类方法中:

register_sidebar(
    array(
        'name' => __($this->name),
        'id' => $this->id,
        'description' = __($this->description),
        'before_widget' => '<div class="widgetarea">',
        'after_widget' => '</div>'
    )
);

你知道任何干净方便的方法吗? 提前谢谢!

2 个答案:

答案 0 :(得分:1)

我知道你要做什么,但你不能解决你的问题:

new EaseWidgetArea(
    "Notificationbar",
    "notificationbar",
    "Top bar supposed to hold emergency information."
);

>可以做的是:

new EaseWidgetArea(
    __("Notificationbar"),
    __("notificationbar"),
    __("Top bar supposed to hold emergency information.")
);

要做到这一点,你必须找到__函数,这是``translate()`的别名。它位于l10n.php

在这种情况下,您可以根据需要自动执行翻译,这样做的另一个好处是,确实使用 __()的其他开发人员的软件仍然有效。

  • 永远不要说不能吗?但是,在这种情况下,这意味着你必须在Wordpress中运行每一个函数,这将花费你至少2225年。

答案 1 :(得分:1)

可能有一些方法可能实现。例如,扩展一个类方法,然后使用fetch_all_args,并在.po文件中搜索该字符串,然后将其发送回原始方法。但是应该避免这些,因为它可能会降低你的性能并添加一个简单的__()是值得的。

但有一种方法可能值得研究。您可能已在主题开发工作流程中使用 grunt或gulp ,因此您可以使用它自动将所有字符串替换为该字符串的本地化版本。因为您只是将它用于主题开发,所以您只需添加主题路径并使gulp监视对任何文件所做的任何更改。现在,只要对该目录中的任何文件进行任何更改,它就会自动使用本地化字符串替换您的字符串。或者你可以在整个主题开发完成后做。这样你就不必做任何额外的工作,你的服务器也不会做任何额外的计算,你的主题仍将使用官方功能。

修改 另一种方法是创建一个必须拥有的插件,然后使用它来自动检查主题文件夹中的所有字符串,然后只更换没有包装函数__()的字符串。您可以为此插件添加一些钩子,以自动在主题更新或激活上运行。一旦字符串被替换,它也可以运行像LOCO这样的插件,开发人员/用户可以通过管理面板本身翻译字符串。这样就不会有性能下降,也不会在工作流程中使用grunt / gulp。