function sfput_extra_permastructs($rules)
{
    global $wp_rewrite, $polylang;
    if (empty($rules)) {
        // Uh? oO
        return $rules;
    }
    $languages = $polylang->model->get_languages_list(array('fields' => 'slug'));
    // If Polylang doesn't add the /{default_lang}/ in the URL, no need to modify the rules for this lang, sfput_registered_post_type() took care of it earlier.
    if ($polylang->options['hide_default']) {
        $languages = array_diff($languages, array($polylang->options['default_lang']));
    }
    if (empty($languages)) {
        return $rules;
    }
    // The way Polylang built its regex.
    $imploded_langs = '(' . implode('|', $languages) . ')/';
    $poly_slug = $wp_rewrite->root . ($polylang->options['rewrite'] ? '' : 'language/') . $imploded_langs;
    // So, why are we here?
    $filter = str_replace('_rewrite_rules', '', current_filter());
    $post_types = sfput_get_post_types();
    $taxonomies = sfput_get_taxonomies();
    // Post type, single
    if (!empty($post_types[$filter])) {
        $slugs = sfput_get_option('post_types.single');
        $slug = sfput_get_post_type_singular_slug($filter);
        if (empty($slugs[$filter]) || empty($slug)) {
            // Uh? oO
            return $rules;
        }
    } elseif (!empty($taxonomies[$filter])) {
        $slugs = sfput_get_option('taxonomies');
        $slug = sfput_get_taxonomy_slug($filter);
        if (empty($slugs[$filter]) || empty($slug)) {
            // Uh? oO
            return $rules;
        }
    } else {
        // Uh? oO
        return $rules;
    }
    // Replacements
    $new_rules = array();
    $slugs = $slugs[$filter];
    foreach ($rules as $regex => $rule) {
        if (strpos($regex, $poly_slug) !== 0) {
            $new_rules[$regex] = $rule;
            continue;
        }
        foreach ($languages as $language) {
            $new_regex = str_replace_once($imploded_langs, '(' . $language . ')/', $regex);
            $new_regex = str_replace_once('/' . $slug . '/', '/' . $slugs[$language] . '/', '/' . $new_regex);
            $new_regex = ltrim($new_regex, '/');
            $new_rules[$new_regex] = $rule;
        }
    }
    return $new_rules;
}
function sfput_default_post_type_singular_slug($post_type)
{
    if (is_object($post_type)) {
        $post_type = $post_type->name;
    }
    if (!$post_type || !is_string($post_type)) {
        return false;
    }
    $slug = sf_cache_data('sfput_original_slugs-pt-' . $post_type);
    // Return original || current.
    return $slug ? $slug['singular'] : sfput_get_post_type_singular_slug($post_type);
}