function bogo_admin_enqueue_scripts($hook_suffix)
{
    if (false !== strpos($hook_suffix, 'bogo-tools') || 'widgets.php' == $hook_suffix || 'user-edit.php' == $hook_suffix) {
        wp_enqueue_style('bogo-admin', plugins_url('admin/includes/css/admin.css', BOGO_PLUGIN_BASENAME), array(), BOGO_VERSION, 'all');
        return;
    }
    if ('nav-menus.php' == $hook_suffix) {
        $nav_menu_id = absint(get_user_option('nav_menu_recently_edited'));
        $nav_menu_items = wp_get_nav_menu_items($nav_menu_id);
        $locales = array();
        foreach ((array) $nav_menu_items as $item) {
            $locales[$item->db_id] = $item->bogo_locales;
        }
        $prefix = 'menu-item-bogo-locale';
        wp_enqueue_script('bogo-admin', plugins_url('admin/includes/js/admin.js', BOGO_PLUGIN_BASENAME), array('jquery'), BOGO_VERSION, true);
        wp_localize_script('bogo-admin', '_bogo', array('availableLanguages' => bogo_available_languages('orderby=value'), 'locales' => $locales, 'selectorLegend' => __('Displayed on pages in', 'bogo'), 'cbPrefix' => $prefix));
        wp_enqueue_style('bogo-admin', plugins_url('admin/includes/css/admin.css', BOGO_PLUGIN_BASENAME), array(), BOGO_VERSION, 'all');
        return;
    }
    if ('options-general.php' == $hook_suffix) {
        wp_enqueue_script('bogo-admin', plugins_url('admin/includes/js/admin.js', BOGO_PLUGIN_BASENAME), array('jquery'), BOGO_VERSION, true);
        wp_localize_script('bogo-admin', '_bogo', array('defaultLocale' => bogo_get_default_locale()));
        return;
    }
}
function bogo_in_widget_form($widget, $return, $instance)
{
    $available_languages = bogo_available_languages('orderby=value');
    if (empty($available_languages)) {
        return;
    }
    $return = null;
    $selected_languages = isset($instance['bogo_locales']) ? (array) $instance['bogo_locales'] : array_keys($available_languages);
    ?>
<fieldset class="bogo-locale-options">
<legend><?php 
    echo esc_html(__('Displayed on pages in', 'bogo'));
    ?>
</legend>
<?php 
    foreach ($available_languages as $locale => $language) {
        $checked = in_array($locale, $selected_languages);
        $id_attr = $widget->get_field_id('bogo_locales') . '-' . $locale;
        ?>
<label class="bogo-locale-option<?php 
        echo $checked ? ' checked' : '';
        ?>
" for="<?php 
        echo $id_attr;
        ?>
">
<input type="checkbox" id="<?php 
        echo $id_attr;
        ?>
" name="<?php 
        echo $widget->get_field_name('bogo_locales');
        ?>
[]" value="<?php 
        echo esc_attr($locale);
        ?>
"<?php 
        echo $checked ? ' checked="checked"' : '';
        ?>
 /><?php 
        echo esc_html($language);
        ?>
</label>
<?php 
    }
    ?>
</fieldset>
<?php 
}
function bogo_admin_bar_menu($wp_admin_bar)
{
    $current_locale = bogo_get_user_locale();
    $current_language = bogo_get_language($current_locale);
    if (!$current_language) {
        $current_language = $current_locale;
    }
    $wp_admin_bar->add_menu(array('parent' => 'top-secondary', 'id' => 'bogo-user-locale', 'title' => '&#10004; ' . $current_language));
    $available_languages = bogo_available_languages(array('exclude' => array($current_locale), 'current_user_can_access' => true));
    foreach ($available_languages as $locale => $lang) {
        $url = admin_url('profile.php?action=bogo-switch-locale&locale=' . $locale);
        $url = add_query_arg(array('redirect_to' => urlencode($_SERVER['REQUEST_URI'])), $url);
        $url = wp_nonce_url($url, 'bogo-switch-locale');
        $wp_admin_bar->add_menu(array('parent' => 'bogo-user-locale', 'id' => 'bogo-user-locale-' . $locale, 'title' => $lang, 'href' => $url));
    }
}
function bogo_restrict_manage_posts()
{
    global $post_type;
    if (!bogo_is_localizable_post_type($post_type)) {
        return;
    }
    $available_languages = bogo_available_languages();
    $current_locale = empty($_GET['lang']) ? '' : $_GET['lang'];
    echo '<select name="lang">';
    $selected = '' == $current_locale ? ' selected="selected"' : '';
    echo '<option value=""' . $selected . '>' . esc_html(__('Show all locales', 'bogo')) . '</option>';
    foreach ($available_languages as $locale => $lang) {
        $selected = $locale == $current_locale ? ' selected="selected"' : '';
        echo '<option value="' . esc_attr($locale) . '"' . $selected . '>' . esc_html($lang) . '</option>';
    }
    echo '</select>' . "\n";
}
function bogo_locale($locale)
{
    global $wp_rewrite, $wp_query;
    if (!did_action('plugins_loaded')) {
        return $locale;
    }
    if (is_admin()) {
        return bogo_get_user_locale();
    }
    $default_locale = bogo_get_default_locale();
    if (!empty($wp_query->query_vars)) {
        if (($lang = get_query_var('lang')) && ($closest = bogo_get_closest_locale($lang))) {
            return $closest;
        } else {
            return $default_locale;
        }
    }
    if (isset($wp_rewrite) && $wp_rewrite->using_permalinks()) {
        $url = is_ssl() ? 'https://' : 'http://';
        $url .= $_SERVER['HTTP_HOST'];
        $url .= $_SERVER['REQUEST_URI'];
        $home = set_url_scheme(get_option('home'));
        $home = trailingslashit($home);
        $available_languages = bogo_available_languages();
        $available_languages = array_map('bogo_lang_slug', array_keys($available_languages));
        $available_languages = implode('|', $available_languages);
        $pattern = '#^' . preg_quote($home) . '(' . $available_languages . ')(/|$)#';
        if (preg_match($pattern, $url, $matches) && ($closest = bogo_get_closest_locale($matches[1]))) {
            return $closest;
        }
    }
    $lang = bogo_get_lang_from_url();
    if ($lang && ($closest = bogo_get_closest_locale($lang))) {
        return $closest;
    }
    $locale = $default_locale;
    return $locale;
}
function bogo_language_switcher_links($args = '')
{
    global $wp_query;
    $args = wp_parse_args($args, array());
    $locale = get_locale();
    $available_languages = bogo_available_languages();
    $translations = array();
    $is_singular = false;
    if (is_singular() || !empty($wp_query->is_posts_page)) {
        $translations = bogo_get_post_translations(get_queried_object_id());
        $is_singular = true;
    }
    $links = array();
    foreach ($available_languages as $code => $name) {
        $link = array('locale' => $code, 'lang' => bogo_language_tag($code), 'title' => $name, 'native_name' => bogo_get_language_native_name($code), 'href' => '');
        if ($is_singular) {
            if ($locale != $code && !empty($translations[$code])) {
                $link['href'] = get_permalink($translations[$code]);
            }
        } else {
            if ($locale != $code) {
                $link['href'] = bogo_url(null, $code);
            }
        }
        $links[] = $link;
    }
    return apply_filters('bogo_language_switcher_links', $links, $args);
}
function bogo_select_own_locale($profileuser)
{
    $available_languages = bogo_available_languages(array('orderby' => 'value', 'current_user_can_access' => true));
    $selected = bogo_get_user_locale($profileuser->ID);
    ?>

<!-- Bogo plugin -->
<tr>
<th scope="row"><?php 
    echo esc_html(__('Locale', 'bogo'));
    ?>
</th>
<td>
<select name="bogo_own_locale">
<?php 
    foreach ($available_languages as $locale => $lang) {
        ?>
<option value="<?php 
        echo esc_attr($locale);
        ?>
" <?php 
        selected($locale, $selected);
        ?>
><?php 
        echo esc_html($lang);
        ?>
</option>
<?php 
    }
    ?>
</select>
</td>
</tr>

<?php 
}