使Wordpress PHP变量可翻译

使Wordpress PHP变量可翻译,php,wordpress,wordpress-theming,translation,Php,Wordpress,Wordpress Theming,Translation,我再一次有一个关于WordPress和PHP的问题。事实上,它与WordPress并不完全相关,但在这种背景下思考它会让它更容易理解 我开发了一个框架,应该使主题开发尽可能容易。因此,我想让一个主题可以自动翻译。使用框架的开发人员不应该每次将字符串传递到某个位置时都使用_(…) 问题是PHP gettext函数无法通过设计处理变量。这确实是有道理的,因为动态内容无法翻译,而且还需要翻译生成器不仅解析脚本文件,还需要执行脚本文件——但在内容以某种方式固定(至少与PHP中的字符串一样固定)的情况下,

我再一次有一个关于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."
);
以下是我的目标:

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\u侧边栏(
排列(
“名称”=>(此->名称),
'id'=>this->id,
“description”=\uuu($this->description),
'在小部件'=>''之前,
'在小部件'=>''之后
)
);
你知道有什么干净方便的方法来实现这一点吗?
提前谢谢

我知道你想做什么,但是你不能*像这样解决你的问题:

new EaseWidgetArea(
    "Notificationbar",
    "notificationbar",
    "Top bar supposed to hold emergency information."
);
然而,你能做的是:

new EaseWidgetArea(
    __("Notificationbar"),
    __("notificationbar"),
    __("Top bar supposed to hold emergency information.")
);
为此,您必须找到
\uu
函数,这是``translate()`的别名。位于

在这种情况下,您可以按照自己的意愿自动进行翻译,这样做的另一个好处是,其他使用
\uuu()
的开发人员的软件仍然可以工作

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

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

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

      编辑:
      另一种方法是创建一个必备插件,然后使用它自动检查主题文件夹中的所有字符串,然后只替换没有包装函数的字符串。您可以向这个插件添加一些钩子,以便在主题更新或激活时自动运行。一旦字符串被替换,它还可以运行插件,比如,开发者/用户可以通过管理面板本身翻译字符串。这样就不会出现性能下降,他们也不必在工作流程中使用咕噜声/咕噜声。

      谢谢您的建议!我考虑过这一点,但正如你自己指出的,这不是一个真正的解决方案,更像是一种妥协。正如你所说;永远不要说不行!;-)谢谢你的回答,但我认为这并不能解决我原来的问题。我想让框架用户的开发更容易,而不是我。因此,使用咕噜声或咕噜声实际上不是一种选择。您的第一个解决方案可能会奏效,但由于性能大幅下降,这不是一条可行之路……这确实很有趣:),另一个想法刚刚在我脑海中闪过,它可能不是您想要的,但您可以签出我的编辑。