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::...;
}
我正在尝试以最漂亮的方式解决这个问题,我已经将 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::...;
}