Cakephp 3 + Wordpress 中的 i18n

i18n in Cakephp 3 + Wordpress

我正在尝试以最漂亮的方式解决这个问题,我已经将 cakephp 集成到 wordpress 中或将 wordpress 集成到 cakephp 中,这取决于你如何看待它。

wordpress 安装存在于 Cakephp /webroot 目录中,首先由一些 .htaccess 欺骗程序加载,Cakephp 被映射到特定的子域或文件夹。

我在这里遇到的问题是 Cakephp 和 Wordpress i18n/translate 功能相同,function __()

我通过简单地将 CakePHP 的 __() 函数声明为 ___() 暂时解决了这个问题。

vendor/cakephp/cakephp/src/i18n/functions.php

if (!function_exists('__')) {
    /**
     * Returns a translated string if one is found; Otherwise, the submitted message.
     *
     * @param string $singular Text to translate.
     * @param mixed $args Array with arguments or multiple arguments in function.
     * @return mixed Translated string.
     * @link http://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html#__
     */
    function __($singular, $args = null)
    {
        if (!$singular) {
            return;
        }

        $arguments = func_num_args() === 2 ? (array)$args : array_slice(func_get_args(), 1);
        return I18n::translator()->translate($singular, $arguments);
    }

}
else
{
    function ___($singular, $args = null)
    {
        if (!$singular) {
            return;
        }

        $arguments = func_num_args() === 2 ? (array)$args : array_slice(func_get_args(), 1);
        return I18n::translator()->translate($singular, $arguments);
    }
}

wp-includes/i10n.php

/**
 * Retrieve the translation of $text. If there is no translation,
 * or the text domain isn't loaded, the original text is returned.
 *
 * @since 2.1.0
 *
 * @param string $text   Text to translate.
 * @param string $domain Optional. Text domain. Unique identifier for retrieving translated strings.
 * @return string Translated text.
 */
function __( $text, $domain = 'default' ) {
    return translate( $text, $domain );
}

所以我的问题是,这是解决问题的最佳方法还是我应该尝试将所有 Cakephp 翻译移动到 Wordpress?不太喜欢更改 Cakephp Core,因为它会在更新时崩溃。有任何想法吗?

为什么不在加载cakephp核心之前声明函数?也就是说,在声明翻译函数的 wordpress 中加载文件,然后声明对 cakephp 函数的覆盖。

include wordpress/file_having_translation_functions;
function ___(...) {
    return I18n::...;
}