Exemplo n.º 1
0
/**
 * @param string      $context
 * @param string      $name
 * @param string|bool $original_value
 * @param bool|null   $has_translation
 * @param bool        $disable_auto_register
 *
 * @return bool|string
 */
function icl_t($context, $name, $original_value = false, &$has_translation = null, $disable_auto_register = false, $language_code = null)
{
    global $sitepress, $sitepress_settings;
    // we need this to divide static $results cache by blogs in multiblog
    $blog_id = 0;
    if (isset($GLOBALS['blog_id'])) {
        $blog_id = $GLOBALS['blog_id'];
    }
    // if the default language is not set up return
    if (!isset($sitepress_settings['existing_content_language_verified'])) {
        if (isset($has_translation)) {
            $has_translation = false;
        }
        return $original_value !== false ? $original_value : $name;
    }
    $current_language = $language_code == null ? get_current_string_language($name) : $language_code;
    $default_language = !empty($sitepress_settings['st']['strings_language']) ? $sitepress_settings['st']['strings_language'] : $sitepress->get_default_language();
    $cache_key_args = array($blog_id, $current_language, $default_language, $context, $name, $original_value);
    $cache_key = md5(json_encode($cache_key_args));
    $cache_group = '_icl_t';
    $found = false;
    $to_return = wp_cache_get($cache_key, $cache_group, false, $found);
    if ($found) {
        if ($to_return == $original_value) {
            $has_translation = false;
        } else {
            $has_translation = true;
        }
        return $to_return;
    }
    if ($current_language == $default_language && $original_value) {
        $ret_val = $original_value;
        if (isset($has_translation)) {
            $has_translation = false;
        }
    } else {
        $result = icl_t_cache_lookup($context, $name, $language_code);
        $is_string_change = _icl_is_string_change($result, $original_value);
        if (($result === false || $is_string_change) && !is_admin() && !$disable_auto_register && $context != 'Widgets') {
            static $string_registrations_per_request = 0;
            if ($string_registrations_per_request < ICL_STRING_TRANSLATION_AUTO_REGISTER_THRESHOLD) {
                // See if we should auto register the strings.
                if (isset($sitepress_settings['st']['icl_st_auto_reg'])) {
                    $auto_reg = $sitepress_settings['st']['icl_st_auto_reg'];
                } else {
                    $auto_reg = 'disable';
                }
                if ($auto_reg == 'auto-always' || $auto_reg == 'auto-admin' && current_user_can('manage_options')) {
                    icl_register_string($context, $name, $original_value);
                    $string_registrations_per_request++;
                }
            }
        }
        if ($result === false || is_array($result) && (!isset($result['value']) || isset($result['translated']) && !$result['translated'] && $original_value)) {
            $ret_val = $original_value;
            if (isset($has_translation)) {
                $has_translation = false;
            }
        } else {
            $ret_val = $result['value'];
            if (isset($has_translation)) {
                $has_translation = true;
            }
        }
    }
    wp_cache_set($cache_key, $ret_val, $cache_group);
    return $ret_val;
}
Exemplo n.º 2
0
function icl_t($context, $name, $original_value = false, &$has_translation = null, $dont_auto_register = false)
{
    global $sitepress, $sitepress_settings;
    static $results = null;
    // we need this to devide static $results cache by blogs in multiblog
    $blog_id = 0;
    if (isset($GLOBALS['blog_id'])) {
        $blog_id = $GLOBALS['blog_id'];
    }
    // if the default language is not set up return
    if (!isset($sitepress_settings['existing_content_language_verified'])) {
        if (isset($has_translation)) {
            $has_translation = false;
        }
        return $original_value !== false ? $original_value : $name;
    }
    if (defined('DOING_AJAX')) {
        $current_language = $sitepress->get_language_cookie();
    } elseif (is_admin()) {
        $current_language = $sitepress->get_admin_language();
    } else {
        $current_language = $sitepress->get_current_language();
    }
    $default_language = !empty($sitepress_settings['st']['strings_language']) ? $sitepress_settings['st']['strings_language'] : $sitepress->get_default_language();
    if (isset($results[$blog_id][$context][$name][$current_language])) {
        if ($results[$blog_id][$context][$name][$current_language] != $original_value) {
            $has_translation = true;
        } else {
            $has_translation = false;
        }
        return $results[$blog_id][$context][$name][$current_language];
    }
    if ($current_language == $default_language && $original_value) {
        $ret_val = $original_value;
        if (isset($has_translation)) {
            $has_translation = false;
        }
    } else {
        $result = icl_t_cache_lookup($context, $name);
        $is_string_change = _icl_is_string_change($result, $original_value);
        if (($result === false || $is_string_change) && !is_admin() && !$dont_auto_register && $context != 'Widgets') {
            static $string_registrations_per_request = 0;
            if ($string_registrations_per_request < ICL_STRING_TRANSLATION_AUTO_REGISTER_THRESHOLD) {
                // See if we should auto register the strings.
                if (isset($sitepress_settings['st']['icl_st_auto_reg'])) {
                    $auto_reg = $sitepress_settings['st']['icl_st_auto_reg'];
                } else {
                    $auto_reg = 'disable';
                }
                if ($auto_reg == 'auto-always' || $auto_reg == 'auto-admin' && current_user_can('manage_options')) {
                    icl_register_string($context, $name, $original_value);
                    $string_registrations_per_request++;
                }
            }
        }
        if ($result === false || is_array($result) && !$result['translated'] && $original_value) {
            $ret_val = $original_value;
            if (isset($has_translation)) {
                $has_translation = false;
            }
        } else {
            $ret_val = $result['value'];
            if (isset($has_translation)) {
                $has_translation = true;
            }
        }
    }
    $results[$blog_id][$context][$name][$current_language] = $ret_val;
    return $ret_val;
}