admin/view-translations-post.php000066600000004260152100561460013027 0ustar00

model->get_languages_list() as $language ) { if ( $language->term_id == $lang->term_id ) { continue; } $value = $this->model->post->get_translation( $post_ID, $language ); if ( ! $value || $value == $post_ID ) { // $value == $post_ID happens if the post has been ( auto )saved before changing the language $value = ''; } if ( isset( $_GET['from_post'] ) ) { $value = $this->model->post->get( (int) $_GET['from_post'], $language ); } $link = $add_link = $this->links->new_post_translation_link( $post_ID, $language ); if ( $value ) { $selected = get_post( $value ); $link = $this->links->edit_post_translation_link( $value ); } ?> slug ); ?>
flag ? $language->flag : esc_html( $language->slug ); ?> %2$s ', esc_attr( $language->slug ), /* translators: accessibility text */ esc_html__( 'Translation', 'polylang' ), empty( $value ) ? 0 : esc_attr( $selected->ID ), empty( $value ) ? '' : esc_attr( $selected->post_title ), empty( $link ) ? ' disabled="disabled"' : '', esc_attr( $language->get_locale( 'display' ) ), $language->is_rtl ? 'rtl' : 'ltr' ); ?>
admin/admin-static-pages.php000066600000011421152100561460012022 0ustar00ID ) && empty( $post->post_content ) ) { add_action( 'edit_form_after_title', '_wp_posts_page_notice' ); remove_post_type_support( $post_type, 'editor' ); } } } /** * Add post state for translations of the front page and posts page * * @since 1.8 * * @param array $post_states * @param object $post * @return array */ public function display_post_states( $post_states, $post ) { if ( in_array( $post->ID, $this->model->get_languages_list( array( 'fields' => 'page_on_front' ) ) ) ) { $post_states['page_on_front'] = __( 'Front Page' ); } if ( in_array( $post->ID, $this->model->get_languages_list( array( 'fields' => 'page_for_posts' ) ) ) ) { $post_states['page_for_posts'] = __( 'Posts Page' ); } return $post_states; } /** * Refresh language cache when a static front page has been translated * * @since 1.8 * * @param int $post_id Not used * @param object $post Not used * @param array $translations */ public function pll_save_post( $post_id, $post, $translations ) { if ( in_array( $this->page_on_front, $translations ) ) { $this->model->clean_languages_cache(); } } /** * Checks if a page is translted in all languages * * @since 2.2 * * @param int $page_id * @return bool */ protected function is_page_translated( $page_id ) { if ( $page_id ) { $translations = count( $this->model->post->get_translations( $page_id ) ); $languages = count( $this->model->get_languages_list() ); if ( $languages > 1 && $translations != $languages ) { return false; } } return true; } /** * Prevents choosing an untranslated static front page * Displays an error message * * @since 1.6 * * @param int $page_id New page on front page id * @param int $old_id Old page on front page_id * @return int */ public function update_page_on_front( $page_id, $old_id ) { if ( ! $this->is_page_translated( $page_id ) ) { $page_id = $old_id; add_settings_error( 'reading', 'pll_page_on_front_error', __( 'The chosen static front page must be translated in all languages.', 'polylang' ) ); } return $page_id; } /** * Displays an error message in the customizer when choosing an untranslated static front page * * @since 2.2 * * @param object $validity WP_Error object * @param int $page_id New page on front page id * @return object */ public function customize_validate_page_on_front( $validity, $page_id ) { if ( ! $this->is_page_translated( $page_id ) ) { return new WP_Error( 'pll_page_on_front_error', __( 'The chosen static front page must be translated in all languages.', 'polylang' ) ); } return $validity; } /** * Prevents WP resetting the option if the admin language filter is active for a language with no pages * * @since 1.9.3 * * @param string $value * @param string $old_value * @return string */ public function update_show_on_front( $value, $old_value ) { if ( ! empty( $GLOBALS['pagenow'] ) && 'options-reading.php' === $GLOBALS['pagenow'] && 'posts' === $value && ! get_pages() && get_pages( array( 'lang' => '' ) ) ) { $value = $old_value; } return $value; } } admin/admin-filters.php000066600000023021152100561460011105 0ustar00model->get_languages_list( array( 'fields' => 'locale' ) ), $specific_locales ) ) { add_filter( 'sanitize_title', array( $this, 'sanitize_title' ), 10, 3 ); add_filter( 'sanitize_user', array( $this, 'sanitize_user' ), 10, 3 ); } add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) ); } /** * Modifies the widgets forms to add our language dropdwown list * * @since 0.3 * * @param object $widget Widget instance * @param null $return Not used * @param array $instance Widget settings */ public function in_widget_form( $widget, $return, $instance ) { $screen = get_current_screen(); // Test the Widgets screen and the Customizer to avoid displaying the option in page builders // Saving the widget reloads the form. And curiously the action is in $_REQUEST but neither in $_POST, not in $_GET. if ( ( isset( $screen ) && 'widgets' === $screen->base ) || ( isset( $_REQUEST['action'] ) && 'save-widget' === $_REQUEST['action'] ) || isset( $GLOBALS['wp_customize'] ) ) { $dropdown = new PLL_Walker_Dropdown(); printf( '

', esc_attr( $widget->id . '_lang_choice' ), esc_html__( 'The widget is displayed for:', 'polylang' ), $dropdown->walk( array_merge( array( (object) array( 'slug' => 0, 'name' => __( 'All languages', 'polylang' ) ) ), $this->model->get_languages_list() ), array( 'name' => $widget->id . '_lang_choice', 'class' => 'tags-input', 'selected' => empty( $instance['pll_lang'] ) ? '' : $instance['pll_lang'], ) ) ); } } /** * Called when widget options are saved * saves the language associated to the widget * * @since 0.3 * * @param array $instance Widget options * @param array $new_instance Not used * @param array $old_instance Not used * @param object $widget WP_Widget object * @return array Widget options */ public function widget_update_callback( $instance, $new_instance, $old_instance, $widget ) { if ( ! empty( $_POST[ $key = $widget->id . '_lang_choice' ] ) && in_array( $_POST[ $key ], $this->model->get_languages_list( array( 'fields' => 'slug' ) ) ) ) { $instance['pll_lang'] = $_POST[ $key ]; } else { unset( $instance['pll_lang'] ); } return $instance; } /** * Updates language user preference set in user profile * * @since 0.4 * * @param int $user_id */ public function personal_options_update( $user_id ) { // Admin language // FIXME Backward compatibility with WP < 4.7 if ( version_compare( $GLOBALS['wp_version'], '4.7alpha', '<' ) ) { $user_lang = in_array( $_POST['user_lang'], $this->model->get_languages_list( array( 'fields' => 'locale' ) ) ) ? $_POST['user_lang'] : 0; update_user_meta( $user_id, 'locale', $user_lang ); } // Biography translations foreach ( $this->model->get_languages_list() as $lang ) { $meta = $lang->slug == $this->options['default_lang'] ? 'description' : 'description_' . $lang->slug; $description = empty( $_POST[ 'description_' . $lang->slug ] ) ? '' : trim( $_POST[ 'description_' . $lang->slug ] ); /** This filter is documented in wp-includes/user.php */ $description = apply_filters( 'pre_user_description', $description ); // Applies WP default filter wp_filter_kses update_user_meta( $user_id, $meta, $description ); } } /** * Form for language user preference in user profile * * @since 0.4 * * @param object $profileuser */ public function personal_options( $profileuser ) { // FIXME: Backward compatibility with WP < 4.7 if ( version_compare( $GLOBALS['wp_version'], '4.7alpha', '<' ) ) { $dropdown = new PLL_Walker_Dropdown(); printf( ' %s ', esc_html__( 'Admin language', 'polylang' ), $dropdown->walk( array_merge( array( (object) array( 'locale' => 0, 'name' => __( 'WordPress default', 'polylang' ) ) ), $this->model->get_languages_list() ), array( 'name' => 'user_lang', 'value' => 'locale', 'selected' => get_user_meta( $profileuser->ID, 'locale', true ), ) ) ); } // Hidden informations to modify the biography form with js foreach ( $this->model->get_languages_list() as $lang ) { $meta = $lang->slug == $this->options['default_lang'] ? 'description' : 'description_' . $lang->slug; /** This filter is documented in wp-includes/user.php */ $description = apply_filters( 'user_description', get_user_meta( $profileuser->ID, $meta, true ) ); // Applies WP default filter wp_kses_data printf( '', esc_attr( $lang->slug ), esc_attr( $lang->name ), esc_attr( $description ) ); } } /** * Ugprades languages files after a core upgrade * only for backward compatibility WP < 4.0 *AND* Polylang < 1.6 * * @since 0.6 * * @param string $version new WP version */ public function upgrade_languages( $version ) { // $GLOBALS['wp_version'] is the old WP version if ( version_compare( $version, '4.0', '>=' ) && version_compare( $GLOBALS['wp_version'], '4.0', '<' ) ) { /** This filter is documented in wp-admin/includes/update-core.php */ apply_filters( 'update_feedback', __( 'Upgrading language files…', 'polylang' ) ); PLL_Upgrade::download_language_packs(); } } /** * Allows to update translations files for plugins and themes * * @since 1.6 * * @param array $locales Not used * @return array list of locales to update */ function update_check_locales( $locales ) { return $this->model->get_languages_list( array( 'fields' => 'locale' ) ); } /** * Filters the locale according to the current language instead of the language * of the admin interface * * @since 2.0 * * @param string $locale * @return string */ public function get_locale( $locale ) { return $this->curlang->locale; } /** * Maybe fix the result of sanitize_title() in case the languages include German or Danish * Without this filter, if language of the title being sanitized is different from the language * used for the admin interface and if one this language is German or Danish, some specific * characters such as ä, ö, ü, ß are incorrectly sanitized. * * @since 2.0 * * @param string $title Sanitized title. * @param string $raw_title The title prior to sanitization. * @param string $context The context for which the title is being sanitized. * @return string */ public function sanitize_title( $title, $raw_title, $context ) { static $once = false; if ( ! $once && 'save' == $context && ! empty( $this->curlang ) && ! empty( $title ) ) { $once = true; add_filter( 'locale', array( $this, 'get_locale' ), 20 ); // After the filter for the admin interface $title = sanitize_title( $raw_title, '', $context ); remove_filter( 'locale', array( $this, 'get_locale' ), 20 ); $once = false; } return $title; } /** * Maybe fix the result of sanitize_user() in case the languages include German or Danish * * @since 2.0 * * @param string $username Sanitized username. * @param string $raw_username The username prior to sanitization. * @param bool $strict Whether to limit the sanitization to specific characters. Default false. * @return string */ public function sanitize_user( $username, $raw_username, $strict ) { static $once = false; if ( ! $once && ! empty( $this->curlang ) ) { $once = true; add_filter( 'locale', array( $this, 'get_locale' ), 20 ); // After the filter for the admin interface $username = sanitize_user( $raw_username, '', $strict ); remove_filter( 'locale', array( $this, 'get_locale' ), 20 ); $once = false; } return $username; } /** * Adds a text direction dependent class to the body * * @since 2.2 * * @param string $classes Space-separated list of CSS classes. * @return string */ public function admin_body_class( $classes ) { if ( ! empty( $this->curlang ) ) { $classes .= ' pll-dir-' . ( $this->curlang->is_rtl ? 'rtl' : 'ltr' ); } return $classes; } } admin/admin-base.php000066600000032415152100561460010356 0ustar00model->get_languages_list() ) { return; } $this->links = new PLL_Admin_Links( $this ); // FIXME needed here ? $this->static_pages = new PLL_Admin_Static_Pages( $this ); // FIXME needed here ? $this->filters_links = new PLL_Filters_Links( $this ); // FIXME needed here ? // Filter admin language for users // We must not call user info before WordPress defines user roles in wp-settings.php add_filter( 'setup_theme', array( $this, 'init_user' ) ); add_filter( 'request', array( $this, 'request' ) ); // Adds the languages in admin bar add_action( 'admin_bar_menu', array( $this, 'admin_bar_menu' ), 100 ); // 100 determines the position } /** * Adds the link to the languages panel in the WordPress admin menu * * @since 0.1 */ public function add_menus() { // Prepare the list of tabs $tabs = array( 'lang' => __( 'Languages','polylang' ) ); // Only if at least one language has been created if ( $this->model->get_languages_list() ) { $tabs['strings'] = __( 'Strings translations', 'polylang' ); } $tabs['settings'] = __( 'Settings', 'polylang' ); /** * Filter the list of tabs in Polylang settings * * @since 1.5.1 * * @param array $tabs list of tab names */ $tabs = apply_filters( 'pll_settings_tabs', $tabs ); foreach ( $tabs as $tab => $title ) { $page = 'lang' === $tab ? 'mlang' : "mlang_$tab"; if ( empty( $parent ) ) { $parent = $page; add_menu_page( $title, __( 'Languages','polylang' ), 'manage_options', $page, null , 'dashicons-translation' ); } add_submenu_page( $parent, $title, $title, 'manage_options', $page , array( $this, 'languages_page' ) ); } } /** * Setup js scripts & css styles ( only on the relevant pages ) * * @since 0.6 */ public function admin_enqueue_scripts() { $screen = get_current_screen(); if ( empty( $screen ) ) { return; } $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; // For each script: // 0 => the pages on which to load the script // 1 => the scripts it needs to work // 2 => 1 if loaded even if languages have not been defined yet, 0 otherwise // 3 => 1 if loaded in footer // FIXME: check if I can load more scripts in footer $scripts = array( 'post' => array( array( 'post', 'media', 'async-upload', 'edit' ), array( 'jquery', 'wp-ajax-response', 'post', 'jquery-ui-autocomplete' ), 0, 1 ), 'media' => array( array( 'upload' ), array( 'jquery' ), 0, 1 ), 'term' => array( array( 'edit-tags', 'term' ), array( 'jquery', 'wp-ajax-response', 'jquery-ui-autocomplete' ), 0, 1 ), 'user' => array( array( 'profile', 'user-edit' ), array( 'jquery' ), 0, 0 ), ); foreach ( $scripts as $script => $v ) { if ( in_array( $screen->base, $v[0] ) && ( $v[2] || $this->model->get_languages_list() ) ) { wp_enqueue_script( 'pll_' . $script, plugins_url( '/js/' . $script . $suffix . '.js', POLYLANG_FILE ), $v[1], POLYLANG_VERSION, $v[3] ); } } wp_enqueue_style( 'polylang_admin', plugins_url( '/css/admin' . $suffix . '.css', POLYLANG_FILE ), array(), POLYLANG_VERSION ); } /** * Sets pll_ajax_backend on all backend ajax request * The final goal is to detect if an ajax request is made on admin or frontend * * Takes care to various situations: * when the ajax request has no options.data thanks to ScreenfeedFr * see: https://wordpress.org/support/topic/ajaxprefilter-may-not-work-as-expected * when options.data is a json string * see: https://wordpress.org/support/topic/polylang-breaking-third-party-ajax-requests-on-admin-panels * when options.data is an empty string (GET request with the method 'load') * see: https://wordpress.org/support/topic/invalid-url-during-wordpress-new-dashboard-widget-operation * * @since 1.4 */ public function admin_print_footer_scripts() { global $post_ID, $tag_ID; $params = array( 'pll_ajax_backend' => 1 ); if ( ! empty( $post_ID ) ) { $params = array_merge( $params, array( 'pll_post_id' => (int) $post_ID ) ); } if ( ! empty( $tag_ID ) ) { $params = array_merge( $params, array( 'pll_term_id' => (int) $tag_ID ) ); } $str = http_build_query( $params ); $arr = json_encode( $params ); ?> curlang = $this->filter_lang; // POST if ( isset( $_POST['post_lang_choice'] ) && $lang = $this->model->get_language( $_POST['post_lang_choice'] ) ) { $this->curlang = $lang; } elseif ( isset( $_POST['term_lang_choice'] ) && $lang = $this->model->get_language( $_POST['term_lang_choice'] ) ) { $this->curlang = $lang; } elseif ( isset( $_POST['inline_lang_choice'] ) && $lang = $this->model->get_language( $_POST['inline_lang_choice'] ) ) { $this->curlang = $lang; } // Edit Post if ( isset( $_REQUEST['pll_post_id'] ) && $lang = $this->model->post->get_language( (int) $_REQUEST['pll_post_id'] ) ) { $this->curlang = $lang; } elseif ( 'post.php' === $GLOBALS['pagenow'] && isset( $_GET['post'] ) && is_numeric( $_GET['post'] ) && $lang = $this->model->post->get_language( (int) $_GET['post'] ) ) { $this->curlang = $lang; } elseif ( 'post-new.php' === $GLOBALS['pagenow'] && ( empty( $_GET['post_type'] ) || $this->model->is_translated_post_type( $_GET['post_type'] ) ) ) { $this->curlang = empty( $_GET['new_lang'] ) ? $this->pref_lang : $this->model->get_language( $_GET['new_lang'] ); } // Edit Term // FIXME 'edit-tags.php' for backward compatibility with WP < 4.5 elseif ( in_array( $GLOBALS['pagenow'], array( 'edit-tags.php', 'term.php' ) ) && isset( $_GET['tag_ID'] ) && $lang = $this->model->term->get_language( (int) $_GET['tag_ID'] ) ) { $this->curlang = $lang; } elseif ( isset( $_REQUEST['pll_term_id'] ) && $lang = $this->model->term->get_language( (int) $_REQUEST['pll_term_id'] ) ) { $this->curlang = $lang; } elseif ( 'edit-tags.php' === $GLOBALS['pagenow'] && isset( $_GET['taxonomy'] ) && $this->model->is_translated_taxonomy( $_GET['taxonomy'] ) ) { if ( ! empty( $_GET['new_lang'] ) ) { $this->curlang = $this->model->get_language( $_GET['new_lang'] ); } elseif ( empty( $this->curlang ) ) { $this->curlang = $this->pref_lang; } } // Ajax if ( wp_doing_ajax() && ! empty( $_REQUEST['lang'] ) ) { $this->curlang = $this->model->get_language( $_REQUEST['lang'] ); } } /** * Defines the backend language and the admin language filter based on user preferences * * @since 1.2.3 */ public function init_user() { // Backend locale // FIXME: Backward compatibility with WP < 4.7 if ( version_compare( $GLOBALS['wp_version'], '4.7alpha', '<' ) ) { add_filter( 'locale', array( $this, 'get_locale' ) ); } // Language for admin language filter: may be empty // $_GET['lang'] is numeric when editing a language, not when selecting a new language in the filter if ( ! wp_doing_ajax() && ! empty( $_GET['lang'] ) && ! is_numeric( $_GET['lang'] ) && current_user_can( 'edit_user', $user_id = get_current_user_id() ) ) { update_user_meta( $user_id, 'pll_filter_content', ( $lang = $this->model->get_language( $_GET['lang'] ) ) ? $lang->slug : '' ); } $this->filter_lang = $this->model->get_language( get_user_meta( get_current_user_id(), 'pll_filter_content', true ) ); // Set preferred language for use when saving posts and terms: must not be empty $this->pref_lang = empty( $this->filter_lang ) ? $this->model->get_language( $this->options['default_lang'] ) : $this->filter_lang; /** * Filter the preferred language on amin side * The preferred language is used for example to determine the language of a new post * * @since 1.2.3 * * @param object $pref_lang preferred language */ $this->pref_lang = apply_filters( 'pll_admin_preferred_language', $this->pref_lang ); $this->set_current_language(); // Inform that the admin language has been set // Only if the admin language is one of the Polylang defined language // FIXME test get_user_locale for backward compatibility with WP 4.7 if ( $curlang = $this->model->get_language( function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale() ) ) { // FIXME: Backward compatibility with WP < 4.7 if ( version_compare( $GLOBALS['wp_version'], '4.7alpha', '<' ) ) { $GLOBALS['text_direction'] = $curlang->is_rtl ? 'rtl' : 'ltr'; // force text direction according to language setting } /** This action is documented in frontend/choose-lang.php */ do_action( 'pll_language_defined', $curlang->slug, $curlang ); } else { /** This action is documented in include/class-polylang.php */ do_action( 'pll_no_language_defined' ); // to load overriden textdomains } } /** * Avoids parsing a tax query when all languages are requested * Fixes https://wordpress.org/support/topic/notice-undefined-offset-0-in-wp-includesqueryphp-on-line-3877 introduced in WP 4.1 * @see the suggestion of @boonebgorges, https://core.trac.wordpress.org/ticket/31246 * * @since 1.6.5 * * @param array $qvars * @return array */ public function request( $qvars ) { if ( isset( $qvars['lang'] ) && 'all' === $qvars['lang'] ) { unset( $qvars['lang'] ); } return $qvars; } /** * Get the locale based on user preference * FIXME: Backward compatibility with WP < 4.7 * * @since 0.4 * * @param string $locale * @return string modified locale */ public function get_locale( $locale ) { return ( $loc = get_user_meta( get_current_user_id(), 'locale', 'true' ) ) ? $loc : $locale; } /** * Adds the languages list in admin bar for the admin languages filter * * @since 0.9 * * @param object $wp_admin_bar */ public function admin_bar_menu( $wp_admin_bar ) { $url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $all_item = (object) array( 'slug' => 'all', 'name' => __( 'Show all languages', 'polylang' ), 'flag' => '', ); $selected = empty( $this->filter_lang ) ? $all_item : $this->filter_lang; $title = sprintf( '%2$s%3$s', 'all' === $selected->slug ? '' : sprintf( ' lang="%s"', esc_attr( $selected->get_locale( 'display' ) ) ), __( 'Filters content by language', 'polylang' ), esc_html( $selected->name ) ); $wp_admin_bar->add_menu( array( 'id' => 'languages', 'title' => $selected->flag . $title, 'href' => esc_url( add_query_arg( 'lang', $selected->slug, remove_query_arg( 'paged', $url ) ) ), 'meta' => array( 'title' => __( 'Filters content by language', 'polylang' ) ), ) ); foreach ( array_merge( array( $all_item ), $this->model->get_languages_list() ) as $lang ) { if ( $selected->slug === $lang->slug ) { continue; } $wp_admin_bar->add_menu( array( 'parent' => 'languages', 'id' => $lang->slug, 'title' => $lang->flag . esc_html( $lang->name ), 'href' => esc_url( add_query_arg( 'lang', $lang->slug, remove_query_arg( 'paged', $url ) ) ), 'meta' => 'all' === $lang->slug ? array() : array( 'lang' => esc_attr( $lang->get_locale( 'display' ) ) ), ) ); } } } admin/view-translations-term.php000066600000005605152100561460013015 0ustar00

model->get_languages_list() as $language ) { if ( $language->term_id == $lang->term_id ) { continue; } // Look for any existing translation in this language // Take care not to propose a self link $translation = 0; if ( isset( $term_id ) && ( $translation_id = $this->model->term->get_translation( $term_id, $language ) ) && $translation_id != $term_id ) { $translation = get_term( $translation_id, $taxonomy ); } if ( isset( $_GET['from_tag'] ) && ( $translation_id = $this->model->term->get( (int) $_GET['from_tag'], $language ) ) && ! $this->model->term->get_translation( $translation_id, $lang ) ) { $translation = get_term( $translation_id, $taxonomy ); } if ( isset( $term_id ) ) { // Do not display the add new link in add term form ( $term_id not set !!! ) $link = $add_link = $this->links->new_term_translation_link( $term_id, $taxonomy, $post_type, $language ); } if ( $translation ) { $link = $this->links->edit_term_translation_link( $translation->term_id, $taxonomy, $post_type ); } ?>
flag; ?> %2$s', isset( $term_id ) ? '' : ' screen-reader-text', esc_html( $language->name ) ); ?> %2$s ', esc_attr( $language->slug ), /* translators: accessibility text */ esc_html__( 'Translation', 'polylang' ), empty( $translation ) ? 0 : esc_attr( $translation->term_id ), empty( $translation ) ? '' : esc_attr( $translation->name ), empty( $disabled ) ? '' : ' disabled="disabled"', esc_attr( $language->get_locale( 'display' ) ), $language->is_rtl ? 'rtl' : 'ltr' ); ?>
cap->create_posts ) ) { return ''; } if ( 'attachment' == $post_type ) { $args = array( 'action' => 'translate_media', 'from_media' => $post_id, 'new_lang' => $language->slug, ); // add nonce for media as we will directly publish a new attachment from a clic on this link $link = wp_nonce_url( add_query_arg( $args, admin_url( 'admin.php' ) ), 'translate_media' ); } else { $args = array( 'post_type' => $post_type, 'from_post' => $post_id, 'new_lang' => $language->slug, ); $link = add_query_arg( $args, admin_url( 'post-new.php' ) ); } /** * Filter the new post translation link * * @since 1.8 * * @param string $link the new post translation link * @param object $language the language of the new translation * @param int $post_id the source post id */ return apply_filters( 'pll_get_new_post_translation_link', $link, $language, $post_id ); } /** * returns html markup for a new post translation link * * @since 1.8 * * @param int $post_id * @param object $language * @return string */ public function new_post_translation_link( $post_id, $language ) { $link = $this->get_new_post_translation_link( $post_id, $language ); return $link ? sprintf( '%2$s', esc_url( $link ), /* translators: accessibility text, %s is a native language name */ esc_html( sprintf( __( 'Add a translation in %s', 'polylang' ), $language->name ) ) ) : ''; } /** * returns html markup for a translation link * * @since 1.4 * * @param int $post_id translation post id * @return string */ public function edit_post_translation_link( $post_id ) { $link = get_edit_post_link( $post_id ); $language = $this->model->post->get_language( $post_id ); return $link ? sprintf( '%2$s', esc_url( $link ), /* translators: accessibility text, %s is a native language name */ esc_html( sprintf( __( 'Edit the translation in %s', 'polylang' ), $language->name ) ) ) : ''; } /** * get the link to create a new term translation * * @since 1.5 * * @param int $term_id * @param string $taxonomy * @param string $post_type * @param object $language * @return string */ public function get_new_term_translation_link( $term_id, $taxonomy, $post_type, $language ) { $tax = get_taxonomy( $taxonomy ); if ( ! $tax || ! current_user_can( $tax->cap->edit_terms ) ) { return ''; } $args = array( 'taxonomy' => $taxonomy, 'post_type' => $post_type, 'from_tag' => $term_id, 'new_lang' => $language->slug, ); $link = add_query_arg( $args, admin_url( 'edit-tags.php' ) ); /** * Filter the new term translation link * * @since 1.8 * * @param string $link the new term translation link * @param object $language the language of the new translation * @param int $term_id the source term id * @param string $taxonomy * @param string $post_type */ return apply_filters( 'pll_get_new_term_translation_link', $link, $language, $term_id, $taxonomy, $post_type ); } /** * returns html markup for a new term translation * * @since 1.8 * * @param int $term_id * @param string $taxonomy * @param string $post_type * @param object $language * @return string */ public function new_term_translation_link( $term_id, $taxonomy, $post_type, $language ) { $link = $this->get_new_term_translation_link( $term_id, $taxonomy, $post_type, $language ); return $link ? sprintf( '%2$s', esc_url( $link ), /* translators: accessibility text, %s is a native language name */ esc_html( sprintf( __( 'Add a translation in %s', 'polylang' ), $language->name ) ) ) : ''; } /** * returns html markup for a term translation link * * @since 1.4 * * @param object $term_id translation term id * @param string $taxonomy * @param string $post_type * @return string */ public function edit_term_translation_link( $term_id, $taxonomy, $post_type ) { $link = get_edit_term_link( $term_id, $taxonomy, $post_type ); $language = $this->model->term->get_language( $term_id ); return $link ? sprintf( '%2$s', esc_url( $link ), /* translators: accessibility text, %s is a native language name */ esc_html( sprintf( __( 'Edit the translation in %s', 'polylang' ), $language->name ) ) ) : ''; } } admin/admin-filters-post-base.php000066600000003465152100561460013012 0ustar00links = &$polylang->links; $this->model = &$polylang->model; $this->pref_lang = &$polylang->pref_lang; } /** * allows to set a language by default for posts if it has no language yet * * @since 1.5 * * @param int $post_id */ public function set_default_language( $post_id ) { if ( ! $this->model->post->get_language( $post_id ) ) { if ( isset( $_GET['new_lang'] ) && $lang = $this->model->get_language( $_GET['new_lang'] ) ) { $this->model->post->set_language( $post_id, $lang ); } elseif ( ( $parent_id = wp_get_post_parent_id( $post_id ) ) && $parent_lang = $this->model->post->get_language( $parent_id ) ) { $this->model->post->set_language( $post_id, $parent_lang ); } else { $this->model->post->set_language( $post_id, $this->pref_lang ); } } } /** * save translations from language metabox * * @since 1.5 * * @param int $post_id * @param array $arr * @return array */ protected function save_translations( $post_id, $arr ) { // security check // as 'wp_insert_post' can be called from outside WP admin check_admin_referer( 'pll_language', '_pll_nonce' ); // save translations after checking the translated post is in the right language foreach ( $arr as $lang => $tr_id ) { $translations[ $lang ] = ( $tr_id && $this->model->post->get_language( (int) $tr_id )->slug == $lang ) ? (int) $tr_id : 0; } $this->model->post->save_translations( $post_id, $translations ); return $translations; } } admin/admin-model.php000066600000044570152100561460010551 0ustar00 language name ( used only for display ) * slug -> language code ( ideally 2-letters ISO 639-1 language code ) * locale -> WordPress locale. If something wrong is used for the locale, the .mo files will not be loaded... * rtl -> 1 if rtl language, 0 otherwise * term_group -> language order when displayed * * Optional arguments that $args can contain: * no_default_cat -> if set, no default category will be created for this language * flag -> country code, see flags.php * * @since 1.2 * * @param array $args * @return bool true if success / false if failed */ public function add_language( $args ) { if ( ! $this->validate_lang( $args ) ) { return false; } // First the language taxonomy $description = serialize( array( 'locale' => $args['locale'], 'rtl' => (int) $args['rtl'], 'flag_code' => empty( $args['flag'] ) ? '' : $args['flag'] ) ); $r = wp_insert_term( $args['name'], 'language', array( 'slug' => $args['slug'], 'description' => $description ) ); if ( is_wp_error( $r ) ) { // Avoid an ugly fatal error if something went wrong ( reported once in the forum ) add_settings_error( 'general', 'pll_add_language', __( 'Impossible to add the language.', 'polylang' ) ); return false; } wp_update_term( (int) $r['term_id'], 'language', array( 'term_group' => (int) $args['term_group'] ) ); // can't set the term group directly in wp_insert_term // The term_language taxonomy // Don't want shared terms so use a different slug wp_insert_term( $args['name'], 'term_language', array( 'slug' => 'pll_' . $args['slug'] ) ); $this->clean_languages_cache(); // Udpate the languages list now ! if ( ! isset( $this->options['default_lang'] ) ) { // If this is the first language created, set it as default language $this->options['default_lang'] = $args['slug']; update_option( 'polylang', $this->options ); // And assign default language to default category $this->term->set_language( (int) get_option( 'default_category' ), (int) $r['term_id'] ); } elseif ( empty( $args['no_default_cat'] ) ) { $this->create_default_category( $args['slug'] ); } // Init a mo_id for this language $mo = new PLL_MO(); $mo->export_to_db( $this->get_language( $args['slug'] ) ); /** * Fires when a language is added * * @since 1.9 * * @param array $args arguments used to create the language */ do_action( 'pll_add_language', $args ); $this->clean_languages_cache(); // Again to set add mo_id in the cached languages list flush_rewrite_rules(); // Refresh rewrite rules add_settings_error( 'general', 'pll_languages_created', __( 'Language added.', 'polylang' ), 'updated' ); return true; } /** * Delete a language * * @since 1.2 * * @param int $lang_id language term_id */ public function delete_language( $lang_id ) { $lang = $this->get_language( (int) $lang_id ); if ( empty( $lang ) ) { return; } // Oops ! we are deleting the default language... // Need to do this before loosing the information for default category translations if ( $this->options['default_lang'] == $lang->slug ) { $slugs = $this->get_languages_list( array( 'fields' => 'slug' ) ); $slugs = array_diff( $slugs, array( $lang->slug ) ); if ( ! empty( $slugs ) ) { $this->update_default_lang( reset( $slugs ) ); // Arbitrary choice... } else { unset( $this->options['default_lang'] ); } } // Delete the translations $this->update_translations( $lang->slug ); // Delete language option in widgets foreach ( $GLOBALS['wp_registered_widgets'] as $widget ) { if ( ! empty( $widget['callback'][0] ) && ! empty( $widget['params'][0]['number'] ) ) { $obj = $widget['callback'][0]; $number = $widget['params'][0]['number']; if ( is_object( $obj ) && method_exists( $obj, 'get_settings' ) && method_exists( $obj, 'save_settings' ) ) { $settings = $obj->get_settings(); if ( isset( $settings[ $number ]['pll_lang'] ) && $settings[ $number ]['pll_lang'] == $lang->slug ) { unset( $settings[ $number ]['pll_lang'] ); $obj->save_settings( $settings ); } } } } // Delete menus locations if ( ! empty( $this->options['nav_menus'] ) ) { foreach ( $this->options['nav_menus'] as $theme => $locations ) { foreach ( $locations as $location => $languages ) { unset( $this->options['nav_menus'][ $theme ][ $location ][ $lang->slug ] ); } } } // Delete users options foreach ( get_users( array( 'fields' => 'ID' ) ) as $user_id ) { delete_user_meta( $user_id, 'pll_filter_content', $lang->slug ); delete_user_meta( $user_id, 'description_' . $lang->slug ); } // Delete the string translations $post = wpcom_vip_get_page_by_title( 'polylang_mo_' . $lang->term_id, OBJECT, 'polylang_mo' ); if ( ! empty( $post ) ) { wp_delete_post( $post->ID ); } // Delete domain unset( $this->options['domains'][ $lang->slug ] ); // Delete the language itself wp_delete_term( $lang->term_id, 'language' ); wp_delete_term( $lang->tl_term_id, 'term_language' ); // Update languages list $this->clean_languages_cache(); update_option( 'polylang', $this->options ); flush_rewrite_rules(); // refresh rewrite rules add_settings_error( 'general', 'pll_languages_deleted', __( 'Language deleted.', 'polylang' ), 'updated' ); } /** * Update language properties * * List of arguments that $args must contain: * lang_id -> term_id of the language to modify * name -> language name ( used only for display ) * slug -> language code ( ideally 2-letters ISO 639-1 language code * locale -> WordPress locale. If something wrong is used for the locale, the .mo files will not be loaded... * rtl -> 1 if rtl language, 0 otherwise * term_group -> language order when displayed * * Optional arguments that $args can contain: * flag -> country code, see flags.php * * @since 1.2 * * @param array $args * @return bool true if success / false if failed */ public function update_language( $args ) { $lang = $this->get_language( (int) $args['lang_id'] ); if ( ! $this->validate_lang( $args, $lang ) ) { return false; } // Update links to this language in posts and terms in case the slug has been modified $slug = $args['slug']; $old_slug = $lang->slug; if ( $old_slug != $slug ) { // Update the language slug in translations $this->update_translations( $old_slug, $slug ); // Update language option in widgets foreach ( $GLOBALS['wp_registered_widgets'] as $widget ) { if ( ! empty( $widget['callback'][0] ) && ! empty( $widget['params'][0]['number'] ) ) { $obj = $widget['callback'][0]; $number = $widget['params'][0]['number']; if ( is_object( $obj ) && method_exists( $obj, 'get_settings' ) && method_exists( $obj, 'save_settings' ) ) { $settings = $obj->get_settings(); if ( isset( $settings[ $number ]['pll_lang'] ) && $settings[ $number ]['pll_lang'] == $old_slug ) { $settings[ $number ]['pll_lang'] = $slug; $obj->save_settings( $settings ); } } } } // Update menus locations if ( ! empty( $this->options['nav_menus'] ) ) { foreach ( $this->options['nav_menus'] as $theme => $locations ) { foreach ( $locations as $location => $languages ) { if ( ! empty( $this->options['nav_menus'][ $theme ][ $location ][ $old_slug ] ) ) { $this->options['nav_menus'][ $theme ][ $location ][ $slug ] = $this->options['nav_menus'][ $theme ][ $location ][ $old_slug ]; unset( $this->options['nav_menus'][ $theme ][ $location ][ $old_slug ] ); } } } } // Update domains if ( ! empty( $this->options['domains'][ $old_slug ] ) ) { $this->options['domains'][ $slug ] = $this->options['domains'][ $old_slug ]; unset( $this->options['domains'][ $old_slug ] ); } // Update the default language option if necessary if ( $this->options['default_lang'] == $old_slug ) { $this->options['default_lang'] = $slug; } } update_option( 'polylang', $this->options ); // And finally update the language itself $description = serialize( array( 'locale' => $args['locale'], 'rtl' => (int) $args['rtl'], 'flag_code' => empty( $args['flag'] ) ? '' : $args['flag'] ) ); wp_update_term( (int) $lang->term_id, 'language', array( 'slug' => $slug, 'name' => $args['name'], 'description' => $description, 'term_group' => (int) $args['term_group'] ) ); wp_update_term( (int) $lang->tl_term_id, 'term_language', array( 'slug' => 'pll_' . $slug, 'name' => $args['name'] ) ); /** * Fires when a language is added * * @since 1.9 * * @param array $args arguments used to modify the language */ do_action( 'pll_update_language', $args ); $this->clean_languages_cache(); flush_rewrite_rules(); // Refresh rewrite rules add_settings_error( 'general', 'pll_languages_updated', __( 'Language updated.', 'polylang' ), 'updated' ); return true; } /** * Validates data entered when creating or updating a language * @see PLL_Admin_Model::add_language * * @since 0.4 * * @param array $args * @param object $lang optional the language currently updated, the language is created if not set * @return bool true if success / false if failed */ protected function validate_lang( $args, $lang = null ) { // Validate locale with the same pattern as WP 4.3. See #28303 if ( ! preg_match( '#^[a-z]{2,3}(?:_[A-Z]{2})?(?:_[a-z0-9]+)?$#', $args['locale'], $matches ) ) { add_settings_error( 'general', 'pll_invalid_locale', __( 'Enter a valid WordPress locale', 'polylang' ) ); } // Validate slug characters if ( ! preg_match( '#^[a-z_-]+$#', $args['slug'] ) ) { add_settings_error( 'general', 'pll_invalid_slug', __( 'The language code contains invalid characters', 'polylang' ) ); } // Validate slug is unique if ( $this->get_language( $args['slug'] ) && ( null === $lang || ( isset( $lang ) && $lang->slug != $args['slug'] ) ) ) { add_settings_error( 'general', 'pll_non_unique_slug', __( 'The language code must be unique', 'polylang' ) ); } // Validate name // No need to sanitize it as wp_insert_term will do it for us if ( empty( $args['name'] ) ) { add_settings_error( 'general', 'pll_invalid_name', __( 'The language must have a name', 'polylang' ) ); } // Validate flag if ( ! empty( $args['flag'] ) && ! file_exists( POLYLANG_DIR . '/flags/' . $args['flag'] . '.png' ) ) { add_settings_error( 'general', 'pll_invalid_flag', __( 'The flag does not exist', 'polylang' ) ); } return get_settings_errors() ? false : true; } /** * Used to set the language of posts or terms in mass * * @since 1.2 * * @param string $type either 'post' or 'term' * @param array $ids array of post ids or term ids * @param object|string $lang object or slug */ public function set_language_in_mass( $type, $ids, $lang ) { global $wpdb; $ids = array_map( 'intval', $ids ); $lang = $this->get_language( $lang ); $tt_id = 'term' === $type ? $lang->tl_term_taxonomy_id : $lang->term_taxonomy_id; foreach ( $ids as $id ) { $values[] = $wpdb->prepare( '( %d, %d )', $id, $tt_id ); } if ( ! empty( $values ) ) { $values = array_unique( $values ); $wpdb->query( "INSERT INTO $wpdb->term_relationships ( object_id, term_taxonomy_id ) VALUES " . implode( ',', $values ) ); $lang->update_count(); // Updating term count is mandatory ( thanks to AndyDeGroo ) } if ( 'term' === $type ) { clean_term_cache( $ids, 'term_language' ); foreach ( $ids as $id ) { $translations[] = array( $lang->slug => $id ); } if ( ! empty( $translations ) ) { $this->set_translation_in_mass( 'term', $translations ); } } else { clean_term_cache( $ids, 'language' ); } } /** * Used to create a translations groups in mass * * @since 1.6.3 * * @param string $type either 'post' or 'term' * @param array $translations array of translations arrays */ public function set_translation_in_mass( $type, $translations ) { global $wpdb; $taxonomy = $type . '_translations'; foreach ( $translations as $t ) { $term = uniqid( 'pll_' ); // the term name $terms[] = $wpdb->prepare( '( "%s", "%s" )', $term, $term ); $slugs[] = $wpdb->prepare( '"%s"', $term ); $description[ $term ] = serialize( $t ); $count[ $term ] = count( $t ); } // Insert terms if ( ! empty( $terms ) ) { $terms = array_unique( $terms ); $wpdb->query( "INSERT INTO $wpdb->terms ( slug, name ) VALUES " . implode( ',', $terms ) ); } // Get all terms with their term_id $terms = $wpdb->get_results( "SELECT term_id, slug FROM $wpdb->terms WHERE slug IN ( " . implode( ',', $slugs ) . ' )' ); // Prepare terms taxonomy relationship foreach ( $terms as $term ) { $term_ids[] = $term->term_id; $tts[] = $wpdb->prepare( '( %d, "%s", "%s", %d )', $term->term_id, $taxonomy, $description[ $term->slug ], $count[ $term->slug ] ); } // Insert term_taxonomy if ( ! empty( $tts ) ) { $tts = array_unique( $tts ); $wpdb->query( "INSERT INTO $wpdb->term_taxonomy ( term_id, taxonomy, description, count ) VALUES " . implode( ',', $tts ) ); } // Get all terms with term_taxonomy_id $terms = get_terms( $taxonomy, array( 'hide_empty' => false ) ); // Prepare objects relationships foreach ( $terms as $term ) { $t = unserialize( $term->description ); if ( in_array( $t, $translations ) ) { foreach ( $t as $object_id ) { if ( ! empty( $object_id ) ) { $trs[] = $wpdb->prepare( '( %d, %d )', $object_id, $term->term_taxonomy_id ); } } } } // Insert term_relationships if ( ! empty( $trs ) ) { $wpdb->query( "INSERT INTO $wpdb->term_relationships ( object_id, term_taxonomy_id ) VALUES " . implode( ',', $trs ) ); $trs = array_unique( $trs ); } clean_term_cache( $term_ids, $taxonomy ); } /** * Returns unstranslated posts and terms ids ( used in settings ) * * @since 0.9 * * @return array array made of an array of post ids and an array of term ids */ public function get_objects_with_no_lang() { $posts = get_posts( array( 'numberposts' => -1, 'nopaging' => true, 'post_type' => $this->get_translated_post_types(), 'post_status' => 'any', 'fields' => 'ids', 'tax_query' => array( array( 'taxonomy' => 'language', 'terms' => $this->get_languages_list( array( 'fields' => 'term_id' ) ), 'operator' => 'NOT IN', ), ), ) ); $terms = get_terms( $this->get_translated_taxonomies(), array( 'get' => 'all', 'fields' => 'ids' ) ); $groups = $this->get_languages_list( array( 'fields' => 'tl_term_id' ) ); $tr_terms = get_objects_in_term( $groups, 'term_language' ); $terms = array_unique( array_diff( $terms, $tr_terms ) ); // array_unique to avoid duplicates if a term is in more than one taxonomy $terms = array_map( 'intval', $terms ); /** * Filter the list of untranslated posts ids and terms ids * * @since 0.9 * * @param bool|array $objects false if no ids found, list of post and/or term ids otherwise */ return apply_filters( 'pll_get_objects_with_no_lang', empty( $posts ) && empty( $terms ) ? false : array( 'posts' => $posts, 'terms' => $terms ) ); } /** * Used to delete translations or update the translations when a language slug has been modified in settings * * @since 0.5 * * @param string $old_slug the old language slug * @param string $new_slug optional, the new language slug, if not set it means the correspondant has been deleted */ public function update_translations( $old_slug, $new_slug = '' ) { global $wpdb; $terms = get_terms( array( 'post_translations', 'term_translations' ) ); foreach ( $terms as $term ) { $term_ids[ $term->taxonomy ][] = $term->term_id; $tr = unserialize( $term->description ); if ( ! empty( $tr[ $old_slug ] ) ) { if ( $new_slug ) { $tr[ $new_slug ] = $tr[ $old_slug ]; // Suppress this for delete } else { $dr['id'][] = (int) $tr[ $old_slug ]; $dr['tt'][] = (int) $term->term_taxonomy_id; } unset( $tr[ $old_slug ] ); if ( empty( $tr ) || 1 == count( $tr ) ) { $dt['t'][] = (int) $term->term_id; $dt['tt'][] = (int) $term->term_taxonomy_id; } else { $ut['case'][] = $wpdb->prepare( 'WHEN %d THEN %s', $term->term_id, serialize( $tr ) ); $ut['in'][] = (int) $term->term_id; } } } // Delete relationships if ( ! empty( $dr ) ) { $wpdb->query( " DELETE FROM $wpdb->term_relationships WHERE object_id IN ( " . implode( ',', $dr['id'] ) . ' ) AND term_taxonomy_id IN ( ' . implode( ',', $dr['tt'] ) . ' ) ' ); } // Delete terms if ( ! empty( $dt ) ) { $wpdb->query( "DELETE FROM $wpdb->terms WHERE term_id IN ( " . implode( ',', $dt['t'] ) . ' )' ); $wpdb->query( "DELETE FROM $wpdb->term_taxonomy WHERE term_taxonomy_id IN ( " . implode( ',', $dt['tt'] ) . ' )' ); } // Update terms if ( ! empty( $ut ) ) { $wpdb->query( " UPDATE $wpdb->term_taxonomy SET description = ( CASE term_id " . implode( ' ', $ut['case'] ) . ' END ) WHERE term_id IN ( ' . implode( ',', $ut['in'] ) . ' ) ' ); } if ( ! empty( $term_ids ) ) { foreach ( $term_ids as $taxonomy => $ids ) { clean_term_cache( $ids, $taxonomy ); } } } /** * Updates the default language * taking care to update the default category & the nav menu locations * * @since 1.8 * * @param string $slug new language slug */ public function update_default_lang( $slug ) { // The nav menus stored in theme locations should be in the default language $theme = get_stylesheet(); if ( ! empty( $this->options['nav_menus'][ $theme ] ) ) { foreach ( $this->options['nav_menus'][ $theme ] as $key => $loc ) { $menus[ $key ] = empty( $loc[ $slug ] ) ? 0 : $loc[ $slug ]; } set_theme_mod( 'nav_menu_locations', $menus ); } // The default category should be in the default language $default_cats = $this->term->get_translations( get_option( 'default_category' ) ); if ( isset( $default_cats[ $slug ] ) ) { update_option( 'default_category', $default_cats[ $slug ] ); } // Update options $this->options['default_lang'] = $slug; update_option( 'polylang', $this->options ); $this->clean_languages_cache(); flush_rewrite_rules(); } } admin/admin-nav-menu.php000066600000027060152100561460011172 0ustar00theme = get_option( 'stylesheet' ); // Populates nav menus locations // Since WP 4.4, must be done before customize_register is fired add_filter( 'theme_mod_nav_menu_locations', array( $this, 'theme_mod_nav_menu_locations' ), 20 ); // Integration in the WP menu interface add_action( 'admin_init', array( $this, 'admin_init' ) ); // after Polylang upgrade } /** * Setups filters and terms * adds the language switcher metabox and create new nav menu locations * * @since 1.1 */ public function admin_init() { add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) ); add_action( 'wp_update_nav_menu_item', array( $this, 'wp_update_nav_menu_item' ), 10, 2 ); add_filter( 'wp_get_nav_menu_items', array( $this, 'translate_switcher_title' ) ); // Translation of menus based on chosen locations add_filter( 'pre_update_option_theme_mods_' . $this->theme, array( $this, 'pre_update_option_theme_mods' ) ); add_action( 'delete_nav_menu', array( $this, 'delete_nav_menu' ) ); // Filter _wp_auto_add_pages_to_menu by language add_action( 'transition_post_status', array( $this, 'auto_add_pages_to_menu' ), 5, 3 ); // before _wp_auto_add_pages_to_menu // FIXME is it possible to choose the order ( after theme locations in WP3.5 and older ) ? // FIXME not displayed if Polylang is activated before the first time the user goes to nav menus http://core.trac.wordpress.org/ticket/16828 add_meta_box( 'pll_lang_switch_box', __( 'Language switcher', 'polylang' ), array( $this, 'lang_switch' ), 'nav-menus', 'side', 'high' ); $this->create_nav_menu_locations(); } /** * Language switcher metabox * The checkbox and all hidden fields are important * Thanks to John Morris for his very interesting post http://www.johnmorrisonline.com/how-to-add-a-fully-functional-custom-meta-box-to-wordpress-navigation-menus/ * * @since 1.1 */ public function lang_switch() { global $_nav_menu_placeholder, $nav_menu_selected_id; $_nav_menu_placeholder = 0 > $_nav_menu_placeholder ? $_nav_menu_placeholder - 1 : -1; ?>

class="button-secondary submit-add-to-menu right" value="" name="add-post-type-menu-item" id="submit-posttype-lang-switch">

base ) { return; } $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; wp_enqueue_script( 'pll_nav_menu', plugins_url( '/js/nav-menu' . $suffix . '.js', POLYLANG_FILE ), array( 'jquery' ), POLYLANG_VERSION ); $data['strings'] = PLL_Switcher::get_switcher_options( 'menu', 'string' ); // The strings for the options $data['title'] = __( 'Language switcher', 'polylang' ); // The title // Get all language switcher menu items $items = get_posts( array( 'numberposts' => -1, 'nopaging' => true, 'post_type' => 'nav_menu_item', 'fields' => 'ids', 'meta_key' => '_pll_menu_item', ) ); // The options values for the language switcher $data['val'] = array(); foreach ( $items as $item ) { $data['val'][ $item ] = get_post_meta( $item, '_pll_menu_item', true ); } // Send all these data to javascript wp_localize_script( 'pll_nav_menu', 'pll_data', $data ); } /** * Save our menu item options * * @since 1.1 * * @param int $menu_id not used * @param int $menu_item_db_id */ public function wp_update_nav_menu_item( $menu_id = 0, $menu_item_db_id = 0 ) { if ( empty( $_POST['menu-item-url'][ $menu_item_db_id ] ) || '#pll_switcher' != $_POST['menu-item-url'][ $menu_item_db_id ] ) { return; } // Security check as 'wp_update_nav_menu_item' can be called from outside WP admin if ( current_user_can( 'edit_theme_options' ) ) { check_admin_referer( 'update-nav_menu', 'update-nav-menu-nonce' ); $options = array( 'hide_if_no_translation' => 0, 'hide_current' => 0, 'force_home' => 0, 'show_flags' => 0, 'show_names' => 1, 'dropdown' => 0 ); // Default values // Our jQuery form has not been displayed if ( empty( $_POST['menu-item-pll-detect'][ $menu_item_db_id ] ) ) { if ( ! get_post_meta( $menu_item_db_id, '_pll_menu_item', true ) ) { // Our options were never saved update_post_meta( $menu_item_db_id, '_pll_menu_item', $options ); } } else { foreach ( $options as $opt => $v ) { $options[ $opt ] = empty( $_POST[ 'menu-item-' . $opt ][ $menu_item_db_id ] ) ? 0 : 1; } update_post_meta( $menu_item_db_id, '_pll_menu_item', $options ); // Allow us to easily identify our nav menu item } } } /** * Translates the language switcher menu items title in case the user switches the admin language * * @since 1.1.1 * * @param array $items * @return array modified $items */ public function translate_switcher_title( $items ) { foreach ( $items as $item ) { if ( '#pll_switcher' == $item->url ) { $item->post_title = __( 'Language switcher', 'polylang' ); } } return $items; } /** * Assign menu languages and translations based on ( temporary ) locations * * @since 1.8 * * @param array $locations nav menu locations * @return array */ public function update_nav_menu_locations( $locations ) { $default = $this->options['default_lang']; // Extract language and menu from locations foreach ( $locations as $loc => $menu ) { $infos = $this->explode_location( $loc ); $this->options['nav_menus'][ $this->theme ][ $infos['location'] ][ $infos['lang'] ] = $menu; if ( $this->options['default_lang'] != $infos['lang'] ) { unset( $locations[ $loc ] ); // Remove temporary locations before database update } } update_option( 'polylang', $this->options ); return $locations; } /** * Assign menu languages and translations based on ( temporary ) locations * * @since 1.1 * * @param array $mods theme mods * @return unmodified $mods */ public function pre_update_option_theme_mods( $mods ) { if ( current_user_can( 'edit_theme_options' ) && isset( $mods['nav_menu_locations'] ) ) { // Manage Locations tab in Appearance -> Menus if ( isset( $_GET['action'] ) && 'locations' == $_GET['action'] ) { check_admin_referer( 'save-menu-locations' ); $this->options['nav_menus'][ $this->theme ] = array(); } // Edit Menus tab in Appearance -> Menus // Add the test of $_POST['update-nav-menu-nonce'] to avoid conflict with Vantage theme elseif ( isset( $_POST['action'], $_POST['update-nav-menu-nonce'] ) && 'update' == $_POST['action'] ) { check_admin_referer( 'update-nav_menu', 'update-nav-menu-nonce' ); $this->options['nav_menus'][ $this->theme ] = array(); } // Customizer // Don't reset locations in this case. // see http://wordpress.org/support/topic/menus-doesnt-show-and-not-saved-in-theme-settings-multilingual-site elseif ( isset( $_POST['action'] ) && 'customize_save' == $_POST['action'] ) { check_ajax_referer( 'save-customize_' . $GLOBALS['wp_customize']->get_stylesheet(), 'nonce' ); } else { return $mods; // No modification for nav menu locations } $mods['nav_menu_locations'] = $this->update_nav_menu_locations( $mods['nav_menu_locations'] ); } return $mods; } /** * Fills temporary menu locations based on menus translations * * @since 1.2 * * @param bool|array $menus * @return bool|array modified list of menu locations */ public function theme_mod_nav_menu_locations( $menus ) { // Prefill locations with 0 value in case a location does not exist in $menus $locations = get_registered_nav_menus(); if ( is_array( $locations ) ) { $locations = array_fill_keys( array_keys( $locations ), 0 ); $menus = is_array( $menus ) ? array_merge( $locations , $menus ) : $locations; } if ( is_array( $menus ) ) { foreach ( $menus as $loc => $menu ) { foreach ( $this->model->get_languages_list() as $lang ) { if ( ! empty( $this->options['nav_menus'][ $this->theme ][ $loc ][ $lang->slug ] ) && term_exists( $this->options['nav_menus'][ $this->theme ][ $loc ][ $lang->slug ], 'nav_menu' ) ) { $menus[ $this->combine_location( $loc, $lang ) ] = $this->options['nav_menus'][ $this->theme ][ $loc ][ $lang->slug ]; } } } } return $menus; } /** * Removes the nav menu term_id from the locations stored in Polylang options when a nav menu is deleted * * @since 1.7.3 * * @param int $term_id nav menu id */ function delete_nav_menu( $term_id ) { if ( isset( $this->options['nav_menus'] ) ) { foreach ( $this->options['nav_menus'] as $theme => $locations ) { foreach ( $locations as $loc => $languages ) { foreach ( $languages as $lang => $menu_id ) { if ( $menu_id === $term_id ) { unset( $this->options['nav_menus'][ $theme ][ $loc ][ $lang ] ); } } } } update_option( 'polylang', $this->options ); } } /** * Filters the option nav_menu_options for auto added pages to menu * * @since 0.9.4 * * @param array $options * @return array Modified options */ public function nav_menu_options( $options ) { $options['auto_add'] = array_intersect( $options['auto_add'], $this->auto_add_menus ); return $options; } /** * Filters _wp_auto_add_pages_to_menu by language * * @since 0.9.4 * * @param string $new_status Transition to this post status. * @param string $old_status Previous post status. * @param object $post Post data. */ public function auto_add_pages_to_menu( $new_status, $old_status, $post ) { if ( 'publish' != $new_status || 'publish' == $old_status || 'page' != $post->post_type || ! empty( $post->post_parent ) || ! ( $lang = $this->model->post->get_language( $post->ID ) ) ) { return; } if ( ! empty( $this->options['nav_menus'][ $this->theme ] ) ) { $this->auto_add_menus = array(); // Get all the menus in the page language foreach ( $this->options['nav_menus'][ $this->theme ] as $loc ) { if ( ! empty( $loc[ $lang->slug ] ) ) { $this->auto_add_menus[] = $loc[ $lang->slug ]; } } add_filter( 'option_nav_menu_options', array( $this, 'nav_menu_options' ) ); } } } admin/admin-filters-post.php000066600000045444152100561460012105 0ustar00options = &$polylang->options; $this->curlang = &$polylang->curlang; add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) ); // Filters posts, pages and media by language add_action( 'parse_query', array( $this, 'parse_query' ) ); // Adds the Languages box in the 'Edit Post' and 'Edit Page' panels add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ), 10, 2 ); // Ajax response for changing the language in the post metabox add_action( 'wp_ajax_post_lang_choice', array( $this, 'post_lang_choice' ) ); add_action( 'wp_ajax_pll_posts_not_translated', array( $this, 'ajax_posts_not_translated' ) ); // Adds actions and filters related to languages when creating, saving or deleting posts and pages add_action( 'save_post', array( $this, 'save_post' ), 21, 3 ); // Priority 21 to come after advanced custom fields ( 20 ) and before the event calendar which breaks everything after 25 add_filter( 'wp_insert_post_parent', array( $this, 'wp_insert_post_parent' ), 10, 4 ); add_action( 'before_delete_post', array( $this, 'delete_post' ) ); if ( $this->options['media_support'] ) { add_action( 'delete_attachment', array( $this, 'delete_post' ) ); // Action shared with media } // Filters the pages by language in the parent dropdown list in the page attributes metabox add_filter( 'page_attributes_dropdown_pages_args', array( $this, 'page_attributes_dropdown_pages_args' ), 10, 2 ); // Sets the language in Tiny MCE add_filter( 'tiny_mce_before_init', array( $this, 'tiny_mce_before_init' ) ); } /** * Outputs a javascript list of terms ordered by language and hierarchical taxonomies * to filter the category checklist per post language in quick edit * Outputs a javascript list of pages ordered by language * to filter the parent dropdown per post language in quick edit * * @since 1.7 */ public function admin_enqueue_scripts() { $screen = get_current_screen(); // Hierarchical taxonomies if ( 'edit' == $screen->base && $taxonomies = get_object_taxonomies( $screen->post_type, 'object' ) ) { // Get translated hierarchical taxonomies foreach ( $taxonomies as $taxonomy ) { if ( $taxonomy->hierarchical && $taxonomy->show_in_quick_edit && $this->model->is_translated_taxonomy( $taxonomy->name ) ) { $hierarchical_taxonomies[] = $taxonomy->name; } } if ( ! empty( $hierarchical_taxonomies ) ) { $terms = get_terms( $hierarchical_taxonomies, array( 'get' => 'all' ) ); foreach ( $terms as $term ) { if ( $lang = $this->model->term->get_language( $term->term_id ) ) { $term_languages[ $lang->slug ][ $term->taxonomy ][] = $term->term_id; } } // Send all these data to javascript if ( ! empty( $term_languages ) ) { wp_localize_script( 'pll_post', 'pll_term_languages', $term_languages ); } } } // Hierarchical post types if ( 'edit' == $screen->base && is_post_type_hierarchical( $screen->post_type ) ) { $pages = get_pages(); foreach ( $pages as $page ) { if ( $lang = $this->model->post->get_language( $page->ID ) ) { $page_languages[ $lang->slug ][] = $page->ID; } } // Send all these data to javascript if ( ! empty( $page_languages ) ) { wp_localize_script( 'pll_post', 'pll_page_languages', $page_languages ); } } } /** * Filters posts, pages and media by language * * @since 0.1 * * @param object $query a WP_Query object */ public function parse_query( $query ) { $pll_query = new PLL_Query( $query, $this->model ); $pll_query->filter_query( $this->curlang ); } /** * Adds the Language box in the 'Edit Post' and 'Edit Page' panels ( as well as in custom post types panels ) * * @since 0.1 * * @param string $post_type Current post type * @param object $post Current post */ public function add_meta_boxes( $post_type, $post ) { if ( $this->model->is_translated_post_type( $post_type ) ) { add_meta_box( 'ml_box', __( 'Languages','polylang' ), array( $this, 'post_language' ), $post_type, 'side', 'high' ); } } /** * Displays the Languages metabox in the 'Edit Post' and 'Edit Page' panels * * @since 0.1 */ public function post_language() { global $post_ID; $post_id = $post_ID; $post_type = get_post_type( $post_ID ); $lang = ( $lg = $this->model->post->get_language( $post_ID ) ) ? $lg : ( isset( $_GET['new_lang'] ) ? $this->model->get_language( $_GET['new_lang'] ) : $this->pref_lang ); $dropdown = new PLL_Walker_Dropdown(); wp_nonce_field( 'pll_language', '_pll_nonce' ); // NOTE: the class "tags-input" allows to include the field in the autosave $_POST ( see autosave.js ) printf( '

%1$s

%4$s
', esc_html__( 'Language', 'polylang' ), $id = ( 'attachment' === $post_type ) ? sprintf( 'attachments[%d][language]', $post_ID ) : 'post_lang_choice', 'attachment' === $post_type ? 'media' : 'post', $dropdown->walk( $this->model->get_languages_list(), array( 'name' => $id, 'class' => 'post_lang_choice tags-input', 'selected' => $lang ? $lang->slug : '', 'flag' => true, ) ) ); /** * Fires before displaying the list of translations in the Languages metabox for posts * * @since 1.8 */ do_action( 'pll_before_post_translations', $post_type ); echo '
'; if ( $lang ) { include PLL_ADMIN_INC . '/view-translations-' . ( 'attachment' == $post_type ? 'media' : 'post' ) . '.php'; } echo '
' . "\n"; } /** * Ajax response for changing the language in the post metabox * * @since 0.2 */ public function post_lang_choice() { check_ajax_referer( 'pll_language', '_pll_nonce' ); global $post_ID; // Obliged to use the global variable for wp_popular_terms_checklist $post_id = $post_ID = (int) $_POST['post_id']; $lang = $this->model->get_language( $_POST['lang'] ); $post_type = $_POST['post_type']; $post_type_object = get_post_type_object( $post_type ); if ( ! current_user_can( $post_type_object->cap->edit_post, $post_ID ) ) { wp_die( -1 ); } $this->model->post->set_language( $post_ID, $lang ); // Save language, useful to set the language when uploading media from post ob_start(); if ( $lang ) { include PLL_ADMIN_INC . '/view-translations-' . ( 'attachment' == $post_type ? 'media' : 'post' ) . '.php'; } $x = new WP_Ajax_Response( array( 'what' => 'translations', 'data' => ob_get_contents() ) ); ob_end_clean(); // Categories if ( isset( $_POST['taxonomies'] ) ) { // Not set for pages foreach ( $_POST['taxonomies'] as $taxname ) { $taxonomy = get_taxonomy( $taxname ); ob_start(); $popular_ids = wp_popular_terms_checklist( $taxonomy->name ); $supplemental['populars'] = ob_get_contents(); ob_end_clean(); ob_start(); // Use $post_ID to remember ckecked terms in case we come back to the original language wp_terms_checklist( $post_ID, array( 'taxonomy' => $taxonomy->name, 'popular_cats' => $popular_ids ) ); $supplemental['all'] = ob_get_contents(); ob_end_clean(); $supplemental['dropdown'] = wp_dropdown_categories( array( 'taxonomy' => $taxonomy->name, 'hide_empty' => 0, 'name' => 'new' . $taxonomy->name . '_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => '— ' . $taxonomy->labels->parent_item . ' —', 'echo' => 0, ) ); $x->Add( array( 'what' => 'taxonomy', 'data' => $taxonomy->name, 'supplemental' => $supplemental ) ); } } // Parent dropdown list ( only for hierarchical post types ) if ( in_array( $post_type, get_post_types( array( 'hierarchical' => true ) ) ) ) { $post = get_post( $post_ID ); // Args and filter from 'page_attributes_meta_box' in wp-admin/includes/meta-boxes.php of WP 4.2.1 $dropdown_args = array( 'post_type' => $post->post_type, 'exclude_tree' => $post->ID, 'selected' => $post->post_parent, 'name' => 'parent_id', 'show_option_none' => __( '(no parent)' ), 'sort_column' => 'menu_order, post_title', 'echo' => 0, ); /** This filter is documented in wp-admin/includes/meta-boxes.php */ $dropdown_args = apply_filters( 'page_attributes_dropdown_pages_args', $dropdown_args, $post ); // Since WP 3.3 $x->Add( array( 'what' => 'pages', 'data' => wp_dropdown_pages( $dropdown_args ) ) ); } // Flag $x->Add( array( 'what' => 'flag', 'data' => empty( $lang->flag ) ? esc_html( $lang->slug ) : $lang->flag ) ); // Sample permalink $x->Add( array( 'what' => 'permalink', 'data' => get_sample_permalink_html( $post_ID ) ) ); $x->send(); } /** * Ajax response for input in translation autocomplete input box * * @since 1.5 */ public function ajax_posts_not_translated() { check_ajax_referer( 'pll_language', '_pll_nonce' ); if ( ! post_type_exists( $_GET['post_type'] ) ) { die( 0 ); } $post_language = $this->model->get_language( $_GET['post_language'] ); $translation_language = $this->model->get_language( $_GET['translation_language'] ); // Don't order by title: see https://wordpress.org/support/topic/find-translated-post-when-10-is-not-enough $args = array( 's' => wp_unslash( $_GET['term'] ), 'suppress_filters' => 0, // To make the post_fields filter work 'lang' => 0, // Avoid admin language filter 'numberposts' => 20, // Limit to 20 posts 'post_status' => 'any', 'post_type' => $_GET['post_type'], 'tax_query' => array( array( 'taxonomy' => 'language', 'field' => 'term_taxonomy_id', // WP 3.5+ 'terms' => $translation_language->term_taxonomy_id, ), ), ); /** * Filter the query args when auto suggesting untranslated posts in the Languages metabox * This should help plugins to fix some edge cases * * @see https://wordpress.org/support/topic/find-translated-post-when-10-is-not-enough * * @since 1.7 * * @param array $args WP_Query arguments */ $args = apply_filters( 'pll_ajax_posts_not_translated_args', $args ); $posts = get_posts( $args ); $return = array(); foreach ( $posts as $key => $post ) { if ( ! $this->model->post->get_translation( $post->ID, $post_language ) ) { $return[] = array( 'id' => $post->ID, 'value' => $post->post_title, 'link' => $this->links->edit_post_translation_link( $post->ID ), ); } } // Add current translation in list if ( $post_id = $this->model->post->get_translation( (int) $_GET['pll_post_id'], $translation_language ) ) { $post = get_post( $post_id ); array_unshift( $return, array( 'id' => $post_id, 'value' => $post->post_title, 'link' => $this->links->edit_post_translation_link( $post_id ), ) ); } wp_die( json_encode( $return ) ); } /** * Saves language * Checks the terms saved are in the right language * * @since 1.5 * * @param int $post_id * @param array $post */ protected function save_language( $post_id, $post ) { // Security checks are necessary to accept language modifications as 'wp_insert_post' can be called from outside WP admin // Edit post if ( isset( $_POST['post_lang_choice'], $_POST['post_ID'] ) && $_POST['post_ID'] == $post_id ) { check_admin_referer( 'pll_language', '_pll_nonce' ); $this->model->post->set_language( $post_id, $lang = $this->model->get_language( $_POST['post_lang_choice'] ) ); } // Quick edit and bulk edit // POST for quick edit, GET for bulk edit elseif ( isset( $_REQUEST['inline_lang_choice'] ) ) { // Bulk edit does not modify the language if ( isset( $_GET['bulk_edit'] ) && -1 == $_REQUEST['inline_lang_choice'] ) { check_admin_referer( 'bulk-posts' ); $lang = $this->model->post->get_language( $post_id ); // Get the post language for later use when saving terms } // A language is set in the language dropdown else { isset( $_GET['bulk_edit'] ) ? check_admin_referer( 'bulk-posts' ) : check_admin_referer( 'inlineeditnonce', '_inline_edit' ); $old_lang = $this->model->post->get_language( $post_id ); // Stores the old language $this->model->post->set_language( $post_id, $lang = $this->model->get_language( $_REQUEST['inline_lang_choice'] ) ); // set new language // Checks if the new language already exists in the translation group if ( $old_lang && $old_lang->slug != $lang->slug ) { $translations = $this->model->post->get_translations( $post_id ); // If yes, separate this post from the translation group if ( array_key_exists( $lang->slug, $translations ) ) { $this->model->post->delete_translation( $post_id ); } elseif ( array_key_exists( $old_lang->slug, $translations ) ) { unset( $translations[ $old_lang->slug ] ); $this->model->post->save_translations( $post_id, $translations ); } } } } // Quick press // 'post-quickpress-save', 'post-quickpress-publish' = backward compatibility WP < 3.8 elseif ( isset( $_REQUEST['action'] ) && in_array( $_REQUEST['action'], array( 'post-quickpress-save', 'post-quickpress-publish', 'post-quickdraft-save' ) ) ) { check_admin_referer( 'add-' . $post->post_type ); $this->model->post->set_language( $post_id, $lang = $this->pref_lang ); // Default language for Quick draft } else { $this->set_default_language( $post_id ); } // Make sure we get save terms in the right language (especially tags with same name in different languages) if ( ! empty( $lang ) ) { // FIXME quite a lot of queries in foreach foreach ( $this->model->get_translated_taxonomies() as $tax ) { $terms = get_the_terms( $post_id, $tax ); if ( is_array( $terms ) ) { $newterms = array(); foreach ( $terms as $term ) { // Check if the term is in the correct language or if a translation exist ( mainly for default category ) if ( $newterm = $this->model->term->get( $term->term_id, $lang ) ) { $newterms[] = (int) $newterm; } // Or choose the correct language for tags ( initially defined by name ) elseif ( $newterm = $this->model->term_exists( $term->name, $tax, $term->parent, $lang ) ) { $newterms[] = (int) $newterm; // Cast is important otherwise we get 'numeric' tags } // Or create the term in the correct language elseif ( ! is_wp_error( $term_info = wp_insert_term( $term->name, $tax ) ) ) { $newterms[] = (int) $term_info['term_id']; } } wp_set_object_terms( $post_id, $newterms, $tax ); } } } } /** * Called when a post ( or page ) is saved, published or updated * saves languages and translations * * @since 0.1 * * @param int $post_id * @param object $post * @param bool $update Whether it is an update or not */ public function save_post( $post_id, $post, $update ) { // Does nothing except on post types which are filterable if ( ! $this->model->is_translated_post_type( $post->post_type ) ) { return; } if ( $id = wp_is_post_revision( $post_id ) ) { $post_id = $id; } // Capability check // As 'wp_insert_post' can be called from outside WP admin $post_type_object = get_post_type_object( $post->post_type ); if ( ( $update && current_user_can( $post_type_object->cap->edit_post, $post_id ) ) || ( ! $update && current_user_can( $post_type_object->cap->create_posts ) ) ) { $this->save_language( $post_id, $post ); // Make sure we are saving translations only for the main post currently being edited if ( isset( $_POST['post_tr_lang'], $_POST['post_ID'] ) && $_POST['post_ID'] == $post_id ) { $translations = $this->save_translations( $post_id, $_POST['post_tr_lang'] ); } /** * Fires after the post language and translations are saved * * @since 1.2 * * @param int $post_id Post id * @param object $post Post object * @param array $translations The list of translations post ids */ do_action( 'pll_save_post', $post_id, $post, empty( $translations ) ? $this->model->post->get_translations( $post_id ) : $translations ); } // Attempts to set a default language even if no capability else { $this->set_default_language( $post_id ); } } /** * Make sure that the post parent is in the correct language when using bulk edit * * @since 1.8 * * @param int $post_parent Post parent ID. * @param int $post_id Post ID. * @param array $new_postarr Array of parsed post data. * @param array $postarr Array of sanitized, but otherwise unmodified post data. * @return int */ public function wp_insert_post_parent( $post_parent, $post_id, $new_postarr, $postarr ) { if ( isset( $postarr['bulk_edit'] ) ) { check_admin_referer( 'bulk-posts' ); $lang = -1 == $postarr['inline_lang_choice'] ? $this->model->post->get_language( $post_id ) : $this->model->get_language( $postarr['inline_lang_choice'] ); $post_parent = $this->model->post->get_translation( $post_parent, $lang ); } return $post_parent; } /** * Called when a post, page or media is deleted * Don't delete translations if this is a post revision thanks to AndyDeGroo who catched this bug * http://wordpress.org/support/topic/plugin-polylang-quick-edit-still-breaks-translation-linking-of-pages-in-072 * * @since 0.1 * * @param int $post_id */ public function delete_post( $post_id ) { if ( ! wp_is_post_revision( $post_id ) ) { $this->model->post->delete_translation( $post_id ); } } /** * Filters the pages by language in the parent dropdown list in the page attributes metabox * * @since 0.6 * * @param array $dropdown_args Arguments passed to wp_dropdown_pages * @param object $post * @return array Modified arguments */ public function page_attributes_dropdown_pages_args( $dropdown_args, $post ) { $dropdown_args['lang'] = isset( $_POST['lang'] ) ? $this->model->get_language( $_POST['lang'] ) : $this->model->post->get_language( $post->ID ); // ajax or not ? if ( ! $dropdown_args['lang'] ) { $dropdown_args['lang'] = $this->pref_lang; } return $dropdown_args; } /** * Sets the language attribute and text direction for Tiny MCE * * @since 2.2 * * @param array $mce_init TinyMCE config * @return array */ public function tiny_mce_before_init( $mce_init ) { if ( ! empty( $this->curlang ) ) { $mce_init['wp_lang_attr'] = $this->curlang->get_locale( 'display' ); $mce_init['directionality'] = $this->curlang->is_rtl ? 'rtl' : 'ltr'; } return $mce_init; } } admin/admin-strings.php000066600000011102152100561460011123 0ustar00 array( 'blogname' => __( 'Site Title' ), 'blogdescription' => __( 'Tagline' ), 'date_format' => __( 'Date Format' ), 'time_format' => __( 'Time Format' ), ), 'widget_title' => __( 'Widget title', 'polylang' ), 'widget_text' => __( 'Widget text', 'polylang' ), ); // WP strings foreach ( self::$default_strings['options'] as $option => $string ) { self::register_string( $string, get_option( $option ), 'WordPress' ); } // widgets titles global $wp_registered_widgets; $sidebars = wp_get_sidebars_widgets(); foreach ( $sidebars as $sidebar => $widgets ) { if ( 'wp_inactive_widgets' == $sidebar || empty( $widgets ) ) { continue; } foreach ( $widgets as $widget ) { // nothing can be done if the widget is created using pre WP2.8 API :( // there is no object, so we can't access it to get the widget options if ( ! isset( $wp_registered_widgets[ $widget ]['callback'][0] ) || ! is_object( $wp_registered_widgets[ $widget ]['callback'][0] ) || ! method_exists( $wp_registered_widgets[ $widget ]['callback'][0], 'get_settings' ) ) { continue; } $widget_settings = $wp_registered_widgets[ $widget ]['callback'][0]->get_settings(); $number = $wp_registered_widgets[ $widget ]['params'][0]['number']; // don't enable widget translation if the widget is visible in only one language or if there is no title if ( empty( $widget_settings[ $number ]['pll_lang'] ) ) { if ( isset( $widget_settings[ $number ]['title'] ) && $title = $widget_settings[ $number ]['title'] ) { self::register_string( self::$default_strings['widget_title'], $title, 'Widget' ); } if ( isset( $widget_settings[ $number ]['text'] ) && $text = $widget_settings[ $number ]['text'] ) { self::register_string( self::$default_strings['widget_text'], $text, 'Widget', true ); } } } } /** * Filter the list of strings registered for translation * Mainly for use by our PLL_WPML_Compat class * * @since 1.0.2 * * @param array $strings list of strings */ self::$strings = apply_filters( 'pll_get_strings', self::$strings ); return self::$strings; } /** * performs the sanitization ( before saving in DB ) of default strings translations * * @since 1.6 * * @param string $translation translation to sanitize * @param string $name unique name for the string * @return string */ static public function sanitize_string_translation( $translation, $name ) { $translation = wp_unslash( trim( $translation ) ); if ( false !== ( $option = array_search( $name, self::$default_strings['options'], true ) ) ) { $translation = sanitize_option( $option, $translation ); } if ( $name == self::$default_strings['widget_title'] ) { $translation = strip_tags( $translation ); } if ( $name == self::$default_strings['widget_text'] && ! current_user_can( 'unfiltered_html' ) ) { $translation = wp_unslash( wp_filter_post_kses( addslashes( $translation ) ) ); // wp_filter_post_kses() expects slashed } return $translation; } } admin/view-translations-media.php000066600000002211152100561460013113 0ustar00

model->get_languages_list() as $language ) { if ( $language->term_id == $lang->term_id ) { continue; } ?>
flag; ?>name ); ?> model->post->get_translation( $post_id, $language ) ) && $translation_id !== $post_id ) { printf( '%s', esc_attr( $language->slug ), esc_attr( $translation_id ), $this->links->edit_post_translation_link( $translation_id ) ); } // No translation else { echo $this->links->new_post_translation_link( $post_id, $language ); } ?>
admin/admin-filters-columns.php000066600000031165152100561460012573 0ustar00links = &$polylang->links; $this->model = &$polylang->model; $this->filter_lang = &$polylang->filter_lang; // add the language and translations columns in 'All Posts', 'All Pages' and 'Media library' panels foreach ( $this->model->get_translated_post_types() as $type ) { // use the latest filter late as some plugins purely overwrite what's done by others :( // specific case for media add_filter( 'manage_' . ( 'attachment' == $type ? 'upload' : 'edit-' . $type ) . '_columns', array( $this, 'add_post_column' ), 100 ); add_action( 'manage_' . ( 'attachment' == $type ? 'media' : $type . '_posts' ) . '_custom_column', array( $this, 'post_column' ), 10, 2 ); } // quick edit and bulk edit add_filter( 'quick_edit_custom_box', array( $this, 'quick_edit_custom_box' ), 10, 2 ); add_filter( 'bulk_edit_custom_box', array( $this, 'quick_edit_custom_box' ), 10, 2 ); // adds the language column in the 'Categories' and 'Post Tags' tables foreach ( $this->model->get_translated_taxonomies() as $tax ) { add_filter( 'manage_edit-' . $tax . '_columns', array( $this, 'add_term_column' ) ); add_filter( 'manage_' . $tax . '_custom_column', array( $this, 'term_column' ), 10, 3 ); } // ajax responses to update list table rows add_action( 'wp_ajax_pll_update_post_rows', array( $this, 'ajax_update_post_rows' ) ); add_action( 'wp_ajax_pll_update_term_rows', array( $this, 'ajax_update_term_rows' ) ); } /** * adds languages and translations columns in posts, pages, media, categories and tags tables * * @since 0.8.2 * * @param array $columns List of table columns * @param string $before The column before which we want to add our languages * @return array modified list of columns */ protected function add_column( $columns, $before ) { if ( $n = array_search( $before, array_keys( $columns ) ) ) { $end = array_slice( $columns, $n ); $columns = array_slice( $columns, 0, $n ); } foreach ( $this->model->get_languages_list() as $language ) { // don't add the column for the filtered language if ( empty( $this->filter_lang ) || $language->slug != $this->filter_lang->slug ) { $columns[ 'language_' . $language->slug ] = $language->flag ? $language->flag . '' . esc_html( $language->name ) . '' : esc_html( $language->slug ); } } return isset( $end ) ? array_merge( $columns, $end ) : $columns; } /** * returns the first language column in the posts, pages and media library tables * * @since 0.9 * * @return string first language column name */ protected function get_first_language_column() { foreach ( $this->model->get_languages_list() as $language ) { if ( empty( $this->filter_lang ) || $language->slug != $this->filter_lang->slug ) { $columns[] = 'language_' . $language->slug; } } return empty( $columns ) ? '' : reset( $columns ); } /** * adds the language and translations columns ( before the comments column ) in the posts, pages and media library tables * * @since 0.1 * * @param array $columns list of posts table columns * @return array modified list of columns */ function add_post_column( $columns ) { return $this->add_column( $columns, 'comments' ); } /** * fills the language and translations columns in the posts, pages and media library tables * take care that when doing ajax inline edit, the post may not be updated in database yet * * @since 0.1 * * @param string $column Column name * @param int $post_id */ public function post_column( $column, $post_id ) { $inline = wp_doing_ajax() && isset( $_REQUEST['action'], $_POST['inline_lang_choice'] ) && 'inline-save' === $_REQUEST['action']; $lang = $inline ? $this->model->get_language( $_POST['inline_lang_choice'] ) : $this->model->post->get_language( $post_id ); if ( false === strpos( $column, 'language_' ) || ! $lang ) { return; } $language = $this->model->get_language( substr( $column, 9 ) ); // hidden field containing the post language for quick edit if ( $column == $this->get_first_language_column() ) { printf( '', intval( $post_id ), esc_html( $lang->slug ) ); } $post_type_object = get_post_type_object( get_post_type( $post_id ) ); // link to edit post ( or a translation ) if ( $id = $this->model->post->get( $post_id, $language ) ) { // get_edit_post_link returns nothing if the user cannot edit the post // thanks to Solinx. See http://wordpress.org/support/topic/feature-request-incl-code-check-for-capabilities-in-admin-screens if ( $link = get_edit_post_link( $id ) ) { if ( $id === $post_id ) { $class = 'pll_icon_tick'; /* translators: accessibility text, %s is a native language name */ $s = sprintf( __( 'Edit this item in %s', 'polylang' ), $language->name ); } else { $class = esc_attr( 'pll_icon_edit translation_' . $id ); /* translators: accessibility text, %s is a native language name */ $s = sprintf( __( 'Edit the translation in %s', 'polylang' ), $language->name ); } printf( '%4$s', esc_attr( $class ), esc_attr( get_post( $id )->post_title ), esc_url( $link ), esc_html( $s ) ); } elseif ( $id === $post_id ) { printf( '%s', /* translators: accessibility text, %s is a native language name */ esc_html( sprintf( __( 'This item is in %s', 'polylang' ), $language->name ) ) ); } } // link to add a new translation else { echo $this->links->new_post_translation_link( $post_id, $language ); } } /** * quick edit & bulk edit * * @since 0.9 * * @param string $column column name * @param string $type either 'edit-tags' for terms list table or post type for posts list table * @return string unmodified $column */ public function quick_edit_custom_box( $column, $type ) { if ( $column == $this->get_first_language_column() ) { $elements = $this->model->get_languages_list(); if ( current_filter() == 'bulk_edit_custom_box' ) { array_unshift( $elements, (object) array( 'slug' => -1, 'name' => __( '— No Change —' ) ) ); } $dropdown = new PLL_Walker_Dropdown(); // the hidden field 'old_lang' allows to pass the old language to ajax request printf( '
', esc_html__( 'Language', 'polylang' ), $dropdown->walk( $elements, array( 'name' => 'inline_lang_choice', 'id' => '' ) ) ); } return $column; } /** * adds the language column ( before the posts column ) in the 'Categories' or 'Post Tags' table * * @since 0.1 * * @param array $columns list of terms table columns * @return array modified list of columns */ public function add_term_column( $columns ) { return $this->add_column( $columns, 'posts' ); } /** * fills the language column in the 'Categories' or 'Post Tags' table * * @since 0.1 * * @param string $out * @param string $column Column name * @param int $term_id */ public function term_column( $out, $column, $term_id ) { $inline = wp_doing_ajax() && isset( $_REQUEST['action'], $_POST['inline_lang_choice'] ) && 'inline-save-tax' === $_REQUEST['action']; if ( false === strpos( $column, 'language_' ) || ! ( $lang = $inline ? $this->model->get_language( $_POST['inline_lang_choice'] ) : $this->model->term->get_language( $term_id ) ) ) { return $out; } $post_type = isset( $GLOBALS['post_type'] ) ? $GLOBALS['post_type'] : $_REQUEST['post_type']; // 2nd case for quick edit $taxonomy = isset( $GLOBALS['taxonomy'] ) ? $GLOBALS['taxonomy'] : $_REQUEST['taxonomy']; if ( ! post_type_exists( $post_type ) || ! taxonomy_exists( $taxonomy ) ) { return $out; } $term_id = (int) $term_id; $language = $this->model->get_language( substr( $column, 9 ) ); if ( $column == $this->get_first_language_column() ) { $out = sprintf( '', intval( $term_id ), esc_html( $lang->slug ) ); // identify the default categories to disable the language dropdown in js if ( in_array( get_option( 'default_category' ), $this->model->term->get_translations( $term_id ) ) ) { $out .= sprintf( '', intval( $term_id ) ); } } // link to edit term ( or a translation ) if ( ( $id = $this->model->term->get( $term_id, $language ) ) && $term = get_term( $id, $taxonomy ) ) { if ( $link = get_edit_term_link( $id, $taxonomy, $post_type ) ) { if ( $id === $term_id ) { $class = 'pll_icon_tick'; /* translators: accessibility text, %s is a native language name */ $s = sprintf( __( 'Edit this item in %s', 'polylang' ), $language->name ); } else { $class = esc_attr( 'pll_icon_edit translation_' . $id ); /* translators: accessibility text, %s is a native language name */ $s = sprintf( __( 'Edit the translation in %s', 'polylang' ), $language->name ); } $out .= sprintf( '%4$s', $class, esc_attr( $term->name ), esc_url( $link ), esc_html( $s ) ); } elseif ( $id === $term_id ) { $out .= printf( '%s', /* translators: accessibility text, %s is a native language name */ esc_html( sprintf( __( 'This item is in %s', 'polylang' ), $language->name ) ) ); } } // link to add a new translation else { $out .= $this->links->new_term_translation_link( $term_id, $taxonomy, $post_type, $language ); } return $out; } /** * update rows of translated posts when the language is modified in quick edit * * @since 1.7 */ public function ajax_update_post_rows() { global $wp_list_table; if ( ! post_type_exists( $post_type = $_POST['post_type'] ) || ! $this->model->is_translated_post_type( $post_type ) ) { die( 0 ); } check_ajax_referer( 'inlineeditnonce', '_pll_nonce' ); $x = new WP_Ajax_Response(); $wp_list_table = _get_list_table( 'WP_Posts_List_Table', array( 'screen' => $_POST['screen'] ) ); $translations = empty( $_POST['translations'] ) ? array() : explode( ',', $_POST['translations'] ); // collect old translations $translations = array_merge( $translations, array( $_POST['post_id'] ) ); // add current post $translations = array_map( 'intval', $translations ); foreach ( $translations as $post_id ) { $level = is_post_type_hierarchical( $post_type ) ? count( get_ancestors( $post_id, $post_type ) ) : 0; if ( $post = get_post( $post_id ) ) { ob_start(); $wp_list_table->single_row( $post, $level ); $data = ob_get_clean(); $x->add( array( 'what' => 'row', 'data' => $data, 'supplemental' => array( 'post_id' => $post_id ) ) ); } } $x->send(); } /** * update rows of translated terms when adding / deleting a translation or when the language is modified in quick edit * * @since 1.7 */ public function ajax_update_term_rows() { global $wp_list_table; if ( ! taxonomy_exists( $taxonomy = $_POST['taxonomy'] ) || ! $this->model->is_translated_taxonomy( $taxonomy ) ) { die( 0 ); } check_ajax_referer( 'pll_language', '_pll_nonce' ); $x = new WP_Ajax_Response(); $wp_list_table = _get_list_table( 'WP_Terms_List_Table', array( 'screen' => $_POST['screen'] ) ); $translations = empty( $_POST['translations'] ) ? array() : explode( ',', $_POST['translations'] ); // collect old translations $translations = array_merge( $translations, $this->model->term->get_translations( (int) $_POST['term_id'] ) ); // add current translations $translations = array_unique( $translations ); // remove doublons $translations = array_map( 'intval', $translations ); foreach ( $translations as $term_id ) { $level = is_taxonomy_hierarchical( $taxonomy ) ? count( get_ancestors( $term_id, $taxonomy ) ) : 0; if ( $tag = get_term( $term_id, $taxonomy ) ) { ob_start(); $wp_list_table->single_row( $tag, $level ); $data = ob_get_clean(); $x->add( array( 'what' => 'row', 'data' => $data, 'supplemental' => array( 'term_id' => $term_id ) ) ); } } $x->send(); } } admin/admin-filters-term.php000066600000057747152100561460012100 0ustar00links = &$polylang->links; $this->model = &$polylang->model; $this->options = &$polylang->options; $this->curlang = &$polylang->curlang; $this->filter_lang = &$polylang->filter_lang; $this->pref_lang = &$polylang->pref_lang; foreach ( $this->model->get_translated_taxonomies() as $tax ) { // Adds the language field in the 'Categories' and 'Post Tags' panels add_action( $tax . '_add_form_fields', array( $this, 'add_term_form' ) ); // Adds the language field and translations tables in the 'Edit Category' and 'Edit Tag' panels add_action( $tax . '_edit_form_fields', array( $this, 'edit_term_form' ) ); // Adds action related to languages when deleting categories and post tags add_action( 'delete_' . $tax, array( $this, 'delete_term' ) ); } // Adds actions related to languages when creating or saving categories and post tags add_filter( 'wp_dropdown_cats', array( $this, 'wp_dropdown_cats' ) ); add_action( 'create_term', array( $this, 'save_term' ), 999, 3 ); add_action( 'edit_term', array( $this, 'save_term' ), 999, 3 ); // late as it may conflict with other plugins, see http://wordpress.org/support/topic/polylang-and-wordpress-seo-by-yoast add_action( 'pre_post_update', array( $this, 'pre_post_update' ) ); add_filter( 'pre_term_name', array( $this, 'pre_term_name' ) ); add_filter( 'pre_term_slug', array( $this, 'pre_term_slug' ), 10, 2 ); // Ajax response for edit term form add_action( 'wp_ajax_term_lang_choice', array( $this, 'term_lang_choice' ) ); add_action( 'wp_ajax_pll_terms_not_translated', array( $this, 'ajax_terms_not_translated' ) ); // Adds cache domain when querying terms add_filter( 'get_terms_args', array( $this, 'get_terms_args' ), 10, 2 ); // Filters categories and post tags by language add_filter( 'terms_clauses', array( $this, 'terms_clauses' ), 10, 3 ); // Allows to get the default categories in all languages add_filter( 'option_default_category', array( $this, 'option_default_category' ) ); add_action( 'update_option_default_category', array( $this, 'update_option_default_category' ), 10, 2 ); // Updates the translations term ids when splitting a shared term add_action( 'split_shared_term', array( $this, 'split_shared_term' ), 10, 4 ); // WP 4.2 } /** * Adds the language field in the 'Categories' and 'Post Tags' panels * * @since 0.1 */ public function add_term_form() { $taxonomy = $_GET['taxonomy']; $post_type = isset( $GLOBALS['post_type'] ) ? $GLOBALS['post_type'] : $_REQUEST['post_type']; if ( ! taxonomy_exists( $taxonomy ) || ! post_type_exists( $post_type ) ) { return; } $lang = isset( $_GET['new_lang'] ) ? $this->model->get_language( $_GET['new_lang'] ) : $this->pref_lang; $dropdown = new PLL_Walker_Dropdown(); wp_nonce_field( 'pll_language', '_pll_nonce' ); printf( '
%s

%s

', esc_html__( 'Language', 'polylang' ), $dropdown->walk( $this->model->get_languages_list(), array( 'name' => 'term_lang_choice', 'value' => 'term_id', 'selected' => $lang ? $lang->term_id : '', 'flag' => true, ) ), esc_html__( 'Sets the language', 'polylang' ) ); if ( ! empty( $_GET['from_tag'] ) ) { printf( '', (int) $_GET['from_tag'] ); } // Adds translation fields echo '
'; if ( $lang ) { include PLL_ADMIN_INC . '/view-translations-term.php'; } echo '
' . "\n"; } /** * Adds the language field and translations tables in the 'Edit Category' and 'Edit Tag' panels * * @since 0.1 * * @param object $tag */ public function edit_term_form( $tag ) { $post_type = isset( $GLOBALS['post_type'] ) ? $GLOBALS['post_type'] : $_REQUEST['post_type']; if ( ! post_type_exists( $post_type ) ) { return; } $term_id = $tag->term_id; $taxonomy = $tag->taxonomy; $lang = $this->model->term->get_language( $term_id ); $lang = empty( $lang ) ? $this->pref_lang : $lang; $dropdown = new PLL_Walker_Dropdown(); // Disable the language dropdown and the translations input fields for default categories to prevent removal $disabled = in_array( get_option( 'default_category' ), $this->model->term->get_translations( $term_id ) ); printf( ' %s %s

%s

', wp_nonce_field( 'pll_language', '_pll_nonce', true , false ), esc_html__( 'Language', 'polylang' ), $dropdown->walk( $this->model->get_languages_list(), array( 'name' => 'term_lang_choice', 'value' => 'term_id', 'selected' => $lang ? $lang->term_id : '', 'disabled' => $disabled, 'flag' => true, ) ), esc_html__( 'Sets the language', 'polylang' ) ); echo ''; if ( $lang ) { include PLL_ADMIN_INC . '/view-translations-term.php'; } echo '' . "\n"; } /** * Translates term parent if exists when using "Add new" ( translation ) * * @since 0.7 * * @param string $output html markup for dropdown list of categories * @return string modified html */ public function wp_dropdown_cats( $output ) { if ( isset( $_GET['taxonomy'], $_GET['from_tag'], $_GET['new_lang'] ) && taxonomy_exists( $_GET['taxonomy'] ) ) { $term = get_term( (int) $_GET['from_tag'], $_GET['taxonomy'] ); if ( $term && $id = $term->parent ) { $lang = $this->model->get_language( $_GET['new_lang'] ); if ( $parent = $this->model->term->get_translation( $id, $lang ) ) { return str_replace( '"' . $parent . '"', '"' . $parent . '" selected="selected"', $output ); } } } return $output; } /** * stores the current post_id when bulk editing posts for use in save_language and pre_term_slug * * @since 1.7 * * @param int $post_id */ public function pre_post_update( $post_id ) { if ( isset( $_GET['bulk_edit'] ) ) { $this->post_id = $post_id; } } /** * Allows to set a language by default for terms if it has no language yet * * @since 1.5.4 * * @param int $term_id * @param string $taxonomy */ protected function set_default_language( $term_id, $taxonomy ) { if ( ! $this->model->term->get_language( $term_id ) ) { // Sets language from term parent if exists thanks to Scott Kingsley Clark if ( ( $term = get_term( $term_id, $taxonomy ) ) && ! empty( $term->parent ) && $parent_lang = $this->model->term->get_language( $term->parent ) ) { $this->model->term->set_language( $term_id, $parent_lang ); } else { $this->model->term->set_language( $term_id, $this->pref_lang ); } } } /** * Saves language * * @since 1.5 * * @param int $term_id * @param string $taxonomy */ protected function save_language( $term_id, $taxonomy ) { global $wpdb; // Security checks are necessary to accept language modifications // as 'wp_update_term' can be called from outside WP admin // Edit tags if ( isset( $_POST['term_lang_choice'] ) ) { if ( 'add-' . $taxonomy == $_POST['action'] ) { check_ajax_referer( $_POST['action'], '_ajax_nonce-add-' . $taxonomy ); // category metabox } else { check_admin_referer( 'pll_language', '_pll_nonce' ); // edit tags or tags metabox } $this->model->term->set_language( $term_id, $this->model->get_language( $_POST['term_lang_choice'] ) ); } // *Post* bulk edit, in case a new term is created elseif ( isset( $_GET['bulk_edit'], $_GET['inline_lang_choice'] ) ) { check_admin_referer( 'bulk-posts' ); // Bulk edit does not modify the language // So we possibly create a tag in several languages if ( -1 == $_GET['inline_lang_choice'] ) { // The language of the current term is set a according to the language of the current post $this->model->term->set_language( $term_id, $this->model->post->get_language( $this->post_id ) ); $term = get_term( $term_id, $taxonomy ); // Get all terms with the same name // FIXME backward compatibility WP < 4.2 // No WP function to get all terms with the exact same name so let's use a custom query // $terms = get_terms( $taxonomy, array( 'name' => $term->name, 'hide_empty' => false, 'fields' => 'ids' ) ); should be OK in 4.2 // I may need to rework the loop below $terms = $wpdb->get_results( $wpdb->prepare( " SELECT t.term_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy = %s AND t.name = %s", $taxonomy, $term->name ) ); // If we have several terms with the same name, they are translations of each other if ( count( $terms ) > 1 ) { foreach ( $terms as $term ) { $translations[ $this->model->term->get_language( $term->term_id )->slug ] = $term->term_id; } $this->model->term->save_translations( $term_id, $translations ); } } else { $this->model->term->set_language( $term_id, $this->model->get_language( $_GET['inline_lang_choice'] ) ); } } // Quick edit elseif ( isset( $_POST['inline_lang_choice'] ) ) { check_ajax_referer( isset( $_POST['action'] ) && 'inline-save' == $_POST['action'] ? 'inlineeditnonce' : 'taxinlineeditnonce', // Post quick edit or tag quick edit ? '_inline_edit' ); $old_lang = $this->model->term->get_language( $term_id ); // Stores the old language $lang = $this->model->get_language( $_POST['inline_lang_choice'] ); // New language $translations = $this->model->term->get_translations( $term_id ); // Checks if the new language already exists in the translation group if ( $old_lang && $old_lang->slug != $lang->slug ) { if ( array_key_exists( $lang->slug, $translations ) ) { $this->model->term->delete_translation( $term_id ); } elseif ( array_key_exists( $old_lang->slug, $translations ) ) { unset( $translations[ $old_lang->slug ] ); $this->model->term->save_translations( $term_id, $translations ); } } $this->model->term->set_language( $term_id, $lang ); // Set new language } // Edit post elseif ( isset( $_POST['post_lang_choice'] ) ) { // FIXME should be useless now check_admin_referer( 'pll_language', '_pll_nonce' ); $this->model->term->set_language( $term_id, $this->model->get_language( $_POST['post_lang_choice'] ) ); } else { $this->set_default_language( $term_id, $taxonomy ); } } /** * Save translations from our form * * @since 1.5 * * @param int $term_id * @return array */ protected function save_translations( $term_id ) { // Security check as 'wp_update_term' can be called from outside WP admin check_admin_referer( 'pll_language', '_pll_nonce' ); // Save translations after checking the translated term is in the right language ( as well as cast id to int ) foreach ( $_POST['term_tr_lang'] as $lang => $tr_id ) { $tr_lang = $this->model->term->get_language( (int) $tr_id ); $translations[ $lang ] = $tr_lang && $tr_lang->slug == $lang ? (int) $tr_id : 0; } $this->model->term->save_translations( $term_id, $translations ); return $translations; } /** * Called when a category or post tag is created or edited * Saves language and translations * * @since 0.1 * * @param int $term_id * @param int $tt_id term taxononomy id * @param string $taxonomy */ public function save_term( $term_id, $tt_id, $taxonomy ) { // Does nothing except on taxonomies which are filterable if ( ! $this->model->is_translated_taxonomy( $taxonomy ) ) { return; } // Capability check // As 'wp_update_term' can be called from outside WP admin // 2nd test for creating tags when creating / editing a post $tax = get_taxonomy( $taxonomy ); if ( current_user_can( $tax->cap->edit_terms ) || ( isset( $_POST['tax_input'][ $taxonomy ] ) && current_user_can( $tax->cap->assign_terms ) ) ) { $this->save_language( $term_id, $taxonomy ); if ( isset( $_POST['term_tr_lang'] ) ) { $translations = $this->save_translations( $term_id ); } /** * Fires after the term language and translations are saved * * @since 1.2 * * @param int $term_id term id * @param string $taxonomy taxonomy name * @param array $translations the list of translations term ids */ do_action( 'pll_save_term', $term_id, $taxonomy, empty( $translations ) ? $this->model->term->get_translations( $term_id ) : $translations ); } // Attempts to set a default language even if no capability else { $this->set_default_language( $term_id, $taxonomy ); } } /** * Stores the term name for use in pre_term_slug * * @since 0.9.5 * * @param string $name term name * @return string unmodified term name */ public function pre_term_name( $name ) { return $this->pre_term_name = $name; } /** * Creates the term slug in case the term already exists in another language * * @since 0.9.5 * * @param string $slug * @param string $taxonomy * @return string */ public function pre_term_slug( $slug, $taxonomy ) { $name = sanitize_title( $this->pre_term_name ); // If the term already exists in another language if ( ! $slug && $this->model->is_translated_taxonomy( $taxonomy ) && term_exists( $name, $taxonomy ) ) { if ( isset( $_POST['term_lang_choice'] ) ) { $slug = $name . '-' . $this->model->get_language( $_POST['term_lang_choice'] )->slug; } elseif ( isset( $_POST['inline_lang_choice'] ) ) { $slug = $name . '-' . $this->model->get_language( $_POST['inline_lang_choice'] )->slug; } // *Post* bulk edit, in case a new term is created elseif ( isset( $_GET['bulk_edit'], $_GET['inline_lang_choice'] ) ) { // Bulk edit does not modify the language if ( -1 == $_GET['inline_lang_choice'] ) { $slug = $name . '-' . $this->model->post->get_language( $this->post_id )->slug; } else { $slug = $name . '-' . $this->model->get_language( $_GET['inline_lang_choice'] )->slug; } } } return $slug; } /** * Called when a category or post tag is deleted * Deletes language and translations * * @since 0.1 * * @param int $term_id */ public function delete_term( $term_id ) { $this->model->term->delete_translation( $term_id ); $this->model->term->delete_language( $term_id ); } /** * Ajax response for edit term form * * @since 0.2 */ public function term_lang_choice() { check_ajax_referer( 'pll_language', '_pll_nonce' ); $lang = $this->model->get_language( $_POST['lang'] ); $term_id = isset( $_POST['term_id'] ) ? (int) $_POST['term_id'] : null; $taxonomy = $_POST['taxonomy']; $post_type = $_POST['post_type']; if ( ! post_type_exists( $post_type ) || ! taxonomy_exists( $taxonomy ) ) { die( 0 ); } ob_start(); if ( $lang ) { include PLL_ADMIN_INC . '/view-translations-term.php'; } $x = new WP_Ajax_Response( array( 'what' => 'translations', 'data' => ob_get_contents() ) ); ob_end_clean(); // Parent dropdown list ( only for hierarchical taxonomies ) // $args copied from edit_tags.php except echo if ( is_taxonomy_hierarchical( $taxonomy ) ) { $args = array( 'hide_empty' => 0, 'hide_if_empty' => false, 'taxonomy' => $taxonomy, 'name' => 'parent', 'orderby' => 'name', 'hierarchical' => true, 'show_option_none' => __( 'None' ), 'echo' => 0, ); $x->Add( array( 'what' => 'parent', 'data' => wp_dropdown_categories( $args ) ) ); } // Tag cloud // Tests copied from edit_tags.php else { $tax = get_taxonomy( $taxonomy ); if ( ! is_null( $tax->labels->popular_items ) ) { $args = array( 'taxonomy' => $taxonomy, 'echo' => false ); if ( current_user_can( $tax->cap->edit_terms ) ) { $args = array_merge( $args, array( 'link' => 'edit' ) ); } if ( $tag_cloud = wp_tag_cloud( $args ) ) { $html = sprintf( '

%1$s

%2$s
', esc_html( $tax->labels->popular_items ), $tag_cloud ); $x->Add( array( 'what' => 'tag_cloud', 'data' => $html ) ); } } } // Flag $x->Add( array( 'what' => 'flag', 'data' => empty( $lang->flag ) ? esc_html( $lang->slug ) : $lang->flag ) ); $x->send(); } /** * Ajax response for input in translation autocomplete input box * * @since 1.5 */ public function ajax_terms_not_translated() { check_ajax_referer( 'pll_language', '_pll_nonce' ); $s = wp_unslash( $_GET['term'] ); $post_type = $_GET['post_type']; $taxonomy = $_GET['taxonomy']; if ( ! post_type_exists( $post_type ) || ! taxonomy_exists( $taxonomy ) ) { die( 0 ); } $term_language = $this->model->get_language( $_GET['term_language'] ); $translation_language = $this->model->get_language( $_GET['translation_language'] ); $return = array(); // It is more efficient to use one common query for all languages as soon as there are more than 2 foreach ( get_terms( $taxonomy, 'hide_empty=0&lang=0&name__like=' . $s ) as $term ) { $lang = $this->model->term->get_language( $term->term_id ); if ( $lang && $lang->slug == $translation_language->slug && ! $this->model->term->get_translation( $term->term_id, $term_language ) ) { $return[] = array( 'id' => $term->term_id, 'value' => $term->name, 'link' => $this->links->edit_term_translation_link( $term->term_id, $taxonomy, $post_type ), ); } } // Add current translation in list // Not in add term for as term_id is not set if ( 'undefined' !== $_GET['term_id'] && $term_id = $this->model->term->get_translation( (int) $_GET['term_id'], $translation_language ) ) { $term = get_term( $term_id, $taxonomy ); array_unshift( $return, array( 'id' => $term_id, 'value' => $term->name, 'link' => $this->links->edit_term_translation_link( $term->term_id, $taxonomy, $post_type ), ) ); } wp_die( json_encode( $return ) ); } /** * Get the language(s) to filter get_terms * * @since 1.7.6 * * @param array $taxonomies queried taxonomies * @param array $args get_terms arguments * @return object|string|bool the language(s) to use in the filter, false otherwise */ protected function get_queried_language( $taxonomies, $args ) { // Does nothing except on taxonomies which are filterable // Since WP 4.7, make sure not to filter wp_get_object_terms() if ( ! $this->model->is_translated_taxonomy( $taxonomies ) || ! empty( $args['object_ids'] ) ) { return false; } // If get_terms is queried with a 'lang' parameter if ( isset( $args['lang'] ) ) { return $args['lang']; } // On tags page, everything should be filtered according to the admin language filter except the parent dropdown if ( 'edit-tags.php' === $GLOBALS['pagenow'] && empty( $args['class'] ) ) { return $this->filter_lang; } return $this->curlang; } /** * Adds language dependent cache domain when querying terms * Useful as the 'lang' parameter is not included in cache key by WordPress * * @since 1.3 * * @param array $args * @param array $taxonomies * @return array modified arguments */ public function get_terms_args( $args, $taxonomies ) { // don't break _get_term_hierarchy() if ( 'all' === $args['get'] && 'id' === $args['orderby'] && 'id=>parent' === $args['fields'] ) { $args['lang'] = ''; } if ( $lang = $this->get_queried_language( $taxonomies, $args ) ) { $key = '_' . ( is_array( $lang ) ? implode( ',', $lang ) : $this->model->get_language( $lang )->slug ); $args['cache_domain'] = empty( $args['cache_domain'] ) ? 'pll' . $key : $args['cache_domain'] . $key; } return $args; } /** * Filters categories and post tags by language(s) when needed on admin side * * @since 0.5 * * @param array $clauses list of sql clauses * @param array $taxonomies list of taxonomies * @param array $args get_terms arguments * @return array modified sql clauses */ public function terms_clauses( $clauses, $taxonomies, $args ) { $lang = $this->get_queried_language( $taxonomies, $args ); return ! empty( $lang ) ? $this->model->terms_clauses( $clauses, $lang ) : $clauses; // adds our clauses to filter by current language } /** * Hack to avoid displaying delete link for the default category in all languages * Also returns the default category in the right language when called from wp_delete_term * * @since 1.2 * * @param int $value * @return int */ public function option_default_category( $value ) { // Filters the default category in note below the category list table and in settings->writing dropdown if ( isset( $this->pref_lang ) && $tr = $this->model->term->get( $value, $this->pref_lang ) ) { $value = $tr; } // FIXME backward compatibility with WP < 4.7 if ( version_compare( $GLOBALS['wp_version'], '4.7alpha', '<' ) ) { $traces = debug_backtrace(); $n = version_compare( PHP_VERSION, '7', '>=' ) ? 3 : 4; // PHP 7 does not include call_user_func_array if ( isset( $traces[ $n ] ) ) { // FIXME 'column_name' for backward compatibility with WP < 4.3 if ( in_array( $traces[ $n ]['function'], array( 'column_cb', 'column_name', 'handle_row_actions' ) ) && in_array( $traces[ $n ]['args'][0]->term_id, $this->model->term->get_translations( $value ) ) ) { return $traces[ $n ]['args'][0]->term_id; } if ( 'wp_delete_term' == $traces[ $n ]['function'] ) { return $this->model->term->get( $value, $this->model->term->get_language( $traces[ $n ]['args'][0] ) ); } } } return $value; } /** * Checks if the new default category is translated in all languages * If not, create the translations * * @since 1.7 * * @param int $old_value * @param int $value */ public function update_option_default_category( $old_value, $value ) { $default_cat_lang = $this->model->term->get_language( $value ); // Assign a default language to default category if ( ! $default_cat_lang ) { $default_cat_lang = $this->model->get_language( $this->options['default_lang'] ); $this->model->term->set_language( (int) $value, $default_cat_lang ); } foreach ( $this->model->get_languages_list() as $language ) { if ( $language->slug != $default_cat_lang->slug && ! $this->model->term->get_translation( $value, $language ) ) { $this->model->create_default_category( $language ); } } } /** * Updates the translations term ids when splitting a shared term * Splits translations if these are shared terms too * * @since 1.7 * * @param int $term_id Shared term_id * @param int $new_term_id * @param int $term_taxonomy_id * @param string $taxonomy */ public function split_shared_term( $term_id, $new_term_id, $term_taxonomy_id, $taxonomy ) { if ( ! $this->model->is_translated_taxonomy( $taxonomy ) ) { return; } // Avoid recursion static $avoid_recursion = false; if ( $avoid_recursion ) { return; } $avoid_recursion = true; $lang = $this->model->term->get_language( $term_id ); foreach ( $this->model->term->get_translations( $term_id ) as $key => $tr_id ) { if ( $lang->slug == $key ) { $translations[ $key ] = $new_term_id; } else { $tr_term = get_term( $tr_id, $taxonomy ); $translations[ $key ] = _split_shared_term( $tr_id, $tr_term->term_taxonomy_id ); // Hack translation ids sent by the form to avoid overwrite in PLL_Admin_Filters_Term::save_translations if ( isset( $_POST['term_tr_lang'][ $key ] ) && $_POST['term_tr_lang'][ $key ] == $tr_id ) { $_POST['term_tr_lang'][ $key ] = $translations[ $key ]; } } $this->model->term->set_language( $translations[ $key ], $key ); } $this->model->term->save_translations( $new_term_id, $translations ); $avoid_recursion = false; } } admin/admin.php000066600000007761152100561460007454 0ustar00 inherited, reference to Polylang options array * model => inherited, reference to PLL_Model object * links_model => inherited, reference to PLL_Links_Model object * links => inherited, reference to PLL_Admin_Links object * static_pages => inherited, reference to PLL_Admin_Static_Pages object * filters_links => inherited, reference to PLL_Filters_Links object * curlang => inherited, optional, current language used to filter the content (language of the post or term being edited, equal to filter_lang otherwise) * filter_lang => inherited, optional, current status of the admin languages filter (in the admin bar) * pref_lang => inherited, preferred language used as default when saving posts or terms * filters => reference to PLL_Filters object * filters_columns => reference to PLL_Admin_Filters_Columns object * filters_post => reference to PLL_Admin_Filters_Post object * filters_term => reference to PLL_Admin_filters_Term object * nav_menu => reference to PLL_Admin_Nav_Menu object * filters_media => optional, reference to PLL_Admin_Filters_Media object * * @since 1.2 */ class PLL_Admin extends PLL_Admin_Base { public $filters, $filters_columns, $filters_post, $filters_term, $nav_menu, $sync, $filters_media; /** * loads the polylang text domain * setups filters and action needed on all admin pages and on plugins page * * @since 1.2 * * @param object $links_model */ public function __construct( &$links_model ) { parent::__construct( $links_model ); // adds a 'settings' link in the plugins table add_filter( 'plugin_action_links_' . POLYLANG_BASENAME, array( $this, 'plugin_action_links' ) ); add_action( 'in_plugin_update_message-' . POLYLANG_BASENAME, array( $this, 'plugin_update_message' ), 10, 2 ); } /** * setups filters and action needed on all admin pages and on plugins page * loads the settings pages or the filters base on the request * * @since 1.2 */ public function init() { parent::init(); // setup filters for admin pages // priority 5 to make sure filters are there before customize_register is fired if ( $this->model->get_languages_list() ) { add_action( 'wp_loaded', array( $this, 'add_filters' ), 5 ); } } /** * adds a 'settings' link in the plugins table * * @since 0.1 * * @param array $links list of links associated to the plugin * @return array modified list of links */ public function plugin_action_links( $links ) { array_unshift( $links, '' . __( 'Settings', 'polylang' ) . '' ); return $links; } /** * adds the upgrade notice in plugins table * * @since 1.1.6 * * @param array $plugin_data Not used * @param object $r Plugin update data */ function plugin_update_message( $plugin_data, $r ) { if ( isset( $r->upgrade_notice ) ) { printf( '

%s

', esc_html( $r->upgrade_notice ) ); } } /** * setup filters for admin pages * * @since 1.2 */ public function add_filters() { // all these are separated just for convenience and maintainability $classes = array( 'Filters', 'Filters_Columns', 'Filters_Post', 'Filters_Term', 'Nav_Menu', 'Sync' ); // don't load media filters if option is disabled or if user has no right if ( $this->options['media_support'] && ( $obj = get_post_type_object( 'attachment' ) ) && ( current_user_can( $obj->cap->edit_posts ) || current_user_can( $obj->cap->create_posts ) ) ) { $classes[] = 'Filters_Media'; } foreach ( $classes as $class ) { $obj = strtolower( $class ); /** * Filter the class to instantiate when loding admin filters * * @since 1.5 * * @param string $class class name */ $class = apply_filters( 'pll_' . $obj, 'PLL_Admin_' . $class ); $this->$obj = new $class( $this ); } } } admin/admin-filters-media.php000066600000014102152100561460012162 0ustar00ID; $lang = $this->model->post->get_language( $post_id ); $dropdown = new PLL_Walker_Dropdown(); $fields['language'] = array( 'label' => __( 'Language', 'polylang' ), 'input' => 'html', 'html' => $dropdown->walk( $this->model->get_languages_list(), array( 'name' => sprintf( 'attachments[%d][language]', $post_id ), 'class' => 'media_lang_choice', 'selected' => $lang ? $lang->slug : '', ) ), ); return $fields; } /** * Creates a media translation * * @since 1.8 * * @param int $post_id * @param string|object $lang * @return int id of the translated media */ public function create_media_translation( $post_id, $lang ) { $post = get_post( $post_id ); if ( empty( $post ) ) { return $post; } $lang = $this->model->get_language( $lang ); // Make sure we get a valid language slug // Create a new attachment ( translate attachment parent if exists ) $post->ID = null; // Will force the creation $post->post_parent = ( $post->post_parent && $tr_parent = $this->model->post->get_translation( $post->post_parent, $lang->slug ) ) ? $tr_parent : 0; $post->tax_input = array( 'language' => array( $lang->slug ) ); // Assigns the language $tr_id = wp_insert_attachment( $post ); // Copy metadata, attached file and alternative text foreach ( array( '_wp_attachment_metadata', '_wp_attached_file', '_wp_attachment_image_alt' ) as $key ) { if ( $meta = get_post_meta( $post_id, $key , true ) ) { add_post_meta( $tr_id, $key, $meta ); } } $this->model->post->set_language( $tr_id, $lang ); $translations = $this->model->post->get_translations( $post_id ); if ( ! $translations && $src_lang = $this->model->post->get_language( $post_id ) ) { $translations[ $src_lang->slug ] = $post_id; } $translations[ $lang->slug ] = $tr_id; $this->model->post->save_translations( $tr_id, $translations ); /** * Fires after a media translation is created * * @since 1.6.4 * * @param int $post_id post id of the source media * @param int $tr_id post id of the new media translation * @param string $slug language code of the new translation */ do_action( 'pll_translate_media', $post_id, $tr_id, $lang->slug ); return $tr_id; } /** * Creates a media translation * * @since 0.9 */ public function translate_media() { // Security check check_admin_referer( 'translate_media' ); $post_id = (int) $_GET['from_media']; // Bails if the translations already exists // See https://wordpress.org/support/topic/edit-translation-in-media-attachments?#post-7322303 // Or if the source media does not exist if ( $this->model->post->get_translation( $post_id, $_GET['new_lang'] ) || ! get_post( $post_id ) ) { wp_safe_redirect( wp_get_referer() ); exit; } $tr_id = $this->create_media_translation( $post_id, $_GET['new_lang'] ); wp_safe_redirect( admin_url( sprintf( 'post.php?post=%d&action=edit', $tr_id ) ) ); // WP 3.5+ exit; } /** * Called when a media is saved * Saves language and translations * * @since 0.9 * * @param array $post * @param array $attachment * @return array unmodified $post */ public function save_media( $post, $attachment ) { // Language is filled in attachment by the function applying the filter 'attachment_fields_to_save' // All security checks have been done by functions applying this filter if ( ! empty( $attachment['language'] ) ) { $this->model->post->set_language( $post['ID'], $attachment['language'] ); } if ( isset( $_POST['media_tr_lang'] ) ) { $this->save_translations( $post['ID'], $_POST['media_tr_lang'] ); } return $post; } /** * Prevents WP deleting files when there are still media using them * Thanks to Bruno "Aesqe" Babic and its plugin file gallery in which I took all the ideas for this function * * @since 0.9 * * @param string $file * @return string unmodified $file */ public function wp_delete_file( $file ) { global $wpdb; $uploadpath = wp_upload_dir(); $ids = $wpdb->get_col( $wpdb->prepare( " SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_wp_attached_file' AND meta_value = '%s'", substr_replace( $file, '', 0, strlen( trailingslashit( $uploadpath['basedir'] ) ) ) ) ); if ( ! empty( $ids ) ) { // Regenerate intermediate sizes if it's an image ( since we could not prevent WP deleting them before ) wp_update_attachment_metadata( $ids[0], wp_generate_attachment_metadata( $ids[0], $file ) ); return ''; // Prevent deleting the main file } return $file; } } languages/polylang-ar.po000066600000045520152100561460011311 0ustar00msgid "" msgstr "" "Project-Id-Version: Polylang v1.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2015-02-14 09:12+0100\n" "Last-Translator: Anas H. Sulaiman \n" "Language-Team: \n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: ../\n" "X-Textdomain-Support: yes\n" "X-Generator: Poedit 1.5.4\n" "X-Poedit-SearchPath-0: .\n" # @ polylang #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "تأتي Polylang مع %sتوثيق%s شامل (باللغة الإنكليزية فقط). يتضمن التوثيق " "معلومات عن كيفية ضبط موقعك متعدد اللغات واستخدامه اليومي، وقسماً بالأسئلة " "الشائعة، بالإضافة إلى توثيق خاص بالمبرمجين لضبط قوالبهم وإضافاتهم." # @ polylang #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "ستجد معلومات مفيدة أيضاً في %sمنتدى الدعم%s. لكن لا تنس أن تبحث قبل أن تفتح " "موضوعاً جديداً." # @ polylang #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polylang إضافة مجانية، منشورة تحت رخصة ووردبرس نفسها، وهي رخصة %sGPL%s." # @ polylang #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "إذا كنت تتسائل كيف يمكنك دعم المشروع، فقط %sاقرأ هذا%s." # @ polylang #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "أخيراً، إن أعجبتك هذه الإضافة أو أنها مفيدة لأعمالك، تفضل بالتبرع لكاتبها ولك " "كل التقدير." # @ polylang #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "اللغات" # @ polylang #: include/switcher.php:22 msgid "Displays language names" msgstr "يعرض أسماء اللغات" # @ polylang #: include/switcher.php:23 msgid "Displays flags" msgstr "يعرض الأعلام" # @ polylang #: include/switcher.php:24 msgid "Forces link to front page" msgstr "يجبر الرابط إلى الصفحة الأمامية" # @ polylang #: include/switcher.php:25 msgid "Hides the current language" msgstr "يخفي اللغة الحالية" # @ polylang #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "يعرض قائمة منسدلة" # @ polylang #: admin/admin.php:267 msgid "Filters content by language" msgstr "يرشح المحتوى حسب اللغة" # @ polylang #: admin/admin.php:258 msgid "Show all languages" msgstr "اعرض كل اللغات" # @ polylang #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "أضف ترجمة جديدة" # @ polylang #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "اللغة" # @ polylang #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "الترجمات" # @ polylang #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "يضبط اللغة" # @ polylang #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "يعرض المربع الجانبي من أجل:" # @ polylang #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "كل اللغات" # @ polylang #: admin/admin-filters.php:123 msgid "Admin language" msgstr "لغة لوحة الإشراف" # @ polylang #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "افتراضي ووردبرس" # @ polylang #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "إعدادات" # @ polylang #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "تحديث ملفات اللغة…" # @ polylang #: admin/settings.php:62 msgid "About Polylang" msgstr "عن Polylang" # @ polylang #: admin/settings.php:78 msgid "Strings translations" msgstr "ترجمات الجمل" # @ polylang #: admin/settings.php:101 msgid "Strings translation" msgstr "ترجمة الجمل" # @ polylang #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "أدخل رمز مكان صحيح متوافق مع ووردبرس" # @ polylang #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "يجب أن يكون رمز اللغة فريداً" # @ polylang #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "يجب أن يكون للغة اسم" # @ polylang #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "تم إنشاء اللغة، لكن لم يتم تحميل ملف اللغة الخاص بووردبرس. رجاءً ثبته يدوياً." # @ polylang #: admin/admin-strings.php:59 msgid "Widget title" msgstr "عنوان المربع الجانبي" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "الفئات" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "حقول مخصصة" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "حالة التعليق" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "حالة التنبيه" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "مقالات مثبتة" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "تاريخ النشر" # @ polylang #: admin/settings.php:325 msgid "Post format" msgstr "تنسيق المقالة" # @ polylang #: admin/settings.php:326 msgid "Page parent" msgstr "أب الصفحة" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "قالب الصفحة" # @ polylang #: admin/settings.php:328 msgid "Page order" msgstr "ترتيب الصفحة" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "الصورة المميزة" # @ polylang #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "تحرير اللغة" # @ polylang #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "أضف لغة جديدة" # @ polylang #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "اختر لغة" # @ polylang #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "يمكنك اختيار لغة من القائمة أو تحريرها مباشرة في الأسفل." # @ polylang #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "الاسم الكامل" # @ polylang #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "الاسم كما سيظهر على موقعك (مثلاً: العربية)." # @ polylang #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "المكان" # @ polylang #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "رمز المكان الموافق لووردبرس والخاص باللغة (مثلاً: ar_SA). سيتوجب عليك تثبيت " "ملف .mo لهذه اللغة." # @ polylang #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "رمز اللغة" # @ polylang #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "جهة النص" # @ polylang #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "من اليسر إلى اليمين" # @ polylang #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "من اليمين إلى اليسار" # @ polylang #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "اختر جهة النص الخاصة باللغة" # @ polylang #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "الترتيب" # @ polylang #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "موضع اللغة في مبدل اللغات" # @ polylang #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "مبدل اللغات" # @ polylang #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "ابحث في الترجمات" # @ polylang #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "نظف قاعدة بيانات ترجمة الجمل" # @ polylang #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "اللغة الافتراضية" # @ polylang #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "هناك مقالات أو صفحات أو تصنيفات أو وسوم غير محددة اللغة. هل تريد تحديد اللغة " "الافتراضية كلغة لهم؟" # @ polylang #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "اكتشف لغة المتصفح" # @ polylang #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "عندما زيارة الصفحة الأمامية، اضبط اللغة وفقاً لتفضيلات المتصفح" # @ polylang #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "تعديلات الرابط" # @ polylang #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "اخف معلومات اللغة في الرابط من أجل اللغة الافتراضية" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "الوسائط" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "فعّل اللغات والترجمات من أجل الوسائط" # @ polylang #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "التزامن" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "أنواع المقالة المخصصة CPT" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "فعّل اللغات والترجمات من أجل أنواع المقالة المخصصة" # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "الفئات المخصصة" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "فعل اللغات والترجمات من أجل الفئات المخصصة" # @ polylang #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "تحرير" # @ polylang #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "حذف" # @ polylang #: admin/table-languages.php:76 msgid "Code" msgstr "الرمز" # @ polylang #: admin/table-languages.php:78 msgid "Flag" msgstr "العلم" # @ polylang #: admin/table-languages.php:79 msgid "Posts" msgstr "المقالات" # @ polylang #: admin/table-string.php:110 msgid "Name" msgstr "الاسم" # @ polylang #: admin/table-string.php:111 msgid "String" msgstr "الجملة" # @ polylang #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "أضف جديد" # @ polylang #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "مبدل اللغات" # @ polylang #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "يعرض مبدلاً للغات" # @ polylang #: include/widget-languages.php:75 msgid "Title:" msgstr "العنوان:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "إضافة إمكانية تعدد اللغات لووردبرس" # @ polylang #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "أنت تستخدم ووردبرس %s. تتطلب Polylang ووردبرس %s على الأقل." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "تم تعطيل Polylang لأنك حدثت من إصدار قديم جداً." # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "رجاء حدّث أولاً إلى الإصدار %s قبل التحديث إلى الإصدار %s." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "المجموعة" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "عرض كل المجموعات" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "أنت على وشك حذف هذه اللغة إلى الأبد. هل أنت متأكد؟" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "استخدم هذا لإزالة الجمل غير المستخدمة من قاعدة البيانات. على سبيل المثال، " "عندما تحذف أحد الإضافات." # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "يسمح خيار المزامنة بالحفاظ على القيم نفسها (أو الترجمات في حالة الفئات وأب " "الصفحة) للمحتوى التعريفي بين ترجمات مقالة أو صفحة." # @ polylang #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "يحتوي رمز اللغة على محارف خطأ" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "تضبط اللغة من المحتوى" # @ polylang #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "لا تعدل روابط المقالات أو الصفحات أو التصنيفات أو الوسوم." # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "تضبط اللغة من اسم الدليل في الروابط الدائمة الجميلة" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "مثال:" # @ polylang #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "تضبط اللغة من النطاق الفرعي في الروابط الدائمة الجميلة" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "تضبط اللغة من نطاقات مختلفة" # @ polylang #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "احذف /language/ من الروابط الدائمة الجميلة" # @ polylang #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "ابق على /language/ في الروابط الدائمة الجميلة" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "يتضمن رابط الصفحة الأمامية رمز اللغة بدلاً من اسم الصفحة أو رقمها" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "مثال: %s بدلاً من %s" # @ polylang #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "من المستحيل إضافة اللغة." # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "تمت إضافة اللغة." # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "تم حذف اللغة." # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "تم تحديث اللغة." # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "تم تحديث الترجمة." # @ polylang #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "رمز اللغة - يفضل أن يكون حرفين حسب المعيار ISO 639-1 (مثلاً: ar)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "يجب أن تكون الصفحة الأمامية المختارة مترجمة إلى جميع اللغات." # @ polylang #: admin/admin-strings.php:60 msgid "Widget text" msgstr "نص الودجت" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "إضافات مستحسنة" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "تحدد اللغة من رمزها في الرابط" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "اخف اللغات التي ليس لها ترجمات" languages/polylang-ary.po000066600000054701152100561460011503 0ustar00# Translation of Stable (latest release) in Moroccan Arabic # This file is distributed under the same license as the Stable (latest release) package. msgid "" msgstr "" "PO-Revision-Date: 2015-11-12 20:53+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" "X-Generator: Poedit 1.5.4\n" "Project-Id-Version: Stable (latest release)\n" "POT-Creation-Date: \n" "Last-Translator: \n" "Language-Team: \n" #: lingotek/lingotek.php:85 msgid "Activated" msgstr "مفعّل" #: lingotek/lingotek.php:85 msgid "Activate" msgstr "تفعيل" #: lingotek/lingotek.php:90 msgid "Request Translation" msgstr "طلب الترجمة" #: lingotek/lingotek.php:96 msgid "Request Services" msgstr "طلب خدمات" #: lingotek/lingotek.php:103 msgid "Polylang is now fully integrated with Lingotek, a professional translation management system!" msgstr "" #: lingotek/lingotek.php:106 msgid "Automatically Translate My Site" msgstr "ترجمة موقعي تلقائيا" #: lingotek/lingotek.php:107 msgid "Polylang is now fully integrated with Lingotek!" msgstr "" #: lingotek/lingotek.php:109 lingotek/lingotek.php:120 msgid "Access free machine translation for your site for up to 100,000 characters." msgstr "" #: lingotek/lingotek.php:110 msgid "Machine translation is an excellent option if you're on a tight budget, looking for near-instant results, and are okay with less-than-perfect quality." msgstr "" #: lingotek/lingotek.php:117 msgid "Translation Management System" msgstr "نظام إدارة الترجمات" #: lingotek/lingotek.php:118 msgid "Do you need to connect to a professional translation management system?" msgstr "" #: lingotek/lingotek.php:121 msgid "Access an online translator workbench." msgstr "" #: lingotek/lingotek.php:122 msgid "Have linguists compare side-by-side versions of original and translated text." msgstr "" #: lingotek/lingotek.php:123 msgid "Save and re-use previously translated material (leverage translation memory (TM))." msgstr "" #: lingotek/lingotek.php:130 msgid "Professionally Translate My Site" msgstr "" #: lingotek/lingotek.php:131 msgid "Do you need to professionally translate your site?" msgstr "" #: lingotek/lingotek.php:133 msgid "Start the process of getting a professional translation bid." msgstr "" #: lingotek/lingotek.php:134 msgid "Activate account so Lingotek can get an accurate count of how many words you have on your site and which languages you wish to translate into." msgstr "" #: lingotek/lingotek.php:135 msgid "Once activated click on the request translation bid and a certified translation project manager will contact you to give a no obligations translation bid." msgstr "" #: lingotek/lingotek.php:142 msgid "Need Extra Services?" msgstr "هل تحتاج لخدمات إضافية؟" #: lingotek/lingotek.php:143 msgid "Do you need help translating your site?" msgstr "" #: lingotek/lingotek.php:145 msgid "Start the process of getting extra services." msgstr "" #: lingotek/lingotek.php:146 msgid "Do you need someone to run your localization project?" msgstr "" #: lingotek/lingotek.php:147 msgid "Do you need customized workflows?" msgstr "" #: lingotek/lingotek.php:148 msgid "Do you you have existing Translation Memories you would like to use?" msgstr "" #: lingotek/lingotek.php:149 msgid "Do you need help creating glossaries and terminologies?" msgstr "" #: lingotek/lingotek.php:254 msgid "Learn more..." msgstr "تعلم أكثر..." #. Plugin Name of the plugin/theme msgid "Polylang" msgstr "بولي لانغ" #. Plugin URI of the plugin/theme msgid "http://polylang.wordpress.com/" msgstr "http://polylang.wordpress.com/" #. Description of the plugin/theme msgid "Adds multilingual capability to WordPress" msgstr "إضافة إمكانية تعدد اللغات لووردبرس" #. Author of the plugin/theme msgid "Frédéric Demarle" msgstr "فريديريك درمل" #. Author URI of the plugin/theme msgid "http://polylang.wordpress.com" msgstr "http://polylang.wordpress.com" #: admin/admin-filters-columns.php:141 admin/admin-filters-columns.php:236 msgid "Add new translation" msgstr "أضف ترجمة جديدة" #: admin/admin-filters-columns.php:161 msgid "— No Change —" msgstr "— لا توجد تغييرات —" #: admin/admin-filters-columns.php:174 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:159 admin/admin-filters-term.php:85 #: admin/admin-filters-term.php:136 include/model.php:591 msgid "Language" msgstr "اللغة" #: admin/admin-filters-post.php:133 admin/admin.php:96 admin/settings.php:70 #: admin/settings.php:97 include/model.php:590 msgid "Languages" msgstr "اللغات" #: admin/admin-filters-post.php:239 msgid "(no parent)" msgstr "" #: admin/admin-filters-post.php:474 admin/admin-filters-term.php:763 #: admin/table-languages.php:65 admin/view-translations-media.php:21 msgid "Edit" msgstr "تحرير" #: admin/admin-filters-term.php:92 admin/admin-filters-term.php:144 msgid "Sets the language" msgstr "يضبط اللغة" #: admin/admin-filters-term.php:454 msgid "None" msgstr "لا يوجد" #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "يعرض المربع الجانبي من أجل:" #: admin/admin-filters.php:55 include/model.php:592 msgid "All languages" msgstr "كل اللغات" #: admin/admin-filters.php:123 msgid "Admin language" msgstr "لغة لوحة الإشراف" #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "افتراضي ووردبرس" #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "تحديث ملفات اللغة…" #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "يجب أن تكون الصفحة الأمامية المختارة مترجمة إلى جميع اللغات." #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "من المستحيل إضافة اللغة." #: admin/admin-model.php:66 msgid "Language added." msgstr "تمت إضافة اللغة." #: admin/admin-model.php:145 msgid "Language deleted." msgstr "تم حذف اللغة." #: admin/admin-model.php:224 msgid "Language updated." msgstr "تم تحديث اللغة." #: admin/admin-model.php:241 msgid "Enter a valid WordPress locale" msgstr "أدخل رمز مكان صحيح متوافق مع ووردبرس" #: admin/admin-model.php:245 msgid "The language code contains invalid characters" msgstr "يحتوي رمز اللغة على محارف خطأ" #: admin/admin-model.php:249 msgid "The language code must be unique" msgstr "يجب أن يكون رمز اللغة فريداً" #: admin/admin-model.php:254 msgid "The language must have a name" msgstr "يجب أن يكون للغة اسم" #: admin/admin-nav-menu.php:52 admin/admin-nav-menu.php:73 #: admin/admin-nav-menu.php:76 admin/admin-nav-menu.php:107 #: admin/admin-nav-menu.php:169 install/upgrade.php:302 msgid "Language switcher" msgstr "مبدل اللغات" #: admin/admin-strings.php:54 msgid "Site Title" msgstr "عنوان الموقع" #: admin/admin-strings.php:55 msgid "Tagline" msgstr "" #: admin/admin-strings.php:56 msgid "Date Format" msgstr "شكل التاريخ" #: admin/admin-strings.php:57 msgid "Time Format" msgstr "شكل الوقت" #: admin/admin-strings.php:59 msgid "Widget title" msgstr "عنوان المربع الجانبي" #: admin/admin-strings.php:60 msgid "Widget text" msgstr "نص الودجت" #: admin/admin.php:204 admin/settings.php:102 msgid "Settings" msgstr "إعدادات" #: admin/admin.php:312 msgid "Show all languages" msgstr "اعرض كل اللغات" #: admin/admin.php:321 msgid "Filters content by language" msgstr "يرشح المحتوى حسب اللغة" #: admin/admin.php:419 admin/settings.php:183 msgid "The language was created, but the WordPress language file was not downloaded. Please install it manually." msgstr "تم إنشاء اللغة، لكن لم يتم تحميل ملف اللغة الخاص بووردبرس. رجاءً ثبته يدوياً." #: admin/settings.php:52 msgid "Recommended plugins" msgstr "إضافات مستحسنة" #: admin/settings.php:62 msgid "About Polylang" msgstr "عن Polylang" #: admin/settings.php:78 msgid "Strings translations" msgstr "ترجمات الجمل" #: admin/settings.php:101 msgid "Strings translation" msgstr "ترجمة الجمل" #: admin/settings.php:242 msgid "Translations updated." msgstr "تم تحديث الترجمة." #: admin/settings.php:300 msgid "Settings saved." msgstr "تم حفظ الاعدادات." #: admin/settings.php:321 msgid "Taxonomies" msgstr "الفئات" #: admin/settings.php:322 msgid "Custom fields" msgstr "حقول مخصصة" #: admin/settings.php:323 msgid "Comment status" msgstr "حالة التعليق" #: admin/settings.php:324 msgid "Ping status" msgstr "حالة التنبيه" #: admin/settings.php:325 msgid "Sticky posts" msgstr "مقالات مثبتة" #: admin/settings.php:326 msgid "Published date" msgstr "تاريخ النشر" #: admin/settings.php:327 msgid "Post format" msgstr "تنسيق المقالة" #: admin/settings.php:328 msgid "Page parent" msgstr "أب الصفحة" #: admin/settings.php:329 msgid "Page template" msgstr "قالب الصفحة" #: admin/settings.php:330 msgid "Page order" msgstr "ترتيب الصفحة" #: admin/settings.php:331 msgid "Featured image" msgstr "الصورة المميزة" #: admin/table-languages.php:70 msgid "You are about to permanently delete this language. Are you sure?" msgstr "أنت على وشك حذف هذه اللغة إلى الأبد. هل أنت متأكد؟" #: admin/table-languages.php:71 admin/table-string.php:168 msgid "Delete" msgstr "حذف" #: admin/table-languages.php:85 admin/view-tab-lang.php:55 msgid "Full name" msgstr "الاسم الكامل" #: admin/table-languages.php:86 admin/view-tab-lang.php:61 msgid "Locale" msgstr "المكان" #: admin/table-languages.php:87 msgid "Code" msgstr "الرمز" #: admin/table-languages.php:88 admin/view-tab-lang.php:91 msgid "Order" msgstr "الترتيب" #: admin/table-languages.php:89 msgid "Flag" msgstr "العلم" #: admin/table-languages.php:90 msgid "Posts" msgstr "المقالات" #: admin/table-string.php:109 msgid "String" msgstr "الجملة" #: admin/table-string.php:110 msgid "Name" msgstr "الاسم" #: admin/table-string.php:111 msgid "Group" msgstr "المجموعة" #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "الترجمات" #: admin/table-string.php:187 msgid "View all groups" msgstr "عرض كل المجموعات" #: admin/table-string.php:200 msgid "Filter" msgstr "تصفية" #: admin/view-about.php:3 msgid "Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes." msgstr "تأتي Polylang مع %sتوثيق%s شامل (باللغة الإنكليزية فقط). يتضمن التوثيق معلومات عن كيفية ضبط موقعك متعدد اللغات واستخدامه اليومي، وقسماً بالأسئلة الشائعة، بالإضافة إلى توثيق خاص بالمبرمجين لضبط قوالبهم وإضافاتهم." #: admin/view-about.php:9 msgid "You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic." msgstr "ستجد معلومات مفيدة أيضاً في %sمنتدى الدعم%s. لكن لا تنس أن تبحث قبل أن تفتح موضوعاً جديداً." #: admin/view-about.php:16 msgid "Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s." msgstr "Polylang إضافة مجانية، منشورة تحت رخصة ووردبرس نفسها، وهي رخصة %sGPL%s." #: admin/view-about.php:22 msgid "If you wonder how you can help the project, just %sread this%s." msgstr "إذا كنت تتسائل كيف يمكنك دعم المشروع، فقط %sاقرأ هذا%s." #: admin/view-about.php:27 msgid "Finally if you like this plugin or if it helps your business, donations to the author are greatly appreciated." msgstr "أخيراً، إن أعجبتك هذه الإضافة أو أنها مفيدة لأعمالك، تفضل بالتبرع لكاتبها ولك كل التقدير." #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "تحرير اللغة" #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:103 msgid "Add new language" msgstr "أضف لغة جديدة" #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "اختر لغة" #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "يمكنك اختيار لغة من القائمة أو تحريرها مباشرة في الأسفل." #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "الاسم كما سيظهر على موقعك (مثلاً: العربية)." #: admin/view-tab-lang.php:66 msgid "WordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language." msgstr "رمز المكان الموافق لووردبرس والخاص باللغة (مثلاً: ar_SA). سيتوجب عليك تثبيت ملف .mo لهذه اللغة." #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "رمز اللغة" #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "رمز اللغة - يفضل أن يكون حرفين حسب المعيار ISO 639-1 (مثلاً: ar)" #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "جهة النص" #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "من اليسر إلى اليمين" #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "من اليمين إلى اليسار" #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "اختر جهة النص الخاصة باللغة" #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "موضع اللغة في مبدل اللغات" #: admin/view-tab-lang.php:103 msgid "Update" msgstr "تحديث" #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "اللغة الافتراضية" #: admin/view-tab-settings.php:29 msgid "There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?" msgstr "هناك مقالات أو صفحات أو تصنيفات أو وسوم غير محددة اللغة. هل تريد تحديد اللغة الافتراضية كلغة لهم؟" #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "تعديلات الرابط" #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "تضبط اللغة من المحتوى" #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "لا تعدل روابط المقالات أو الصفحات أو التصنيفات أو الوسوم." #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "تضبط اللغة من اسم الدليل في الروابط الدائمة الجميلة" #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "تحدد اللغة من رمزها في الرابط" #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:109 admin/view-tab-settings.php:118 msgid "Example:" msgstr "مثال:" #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "تضبط اللغة من النطاق الفرعي في الروابط الدائمة الجميلة" #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "تضبط اللغة من نطاقات مختلفة" #: admin/view-tab-settings.php:92 msgid "Hide URL language information for default language" msgstr "اخف معلومات اللغة في الرابط من أجل اللغة الافتراضية" #: admin/view-tab-settings.php:106 msgid "Remove /language/ in pretty permalinks" msgstr "احذف /language/ من الروابط الدائمة الجميلة" #: admin/view-tab-settings.php:115 msgid "Keep /language/ in pretty permalinks" msgstr "ابق على /language/ في الروابط الدائمة الجميلة" #: admin/view-tab-settings.php:130 msgid "The front page url contains the language code instead of the page name or page id" msgstr "يتضمن رابط الصفحة الأمامية رمز اللغة بدلاً من اسم الصفحة أو رقمها" #: admin/view-tab-settings.php:138 msgid "Example: %s instead of %s" msgstr "مثال: %s بدلاً من %s" #: admin/view-tab-settings.php:148 msgid "Detect browser language" msgstr "اكتشف لغة المتصفح" #: admin/view-tab-settings.php:154 msgid "When the front page is visited, set the language according to the browser preference" msgstr "عندما زيارة الصفحة الأمامية، اضبط اللغة وفقاً لتفضيلات المتصفح" #: admin/view-tab-settings.php:161 msgid "Media" msgstr "الوسائط" #: admin/view-tab-settings.php:167 msgid "Activate languages and translations for media" msgstr "فعّل اللغات والترجمات من أجل الوسائط" #: admin/view-tab-settings.php:175 msgid "Custom post types" msgstr "أنواع المقالة المخصصة CPT" #: admin/view-tab-settings.php:188 msgid "Activate languages and translations for custom post types." msgstr "فعّل اللغات والترجمات من أجل أنواع المقالة المخصصة" #: admin/view-tab-settings.php:195 msgid "Custom taxonomies" msgstr "الفئات المخصصة" #: admin/view-tab-settings.php:208 msgid "Activate languages and translations for custom taxonomies." msgstr "فعل اللغات والترجمات من أجل الفئات المخصصة" #: admin/view-tab-settings.php:214 msgid "Synchronization" msgstr "التزامن" #: admin/view-tab-settings.php:225 msgid "The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page." msgstr "يسمح خيار المزامنة بالحفاظ على القيم نفسها (أو الترجمات في حالة الفئات وأب الصفحة) للمحتوى التعريفي بين ترجمات مقالة أو صفحة." #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "ابحث في الترجمات" #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "نظف قاعدة بيانات ترجمة الجمل" #: admin/view-tab-strings.php:12 msgid "Use this to remove unused strings from database, for example after a plugin has been uninstalled." msgstr "استخدم هذا لإزالة الجمل غير المستخدمة من قاعدة البيانات. على سبيل المثال، عندما تحذف أحد الإضافات." #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "أضف جديد" #: frontend/frontend-filters-search.php:80 msgid "Search" msgstr "البحث" #: include/model.php:755 msgid "Uncategorized" msgstr "غير مصنّف" #: include/plugins-compat.php:89 msgid "Import posts, pages, comments, custom fields, categories, and tags from a WordPress export file." msgstr "" #: include/switcher.php:22 msgid "Displays language names" msgstr "يعرض أسماء اللغات" #: include/switcher.php:23 msgid "Displays flags" msgstr "يعرض الأعلام" #: include/switcher.php:24 msgid "Forces link to front page" msgstr "يجبر الرابط إلى الصفحة الأمامية" #: include/switcher.php:25 msgid "Hides the current language" msgstr "يخفي اللغة الحالية" #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "اخف اللغات التي ليس لها ترجمات" #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "يعرض قائمة منسدلة" #. translators: Calendar caption: 1: month name, 2: 4-digit year #: include/widget-calendar.php:124 msgctxt "calendar caption" msgid "%1$s %2$s" msgstr "%1$s %2$s" #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "مبدل اللغات" #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "يعرض مبدلاً للغات" #: include/widget-languages.php:75 msgid "Title:" msgstr "العنوان:" #: include/widget-recent-comments.php:46 msgid "Recent Comments" msgstr "آخر التعليقات" #. translators: comments widget: 1: comment author, 2: post link #: include/widget-recent-comments.php:84 msgctxt "widgets" msgid "%1$s on %2$s" msgstr "%1$s on %2$s" #: include/widget-recent-posts.php:46 msgid "Recent Posts" msgstr "آخر المقالات" #: install/install.php:24 msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "أنت تستخدم ووردبرس %s. تتطلب Polylang ووردبرس %s على الأقل." #: install/upgrade.php:76 msgid "Polylang has been deactivated because you upgraded from a too old version." msgstr "تم تعطيل Polylang لأنك حدثت من إصدار قديم جداً." #: install/upgrade.php:78 msgid "Please upgrade first to %s before ugrading to %s." msgstr "رجاء حدّث أولاً إلى الإصدار %s قبل التحديث إلى الإصدار %s." #: lingotek/lingotek.php:26 msgid "You’ve just upgraded to the latest version of Polylang! Would you like to automatically translate your website for free?" msgstr "" #: lingotek/lingotek.php:30 msgid "Close" msgstr "" #: lingotek/lingotek.php:33 msgid "Learn more" msgstr "قراءة المزيد" #: lingotek/lingotek.php:39 msgid "Click on Activate Lingotek to start translating." msgstr "" #: lingotek/lingotek.php:42 msgid "Activate Lingotek" msgstr "" #: lingotek/lingotek.php:54 msgid "Congratulations!" msgstr "ألف مبروك!" languages/polylang-id_ID.mo000066600000026313152100561460011653 0ustar00ullm:|:- (9)Mw *"   . @ Q X p         - nI    2 # > ?Y  $    A Y k }     1 J \_ 1 87F&Z  A*Ql-  *.,Y@@i&Dr $1GYayT @ LpY@D@b % 3A:6*Lw1  %*Douz(1 9Zu.&A N/T_# ($ M T d x >      !!!&! 5!C! S!<_!U!b!1U"## ##7## $*+$V$ f$ s$~$$$$$$ $ $ $H%MQ%,%%%(%!'&8I&9&&l&iD''"a(( ) ))6)'E)im))b) O* [*kh**4*K$+]p++ , ,About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCloseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides languages with no translationHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRecommended pluginsRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe chosen static front page must be translated in all languages.The front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the code in the URLThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget textWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: Stable (latest release) Report-Msgid-Bugs-To: POT-Creation-Date: Thu Nov 12 2015 21:37:46 GMT+0100 (CET) PO-Revision-Date: Thu Nov 12 2015 21:37:50 GMT+0100 (CET) Last-Translator: admin Language-Team: Language: Indonesian Plural-Forms: nplurals=1; plural=0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-SourceCharset: UTF-8 X-Generator: Loco - https://localise.biz/ X-Poedit-Basepath: . X-Poedit-SearchPath-0: .. X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2 X-Loco-Target-Locale: id_IDTentang PolylangAktifkan bahasa dan terjemahan untuk jenis tulisan kustom.Aktifkan bahasa dan terjemahan untuk taksonomi kustom.Aktifkan bahasa dan terjemahan untuk mediaTambah yang baruTambahkan bahasa baruTambahkan terjemahan baruTambahkan kapabilitas multi-bahasa pada WordPressBahasa untuk AdminSemua bahasaPilih sebuah bahasaPilih arah teks untuk bahasa tersebutBersihkan database terjemahan semua stringTutupKodeStatus komentarBidang kustom (custom fields)Jenis tulisan kustom (Custom post types)Taksonomi kustomBahasa bawaan (default)HapusDeteksi bahasa peramban (browser language)Tampilkan sebuah Pengalih BahasaTampilkan sebagai dropdownTampilkan benderaTampilkan nama-nama bahasaSuntingSunting bahasaMasukkan lokala (locale) WordPress yang valid.Contoh:Contoh: %s dan bukan %sGambar fitur (featured image)Pilah konten sesuai bahasaAkhir kata, jika Anda menyukai plugin ini ataupun merasa bahwa plugin ini membantu bisnis Anda, donasi kepada pengembangnya sangat dihargai.BenderaPaksa tautan ke halaman depanNama bahasaGrupSembunyikan URL informasi bahasa untuk bahasa bawaan (default language)Sembunyikan bahasa yang tak memiliki terjemahanSembunyikan bahasa saat iniJika Anda ingin tahu bagaimana agar bisa berkontribusi dalam proyek ini, silahkan %sbaca ini%s.Tidak dimungkinkan menambah bahasa.Biarkan /language/ pada permalink cantikBahasaPengalih BahasaBahasa ditambahkan.Kode bahasaKode bahasa - sebaiknya 2-letters ISO 639-1 (for example: en)Bahasa dihapus.Pengalih BahasaBahasa diperbarui.BahasaLokala (locale)MediaNamaUrutanUrutan halamanInduk halamanTemplet halamanStatus pingMohon tingkatkan dahulu ke %s sebelum meningkatkannya ke %s.Polylang telah dinonaktifkan karena Anda meningkatkannya dari versi yang sangat lama.Polylang disediakan gratis dan dirilis di bawah lisensi yang sama dengan WordPress, yaitu %sGPL%s.Polylang disediakan beserta %sdokumentasi%s yang lengkap (tapi dalam Bahasa Inggris). Dokumentasi tersebut meliputi informasi tentang cara mengatur situs multi-bahasa Anda dan menggunakannya sehari-hari, sebuah FAQ, serta dokumentasi untuk para programer untuk mengadaptasi plugin dan theme buatan mereka.Posisi bahasa dalam Pengalih BahasaFormat posTulisan (posts)URL untuk pos, halaman, kategori dan tag tidak berubah.Tanggal terbitDaftar plugin yang disarankanHilangkan /language/ pada permalink cantikCari terjemahanSetel bahasaPengaturanTampilkan semua bahasaTulisan-tulisan lekat (sticky posts)StringPenerjemahan stringTerjemahan stringSinkronisasiTaksonomiArah teksHalaman depan statis terpilih harus diterjemahkan ke dalam semua bahasa.URL halaman depan berisi kode bahasa, seharusnya nama halaman atau id halamanKode bahasa berisi karakter yang tidak validKode bahasa harus unikBahasa disetel dari kontenBahasa disetel dari domain yang berbeda.Bahasa disetel dari kode pada URLBahasa disetel dari nama direktori pada permalink cantikBahasa disetel dari nama subdomain pada permalink cantik.Bahasa harus memiliki namaBahasa telah dibuat, namun file bahasa untuk WordPress belum terunduh. Silahkan menginstalnya secara manual.Sebutan tersebut sebagai nama bahasa yang akan ditampilkan pada situs Anda (contohnya: Bahasa Indonesia)Opsi-opsi sinkronisasi memungkinkan untuk menjaga nilai (atau terjemahan, jika pada taksonomi dan induk halaman) dari isi meta agar tepat sama antara terjemahan pos atau halaman.Widget tersebut ditampilkan untuk:Terdapat tulisan, halaman, kategori atau tag tanpa set bahasa. Anda ingin menyetel semua itu ke bahasa bawaan (dafault language)?Judul:TerjemahanTerjemahan diperbarui.Modifikasi URLMemperbarui berkas-berkas bahasa…Gunakan ini untuk menghapus string-string dari database, misalnya setelah suatu plugin baru di-uninstall.Tampilkan semua grupSaat halaman depan dikunjungi, setel bahasa sesuai preferensi peramban (browser preference)Teks widgetJudul widgetLokala WordPress untuk bahasa tersebut (contohnya: id_ID). Anda harus menginstal file .mo untuk bahasa ini.Bawaan WordPress (default)Anda akan menghapus permanen bahasa ini. Anda yakin?Anda menggunakan WordPress %s. Polylang memerlukan setidaknya WordPress %s.Anda dapat memilih satu bahasa dari daftar yang ada atau langsung menyuntingnya di bawah ini.Anda juga akan menemukan informasi bermanfaat di dalam %sforum pendukung (support forum)%s. Walaupun demikian, lakukan terlebih dahulu pencarian mengenai topik Anda yang inginkan sebelum membuat topik baru di forum tersebut.kiri ke kanankanan ke kirilanguages/polylang-et.mo000066600000024555152100561460011321 0ustar00o ` a :p : -   - )A k z  * "     . ? F ^ {         n7    2  ?# c $    A #5G Ycjpu {   1J\)1 8&7K]f y Q-2 ` *@@OimDrd kxa"T2 p@DX@ ` nQ| @;)Y     $-2CTq   +KS itU  C#V;z!*  %Q/    L FW O  !" $"F/"v"+" """""# ##1# D# Q#G^#)### $ ($"I$l$^$1$e%}%v% &&&+&I&bh&&O&/'_@''9'Y'QS((I)[)^ ,_BG"` >jo('QT c7MO[KEmCP=N/ *4 i&Vb+DA1).kXH80n]R$J?I@Y9lUWge\d#LS6f; <%a5h3!FZ2-:About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: Polylang Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: 2015-02-14 09:17+0100 Last-Translator: Ahto Naris Language-Team: Language: et MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Poedit-SourceCharset: utf-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: ../ X-Textdomain-Support: yes X-Generator: Poedit 1.5.4 X-Poedit-SearchPath-0: . Polylang infoAktiveeri keeled ja tõlked kohandatud postitusetüüpide jaoks.Aktiveeri keeled ja tõlked kohandatud taksonoomiate jaoks.Aktiveeri keeled ja tõlked meedia jaoks.Lisa uusLisa uus keelLisa uus tõlgeLisab mitmekeelsuse WordPressileHalduri keelKõik keeledVali keelVali keele teksti suund Puhasta sõnade tõlkimise andmebaasKoodKommentaari seisKohandatud väliKohandatud postitusetüübidKohandatud taksonoomiadVaikimisi keelKustutaTuvasta veebilehitseja keelNäitab keele vahetajatNäita rippmenüünaNäita lippeNäita keelte nimetusiMuudaMuuda keeltSisesta määrustepärane WordPressi localeNäide:Näide: %s asendab %sTunnuspiltFiltreerib sisu keele järgiKui see plugin meeldib teile või aitab teie äri kaaluge autorile annetuse tegemist.LippSuuna viide avaleheleTäisnimiGruppPeida keeleinfo aadressides (URL-ides), kui on kasutusel vaikekeel.Peidab hetkel kasutusel oleva keeleKui sul on isu selles projektis abiks olla alusta %ssiit%s.Seda keelt pole võimalik lisada.Säilita /language/ ilusates püsiviidetesKeelKeele vahetajaKeel lisatud.KeelekoodKeelekood - soovitatavalt ISO 639-1 standardile vastav 2-täheline (näiteks: et)Keel kustutatud.Keele vahetajaKeel uuendatud.KeeledLocaleMeediaNimiJärjekordLehe järjekorranr.ÜlemlehtLehe mallPing-i seisPalun uuendage kõigepealt versioonile %s ja alles seejärel versioonile %s.Polylang on deaktiveeritud kuna uuendasite liiga vana versiooni pealt.Polylang on tasuta ja avaldatud sama litsentsi alusel nagu WordPress - %sGPL%s.Polylang on varustatud ulatusliku %sdokumentatsiooniga%s (ainult inglise keeles). See sisaldab teavet kuidas luua ja kasutada igapäevaselt oma mitmekeelset kodulehte, KKK-d ning ka dokumentatsiooni programmeerijatele kuidas kohandada oma pluginad ja teemad.Keele positsioon keele vahetajasPostituse vormingPostitusedPostituste, lehtede, rubriikide ja siltide aadresse (URLe) ei muudeta.Avaldamise kuupäevEemalda /language/ ilusatest püsiviidetestOtsi tõlkeidMäärab keeleSättedNäita kõiki keeliEsilehepostitusedSõna(d)Sõnade tõlkimineSõnade tõlkimisedSünkroniseerimineTaksonoomiadTeksti suundEsilehe aadress (URL) sisaldab lehe nime või lehe id asemel keelekoodiKeelekood sisaldab sobimatuid tähemärkeKeelekood peab olema unikaalneKeel on määratud sisustKeel on määratud domeenidegaKeel on määratud kataloogidegaKeel on määratud alamdomeenidegaKeelel peab olema nimetusKeel loodi, aga WordPressi keelefaili allalaadimine ebaõnnestus. Palun paigalda see käsitsi.Täisnimi kuvatakse sinu lehel (näiteks: Eesti).Sünkroniseerimise võimalused lubavad säilitada meta seosed tõlgitud postituste ja lehtede vahel. Moodul kuvatakse:Leidub postitusi, lehti, rubriike või silte millel pole keel määratud. Kas soovite neile määrata vaikimisi keele?Pealkiri:TõlkedTõlked uuendatud.aadressi (URL) modifikatsioonKeelefailide uuendamine…Kasutage seda kasutamata sõnade eemaldamiseks andmebaasist, näiteks pärast plugina eemaldamist.Vaata kõiki gruppeKui külastatakse esilehte, kasuta keele määramiseks veebilehitseja eelistusiMooduli pealkiriWordPress Locale keelele (näiteks: en_US). Peate paigaldama .mo tõlkefaili selle keele jaoks.WordPressi vaikimisi väärtusOled sa kindel, et tahad selle keele jäädavalt kustuda?Kasutusel on WordPress %s. Polylang vajab töötamiseks vähemalt WordPress versiooni %s.Saate valida keele loendist või vahetult redigeerida allpool olevates lahtrites.Kasulikku informatsiooni on võimalik ka leida %sfoorumist%s. Paljud teemad on enne foorumis juba läbi arutatud, seega kasuta enne uue teema postitamist otsingut.vasakult paremaleparemalt vasakulelanguages/polylang-tr_TR.po000066600000041225152100561460011737 0ustar00msgid "" msgstr "" "Project-Id-Version: Polylang v1.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2015-02-14 09:26+0100\n" "Last-Translator: Abdullah Pazarbasi \n" "Language-Team: \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;" "__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;" "_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;" "esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;" "esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n" "X-Poedit-Basepath: .\n" "X-Loco-Target-Locale: tr_TR\n" "X-Generator: Poedit 1.5.4\n" "X-Language: tr_TR\n" "X-Source-Language: C\n" "X-Poedit-SearchPath-0: ..\n" "X-Poedit-SearchPath-1: ../include\n" #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang geniş bir %sdocumentation%s (sadece ingilizce) temin etmektedir. " "Belge içerisinde; çoklu dil desteğinin kendi sitenize nasıl kurulacağı ve " "kolay kullanımı, sık sorulan sorular ve geliştiriciler için kendi temalarını " "ve eklentilerini uyumlu hale getirmeleri için gerekli bilgiler bulunmaktadır." #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "Ayrıca %ssupport forum%s 'dan da yararlı bilgilere ulaşabilirsiniz. Ama yeni " "bir başlık açmadan önce arama yapmayı unutmayın." #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polylang'ın kullanımı ücretsizdir ve dağıtımı WordPress ile aynı lisans " "sözleşmesi %sGPL%s altında yapılmıştır." #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "" "Eğer bu projeye nasıl katkıda bulunabileceğinizi merak ediyorsanız, %sbunu " "okuyun%s." #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "Ve son olarak bu eklentiyi beğendiyseniz veya profesyonel anlamda size " "yararı dokunduysa, proje sahibine yapacağınız parasal destek mutlulukla " "karşılanacaktır." #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "Dil" #: include/switcher.php:22 msgid "Displays language names" msgstr "Dil isimlerini görüntüler" #: include/switcher.php:23 msgid "Displays flags" msgstr "Bayrakları görüntüler" #: include/switcher.php:24 msgid "Forces link to front page" msgstr "Bağlantıyı önsayfa yapmak için zorlar" #: include/switcher.php:25 msgid "Hides the current language" msgstr "Geçerli olan dili sakla" #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "Açılır menü halinde görüntüler" #: admin/admin.php:267 msgid "Filters content by language" msgstr "Dile göre içerik filtreleri" #: admin/admin.php:258 msgid "Show all languages" msgstr "Tüm dilleri göster" #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "Yeni çevri ekle" #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "Dil" #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Çevriler" #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "Dili geçerli dil olarak ayarlar." #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Bu bileşenin görüntüleneceği dil:" #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "Tüm diller" #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Yönetici dili" #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "WordPress varsayılanı" #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "Ayarlar" #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Dil dosyaları güncelleştiriliyor…" #: admin/settings.php:62 msgid "About Polylang" msgstr "Polylang Hakkında" #: admin/settings.php:78 msgid "Strings translations" msgstr "Cümle çevrisi" #: admin/settings.php:101 msgid "Strings translation" msgstr "Cümle Çevrisi" #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "Geçerli bir WordPress adresi girin" #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "Dil kodu daha önce kullanılmamış olmalı" #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "Girdiğiniz dilin bir ismi olmalı" #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "Dil oluşturuldu fakat WordPress için dil dosyası indirilemedi. Lütfen elden " "yükleyin." #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Bileşen başlığı" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "Taksonomiler" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "Özel alanlar" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "Yorum durumu" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "Ping durumu" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "Yapışkan gönderiler" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "Yayımlanma tarihi" # @ polylang #: admin/settings.php:325 msgid "Post format" msgstr "Gönderi formatı" #: admin/settings.php:326 msgid "Page parent" msgstr "Sayfa ebeveyni" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "Sayfa şablonu" #: admin/settings.php:328 msgid "Page order" msgstr "Sayfa sırası" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "Öne çıkan görsel" #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Dili düzenle" #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "Yeni Dil Ekle" #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Dil Seç" #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "" "Listeden bir dil seçebilirsiniz ya da direk aşağıdaki bölümden " "düzenleyebilirsiniz." #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Tam İsim" #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "Sitede dilin gösterileceği isim (örneğin: Türkçe)." #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "Bölge Kodu" #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "Dil için WordPress Bölge Kodu (örneğin: tr_TR). Bu dilin .mo uzantılı dil " "dosyasını yüklemeniz gerekiyor." #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Dil Kodu" #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Yazma yönü" #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "soldan sağa" #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "sağdan sola" #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Dil için yazma yönünü seçin" #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "Sıralama" #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Dilin dil değiştirici listesindeki pozisyonu" #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "Dil Değiştirici" #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Çevrilerde ara" #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Cümle çevri veritabanını temizle" #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Varsayılan dil" #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "Dili belirlenmemiş yazılar, sayfalar, kategoriler ve etiketler var. " "Varsayılan dil bunların hepsinin dili olarak ayarlansın mı?" #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "Tarayıcı dilini algıla" #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "Anasayfa açıldığında, geçerli dili tarayıcının diline ayarla" #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "URL dönüşümleri" #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "URL'de varsayılan dil için dil belirtecini gizle" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "Medya" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "Medya için diller ve çevrileri etkinleştir" #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "Senkronizasyon" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "Özel gönderi tipleri" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "Özel gönderi tipleri için diller ve çevrileri etkinleştir." # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "Özel taksonomiler" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "Özel taksonomiler için diller ve çevrileri etkinleştir." #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "Düzenle" #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "Sil" #: admin/table-languages.php:76 msgid "Code" msgstr "Kod" #: admin/table-languages.php:78 msgid "Flag" msgstr "Bayrak" #: admin/table-languages.php:79 msgid "Posts" msgstr "Yazılar" #: admin/table-string.php:110 msgid "Name" msgstr "İsim" #: admin/table-string.php:111 msgid "String" msgstr "Cümle" #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Yeni ekle" #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Dil Değiştirme Ekranı" #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "Dil değiştirme ekranını görüntüler" #: include/widget-languages.php:75 msgid "Title:" msgstr "Başlık:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "WordPress'e çokludil kabiliyeti kazandırır" #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "" "Siz WordPress'in %s sürümünü kullanıyorsunuz. Polylang'ı kullanabilmeniz " "için en az WordPress %s sürümüne ihtiyacınız var." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "" "Polylang aşırı eski bir versiyondan yükseltmenizden dolayı devredışı durumda." # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "Lütfen %2$s elemanını yükseltmeden önce %1$s elemanını yükseltin." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "Grup" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "Tüm grupları görüntüle" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "Bu dili kalıcı olarak silmek üzeresiniz. Emin misiniz?" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "Kullanılmayan cümleleri veritabanından kaldırmak için bunu kullanın. Örneğin " "bir eklentiyi kaldırdıktan sonra." # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "Senkronizasyon seçenekleri bir yazı ya da sayfanın çevrileri arasında meta " "içeriğin değerlerinin (veya taksonomi ve sayfa ebeveynleri çevrilerinin) tam " "olarak aynı kalmasına izin verir." #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "Dil kodu geçersiz karakterler içeriyor" #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "Dil içerik üzerinden ayarlanır" # @ polylang #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "" "Yazılar, sayfalar, kategoriler ve etiketlerin URL'leri dönüşüme uğramış " "değil." # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "Dil anlaşılır kalıcı bağlantılardaki dizin adı üzerinden ayarlanır" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "Örnek:" # @ polylang #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "Dil anlaşılır kalıcı bağlantılardaki subdomain adı üzerinden ayarlanır" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "Dil farklı domainler üzerinden ayarlanır" #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "/language/ kısmını anlaşılır kalıcı bağlantılardan kaldır" #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "/language/ kısmını anlaşılır kalıcı bağlantılarda koru" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "Ön sayfa URL'si sayfa adı veya sayfa ID'si yerine dil kodunu içeriyor" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "Örnek: %2$s yerine %1$s" #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "Dili eklemek imkansız." # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "Dil eklendi." # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "Dil silindi." # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "Dil güncellendi." # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "Çevriler güncellendi." #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "Dil kodu - tercihen 2 harfli ISO 639-1 içinden (örneğin: tr)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "Seçilen sabit ön sayfa tüm dillere çevrilmeli." #: admin/admin-strings.php:60 msgid "Widget text" msgstr "Bileşen metni" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "" #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "" languages/polylang-he_IL.mo000066600000030522152100561460011660 0ustar00t\  : : -V    )   * "5 X ] l z         ' , : Y b |  n   5 ? 2E #x  ?  $<EW gAu     & 41@Jr\1 JV8\& !.5I^ nyAQ- J k*,@@%fiD3r{ a9TI  p(@:D{@  QWV_=!<>{68(/E/].  ?S hs2 !  % B '3![!Xz!)!H!F"M"a" t"D""""# ##"# '#2# F#T#h#N|#Z#~&$D$)%& $&c1&&&H&'*' >'K'd' ~''' '''`'jZ(5(.(%*)7P)1)>)G)A*V*<*6+#/,S, -- -A-!R-t-).xF...x.b/Ov/o/[600*1>1+$iaY-3&D[E\k*;8!fO)Bep sS . c '>:0M=_"TKoU7nX< ZqRI/GCgFAt(WmrQP%?`^645V@b#dN]LJ 2j9hH1l,About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides languages with no translationHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRecommended pluginsRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe chosen static front page must be translated in all languages.The front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the code in the URLThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget textWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: polylang Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: Last-Translator: Ariel Klikstein Language-Team: Pojo Team Language: he MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: . X-Textdomain-Support: yes X-Generator: Poedit 1.7.4 X-Poedit-SearchPath-0: .. אודות התוסףהפעלת תרגום שפות עבור סוגי פוסטים מותאמים אישיתהפעלת תרגום שפות עבור טקסונומיות מותאמות אישיתהפעלת תרגום שפות עבור מערכת המדיההוספת חדשהוספת שפה חדשההוספת תרגום חדשהוספת יכולות שפות מרובה בוורדפרסשפת פאנל ניהולכל השפותבחירת שפהבחירת כיווניות טקסט עבור השפהניקוי מחרוזות תרגום מהדטא בייסקודסטטוס תגובהשדות מיוחדיםסוגי פוסטים מותאמים אישיתטקסונומיות מותאמות אישיתשפת ברירת מחדלמחיקהזיהוי שפת דפדפןהצגת מחליף השפותתצוגה בתפריט נפתחהצגת דגליםהצגת שם שפהעריכהעריכת שפהיש להזין מקום שתקף בוורדפרסלדוגמא:לדוגמא: %s במקום%sתמונה ראשיתסינון תוכן לפי שפהאם אתם ממש אוהבים את התוסף הזה או שזה עוזר לעסק שלכם, אני מאוד אעריך אם תתמכו בי.דגללקשר תמיד לעמוד הביתשם מלאקבוצההסרת שינוי כתובת עבור שפת ברירת מחדללהסתיר שפות ללא תרגוםהסתרת שפה נוכחיתאם הינכם מעוניינים לעזור לפרויקט הזה %sקראו כאן%s.לא ניתן להוסיף את השפה.לשמור /language/ לפני שם השפה במבנה הקישוריםשפהמחליף שפותשדה נוספה.קוד שפהקוד שפה - רצוי 2 אותיות ISO 639-1 (לדוגמא: he)שפה נמחקה.מחליף שפותשפה מעודכנת.שפותמיקוםמדיהשםסידורסידור עמודעמוד אבתבנית עמודסטטוס פינגאנא שדרגו ראשית כל ל %s לפני שאתם משדרגים ל %sתוסף השפות (Polylang) בוטל בגלל ששדרגת מגרסה ישנה מידיהתוסף ללא תשלום והוא משוחרר לשימוש חופשי ברישיון %sGPL%s בדומה לוורדפרס.התוסף מסופק עם %sתיעוד מסודר%s (באנגלית בלבד). התיעוד כולל מידע על הקמת אתר רב לשוני והשתמשות בו על בסיס יומיומי, שאלות נפוצות, וכן תיעוד עבור מפתחים להתאמת תוספים וערכות נושא לתוסף.מיקום שפה במחליף השפותסוג תוכןפוסטיםה URL של הפוסטים, העמודים, הקטגוריות והתגיות אינו משתנה. תאריך פרסוםתוספים מומלציםלמחוק /language/ לפני שם השפה במבנה הקישוריםחיפוש תרגומיםהגדרות שפההגדרותהצגת כל השפותפוסטים דביקיםמחרוזתמחרוזות תרגוםמחרוזות תרגומיםסנכרוןטקסונומיותכיוון טקסטעמוד סטטי שנבחר לעמוד בית חיב להיות מתורגם לעל השפות.כתובת עמוד הבית מכילה את קוד השפה במקום שם העמוד או ID העמודקוד השפה מכיל תווים לא חוקייםקוד שפה חייב להיות ייחודיהשפה מוגדרת רק בתוכןהשפות מופיעות בדומיינים שוניםהשפה מוגדרת מהקוד של של ה URLבמבנה הקישורים השפה מופיעה כתיקיהבמבנה הקישורים השפה מופיעה כסאב דומייןשם שפה חובההשפה נוצרה, אבל את הקובץ שפה של וורדפרס לא היה ניתן להוריד. יש להתקין את הקבצים באופן ידני.השם שיוצג באתר שלך (לדוגמא: עברית)אפשרויות הסנכרון תאפשר לשמור על אותם ערכים מדויקים (או תרגומים במקרה של טקסונומיות ועמודי אב) של תוכן מטא בין התרגומים של הפוסט או העמוד.וידגט' זה יוצג בשפה:יש הודעות, דפים, קטגוריות או תגיות שאינם מוגדרים בשפה מסויימת. האם להגדיר את כולם שפת ברירת המחדל? כותרת:תרגומיםתרגומים מעודכנים.שינויי URLעדכון קבצי שפה…יש להשתמש באפשרוית זו כדי להסיר מחרוזות שאינן בשימוש ממסד הנתונים, לדוגמא: לאחר הסרת התוסף מהמערכת.הצגת כל הקבוצותכאשר הגולש הגיע לעמוד הבית, להציג את השפה על פי שפת הדפדפן של הגולשוידג'ט טקסטוידג'ט טקסטקבצי שפה של וורדפרס (לדוגמא he_IL ). חייב להיות קובץ .MO בשביל הגדרת שפהברירת מחדלהשפה עומדת להמחק לצמיתות. האם למחוק בכל זאת?המערכת על וורדפרס גרסה %s. התוסף דורש לכל הפחות וורדפרס גרסה %s.אפשר לבחור שפה מהרשימה או ישירות לערוך אותה בהמשך.תוכלו למצוא מידע שימושי ב %sפורום תמיכה%s של התוסף. רק אל תשכחו לחפש לפני שאתם שואלים.שמאל לימיןימין לשמאלlanguages/polylang-nb_NO.po000066600000041516152100561460011703 0ustar00msgid "" msgstr "" "Project-Id-Version: Polylang v0.9.8\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2015-02-15 07:02+0100\n" "Last-Translator: Tom Boersma \n" "Language-Team: \n" "Language: nb_NO\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: ../\n" "X-Textdomain-Support: yes\n" "X-Generator: Poedit 1.7.4\n" "X-Poedit-SearchPath-0: .\n" # @ polylang #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang er utstyrt med omfattende %sdokumentasjon%s (bare på engelsk). Den " "inneholder informasjon om hvordan du setter opp ditt flerspråklige nettsted " "og bruker det på en daglig basis, en FAQ, samt dokumentasjon til " "programmerere for å tilpasse sine plugins og temaer." # @ polylang #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "Du vil også finne nyttig informasjon i %sforumet%s. Men ikke glem å gjøre et " "søk før du legger til et nytt emne." # @ polylang #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polylang er gratis og er utgitt under samme lisens som WordPress, %sGPL%s." # @ polylang #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "Hvis du lurer på hvordan du kan hjelpe prosjektet, %sles her%s." # @ polylang #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "Til slutt, hvis du liker denne plugin'en eller hvis det hjelper din bedrift: " "donasjoner til forfatteren er verdsatt i høyeste grad." # @ polylang #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "Språk" # @ polylang #: include/switcher.php:22 msgid "Displays language names" msgstr "Viser språknavn" # @ polylang #: include/switcher.php:23 msgid "Displays flags" msgstr "Viser flagg" # @ polylang #: include/switcher.php:24 msgid "Forces link to front page" msgstr "Tvinger lenke til forsiden" # @ polylang #: include/switcher.php:25 msgid "Hides the current language" msgstr "Skjuler nåværende språk" # @ polylang #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "Vises som dropdown" # @ polylang #: admin/admin.php:267 msgid "Filters content by language" msgstr "Filtre innhold etter språk" # @ polylang #: admin/admin.php:258 msgid "Show all languages" msgstr "Vis alle språk" # @ polylang #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "Legg til ny oversettelse" # @ polylang #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "Språk" # @ polylang #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Oversettelser" # @ polylang #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "Bestemmer språket" # @ polylang #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Widgeten vises for:" # @ polylang #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "Alle språk" # @ polylang #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Admin språk" # @ polylang #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "WordPress standard" # @ default # @ polylang #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "Innstillinger" # @ polylang #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Oppgraderer språkfiler…" # @ polylang #: admin/settings.php:62 msgid "About Polylang" msgstr "Om Polylang" # @ polylang #: admin/settings.php:78 msgid "Strings translations" msgstr "String oversettelser" # @ polylang #: admin/settings.php:101 msgid "Strings translation" msgstr "String oversettelse" # @ polylang #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "Tast inn en gyldig WordPress Locale" # @ polylang #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "Språkkoden må være unikt" # @ polylang #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "Språket må ha et navn" # @ polylang #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "Språket ble opprettet, men WordPress språkfilen ble ikke lastet ned. " "Vennligst installer den manuelt." # @ polylang #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Widget tittel" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "Taksonomier" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "Tilpassede felt" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "Kommentar status" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "Ping status" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "Klebrige innlegg" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "Dato publisering" # @ default #: admin/settings.php:325 msgid "Post format" msgstr "Format" # @ default #: admin/settings.php:326 msgid "Page parent" msgstr "Side forelder" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "Sidemal" # @ polylang #: admin/settings.php:328 msgid "Page order" msgstr "Side rekkefølge" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "Fremhevet bilde" # @ polylang #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Rediger språk" # @ polylang #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "Legg til nytt språk" # @ polylang #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Velg et språk" # @ polylang #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "Du kan velge et språk fra listen eller redigere direkte nedenfor." # @ polylang #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Fullt navn" # @ polylang #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "Navnet som det vises på nettstedet ditt (for eksempel: English)." # @ polylang #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "Locale" # @ polylang #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "WordPress Locale for språket (for eksempel: en_US). Du må installere .mo " "filen for dette språket." # @ polylang #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Språkkode" # @ polylang #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Tekstretning" # @ polylang #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "venstre til høyre" # @ polylang #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "høyre til venstre" # @ polylang #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Velg tekstretning for språket" # @ polylang #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "Rekkefølge" # @ polylang #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Språkets plasering i språkskifteren" # @ polylang #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "Språkskifter" # @ polylang #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Søk oversettelser" # @ polylang #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Rens string oversettelsene i databasen" # @ polylang #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Standard språk" # @ polylang #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "Det finnes innlegg, sider, kategorier eller tags uten et valgt språk. Vil du " "sette dem alle til standard språk?" # @ polylang #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "Detekter nettleserens språkpreferance" # @ polylang #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "Når forsiden besøkes, velg språk i henhold til nettleserens preferanse" # @ polylang #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "URL modifikasjoner" # @ polylang #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "Skjul URL språkinformasjon for standard språk" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "Media" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "Aktiver språk og oversettelser for media" # @ polylang #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "Synkronisering" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "Tilpassede innleggstyper" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "Aktiver språk og oversettelser for tilpassede innleggstyper." # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "Tilpassede taksonomier" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "Aktiver språk og oversettelser for tilpassede taksonomier." # @ polylang #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "Rediger" # @ polylang #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "Slett" # @ polylang #: admin/table-languages.php:76 msgid "Code" msgstr "Kode" # @ polylang #: admin/table-languages.php:78 msgid "Flag" msgstr "Flagg" # @ polylang #: admin/table-languages.php:79 msgid "Posts" msgstr "Innlegg" # @ polylang #: admin/table-string.php:110 msgid "Name" msgstr "Navn" # @ polylang #: admin/table-string.php:111 msgid "String" msgstr "String" # @ polylang #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Legg til ny" # @ polylang #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Språkskifter" # @ polylang #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "Viser en språkskifter" # @ polylang #: include/widget-languages.php:75 msgid "Title:" msgstr "Tittel:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "Legger til flerspråklig funksjonalitet til WordPress" # @ polylang #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "Du bruker WordPress %s. Polylang krever minst WordPress %s." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "" "Polylang er blitt deaktivert fordi at du har oppgradert fra en for gammel " "versjon." # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "Vennligst oppgrader først til %s før du oppgraderer til %s." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "Gruppe" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "Vis alle grupper" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "Du holder på å slette dette språket permanent. Er du sikkert?" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "Bruk dette for å fjerne ubrukte stringer fra databasen, f.eks. når en " "utvidelse er avinstallert." # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "Synkroniseringsvalgene tillater å ta vare på nøyaktig de samme verdiene " "(eller oversettelser når det gjelder taksonomier og sideforelder) av " "metainnhold mellom oversettelser av et innlegg eller en side." # @ polylang #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "Språkkoden inneholder ugyldige tegn" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "Språket bestemmes av innhold" # @ polylang #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "Innlegg, sider, kategrier og stikkord urls er ikke tilpasset." # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "Språket bestemmes av directory navnet i pene permalenker" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "Eksempel:" # @ polylang #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "Språket bestemmes av subdomenenavn i pene permalenker" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "Språket bestemmes av andre domener" # @ polylang #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "Fjern /language/ i pene permalenker" # @ polylang #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "Behold /language/ i pene permalenker" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "Forside url inneholder språkkoden i stedet for sidenavn eller side id" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "Eksempel: %s i stedet for %s" # @ polylang #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "Ikke mulig å legge til språket." # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "Språk lagt til." # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "Språk slettet." # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "Språk oppdatert." # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "Oversettelser oppdatert." # @ polylang #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "Språkkode - helst 2-bokstav ISO 639-1 (for eksempel: en)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "Den valgte statiske forsiden må være oversettes for alle språk." # @ polylang #: admin/admin-strings.php:60 msgid "Widget text" msgstr "Widget tekst" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "Anbefalte utvidelser" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "Språket bestemmes av koden i URL'en" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "Gjemmer språk uten oversettelser" languages/polylang-bel.po000066600000053660152100561460011455 0ustar00msgid "" msgstr "" "Project-Id-Version: polylang\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Aljaksandr Markevitch \n" "Language-Team: \n" "Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: .\n" "X-Textdomain-Support: yes\n" "X-Generator: Poedit 1.5.4\n" "X-Poedit-SearchPath-0: ..\n" # @ polylang #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang забяспечаны шырокай %sдакументацыяй%s (толькі на англійскай мове). " "У яе ўваходзіць інфармацыя пра наладу шматмоўнага блога і яго паўсядзённае " "выкарыстанне, адказы на частыя пытанні і дакументацыя для праграмістаў." # @ polylang #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "Таксама, вы можаце знайсці карысную інфармацыю на %sфоруме%s. Зрэшты, не " "забывайце сперш шукаць адказ, а потым пытаць." # @ polylang #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polylang - бясплатны і распаўсюджваецца пад той жа ліцэнзіяй %sGPL%s, што і " "WordPress." # @ polylang #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "Аб тым, як вы можаце дапамагчы праекту, вы можаце прачытаць %sтут%s." # @ polylang #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "І нарэшце, калі Polylang вам спадабаецца альбо дапамагае ў вашай працы, вы " "заўседы можаце ахвяраваць грошаў аўтару праекта." # @ polylang #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "Мовы" # @ polylang #: include/switcher.php:22 msgid "Displays language names" msgstr "Паказваць назвы моў" # @ polylang #: include/switcher.php:23 msgid "Displays flags" msgstr "Паказваць сцягі" # @ polylang #: include/switcher.php:24 msgid "Forces link to front page" msgstr "Прымусова пераходзіць на галоўную старонку сайта пры змене мовы" # @ polylang #: include/switcher.php:25 msgid "Hides the current language" msgstr "Схаваць бягучую мову" # @ polylang #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "Паказвае як выпадальны спіс" # @ polylang #: admin/admin.php:267 msgid "Filters content by language" msgstr "Адбіраць змесціва паводле мовы" # @ polylang #: admin/admin.php:258 msgid "Show all languages" msgstr "Паказаць усе мовы" # @ polylang #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "Дадаць новы пераклад" # @ polylang #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "Мова" # @ polylang #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Пераклады" # @ polylang #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "Вызначае мову" # @ polylang #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Паказваць віджэт для" # @ polylang #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "Усе мовы" # @ polylang #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Мова панэлі адміністратара" #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "Па змаўчанню" # @ default # @ polylang #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "Наладкі" # @ polylang #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Абнаўленне моўных файлаў…" # @ polylang #: admin/settings.php:62 msgid "About Polylang" msgstr "Аб Polylang" # @ polylang #: admin/settings.php:78 msgid "Strings translations" msgstr "Пераклады радкоў" # @ polylang #: admin/settings.php:101 msgid "Strings translation" msgstr "Пераклад радкоў" # @ polylang #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "Вызначце карэктную WordPress лакаль" # @ polylang #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "Код мовы павінны быць унікальным" # @ polylang #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "Мова павінна мець назву" # @ polylang #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "Мова была створана, але патрабуемые моўныя файлы не былі запампованы. Калі " "ласка, запампуйце ды устанавіце іх самастойна." # @ polylang #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Назва віджэту" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "Таксаноміі" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "Адвольныя палі" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "Стан каментара" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "Адказ на запыт" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "Заліпаючыя запісы" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "Дата публікацыі" # @ polylang #: admin/settings.php:325 msgid "Post format" msgstr "Фармат запісу" # @ polylang #: admin/settings.php:326 msgid "Page parent" msgstr "Бацькоўская старонка" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "Шаблон старонкі" # @ polylang #: admin/settings.php:328 msgid "Page order" msgstr "Парадак старонак" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "Выбраная выява" # @ polylang #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Рэдагаваць мову" # @ polylang #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "Дадаць новую мову" # @ polylang #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Выбраць мову" # @ polylang #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "Вы можаце выбраць мову са спіса альбо дадаць яе ніжэй самастойна." # @ polylang #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Поўная назва" # @ polylang #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "Назва для адлюстравання на сайце (напрыклад: Беларускі)." # @ polylang #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "Лакаль" # @ polylang #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "Лакаль WordPress для мовы (напрыклад: be_BY). Вы павінны устанавіць файлы ." "mo для панэлі адміністратара ды выкарыстоўваемай тэмы." # @ polylang #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Код мовы" # @ polylang #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Напрамак тэксту" # @ polylang #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "злева направа" # @ polylang #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "справа налева" # @ polylang #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Выберыце напрамак тэксту" # @ polylang #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "Парадак" # @ polylang #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Месца мовы ў пераключальніку моў" # @ polylang #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "Выбар моў" # @ polylang #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Пошук перакладаў" #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Ачысціць базу дадзеных радкоў перакладу" # @ polylang #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Мова па змаўчанню" # @ polylang #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "Былі знойдзены запісы, старонкі, катэгорыі ды тэгі без зазначанай мовы. " "Вызначыць мову выкарыстання па змаўчанню?" # @ polylang #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "Вызначыць мову браўзера" # @ polylang #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "Вызначыць мову сайта паводле налад браўзера" # @ polylang #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "Мадыфікацыі URL" # @ polylang #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "Схаваць назву мовы з URL" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "Медыа" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "Актывіраваць мовы і пераклады для медыа-файлаў" #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "Сінхранізацыя" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "Адвольны тып запісаў" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "Актывіраваць мовы і пераклады для адвольных тыпаў запісаў." # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "Адвольныя таксаноміі" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "Актывіраваць мовы і пераклады для адвольных таксанамій." # @ polylang #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "Рэдагаваць" # @ polylang #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "Выдаліць" # @ polylang #: admin/table-languages.php:76 msgid "Code" msgstr "Код" # @ polylang #: admin/table-languages.php:78 msgid "Flag" msgstr "Сцяг" # @ polylang #: admin/table-languages.php:79 msgid "Posts" msgstr "Запісы" # @ polylang #: admin/table-string.php:110 msgid "Name" msgstr "Імя" # @ polylang #: admin/table-string.php:111 msgid "String" msgstr "Радок" # @ polylang #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Дадаць новую" # @ polylang #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Пераключальнік моў" # @ polylang #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "Паказвае пераключальнік моў" # @ polylang #: include/widget-languages.php:75 msgid "Title:" msgstr "Назва:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "Дадае магчымасць падтрымкі шматмоў'я ў WordPress" # @ polylang #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "" "Вы выкарыстоўваеце WordPress %s. Polylang патрабуе не менш за WordPress %s." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "" "Polylang быў выключаны, таму што вы аднаўляецеся з немагчыма старой версіі." # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "Калі ласка, аднавіце перш да версіі %s, каб аднавіць да версіі %s." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "Група" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "Прагледзець усе групы" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "Вы збіраецеся выдаліць гэтую мову. Вы ўпэўнены?" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "Выкарыстоўвайце гэтую функцыю, калі вам патрэбна выдаліць невыкарастаныя " "радкі з базы дадзеных (напрыклад, пасля таго, як плагін быў выдалены)." # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "Налады сінхранізацыі дазваляюць падтрымліваць гэткія ж самыя значэнні (альбо " "пераклады ў выпадку таксанаміі і бацькоўскай старонкі) мета-змесціва паміж " "перакладамі запісу альбо старонкі." # @ polylang #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "Код мовы ўтрымлівае нядзейныя сімвалы" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "Мова наладжана згодна са змесцівам" #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "Спасылкі запісаў, старонак, катэгорый і тэгаў не змяняюцца." #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "Мова наладжана згодна з імём дырэкторыі pretty permalinks" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "Напрыклад:" #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "Мова наладжана згодна з імём паддамена ў pretty permalinks" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "Мова наладжана з розных даменаў" # @ polylang #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "Выдаліць /language/ у pretty permalinks" # @ polylang #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "Захаваць /language/ у pretty permalinks" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "" "Спасылка на галоўную старонку ўтрымлівае код мовы замест імя альбо id " "старонкі" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "Прыклад: %s заместа %s" # @ polylang #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "Немагчыма дадаць мову." # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "Мова дададзена." # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "Мова выдалена." # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "Мова аднаўлена." # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "Пераклады аднаўлены." # @ polylang #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "" "Код мовы - пажадана дзвюхлітарны згодна са стандартам ISO 639-1 (напрыклад: " "en)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "" "Выбраная статычная галоўная старонка павінна быць перакладзена на ўсе мовы." # @ polylang #: admin/admin-strings.php:60 msgid "Widget text" msgstr "Тэкст віджэта" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "" # @ polylang #~ msgid "A translation does already exist for %s" #~ msgstr "Пераклад для %s ужо існуе" # @ polylang #~ msgid "2-letters ISO 639-1 language code (for example: en)" #~ msgstr "Дзвюхлітарны код мовы ISO 639-1 (напрыклад: en)" # @ polylang #~ msgid "Translation" #~ msgstr "Пераклад" # @ polylang #~ msgid "ID of pages in other languages:" #~ msgstr "ID старонак на другіх мовах:" # @ polylang #~ msgid "Page ID" #~ msgstr "ID старонкі" # @ polylang #~ msgid "Post ID" #~ msgstr "ID запісу" # @ polylang #~ msgid "No untranslated term" #~ msgstr "Няма неперакладзеных слоў" #~ msgid "" #~ "When using static front page, redirect the language page (example: %s) to " #~ "the front page in the right language" #~ msgstr "" #~ "Пры выкарыстанні статычнай старонкі, перанакіроўваць старонку (напрыклад: " #~ "%s) на галоўную старонку на правільнай мове." # @ polylang #~ msgid "" #~ "For some reasons, Polylang could not create a table in your database." #~ msgstr "" #~ "Па некаторых прычынах, Polylang не мае магчымасьці стварыць табліцу ў " #~ "базе даных." # @ polylang #~ msgid "Displays a language switcher at the end of the menu" #~ msgstr "Паказвае пераключальнік моў" # @ polylang #~ msgid "Theme locations and languages" #~ msgstr "Разьмяшчэнне тэмы ды моў" # @ polylang #~ msgid "" #~ "Please go to the %slanguages page%s to set theme locations and languages" #~ msgstr "" #~ "Калі ласка, перайдзіце на %slanguages page%s для таго, каб зазначыць " #~ "разьмяшчэнне тэмы ды моў" # @ polylang #~ msgid "Menus" #~ msgstr "Меню" # @ polylang #~ msgid "Error: Restore of local flags failed!" #~ msgstr "" #~ "Памылка: Не атрымалася ўзнавіць карыстальніцкія іконкі-сьцягі з " #~ "рэзэрвовай копіі!" # @ polylang #, fuzzy #~ msgid "Please move your local flags from %s to %s" #~ msgstr "Калі ласка, перамясьціце " languages/polylang-pl_PL.mo000066600000025702152100561460011712 0ustar00q,  : : - < D U )i   * "   $ 2 D V g n         4 C n_    2 0 ?K  $    A K]o     1J\Q1 8)&8_s  AQJ-  * @7@xiDA>r[  a*T  p {@D@T  K ><I8+ , Mcu" #) E#f * ,zK  9:\Q!2   / I;        !! !>+!Qj!^!"(6# _#l#?r##.##$ $$7$I$X$ j$$ $$T$G%(Z%%.%'%K%EE&&o&<'Q'(r0(( (((&(b )o)S) ) )i) `*>j*A*F*i2+++nQ !PV<\"XmBdb'hIH`Mf-l0F $_ TS(C[=8R 32)i>U7*KDO.:,A o @&195/aN^G]cqg4L6k#j;YepW+?EZ%JAbout PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe chosen static front page must be translated in all languages.The front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget textWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: polylang Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: Last-Translator: Sebastian Janus Language-Team: Language: pl_PL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Poedit-SourceCharset: utf-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: . X-Textdomain-Support: yes X-Generator: Poedit 1.5.4 X-Poedit-SearchPath-0: .. O PolylangAktywuj języki i tłumaczenia dla własnych typów wpisów.Aktywuj języki i tłumaczenia dla własnych taksonomii.Aktywuj języki i tłumaczenia dla mediów.Dodaj nowyDodaj nowy językDodaj nowe tłumaczenieDodaje wsparcie wielojęzykowe do WordPressaJęzyk administratoraWszystkie językiWybierz językWybierz kierunek zapisu językaWyczyść tłumaczenia fraz z bazyKodStatus komentarzaWłasne polaWłasne typy wpisówWłasne taksonomieDomyślny językUsuńWykryj język przeglądarkiWyświetla przełącznik językaWyświetla się jako menu rozwijaneWyświetla flagiWyświetla nazwy językówEdytujEdytuj językProszę podać prawidłowy kod lokalizacjiPrzykład:Przykład: %s zamiast %sZdjęcie główneFiltrowanie treści wg językaWreszcie, jeśli lubisz tę wtyczkę i pomaga Ci ona w prowadzeniu biznesu, wsparcie dla jej autora będzie mile widziane.FlagaWymusza link do strony głównejPełna nazwaGrupaUkryj informację o języku w URL dla domyślnego językaUkrywa aktualny językJeśli zastanawiasz się jak mógłbyś pomóc w tym projekcie, po prostu %sprzeczytaj to%s.Dodanie języka jest niemożliwe.Zatrzymaj /language/ w bezpośrednich odnośnikachJęzykPrzełącznik językaDodano język.Kod językaKod języka - preferowane 2 litery zgodnie z ISO 639-1 (na przykład: en)Usunięto język.Przełącznik językaJęzyk zaktualizowany.JęzykiLokalizacjaMediaNazwaKolejnośćKolejność stronRodzic stronySzablon stronyStatus pingNajpierw zaktualizuj do %s zanim wykonasz aktualizację do %s.Polylang został wyłączony ponieważ aktualizowałeś go ze zbyt starej wersji.Polylang jest bezpłatne i opublikowane na takiej samej licencji jak WordPress, czyli %sGPL%s.Polylang jest dostarczany z obszerną %sdokumentacją%s (tylko w języku angielskim), która zawiera informacje jak skonfigurować stronę wielojęzyczną i korzystać z niej w codziennej pracy, dział FAQ, oraz dokumentację dla programistów o tym jak adaptować wtyczki i motywy.Pozycja języka w przełączniku językaFormat wpisuWpisyWpisy, strony, kategorie i adresy tagów nie są zmodyfikowane.Data publikacjiUsuń /language/ z bezpośrednich odnośnikówSzukaj tłumaczeńUstawia językUstawieniaPokaż wszystkie językiPrzyklejone wpisyCiąg tekstowyTłumaczenie frazTłumaczenia ciągów tekstowychSynchronizacjaTaksonomieKierunek zapisu językaWybrana statyczna strona główna musi być przetłumaczona we wszystkich językach.Adres strony głównej zawiera kod języka zamiast nazwy lub id strony.Kod języka zawiera nieprawidłowe znakiKod języka musi być unikalnyJęzyk jest ustawiony na podstawie zawartościJęzyk jest ustawiany z różnych domenJęzyk jest ustawiany ze ścieżki katalogów w bezpośrednich odnośnikachJęzyk jest ustawiany z nazwy subdomeny w bezpośrednich odnośnikachJęzyk musi mieć nazwęJęzyk został dodany, ale plik językowy WordPress nie został załadowany. Proszę zainstalować go ręcznie.Nazwa, tak jak będzie wyświetlana na stronie (np. English)Ustawienia synchronizacji pozwalają zachować dokładnie takie same wartości (lub tłumaczenia w przypadku taksonomii i rodziców stron) meta danych pomiędzy tłumaczeniami stron i wpisów.Widget wyświetlany jest dla:Istnieją wpisy, strony, kategorie i tagi bez określonego języka. Czy chcesz ustawić dla nich domyślny język?Tytuł:TłumaczeniaTłumaczenia zaktualizowane.Modyfikacje URLUaktualnianie pliku językowego…Użyj tego aby usunąć nieużywane frazy z bazy danych, np. po tym jak odinstalowałeś wtyczkę.Zobacz wszystkie grupyPrzy wejściu na stronę domową, ustaw język zgodnie z ustawieniami przeglądarkiTekst widgetuNazwa widgetaLokalizacja WordPress dla języka (np. en_US). Dla tego języka będziesz musiał zainstalować plik .mo.DomyślnyZamierzasz całkowicie usunąć ten język. Czy jesteś pewny?Używasz WordPress %s. Polylang wymaga przynajmniej WordPress %s.Możesz wybrać język z listy lub edytować go bezpośrednio poniżejPrzydatne informacje znajdziesz w %sforum pomocy%s. Nie zapomnij go przeszukać, zanim dodasz nowy temat.od lewej do prawejod prawej do lewejlanguages/polylang-ka_GE.po000066600000054603152100561460011657 0ustar00msgid "" msgstr "" "Project-Id-Version: Polylang v1.6beta1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2015-02-15 11:50+0100\n" "Last-Translator: \n" "Language-Team: Rusudan Tsiskreli \n" "Language: ka_GE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: ../\n" "X-Textdomain-Support: yes\n" "X-Generator: Poedit 1.5.4\n" "X-Poedit-SearchPath-0: .\n" # @ polylang #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang -ს მოყვება ფართო %sdocumentation%s (მხოლოდ ინგლისურად). ეს შეიცავს " "ინფორმაციას, თუ როგორ უნდა გამართოთ მრავალენოვანი საიტი და გამოიყენოთ იგი " "ყოველდღიურად, ხდკ და ასევე დოკუმენტაცია პროგრამისტებისთვის, თემისა და სხვა " "პლაგინების მოსარგებად." # @ polylang #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "სასარგებლო ინფორმაციის ნახვა ასევე შეგიძლიათ %ssupport forum%s. თუმცა ჯერ " "დაგუგლეთ, მერე დაპოსტეთ." # @ polylang #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "პოლილანგი უნასია და იგივე ლიცენზიითაა რაც WordPress %sGPL%s." # @ polylang #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "თუ გაინტერესებთ თუ როგორ დაეხმაროთ პროექტს, %sread this%s." # @ polylang #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "თუ მოგწონთ პლაგინი და ის გეხმარებათ ბიზნესში, ავტორი მადლობელი იქნება " "შემოწირულობისთვის." # @ polylang #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "ენები" # @ polylang #: include/switcher.php:22 msgid "Displays language names" msgstr "ენის სახელს ასახავს" # @ polylang #: include/switcher.php:23 msgid "Displays flags" msgstr "დროშებს ასახავს" # @ polylang #: include/switcher.php:24 msgid "Forces link to front page" msgstr "ბმულით სათაო გვერდზე გადასვლა" # @ polylang #: include/switcher.php:25 msgid "Hides the current language" msgstr "მიმდინარე ენის დამალვა" # @ polylang #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "ჩამოსაშლელად ასახავს" # @ polylang #: admin/admin.php:267 msgid "Filters content by language" msgstr "შიგთავსის ენის მიხედვით ფილტრაცია" # @ polylang #: admin/admin.php:258 msgid "Show all languages" msgstr "ყველა ენის ჩვენება" # @ polylang #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "ახალი თარგმანის დამატება" # @ polylang #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "ენა" # @ polylang #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "თარგმანები" # @ polylang #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "ენას აყენებს" # @ polylang #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "ვიდჯეტი აისახება:" # @ polylang #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "ყველა ენა" # @ polylang #: admin/admin-filters.php:123 msgid "Admin language" msgstr "ადმინისტრატორის ენა" # @ polylang #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "WordPress ნაგულისხმევი" # @ polylang #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "პარამეტრები" # @ polylang #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "ენის ფაილების განახლება…" # @ polylang #: admin/settings.php:62 msgid "About Polylang" msgstr "Polylang-ის შესახებ" # @ polylang #: admin/settings.php:78 msgid "Strings translations" msgstr "სტრიქონების თარგმნა" # @ polylang #: admin/settings.php:101 msgid "Strings translation" msgstr "სტრიქონების თარგმნა" # @ polylang #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "შეიყვანეთ მართებული WordPress locale" # @ polylang #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "ენის კოდი უნიკალური უნდა იყოს" # @ polylang #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "ენას სახელი უნდა ჰქონდეს" # @ polylang #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "ენა შეიქმნა, მაგრამ WordPress-ის ფაილები არ იყო ჩამოტვირთული. გთხოვთ ხელით " "დააყენოთ." # @ polylang #: admin/admin-strings.php:59 msgid "Widget title" msgstr "ვიჯეტის სახელი" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "ტაქსონომიები" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "დამატებითი ველები" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "კომენტარების სტატუსი" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "პინგის სტატუსი" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "მიმაგრებული პოსტი" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "გამოქვეყნების თარიღი" # @ polylang #: admin/settings.php:325 msgid "Post format" msgstr "პოსტის ფორმატი" # @ polylang #: admin/settings.php:326 msgid "Page parent" msgstr "გვერდის მშობელი" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "გვერდის თარგი" # @ polylang #: admin/settings.php:328 msgid "Page order" msgstr "გვერდის მიმდევრობა" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "მთავარი გამოსახულება" # @ polylang #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "ენის რედაქტირება" # @ polylang #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "ახალი ენის დამატება" # @ polylang #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "ენის არჩევა" # @ polylang #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "ენის არჩევა შეგიძლიათ სიაში, ან პირდაპირ დაამატეთ იგი ქვემოთ." # @ polylang #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "სრული სახელი" # @ polylang #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "სახელი, თუ როგორ გამოჩნდება იგი ვებ გვერდზე (მაგ. ქართული)." # @ polylang #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "ლოკალური" # @ polylang #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "WordPress ლოკალური ენისთვის (მაგალითად: ka_GE). თქვენ უნდა დააყენოთ .mo ამ " "ენისთვის." # @ polylang #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "ენის კოდი" # @ polylang #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "ტექსტის მიმართულება" # @ polylang #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "მარცხნიდან მარჯვნის" # @ polylang #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "მარჯვნიდან მარცხნივ" # @ polylang #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "ენისთვის აირჩიეთ ტექსტის მიმართულება" # @ polylang #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "თანმიმდევრობა" # @ polylang #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "ენის მდებარეობა ენების გადამრთველში" # @ polylang #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "ენების გადამრთველი" # @ polylang #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "თარგმანების ძებნა" # @ polylang #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "სტრიქონების თარგმნის ბაზის წაშლა" # @ polylang #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "ნაგულისხმევი ენა" # @ polylang #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "ჩვენ გვაქვს გვერდები, პოსტები, კატეგორიები მინიჭებული ენის გარეშე. გსურთ " "მათთვის ყველასთვის ნაგულისხმევი ენის მინიჭება?" # @ polylang #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "ბრაუზერის ენის აღმოჩენა" # @ polylang #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "სათაო გვერდზე ბრაუზერის პარამეტრებში მითითებული ენის დაყენება" # @ polylang #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "URL მოდიფიკაცია" # @ polylang #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "ენის URL დამალვა ძირითადი ენისთვის" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "მედია" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "მედიისთვის ენების და თარგმანების აქტივაცია" # @ polylang #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "სინქრონიზაცია" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "პოსტების დამატებითი ტიპები" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "პოსტების დამატებითი ტიპებისთვის ენების და თარგმანების აქტივაცია" # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "დამატებითი ტაქსონომიები" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "დამატებითი ტაქსონომიებისთვის ენების და თარგმანების აქტივაცია" # @ polylang #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "რედაქტირება" # @ polylang #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "წაშლა" # @ polylang #: admin/table-languages.php:76 msgid "Code" msgstr "კოდი" # @ polylang #: admin/table-languages.php:78 msgid "Flag" msgstr "დროშა" # @ polylang #: admin/table-languages.php:79 msgid "Posts" msgstr "პოსტები" # @ polylang #: admin/table-string.php:110 msgid "Name" msgstr "სახელი" # @ polylang #: admin/table-string.php:111 msgid "String" msgstr "სტრიქონი" # @ polylang #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "ახლის დამატება" # @ polylang #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "ენების გადამრთველი" # @ polylang #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "ენების გადამრთველის ჩვენება" # @ polylang #: include/widget-languages.php:75 msgid "Title:" msgstr "სათაური:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "WordPress-სთვის მრავალენოვანი შესაძლებლობის დამატება" # @ polylang #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "თქვენ იყენებთ WordPress %s. Polylang მოითხოვს მინიმუმ WordPress %s." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "Polylang გამოირთო, რადგან თქვენ ძალიან ძველი ვერსია გაახლეთ" # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "გთხოვთ ჯერ გაახლეთ %s -მდე და მერე %s-მდე." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "ჯგუფი" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "ყველა ჯგუფის ნახვა" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "თქვენ აპირებთ ენის სამუდამოდ წაშლას. დარწმუნებული ხართ?" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "ეს გამოიყენეთ ბაზიდან გამოუყენებელი სტრიქონების წასაშლელად, მაგალითად " "პლაგინის წაშლის შემდეგ" # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "სინქრონიზაციის პარამეტრი საშუალებას ეძლევა ერთი პარამეტრი გამოიყენოთ ყველა " "თარგმნილ ვარიანტში." # @ polylang #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "ენის კოდი არასწორ სიმბოლოებს შეიცავს" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "ენა შიგთავსიდანაა დაყენებული" # @ polylang #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "პოსტების, გვერდების, კატეგორიების და ჭდეების მისამართები არ შეცვლილა." # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "ენა დაყენებულია დირექტორიის სახელიდან pretty permalinks-ში" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "მაგალითი:" # @ polylang #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "ენა დაყენებულია ქვედომეინის სახელიდან pretty permalinks-ში" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "ენა სხვადასხვა დომეინებიდან არის დაყენებული" # @ polylang #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "Pretty permalink-ებიდან /language/ წაშლა" # @ polylang #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "Pretty permalink-ში /language/ -ის ჩვენება" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "" "თავფურცელის მისამართი შეიცავს ენის კოდს გვერდის სახელის ან აიდის ნაცვლად" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "მაგალითი: %s %s-ს ნაცვლად" # @ polylang #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "ენის დამატება შეუძლებელია." # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "ენა დამატებულია." # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "ენა წაშლილია." # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "ენა განახლებულია." # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "თარგმანები განახლებულია." # @ polylang #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "ენის კოდი - სასურველია 2 ასო ISO 639-1 (მაგალითად: ka)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "არჩეული სტატიკური თავფურცელი ყველა ენაზე უნდა ითარგმნოს" # @ polylang #: admin/admin-strings.php:60 msgid "Widget text" msgstr "ვიჯეტის ტექსტი" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "რეკომენდირებული პლაგინები" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "ენა დაყენებულია URL-ს კოდიდან" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "დამალე ენები რომლებზეც არაა თარგმანები" languages/polylang-ru_RU.mo000066600000024403152100561460011735 0ustar00W::-<DUi x*"   , = D \ y      n b g 2  ?  " 4 B T ^ e k p v 1 J \$ 1       !(<Q al {iD$ir  T? pD$@i , :<H zu j$ *. Yz"FF=#D)h85 "11<c=21#L!p#q(MF$~8'Ai'{   ).LlhjD *! D!#Q!u!#!!"!%! ""8"T"o"#"<"4"#b#(5$^$*%<%M%9h%_%&"&&&K''((H,CR=< $7D26 - @I>1;'&A(9U+VNT#E ? S/4:O0*M%"JKW 8F5P3G)B.QL!About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameHide URL language information for default languageHides the current languageIf you wonder how you can help the project, just %sread this%s.LanguageLanguage SwitcherLanguage codeLanguage switcherLanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPublished dateSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe language code must be uniqueThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsURL modificationsUpgrading language files…When the front page is visited, set the language according to the browser preferenceWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: polylang Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: Last-Translator: danalan Language-Team: Language: ru_RU MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: . X-Textdomain-Support: yes X-Generator: Poedit 1.5.4 X-Poedit-SearchPath-0: .. О PolylangАктивировать языки и переводы для пользовательских типов записей.Активировать языки и переводы для пользовательской таксономии.Активировать языки и переводы для мультимедиа материаловДобавить новыйДобавить новый языкДобавить новый переводЯзык админ.панелиВсе языкиПоказать все языкиВыберите направление текста для языкаПочистить базу данных переводов строкКодСтатус комментарияПользовательские поляПользовательские типы записейПользовательская таксономияЯзык по умолчаниюУдалитьОпределять язык в браузереПоказывает переключатель языковПоказывать как выпадающий списокПоказывать флагиПоказывать названия языковРедактироватьРедактировать языкВыбранный рисунокУстанавливает языкЕсли же вам понравился этот плагин, или он помогает вам в бизнесе, автор будет весьма признателен за любые добровольные пожертвования.ФлагПринудительно переходить на главную страницу при смене языкаПолное названиеСпрятать название языка по-умолчанию из URLУбрать текущий языкЕсли вас интересует, как можно помочь проекту, просто %sпрочтите это%s.ЯзыкПереключатель языковКод языкаПереключатель языковЯзыкиЛокальМедиаНазваниеПорядокПорядок страницРодительская страницаШаблон страницыСтатус откликаПожалуйста, обновитесь сначала до %s перед обновлением до %s.Polylang деактивирован, потому что вы выполнили обновление со слишком старой версии.Polylang бесплатен и предоставляется на таких же, как и WordPress условиях, %sGPL%s.Polylang предоставляется с исчерпывающей %sдокументацией%s (только на английском), которая включает информацию по настройке и использованию вашего многоязычного сайта, ответы на частые вопросы, а также документацию для программистов для адаптации их собственных плагинов и тем.Порядок языка в переключателе языковФормат записиЗаписиДата опубликованияПоиск переводаУстанавливает языкНастройкиПоказать все языкиПрилепленные записиСтрокаПеревод строкПереводы строкСинхронизацияТаксономияНаправление текстаКод языка должен быть уникальнымУ языка должно быть названиеЯзык был успешно создан, однако отсутствует языковой файл WordPress. Пожалуйста, установите его вручную.Название для отображения на сайте (например: Русский).Показывать виджет дляНайдены записи, страницы, категории или метки без указанния какого-либо языка. Установить им язык по-умолчанию?Название:ПереводыМодификации URLОбновление языковых файлов…Установить язык сайта согласно настройкам браузераНазвание виджетаЛокаль WordPress'a для языка (например: ru_RU). Вы должны установить файлы .mo для админ.панели и используемой темы.По умолчаниюУстановлен WordPress %s. Для корректной работы Polylang требуется минимум WordPress %s.Выберите язык из списка или укажите сами.Также вы можете найти полезную информацию на %sфоруме поддержки%s. Однако, не забывайте пользоваться поиском, прежде чем создавать новые темы.слева направосправа налевоlanguages/polylang-lv.mo000066600000025170152100561460011324 0ustar00nP Q :` : -    1 @ N *` "        $ A V e }      n l q  2  ? ) $I n w  A     )06; A L X f1rJ\L1J |8&#, ?LSg| Q- & G*h@@i3Dr* 1>TfaT MpZ@D@c & 4B =='Y .#AFYj  +50F wvIPp7J!%>dk{;  " * 1 ; C R _ l :| M U![!*a""":""'"# .# <#J#`#p#w### ##C#3$D$ d$,$D$/$"'%iJ%9%%&~& ' *'4'L'b'd''`'\(kq((B(O7)H))P*d*k +^AF!_ =in'&PS b6LNZJDlBO<M.])3h%Ua*C@0(-jWG7/m\Q#I>H?X8TVfd[c"KR5e: ; $`4g2 EY1,9About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: Polylang 1.5.6 Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: 2015-02-14 09:22+0100 Last-Translator: Andis Grosšteins Language-Team: Language: lv_LV MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2); X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: ../ X-Textdomain-Support: yes X-Generator: Poedit 1.5.4 X-Poedit-SearchPath-0: . Par PolylangIespējot valodas un tulkošanu pielāgotajiem rakstu tipiem.Iespējot valodas un tulkošanu pielāgotajām taksonomijām.Iespējot valodas un tulkošanu datnēmPievienot jaunuPievienot jaunu valoduPievienot jaunu tulkojumuVadības valodaVisas valodasIzvēlēties valoduIzvēlieties lasīšanas virzienu šai valodaiIztīrīt tulkojumu datubāziKodsKomentāru statussLietotāja laukiPielāgotie rakstu tipiPielāgotās taksonomijasNoklusētā valodaDzēstNoteikt pārlūka valoduParāda valodu izvēlniRāda kā nolaižamo izvēlniRāda karogusRāda valodu nosaukumusRediģētRediģēt valoduLūdzu ievadiet derīgu WordPress lokāles kodu.Piemērs:Piemēram: %s, nevis %sSatura izvēlētais attēlsFiltrēt saturu pēc valodasVisbeidzot, ja jums patīk šis spraudnis vai ari tas palīdz jūsu biznesā, ziedojumi autoram tiks augsti vērtēti.KarogsValodas saite ved uz sākumlapuPilns nosaukumsGrupaPaslēpt noklusētās valodas informāciju hipersaitēsPaslēpt aktīvo valoduJa jūs prātojat kā varētu palīdzēt šim projektam, %sizlasiet šo%s.Neizdevās pievienot valodu.Rādīt /language/ glītajās saitēsValodaValodu IzvēlneValoda pievienota.Valodas kods (piem.: lv)Valodas kods - vēlams divu burtu ISO 639-1 (piemēram: lv)Valoda izdzēsta.Valodu izvēlneValoda atjaunināta.ValodasLokāleDatnesNosaukumsSecībaKārtas numursVecāka lapaLapas veidneAtpingu statussLūdzu vispirms atjauniniet uz %s un tikai pēc tam uz %s.Polylang tika atslēgts, jo jūs atajuninājāt to no pārāk vecas versijas.Polylang ir bezmaksas un tiek piedāvāts ar to pašu licenci kā WordPress, %sGPL%s.Polylang tiek piedāvāts ar plašu %sdokumentāciju%s (tikai angliski). Tā satur informāciju par to kā uzstādīt vietni vairākās valodās un kā to lietot ikdienā, BUJ, kā arī dokumentāciju programmētājiem par spraudņu un kažociņu pielāgošanu.Valodas atrašanās vieta valodu izvēlnēRaksta formātsRakstiRakstu, lapu, kategoriju un birku saites netiek mainītas.Publicēšanas DatumsNerādīt /language/ glītajās saitēsMeklēt tulkoumosNosaka valoduUzstādījumiRādīt visas valodasIzceltie rakstiTekstsTekstu tulkošanaTekstu tulkojumiSinhronizācijaTaksonomijasLasīšanas virziensSākumlapas adrese satur valodas kodu, nevis lapas nosaukumu vai idIevadītais valodas kods satur neatļautus simbolusValodas kodam jābūt unikālamValoda tiek uzstādīt no saturaValoda tiek uzstādīta dažādiem domēniemValoda tiek uzstādīta no direktorijas nosaukuma glītajās saitēsValoda tiek uzstādīta no subdomēna nosaukumaValodai ir nepieciešams nosaukumsValoda tika izveidota, bet WordPress tulkojumu fails netika lejuplādēts. Lūdzu uzstādiet to manuāli.Nosaukums, kādu to attēlos lapā (piemēram: Latviešu)Sinhronizācijas iespēja ļauj uzturēt vienādas lietotāja lauku vērtības, kā arī taksonomija un lapu vecākus, starp rakstu un lapu tulkojumiem.Logdaļa tiek rādīta:Ir atrasti raksti, lapas, tēmas, vai birkas bez uzstādītas valodas. Vai vēlaties uzstādīt tām visām noklusēto valodu?Virsraksts:TulkojumiTulkojums atjaunināts.Saišu modifikācijasAtjaunina valodu failus…Šo iespēju var lietot lai izdzēstu neizmantotos tulkojums. Piemēram pēc spraudņa noņemšanas.Skatīt visas grupasKad tiek apmeklēta sākumlapa, uzstāda valodu atkarībā no pārlūkprogrammas uzstādījumiemLogdaļas virsrakstsWordPress valodas lokāle šai valodai (piemēram: en_US). Jums nāksies uzstādīt .mo failu šai valodai.WordPress noklusējumsŠī valoda tiks neatgriezeniski dzēsta. Vai esat pārliecināts?Jūs lietojat WordPress %s. Polylang nepieciešama vismaz WordPress %s versija.Jūs varat izvēlēties valodu no saraksta, vai ari rediģēt to zemāk.Noderīgu informāciju varat atrast arī %satbalsata forumā%s. Ieteicams veikt meklēšanu pirms atvērt jaunu foruma tematu.no kreisās uz labono labās uz kreisolanguages/polylang-bg_BG.po000066600000047312152100561460011650 0ustar00msgid "" msgstr "" "Project-Id-Version: polylang\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Pavel Sofroniev \n" "Language-Team: Павел \n" "Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2: nplural=n>1;\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: _e;__;_x\n" "X-Poedit-Basepath: .\n" "X-Generator: Poedit 1.5.4\n" "X-Poedit-SearchPath-0: ..\n" "X-Poedit-SearchPath-1: ../include\n" #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang има подробна %sдокументация на английски%s, съдържаща информация за " "първоначалното настройване и поддръжка на многоезични уебсайтове, отговори " "на често задавани въпроси, както и документация за разработчици за " "интегриране на Polylang с техните разширения и теми. " #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "Освен това можете да намерите полезна информация във %sфорума за поддръжка" "%s; но не забравяйте да потърсите дали някой вече не е задал Вашия въпрос " "преди да изпратите запитване. " #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polylang е безплатно разширение, публикувано под същия лиценз като " "WordPress, %sGPL%s." #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "Ако се питате как можете и Вие да помогнете, %sпрочетете това%s. " #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "Не на последно място, ако наистина харесвате това разширение и/или то помага " "на Вашия бизнес, авторът му високо оценява всяко едно дарение." #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "Езици" #: include/switcher.php:22 msgid "Displays language names" msgstr "Показване на имената на езиците" #: include/switcher.php:23 msgid "Displays flags" msgstr "Показване на знаменца" #: include/switcher.php:24 msgid "Forces link to front page" msgstr "Всички връзки сочат към началната страница" #: include/switcher.php:25 msgid "Hides the current language" msgstr "Скриване на текущия език" #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "Показване като падащо меню" #: admin/admin.php:267 msgid "Filters content by language" msgstr "Филтриране на съдържанието по език" #: admin/admin.php:258 msgid "Show all languages" msgstr "Показване на всички езици" #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "Добавяне на нов превод" #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "Език" #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Преводи" #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "Избор на език" #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Джаджата се показва за:" #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "Всички езици" #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Езика на администраторския панел" #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "Езика по подразбиране" #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "Настройки" #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Обновяване на езиковите файлове…" #: admin/settings.php:62 msgid "About Polylang" msgstr "Относно Polylang" #: admin/settings.php:78 msgid "Strings translations" msgstr "Превод на низове" #: admin/settings.php:101 msgid "Strings translation" msgstr "Превод на низове" #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "Въведете валидно (WordPress) местоположение" #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "Кодът на езика трябва да бъде уникален" #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "Кодът на езика трябва да има наименование" #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "Езикът беше добавен, но езиковият файл не може да бъде зареден. Моля " "инсталирайте го ръчно. " #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Заглавие на джаджата" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "Таксономии" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "Потребителски полета" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "Статус на коментара" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "Статус на ping-а" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "Публикации, залепени на началната страница" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "Дата на публикуване" # @ polylang #: admin/settings.php:325 msgid "Post format" msgstr "Формат на публикацията" #: admin/settings.php:326 msgid "Page parent" msgstr "Родител на страницата" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "Шаблон на страницата" #: admin/settings.php:328 msgid "Page order" msgstr "Подредба на страницата" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "Картинка на публикацията" #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Редактиране на езика" #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "Добавяне на нов език" #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Изберете език" #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "" "Можете да изберете език от падащото меню или да създадете нов използвайки " "полетата по-долу. " #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Наименование" #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "" "Наименованието както ще се показва в уебсайта (например: български, English)" #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "Местоположение" #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "Местоположение според WordPress (например: bg_BG, en_GB). Ще трябва да " "инсталирате съответния езиков файл (.mo). " #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Код на езика" #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Посока на писане" #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "отляво надясно" #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "отдясно наляво" #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Изберете посоката на писане" #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "Подредба" #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Кой подред ще се показва езикът в джаджата за смяна на езици" #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "Джаджа за смяна на езика" #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Преводи за търсенето" #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Изтриване на запазените преводи " #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Език по подразбиране" #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "Намерени са публикации, страници, категории и етикети, за които не е посочен " "език. Искате ли да бъдат прехвърлени към езика по подразбиране?" #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "Засичане на езика на браузъра" #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "" "Когато потребителят посети началната страница, езикът му да се настройва " "според предпочитанията на браузъра. " #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "Промени в адреса (URL)" #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "Скриване на информацията за езика от адресите за езика по подразбиране" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "Файлове" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "Включване на многоезичност за файловете" #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "Синхронизация" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "Потребителски типове публикации" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "Включване на многоезичност за потребителските типове публикации" # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "Потребителски таксономии" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "Включване на многоезичност за потребителските таксономии" #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "Редактиране" #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "Изтриване" #: admin/table-languages.php:76 msgid "Code" msgstr "Код" #: admin/table-languages.php:78 msgid "Flag" msgstr "Знаменце" #: admin/table-languages.php:79 msgid "Posts" msgstr "Публикации" #: admin/table-string.php:110 msgid "Name" msgstr "Наименование" #: admin/table-string.php:111 msgid "String" msgstr "Низ" #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Добави нов" #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Джаджа за смяна на езика" #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "Показване на джаджа за смяна на езика" #: include/widget-languages.php:75 msgid "Title:" msgstr "Заглавие:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "Добавя многоезична функционалност към WordPress" #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "" "Вие използвате WordPress %s. Минималните изисквания за Polylang включват " "WordPress %s." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "Polylang бе изключен, защото обновихте от твърде стара версия." # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "Моля първо обновете до %s, преди да обновите до %s." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "Група" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "Покажи всички групи" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "Вие сте на път да изтриете необратимо този език. Сигурни ли сте?" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "Използвайте, за да премахнете неупотребявани низове от базата данни, " "например след изключване на разширение (плъгин)." # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "Чрез синхронизацията мета съдържанието (и преводите за таксономии и " "родителски страници) е едно и също за различните преводи на публикации и " "страници." #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "Кодът на езика съдържа невалидни знаци" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "Езикът се определя от съдържанието" #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "" "URL-тата на публикациите, страниците, категориите и етикетите не се променят" #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "Езикът се определя от името на директорията в URL-то" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "Пример:" #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "Езикът се определя от поддомейна в URL-то" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "Езикът се определя от различни домейни" #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "Премахване на /language/ от URL-то" #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "Добавяне на /language/ в URL-то" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "" "Началната страница съдържа кода на езика вместо името или ID-то на страницата" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "Пример: %s вместо %s" #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "Езикът не може да бъде добавен." # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "Езикът бе добавен." # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "Езикът бе изтрит." # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "Езикът бе обновен." # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "Преводите бяха обновени." #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "Код на езика - за предпочитане двубуквен по ISO 639-1 (например: bg)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "" "Избраната статична начална страница трябва да бъде преведена на всички езици." #: admin/admin-strings.php:60 msgid "Widget text" msgstr "Текст на джаджата" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "Препоръчани разширения" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "Езикът се определя от кода в адреса (URL)" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "Скриване не езици без превод" languages/polylang-af.po000066600000037063152100561460011300 0ustar00msgid "" msgstr "" "Project-Id-Version: polylang\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2015-02-14 09:11+0100\n" "Last-Translator: Kobus Joubert \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2: nplural=n>1;\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: _e;__;_x\n" "X-Poedit-Basepath: .\n" "X-Generator: Poedit 1.5.4\n" "Language: af\n" "X-Poedit-SearchPath-0: ..\n" "X-Poedit-SearchPath-1: ../include\n" #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang word voorsien met 'n uitgebreide %s dokumentasie %s (slegs in " "Engels). Dit sluit inligting in oor hoe om jou veeltalige werf op te stel en " "dit op 'n daaglikse basis te gebruik, 'n FAQ, sowel as 'n dokumentasie vir " "programmeerders om hul plugins en temas aan te pas." #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "Jy sal ook nuttige inligting in die %s support forum %s vind. Maar moenie " "vergeet om 'n soektog te maak voordat 'n nuwe onderwerp gepos word nie." #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polylang is gratis en is vrygestel onder dieselfde lisensie as WordPress, " "die %sGPL%s." #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "As jy wonder hoe jy die projek kan help, %slees hierdie%s." #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "Laastens as jy van hierdie plugin hou, of as dit jou besigheid help, sal " "donasies aan die skrywer opreg waardeer word." #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "Tale" #: include/switcher.php:22 msgid "Displays language names" msgstr "Toon taal name" #: include/switcher.php:23 msgid "Displays flags" msgstr "Toon vlae" #: include/switcher.php:24 msgid "Forces link to front page" msgstr "Dwing skakel na voorblad" #: include/switcher.php:25 msgid "Hides the current language" msgstr "Verberg die huidige taal" #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "Toon as dropdown" #: admin/admin.php:267 msgid "Filters content by language" msgstr "Filtreer inhoud volgens taal" #: admin/admin.php:258 msgid "Show all languages" msgstr "Toon alle tale" #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "Las 'n nuwe vertaling by" #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "Taal" #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Vertalings" #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "Stel die taal" #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Die widget is vertoon vir:" #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "Alle tale" #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Admin taal" #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "WordPress default" #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "Instellings" #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Opgradering van taal lêers…" #: admin/settings.php:62 msgid "About Polylang" msgstr "Oor Polylang" #: admin/settings.php:78 msgid "Strings translations" msgstr "String vertalings" #: admin/settings.php:101 msgid "Strings translation" msgstr "String vertaling" #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "Gee 'n geldige WordPress locale" #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "Die taal kode moet uniek wees" #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "Die taal moet 'n naam hê" #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "Die taal is geskep, maar die WordPress taallêer is nie afgelaai nie. " "Installeer dit asseblief by hand." #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Widget titel" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "Taksonomieë" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "Persoonlike velde" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "Kommentaar status" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "Ping status" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "Sticky posts" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "Gepubliseer datum" # @ polylang #: admin/settings.php:325 msgid "Post format" msgstr "Post formaat" #: admin/settings.php:326 msgid "Page parent" msgstr "Bladsy ouer" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "Bladsy sjabloon" #: admin/settings.php:328 msgid "Page order" msgstr "Bladsy orde" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "Featured prent" #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Verander tale" #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "Las nuwe taal by" #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Kies a taal" #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "Jy kan 'n taal in die lys kies of dit direk verander hieronder." #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Volle naam" #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "" "Die naam is hoe dit vertoon word op jou webwerf (byvoorbeeld: Afrikaans)." #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "Locale" #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "WordPress Locale vir die taal (byvoorbeeld: af_ZA). Jy gaan nodig hê om die ." "mo leêr te installeer vir die taal." #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Taal kode" #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Skrif rigting" #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "links na regs" #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "regs na links" #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Kies die skrif rigting vir die taal" #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "Orde" #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Posisie van die taal in die taal selektor" #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "Taal selektor" #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Search translations" #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Skoon stringe vertaling databasis" #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Default taal" #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "Daar is posts, bladsye, kategorieë of tags sonder 'n taal gestel. Wil jy " "hulle almal stel na die standaard taal?" #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "Spoor browser taal op" #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "" "Wanneer die voorblad besoek word, stel die taal volgens die browser se " "voorkeur" #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "URL veranderinge" #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "Verberg URL taal inligting vir standaard taal" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "Media" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "Aktiveer tale en vertalings vir media" #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "Sinkronisering" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "Persoonlike post tipes" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "Aktiveer tale en vertalings vir persoonlike post tipes." # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "Persoonlike taksonomieë" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "Aktiveer tale en vertalings vir persoonlike taksonomieë." #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "Verander" #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "Verwyder" #: admin/table-languages.php:76 msgid "Code" msgstr "Kode" #: admin/table-languages.php:78 msgid "Flag" msgstr "Vlag" #: admin/table-languages.php:79 msgid "Posts" msgstr "Posts" #: admin/table-string.php:110 msgid "Name" msgstr "Naam" #: admin/table-string.php:111 msgid "String" msgstr "String" #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Maak nuwe" #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Taal Selektor" #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "Toon 'n taal selektor" #: include/widget-languages.php:75 msgid "Title:" msgstr "Titel:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "Voeg veeltalige vermoë by WordPress" #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "Jy gebruik WordPress %s. Polylang vereis ten minste WordPress %s." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "" "Polylang was gedeaktiveer omdat jy van te ou weergawe af opgegradeer het." # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "Gradeer asseblief eers op na %s toe voor jy opgradeer na %s toe." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "Groep" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "Sien alle groepe" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "Jy is op die punt om hierdie taal permanent te verwyder. Is jy seker?" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "Gebruik hierdie om ongebruikte strings te verwyder uit die databasis uit, " "byvoorbeeld na verwydering van 'n module." # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "Die sinkronisasie opsies voorsien om presies dieselfde waardes in stand te " "hou (of vertalings in die geval van taksonomie en bladsy ouer) van meta-" "inhoud tussen die vertalings van 'n post of bladsy." #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "Die taal kode bevat ongeldige karakters" #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "Die taal word ingestel van inhoud" #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "Posts, bladsye, kategorieë en etikette urls is nie verander nie." #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "Die taal is ingestel van die gids se naam in pretty permalinks" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "Voorbeeld:" #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "Die taal word gestel uit die subdomein naam in pretty permalinks" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "Die taal word gestel vanuit verskillende domians" #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "Verwyder / taal / in pretty permalinks" #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "Hou / taal / in pretty permalinks" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "" "Die voorblad url bevat die taal kode in plaas van die bladsy se naam of " "bladsy id" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "Voorbeeld: %s in plaas van %s" #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "Onmoontlik om die taal by te voeg." # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "Taal bygevoeg." # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "Taal verwyder." # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "Taal opgedateer." # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "Vertalings opgedateer." #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "Taal-kode - verkieslik 2-letters ISO 639-1 (byvoorbeeld: af)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "" #: admin/admin-strings.php:60 msgid "Widget text" msgstr "" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "" #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "ud" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "" languages/polylang-my_MM.po000066600000062362152100561460011730 0ustar00msgid "" msgstr "" "Project-Id-Version: Polylang v1.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2015-02-14 09:22+0100\n" "Last-Translator: Sithu Thwin \n" "Language-Team: \n" "Language: my_MM\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: ../\n" "X-Textdomain-Support: yes\n" "X-Generator: Poedit 1.5.4\n" "X-Poedit-SearchPath-0: .\n" # @ polylang #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "ပိုမိုပြည့်စုံသော %sလမ်းညွှန်ချက်စာတမ်း%s (အင်္ဂလိပ် ဘာသာြဖင့်သာလျှင်) အား Polylang မှ ပံ့ပိုးပေးထားသည်။ " "ဤလမ်းညွှန်ချက်စာတမ်းတွင် ဘာသာစကားစုံ ဆိုဒ်တစ်ခုအား ပြင်ဆင်လွှင့်တင်ရန် နည်းလမ်းများနှင့် နေ့စဉ်သုံး လိုအပ်သော " "အချက်အလက်များပါဝင်ပါသည်။ FAQ အပြင် ပရိုဂရမ် ရေးသားသူများအတွက် ၎င်းတို့၏ ပလပ်အင်များ " "အခင်းအကျင်းများအား လိုအပ်သလို ပြုပြင်နိုင်သည့် နည်းလမ်းများလည်း ပါဝင်သည်။" # @ polylang #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "%sအကူအညီ ဖိုရမ်%s တွင်လည်း အသုံးဝင်သော အချက်အလက်များ ရှာဖွေနိုင်သည်။ သို့သော် ခေါင်းစဉ်အသစ်တစ်ခု ဖွင့်လှစ် " "မမေမြန်းခင် အရင် ရှာဖွေကြည့်ရန် မမေ့ပါနှင့်။" # @ polylang #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "Polylang အား WordPress ၏ လိုင်စင်အတိုင်း %sGPL%s လိုင်စင်ဖြင့်သာ အခမဲ့ ဖြန့်ချိပါသည်။" # @ polylang #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "ပရောဂျက်အား မည်သို့ကူညီနိုင်မည်ကို သိလိုပါက %sဒါကိုဖတ်ပါ။%s " # @ polylang #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "ဒီပလပ်အင်ကို နှစ်သက်လျှင် သို့မဟုတ် သင့်လုပ်ငန်းအား အထောက်အကူဖြစ်လျှင် ရေးသူအား လှူဒါန်းမှုအား ကျေးဇူးအထူး " "တင်ရှိမည်ဖြစ်သည်။" # @ polylang #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "ဘာသာစကားများ" # @ polylang #: include/switcher.php:22 msgid "Displays language names" msgstr "ဘာသာစကားအမည်များ ဖော်ပြပါ" # @ polylang #: include/switcher.php:23 msgid "Displays flags" msgstr "အလံများ ဖော်ပြပါ" # @ polylang #: include/switcher.php:24 msgid "Forces link to front page" msgstr "လိပ်စာများအား ရှေ့စာမျက်နှာသို့ ညွှန်းပါ" # @ polylang #: include/switcher.php:25 msgid "Hides the current language" msgstr "ယခုအသုံးပြုထားသော ဘာသာစကားအား ဖျောက်ထားပါ" # @ polylang #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "ဆွဲချဇယားအဖြစ်ပြပါ" # @ polylang #: admin/admin.php:267 msgid "Filters content by language" msgstr "အကြောင်းအရာများအား ဘာသာစကားဖြင့် စစ်ထုတ်ပါ" # @ polylang #: admin/admin.php:258 msgid "Show all languages" msgstr "ဘာသာစကားအားလုံးပြပါ" # @ polylang #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "ဘာသာစကားအသစ်ထည့်ရန်" # @ polylang #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "ဘာသာစကား" # @ polylang #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "ဘာသာပြန်များ" # @ polylang #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "ဘာသာစကား သတ်မှတ်ရန်" # @ polylang #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "ဝစ်ဂျစ်ဖော်ပြမှု - " # @ polylang #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "ဘာသာစကားအားလုံး" # @ polylang #: admin/admin-filters.php:123 msgid "Admin language" msgstr "ထိန်းချုပ်ခလုပ်ခုံ ဘာသာစကား" # @ polylang #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "WordPress မူလဘာသာစကား" # @ polylang #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "သတ်မှတ်ချက်များ" # @ polylang #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "ဘာသာစကားဖိုင်များ အသစ်ဖြည့်စွက်နေသည်…" # @ polylang #: admin/settings.php:62 msgid "About Polylang" msgstr "Polylang အကြောင်း" # @ polylang #: admin/settings.php:78 msgid "Strings translations" msgstr "စာကြောင်းဘာသာပြန်များ" # @ polylang #: admin/settings.php:101 msgid "Strings translation" msgstr "စာကြောင်းဘာသာပြန်" # @ polylang #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "သင့်လျှော်မှန်ကန်သော WordPress ဘာသာစကား သင်္ကေတကို ဖြည့်သွင်းပါ" # @ polylang #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "ဘာသာစကားကုတ်မှာ တစ်မျိုးစီ သီးသန့်ဖြစ်ရမည်" # @ polylang #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "ဘာသာစကားတွင် အမည်ရှိရမည်" # @ polylang #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "ဘာသာစကားအား ဖန်တီးပြီးပါပြီ။ သို့သော် ဘာသာစကားဖိုင်များ ဆွဲချရယူမှု မပြီးမြောက်သေးပါ။ ကိုယ်တိုင် " "ထည့်သွင်းပေးပါ။" # @ polylang #: admin/admin-strings.php:59 msgid "Widget title" msgstr "ဝစ်ဂျက်ခေါင်းစဉ်" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "ဝေါဟာရအုပ်စုများ" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "စိတ်ကြိုက်ဖြည့်ရန်" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "မှတ်ချက် အခြေအ" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "ချိတ်ဆက်မှု အခြေအ" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "ဦးစားပေးစာမူ" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "ထုတ်ဝေခဲ့သောနေ့စွဲ" # @ polylang #: admin/settings.php:325 msgid "Post format" msgstr "စာမူပုံစံ" # @ polylang #: admin/settings.php:326 msgid "Page parent" msgstr "စာမျက်နှာပင်" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "စာမျက်နှာ စံပုံစံ" # @ polylang #: admin/settings.php:328 msgid "Page order" msgstr "စာမျက်နှာ အစီအစဉ်" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "သရုပ်ဖော် ရုပ်ပုံ" # @ polylang #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "ဘာသာစကား ပြုပြင်ရန်" # @ polylang #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "ဘာသာစကားအသစ်ထည့်ရန်" # @ polylang #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "ဘာသာစကားရွေးရန်" # @ polylang #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "စာရင်းအတွင်းရှိ ဘာသာစကားတစ်ခုအားရွေးပါ သို့မဟုတ် အောက်တွင် တိုက်ရိုက် ပြုပြင်ပါ။" # @ polylang #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "အမည်အပြည့်အစုံ" # @ polylang #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "သင့်ဆိုဒ်တွင် ဖော်ပြမည့်အမည်။ (ဥပမာ။ ။ အင်္ဂလိပ်)။" # @ polylang #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "ေဒသန္တရဘာသာစကားအုပ်စု" # @ polylang #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "WordPress ဘာသာစကားသင်္ကေတ ( ဥပမာ။ ။ my_MM ) ။ ဤဘာသာစကားအတွက် .mo ဖိုင်အား " "ထည့်သွင်းပေးရန်လိုအပ်ပါသည်။" # @ polylang #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "ဘာသာစကားကုတ်" # @ polylang #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "စာသားဦးတည်ရာ" # @ polylang #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "ဘယ်မှ ညာ" # @ polylang #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "ညာမှ ဘယ်" # @ polylang #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "ဘာသာစကားအတွက် စာသားဦးတည်ရာကို ရွေးပါ" # @ polylang #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "အစီအစဉ်" # @ polylang #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "ဘာသာစကားပြောင်းခလုပ်ရှိ နေရာ" # @ polylang #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "ဘာသာစကားပြောင်းခလုပ်" # @ polylang #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "ဘာသာပြန်များရှာရန်" # @ polylang #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "ဘာသာပြန် ဒေတာဗေ့စ်အား ရှင်းပါ" # @ polylang #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "မူလ ဘာသာစကား" # @ polylang #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "ဘာသာစကားသတ်မှတ်မှု မရှိသေးသော စာမူများ၊ စာမျက်နှာများ၊ ကဏ္ဍများ သို့မဟုတ် စကားစုတွဲများ " "ရှိနေပါသည်။ မူလဘာသာစကားဖြင့် သတ်မှတ်ပေးလိုပါသလား။" # @ polylang #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "ဘရောက်ဇာ ဘာသာစကားအား စစ်ဆေးရန်" # @ polylang #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "" "ပင်မစာမျက်နှာသို့ လာရောက်လည်ပတ်သောအခါ ဘရောက်ဇာသတ်မှတ်ချက်ကို မူတည်၍ ဘာသာစကားအား သတ်မှတ်ဖော်ပြပါ" # @ polylang #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "URL ပြုပြင်ခြင်း" # @ polylang #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "မူလဘာသာစကားအတွက် URL မှ ဘာသာစကား အချက်အလက်အား ဖျောက်ထားရန်" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "မီဒီယာ" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "မီဒီယာအတွက် ဘာသာစကားနှင့် ဘာသာပြန်များ ဖွင့်ထားရန်" # @ polylang #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "တိုက်ရိုက်ကူးယူချိတ်ဆက်ခြင်း" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "စိတ်ကြိုက် စာမူအမျိုးအစား" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "စိတ်ကြိုက်စာမူအများအစားများအတွက် ဘာသာစကားနှင့် ဘာသာပြန်များဖွင့်ထားရန်" # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "စိတ်ကြိုက်ဝေါဟာရများ" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "စိတ်ကြိုက်ဝေါဟာရများအတွက် ဘာသာစကားနှင့် ဘာသာပြန်များဖွင့်ရန်" # @ polylang #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "ပြုပြင်" # @ polylang #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "ဖျက်" # @ polylang #: admin/table-languages.php:76 msgid "Code" msgstr "ကုဒ်" # @ polylang #: admin/table-languages.php:78 msgid "Flag" msgstr "အလံ" # @ polylang #: admin/table-languages.php:79 msgid "Posts" msgstr "စာမူများ" # @ polylang #: admin/table-string.php:110 msgid "Name" msgstr "အမည်" # @ polylang #: admin/table-string.php:111 msgid "String" msgstr "စာကြောင်း" # @ polylang #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "အသစ်" # @ polylang #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "ဘာသာစကားပြောင်းခလုပ်" # @ polylang #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "ဘာသာစားပြောင်းခလုပ်ဖော်ပြရန်" # @ polylang #: include/widget-languages.php:75 msgid "Title:" msgstr "ခေါင်းစဉ် :" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "ဘာသာစကားပေါင်းစုံစနစ်အား WordPress အတွင်းထည့်သွင်းရန်" # @ polylang #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "သင် WordPress %s အား အသုံးပြုနေသည်။ WordPress %s အား Polylang မှ လိုအပ်ပါသည်။" # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "အလွန်ဟောင်းလွန်းသော ဗားရှင်းမှ အဆင့်မြှင့်တင်ခြင်းပြုလုပ်ခဲ့သဖြင့် Polylang အား ပိတ်ထားလိုက်သည်။" # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "%sသို့ အဆင့်မြှင့်တင်ပြီးမှ %s သို့ အဆင့်မြှင့်ပါ။" # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "အုပ်စု" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "အုပ်စုအားလုံးကိုကြည့်ရန်" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "ဒီဘာသာစကားကို အပြီးဖျက်တော့မည်။ တကယ်သေချာရဲ့လား။" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "အသုံးမပြုသောစာကြောင်းများအား ဒေတာဗေ့စ်မှ ဖျက်ရန် ဒါကိုသုံးပါ။ ဥပမာ ပလပ်အင်တစ်ခုအား " "ဖျက်ထုတ်လိုက်သောအခါ။" # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "တိုက်ရိုက်ကူးယူချိတ်ဆက်ခြင်းကိုသုံးခြင်းဖြင့် ဘာသာပြန်ထားသော စာမူသို့မဟုတ် စာမျက်နှာတစ်ခု၏ " "မီတာအကြောင်းအရာများ၏ တန်ဖိုးများ (သို့မဟုတ် စာမျက်နှာပင်မ နှင့် ဝေါဟာရအုပ်စုများတွင် " "ဘာသာပြန်များ)အား တူညီမှု ရှိစေရန် ထိန်းသိမ်းဆောင်ရွက်ပေးသည်။" # @ polylang #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "ဘာသာစကားကုဒ်တွင် သင့်လျှော်မှုမရှိသော အက္ခရာများပါဝင်နေသည်။" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "အကြောင်းအရာအပေါ်မူတည်၍ ဘာသာစကားအား သတ်မှတ်ရန်" # @ polylang #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "စာမူများ၊ စာမျက်နှာများ၊ ကဏ္ဍများနှင့် စကားစုတွဲများအတွက် URL များအား မပြုပြင်ပါ။" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "ချိတ်ဆက်လိပ်စာတွင် တည်နေရာညွှန်းအမည်ဖြင့် ဘာသာစကားအား သတ်မှတ်ရန်" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "ဥပမာ။ ။" # @ polylang #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "ချိတ်ဆက်လိပ်စာတွင် ဒိုမိန်းခွဲအမည်ဖြင့် ဘာသာစကားအား သတ်မှတ်ရန်" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "မတူညီသော ဒိုမိန်းများမှ ဘာသာစကားအား သတ်မှတ်သည်" # @ polylang #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "ချိတ်ဆက်လိပ်စာမှ /language/ အား ဖယ်ရှားရန်" # @ polylang #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "ချိတ်ဆက်လိပ်စာတွင် /language/ အား ဖော်ပြထားရန်" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "ပင်မစာမျက်နှာ URL တွင် စာမျက်နှာအမည် သို့မဟုတ် စာမျက်နှာ id အစား ဘာသာစကားကုဒ်ပါဝင်သည်" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "ဥပမာ။ ။ %s သည် %s ၏ အစားဖြစ်သည်။" # @ polylang #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "ဘာသာစကား အသစ်ထည့်ရန် မဖြစ်နိုင်ပါ။" # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "ဘာသာစကား ထည့်ပြီးပြီ။" # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "ဘာသာစကား ဖျက်ပြီးပြီ။" # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "ဘာသာစကား အသစ်ဖြည့်စွက်ပြုပြင်ပြီးပါပြီ။" # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "ဘာသာပြန် အသစ်ဖြည့်စွက်ပြုပြင်ပြီးပါပြီ။" # @ polylang #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "" "ဘာသာစကား ကုဒ်သင်္ကေတ - အက္ခရာ ၂ လုံးပါဝင်သော ISO 639-1 ဘာသာစကားကုတ် ဖြစ်သင့်ပါသည် " "( ဥပမာ။ ။ my )" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "ရွေးချယ်ထားသော ပင်မစာမျက်နှာအား ဘာသာစကားအားလံုးသို့ ဘာသာပြန်ဆိုထားရမည်။" # @ polylang #: admin/admin-strings.php:60 msgid "Widget text" msgstr "ဝစ်ဂျက်စာသား" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "" languages/polylang-sr_RS.mo000066600000026001152100561460011725 0ustar00id  : :K -    )   ( *: "e          0 ? W \ j     n F K e o 2u  ? $ ( 1 C Q c m t z  1 J \31 8 &AUgp  Q-< j *@@YiwD&rn uaT& {p@ DL@ T b9p vw-& ,& ;FVFu-$9?A6! AYav g.'V_4eL@>D Zgv} 6D La  /!!!s! q"T~""" "###:#!?#!a## # #Q#.#-$CM$V$$zj%%^&@`&&_'w''( ($'(L()0))l)8B*>{*B*G*E+++Y +Z=B" 9di('O ]2HJVF@g>K8I- L/ &Q\*?<S)ecC3[hXM$E:D;T4fPRa_W^#GN1`6 7%0b!AU.,5About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides the current languageIf you wonder how you can help the project, just %sread this%s.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage codeLanguage switcherLanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsURL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: Polylang v1.3 Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: 2015-02-14 09:26+0100 Last-Translator: Language-Team: Language: sr_RS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Poedit-SourceCharset: utf-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: ../ X-Textdomain-Support: yes X-Generator: Poedit 1.5.4 X-Poedit-SearchPath-0: . O PolylanguAktivirajte jezike i prevode za izmenjene tipove članka. (Activate languages and translations for custom post types.)Aktivirajte jezike i prevode za prilagođene nomenklature. (Activate languages and translations for custom taxonomies.)Aktivirajte jezike i prevode za medijeDodaj novDodaj novi jezikDodaj novi prevodDodaje višejezičku sposobnost za WordPressJezik AdministratoraSvi jeziciIzaberite jezikOdaberite smer teksta za jezikOčisti svojstva prevoda databaze (Clean strings translation database)KodStatus komentaraPrilagođena poljaIzmenjeni članciPrilagođene nomenklature (Custom taxonomies)Podrazumevani jezik ObrišiDetektuj jezik pretrživača (na pr: Google Chrome. Firefox...)Prikazuje izmenu jezika (Displays a language switcher)Prikazuje se u opadajućem menijuPrikazuje zastavePrikazuje imena jezikaIzmeniIzmeni jezikUnesite važeći WordPress lokal (Enter a valid WordPress locale)Primer:Primer: %s umesto %sOdabrana slika (Featured image)Filteriše sadržaj prema jezikuNa kraju, ako želite ovaj plugin, ili ako vam pomaže u poslu, donacije autoru će biti veoma cenjene.ZastavaForsira link ka naslovnoj stranici (home page)Puno imeGrupaSakrij Informacije URL jezika za podrazumevani jezikSkriva trenutni jezikAko se pitate kako možete pomoći ovaj projekat, samo %spročitajte ovo%s.Sačuvajte /jezik/ u lepim permalinkovima (in pretty permalinks)JezikIzmena/Promena jezikaJezički kodPromena jezikaJeziciLokalnoMedijiImeRedosledRedosled stranicaRoditelj stranice Izgled (šablon) stranicaPing statusMolimo nadogradite prvo na %s pre nego nadogradite %s.Polilang je deaktiviran jer ste nadogradili sa veoma stare verzije .Polilang je besplatan i objavljen pod istom licencom kao WordPress, %sGPL%s.Polylang sadrži obimnu %sdokumentaciju%s (in English only). Ona sadrži informacije kako da instališete vašu višejezičku stranicu i koristite je svakodnevno, Pitanja i Odgovore (FAQ), kao i dokumentaciju za programere da modifikuju njihove plugin-ove i teme.Položaj jezika u izmenjivaču redosleda jezikaFormat člankaČlanakČlanci, stranice, kategorije i tagovi nisu modifikovani (Posts, pages, categories and tags urls are not modified.)Datum objaveUklonite /ljezik/ u lepim permalinkovima ( Remove /language/ in pretty permalinks) Pretraži prevodePostavlja jezikPodešavanjaPrikaži sve jezikeLepljivi članak-ci (Sticky posts)VezaPrevod veze (Strings translation)Prevod veza (Strings translation)SinhronizacijaTaksonomijePravac tekstaUrl naslovne stranice sadrži jezičkii kod umesto imena stranice ili id straniceJezički kod sadrži nevažeće znakove/slovaKod jezika mora biti jedinstvenJezik je postavljen iz sadržaja (The language is set from content)Jezik je namešten za različito web ime (The language is set from different domains )Jezik je podešen u imenu direktorijuma u lepim permalinkovima (The language is set from the directory name in pretty permalinks)Jezik je namešten od sub-imena u lepim permalinkovima (The language is set from the subdomain name in pretty permalinks)Jezik (novi) mora imati imeJezik je kreiran, ali WordPress jezička datoteka nije preuzeta. Molimo instalirajte je ručnoIme je kako se prikazuju na vašem sajtu (na primer : engleski) Opcije sinhronizacije omogućavaju da se održe potpuno iste vrednosti (ili prevode u slučaju nomenklaturama i stranice roditelja ) od meta sadržaja između prevoda članka ili stranice.Vidžet je prikazan za:Postoje članci, stranice, kategorije ili tagovi-oznake bez podešenog jezika. Da li želite da ih postavite na podrazumevani jezik ?Naslov:PrevodiURL izmene - modifikacijeNadogradnja jezičke datoteke…Koristite ovo za uklanjanje neiskorišćenih žica iz baze podataka, na primer kada je plugin deinstaliran. (Use this to remove unused strings from database, for example after a plugin has been uninstalled.)Pogledaj sve grupeKada je naslovna strana posetćena , podesite jezik na osnovu preferenca pretraživača - brovzera (na pr: Google Chrome. Firefox...)Naslov Vidžeta (Widget title)WordPress (lokalni) prostor za jezik (na primer: en_US ). Moraćete da instalirate Mo datoteku za taj jezikPodrazumevani (originalni) WordPress (WordPress default)Vi hoćete da trajno izbrišete ovaj jezik. Da li ste sigurni?Vi koristite WordPress %s. Polylang zahteva najmanje WordPress %s.Možete odabrati neki od jezika u listi ili ga direktno izmenite ispod.Takođe, moći ćete da nađete korisne informacije na %ssupport forum%s. Nemojte da zaboravite da prvo pretražite forum pre nego što postavite pitanje.Sa leva na desnoSa desna nalevolanguages/polylang-lt_LT.po000066600000040220152100561460011715 0ustar00msgid "" msgstr "" "Project-Id-Version: polylang\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Naglis Jonaitis \n" "Language-Team: \n" "Language: lt_LT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" "%100<10 || n%100>=20) ? 1 : 2);\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-KeywordsList: _e;__;_x\n" "X-Poedit-Basepath: .\n" "X-Generator: Poedit 1.7.4\n" "X-Poedit-SearchPath-0: ..\n" "X-Poedit-SearchPath-1: ../include\n" #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang pateikiams su išsamia %sdokumentacija%s (tik anglų kalba). Joje " "rasite informaciją kaip sukurti kelių kalbų svetainę bei naudotis ją " "kasdien, D.U.K. bei dokumentaciją programuotojams, aprašančią kaip " "pritaikyti savo įskiepius bei temas." #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "Naudingos informacijos taip pat galite rasti %spalaikymo forume%s. Tiesa, " "nepamirškite paieškoti prieš sukurdami naują temą." #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polylang yra nemokamas ir leidžiamas su ta pačia licencija kaip ir WordPress " "- %sGPL%s." #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "Jei norite prisidėti prie šio projekto, %sskaitykite čia%s." #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "Galiausiai, jei Jums patinka šis įskiepis arba jei jis padeda Jūsų verslui, " "autorius labai vertintų Jūsų paramą." #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "Kalbos" #: include/switcher.php:22 msgid "Displays language names" msgstr "Rodyti kalbų pavadinimus" #: include/switcher.php:23 msgid "Displays flags" msgstr "Rodyti vėliavėles" #: include/switcher.php:24 msgid "Forces link to front page" msgstr "Priverstinai nukreipti į pagrindinį puslapį" #: include/switcher.php:25 msgid "Hides the current language" msgstr "Nerodyti dabartinės kalbos" #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "Rodyti kaip išskleidžiamą pasirinkimą" #: admin/admin.php:267 msgid "Filters content by language" msgstr "Atrenka turinį pagal kalbą" #: admin/admin.php:258 msgid "Show all languages" msgstr "Rodyti visas kalbas" #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "Pridėti naują vertimą" #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "Kalba" #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Vertimai" #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "Nustatyti kalbą" #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Valdiklį rodyti:" #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "Visoms kalboms" #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Administravimo skydelio kalba" #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "WordPress numatytasis" #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "Nustatymai" #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Atnaujinami kalbų failai…" #: admin/settings.php:62 msgid "About Polylang" msgstr "Apie Polylang" #: admin/settings.php:78 msgid "Strings translations" msgstr "Eilučių vertimas" #: admin/settings.php:101 msgid "Strings translation" msgstr "Eilučių vertimas" #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "Įveskite taisyklingą WordPress lokalę" #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "Kalbos kodas privalo būti unikalus" #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "Kalba privalo turėti vardą" #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "Kalba buvo pridėta, tačiau jos WordPress kalbos failas nebuvo parsiųstas. " "Prašome tai padaryti rankiniu būdu." #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Valdiklio pavadinimas" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "Taksonomijos" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "Pasirinktiniai laukai" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "Komentarų būsena" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "Ryšio patikrinimo būsena" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "Nuolat pirmame puslapyje rodomi įrašai" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "Paskelbimo data" # @ polylang #: admin/settings.php:325 msgid "Post format" msgstr "Įrašo formatas" #: admin/settings.php:326 msgid "Page parent" msgstr "Tėvinis puslapis" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "Puslapio šablonas" #: admin/settings.php:328 msgid "Page order" msgstr "Puslapio tvarka" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "Spec. paveikslėlis" #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Redaguoti kalbą" #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "Pridėti naują kalbą" #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Pasirinkite kalbą" #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "" "Galite pasirinkti kalbą iš sąrašo arba tiesiogiai redaguoti ją apačioje." #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Pilnas vardas" #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "Vardas, kuris bus rodomas Jūsų svetainėje (pavyzdžiui: English)." #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "Lokalė" #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "Kalbos WordPress lokalė (pavyzdžiui: lt_LT). Jums reikės įsidiegti šios " "kalbos .mo failą." #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Kalbos kodas" #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Teksto kryptis" #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "iš kairės į dešinę" #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "iš dešinės į kairę" #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Pasirinkite kalbos teksto kryptį" #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "Tvarka" #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Kalbos pozicija kalbos perjungiklyje" #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "Kalbų perjungimas" #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Ieškoti vertimuose" #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Išvalyti eilučių vertimų duomenų bazę" #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Numatytoji kalba" #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "Yra įrašų, puslapių, kategorijų arba žymų, kuriems nenustatyta kalba. Ar " "norite visiems jiems priskirti numatytąją kalbą?" #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "Nustatyti naršyklės kalbą" #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "" "Kai aplankomas pagrindinis puslapis, nustatyti kalbą pagal naršyklės " "pageidavimą" #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "URL pakeitimai" #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "Numatytajai kalbai nerodyti kalbos informacijos URL" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "Failai" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "Įgalinti kalbas ir vertimus failams" #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "Sinchronizavimas" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "Pasirinktiniai įrašų tipai" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "Įgalinti kalbas bei vertimus pasirinktiniams įrašų tipams." # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "Pasirinktinės taksonomijos" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "Įgalinti kalbas ir vertimus pasirinktinėms taksonomijoms." #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "Redaguoti" #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "Ištrinti" #: admin/table-languages.php:76 msgid "Code" msgstr "Kodas" #: admin/table-languages.php:78 msgid "Flag" msgstr "Vėliava" #: admin/table-languages.php:79 msgid "Posts" msgstr "Įrašai" #: admin/table-string.php:110 msgid "Name" msgstr "Vardas" #: admin/table-string.php:111 msgid "String" msgstr "Eilutė" #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Pridėti naują" #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Kalbų perjungimas" #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "Leidžia pasirinkti puslapio kalbą" #: include/widget-languages.php:75 msgid "Title:" msgstr "Pavadinimas:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "Prideda daugiakalbystės funkciją WordPress sistemai" #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "" "Jūs naudojatės WordPress %s. Polylang reikalauja mažiausiai WordPress %s." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "Polylang buvo išjungtas, nes atsinaujinote iš per daug senos versijos." # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "Prašome atsinaujinti iki %s, prieš atnaujinant iki %s." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "Grupė" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "Peržiūrėti visas grupes" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "Ketinate visam laikui ištrinti šią kalbą. Ar tikrai to norite?" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "Naudokite nenaudojamų eilučių pašalinimui iš duomenų bazės, pavyzdžiui po " "įskiepio ištrynimo." # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "Sinchronizacijos parinktys leidžia išlaikyti pastovias vienodas turinio " "reikšmes (ar vertimus taksonomijų ar tėvinių puslapių atveju) tarp puslapio " "ar įrašo vertimų." #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "Kalbos kode yra neleistinų simbolių" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "Kalba nustatoma pagal turinį" #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "Įrašų, puslapių, kategorijų ir žymų adresai nekeičiami." #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "Kalba nustatoma iš aplanko pavadinimo pastoviosiose nuorodose" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "Pavyzdys:" #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "Kalba nustatoma iš subdomeno vardo pastoviosiose nuorodose" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "Kalba nustatoma iš skirtingų domenų" #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "Pašalinti /language/ iš pastoviųjų nuorodų" #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "Palikti /language/ pastoviosiose nuorodose" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "" "Pradžios puslapio adrese yra kalbos kodas vietoje puslapio pavadinimo ar id" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "Pavyzdys: %s vietoje %s" #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "Neįmanoma pridėti kalbos." # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "Kalba pridėta." # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "Kalba ištrinta." # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "Kalba atnaujinta." # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "Vertimai atnaujinti." #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "" "Kalbos kodas - geriausia naudoti dviejų raidžių ISO 639-1 kodą (pvz.: lt)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "" "Pasirinktas statinis puslapis privalo būti išverstas į visas pasirinktas " "kalbas." #: admin/admin-strings.php:60 msgid "Widget text" msgstr "Valdiklio tekstas" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "Rekomenduojami įskiepiai" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "Kalba nustatoma iš URL esančio kalbos kodo" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "Nerodyti kalbų, neturinčių vertimų" languages/polylang-uk.mo000066600000034154152100561460011324 0ustar00t\  : : -V    )   * "5 X ] l z         ' , : Y b |  n   5 ? 2E #x  ?  $<EW gAu     & 41@Jr\1 JV8\& !.5I^ nyAQ- J k*,@@%fiD3r{ a9TI  p(@:D{@  DlaaS/(NGw#> BJ*!(@,Q0~9'( : O 3m  $ # + &! !H!G" Z"ge"5".#2#)#Y#:$C$_$v$X$$$%/% 8%E% Z%e%t%'%%%e%vT&& K':W)!))i)3*)Q*Y{***+ ,++M+ y++++++|,,D-<]-/-<-2.i:.`.(/.//dk0112 22$2 33(3\3(*4S445,5)5c5q]66Y788R8+$iaY-3&D[E\k*;8!fO)Bep sS . c '>:0M=_"TKoU7nX< ZqRI/GCgFAt(WmrQP%?`^645V@b#dN]LJ 2j9hH1l,About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides languages with no translationHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRecommended pluginsRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe chosen static front page must be translated in all languages.The front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the code in the URLThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget textWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: polylang Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: Last-Translator: Andrii Ryzhkov Language-Team: Language: uk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: . X-Textdomain-Support: yes X-Generator: Poedit 1.7.4 X-Poedit-SearchPath-0: .. Про PolylangАктивувати мови та переклади для власних типів публікацій.Активувати мови та переклади для власних таксономії.Активувати мови та переклади для медіафайлівДодати новийДодати нову мовуДодати новий перекладДодає магатомовні властивості до WordPressАдміністратор мовиВсі мовиВибрати мовуВиберіть напрямок тексту для мовиОчистити базу даних перекладу строкКодСтатус коментарюВласні поляВласні типи публікаціїВласні таксономіїМова за замовчуваннямВидалитиВизначати мову браузераВідображає перемикач мовиВідображати як меню, що випадаєВідображати прапорціВідображати назви мовРедагуватиРедагувати мовуВведіть дійсну локаль WordPress Приклад:Приклад: %s замість %sГоловне зображенняФільтрує вміст за мовоюНарешті, якщо Вам подобається цей плаґін або, якщо це допоможе вашому бізнесу, пожертвування автору вітаються.ПрапорПримусовий перехід на головну сторінкуПовне ім'яГрупаПриховати інформацію мови в URL для мови за замовчуваннямПриховати мови без перекладуПриховувати поточну мовуЯкщо вам цікаво, як Ви можете допомогти проекту, просто %sпрочитайте це%s.Неможливо додати мову.Залишити /language/ в акуратних постійних посиланняхМоваПеремикач мовиМова додана.Код мовиКод мови - бажано 2-символьний ISO 639-1 (наприклад, en)Мова видалена.Перемикач мовМова оновлена.МовиЛокальМедіафайлиНазваПорядокНомер сторінкиБатьківська сторінкаШаблон сторінкиСтатус пінгуБудь ласка, оновіть спочатку до %s перед оновленням до %s.Polylang був відключений, тому що ви оновили з занадто старої версії.Polylang є безкоштовним і поширюється за тією ж ліцензією, як і WordPress, %sGPL%s.Polylang забезпечений обширною %sдокументацією%s (тільки англійською мовою). Вона включає в себе інформацію про те, як налаштувати багатомовний сайт і використовувати його на щоденній основі, запитання та відповіді, а також документацію для програмістів, щоб адаптувати свої плаґіни і теми.Положення мови в перемикачі мовФормат публікаціїПублікаціїURL публікацій, сторінок, категорій та теґів не змінюються.Дата публікаціїРекомендовані плаґіниВилучити /language/ в акуратних постійних посиланняхПошук перекладівВстановити мовуНалаштуванняПоказати всі мовиПрикріплені публікаціїРядокПереклад рядківПереклади рядківСинхронізаціяТаксономіїНапрямок текстуВибрана статична головна сторінка має бути перекладена на всі мови.URL головної сторінки містить код мови замість назви сторінки або ID сторінкиКод мови містить недопустимі символиКод мови повинен бути унікальнимМова встановлена з вмістуМова встановлена з іншого доменуМова встановлена з коду в URLМова встановлена з назви каталогу в постійному посиланніМова встановлена з субдомену в постійному посиланніМова повинна мати ім'яМова була створена, але файл мовний файл WordPress не був завантажений. Будь ласка, встановіть його вручну.Це ім'я, як воно відображається на вашому сайті (наприклад, Англійська).Опція синхронізації дозволяє підтримувати точно таке саме значення (або переклад у випадку таксономій та батьківської сторінки) метаданих вмісту між всіма перекладами публікації або сторінки.Віджет відображається для:Є публікації, сторінки, категорій або теґи без вибраної мови. Ви хочете встановити їм мову за замовчуванням?Назва:ПерекладиПереклади оновлені.Модифікації URL Оновлення мовних файлів…Використовуйте це, щоб видалити з бази даних рядки, які не використовуються. Наприклад, після видалення плаґіну.Переглянути всі групиВстановлювати мову відповідно до уподобань браузера, коли відвідується головна сторінкаТекст віджетуНазва віджетуЛокаль WordPress для мови (наприклад, en_US). Вам потрібно буде встановити файл .mo для даної мови.WordPress за замовчуваннямВи збираєтесь остаточно видалити цю мову. Ви впевнені?Ви використовуєте WordPress %s. Для Polylang потрібно принаймні WordPress %s.Ви можете вибрати мову зі списку або безпосередньо відредагувати її нижче.Ви також знайдете корисну інформацію в %sфорумі підтримки%s. Однак не забувайте зробити пошук, перш ніж додавати нову тему.зліва направозправа налівоlanguages/polylang-cs_CZ.po000066600000041535152100561460011712 0ustar00msgid "" msgstr "" "Project-Id-Version: Polylang v1.4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2015-02-14 09:14+0100\n" "Last-Translator: Přemysl Karbula\n" "Language-Team: Přemysl Karbula \n" "Language: cs_CZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: ../\n" "X-Textdomain-Support: yes\n" "X-Generator: Poedit 1.5.4\n" "X-Poedit-SearchPath-0: .\n" # @ polylang #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang disponuje rozsáhlou %sdokumentací%s (pouze v angličtině), která " "obsahuje informace o nastavení vašeho vícejazyčného webu a o tom, jak jej " "každodenně používat. Obsahuje i FAQ a dokumentaci pro programátory, kteří by " "Polylangu chtěli přizpůsobit své pluginy a šablony." # @ polylang #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "Užitečné informace najdete také ve %sfórech%s. Nicméně nezapomeňte problém " "nejprve zkusit vyhledat, než o něm vytvoříte nové vlákno." # @ polylang #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polylang je k dispozici zdarma a je vydán pod stejnou %sGPL%s licencí jako " "WordPress." # @ polylang #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "" "Pokud by Vás zajímalo, jak můžete pomoci při vývoji projektu, přečtěte si " "%stoto%s." # @ polylang #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "Nakonec, pokud se Vám tento plugin líbí nebo pokud Vám pomáhá při práci, " "jeho autor velmi ocení jakoukoliv finanční podporu." # @ polylang #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "Polylang — Jazyky" # @ polylang #: include/switcher.php:22 msgid "Displays language names" msgstr "Zobrazí názvy jazyků" # @ polylang #: include/switcher.php:23 msgid "Displays flags" msgstr "Zobrazí vlajky" # @ polylang #: include/switcher.php:24 msgid "Forces link to front page" msgstr "Vynutí odkaz na úvodní stránku" # @ polylang #: include/switcher.php:25 msgid "Hides the current language" msgstr "Skryje aktuální jazyk" # @ polylang #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "Zobrazí jako rozbalovací seznam" # @ polylang #: admin/admin.php:267 msgid "Filters content by language" msgstr "Filtruje obsah podle jazyka" # @ polylang #: admin/admin.php:258 msgid "Show all languages" msgstr "Zobrazit všechny jazyky" # @ polylang #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "Přidat nový překlad" # @ polylang #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "Jazyk" # @ polylang #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Překlady" # @ polylang #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "Tímto nastavte jazyk." # @ polylang #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Widget zobrazí pro:" # @ polylang #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "Všechny jazyky" # @ polylang #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Jazyk admina" # @ polylang #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "Předvolené WordPress" # @ polylang #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "Nastavení" # @ polylang #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Aktualizuji soubory s jazyky…" # @ polylang #: admin/settings.php:62 msgid "About Polylang" msgstr "O Polylangu" # @ polylang #: admin/settings.php:78 msgid "Strings translations" msgstr "Překlady textů" # @ polylang #: admin/settings.php:101 msgid "Strings translation" msgstr "Překlady textů" # @ polylang #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "Zadejte platný WordPress locale" # @ polylang #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "Kód jazyka musí být unikátní" # @ polylang #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "Jazyk musí mít název" # @ polylang #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "Jazyk byl vytvořen, ale WordPress jazykový soubor nebyl stažen. Prosím, " "nainstalujte jej manuálně." # @ polylang #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Titulek widgetu" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "Taxonomie" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "Uživatelská pole" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "Stav komentáře" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "Stav pingbacku" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "Zvýrazněné příspěvky" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "Datum publikování" # @ polylang #: admin/settings.php:325 msgid "Post format" msgstr "Formát příspěvku" # @ polylang #: admin/settings.php:326 msgid "Page parent" msgstr "Nadřazená stránka" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "Šablona stránky" # @ polylang #: admin/settings.php:328 msgid "Page order" msgstr "Pořadí stránek" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "Náhledový obrázek" # @ polylang #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Upravit jazyk" # @ polylang #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "Přidejte nový jazyk" # @ polylang #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Zvolte jazyk" # @ polylang #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "Jazyk můžete vybrat ze seznamu nebo jej zde dole přímo zadat." # @ polylang #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Celý název" # @ polylang #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "" "Název jazyka, jak bude zobrazen na vašem webu (např. Čeština, English)." # @ polylang #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "Locale" # @ polylang #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "WordPress locale tohoto jazyka (např. cs_CZ, en_US). Pro tento jazyk bude " "potřeba nainstalovat .mo soubor." # @ polylang #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Kód jazyka" # @ polylang #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Směr textu" # @ polylang #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "zleva doprava" # @ polylang #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "zprava doleva" # @ polylang #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Vyberte směr textu pro daný jazyk." # @ polylang #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "Pořadí" # @ polylang #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Pozice jazyka v přepínači jazyků." # @ polylang #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "Přepínač jazyků" # @ polylang #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Vyhledat překlady" # @ polylang #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Vyčistit databázi s překlady textů" # @ polylang #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Výchozí jazyk" # @ polylang #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "Některé příspěvky, stránky, kategorie nebo štítky nemají nastavený jazyk. " "Chcete jim všem nastavit výchozí jazyk?" # @ polylang #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "Detekovat jazyk prohlížeče" # @ polylang #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "Při návštěvě úvodní stránky nastavit jazyk podle předvoleb prohlížeče" # @ polylang #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "Modifikování URL" # @ polylang #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "U výchozího jazyka v URL skrýt jeho kód" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "Média" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "Zapnout jazyky a překlady u mediálních souborů" # @ polylang #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "Synchronizace" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "Vlastní typy obsahu" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "Zapnout jazyky a překlady u vlastních typů obsahu" # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "Vlastní taxonomie" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "Zapnout jazyky a překlady u vlastních taxonomií" # @ polylang #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "Upravit" # @ polylang #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "Smazat" # @ polylang #: admin/table-languages.php:76 msgid "Code" msgstr "Kód" # @ polylang #: admin/table-languages.php:78 msgid "Flag" msgstr "Vlajka" # @ polylang #: admin/table-languages.php:79 msgid "Posts" msgstr "Příspěvky" # @ polylang #: admin/table-string.php:110 msgid "Name" msgstr "Název" # @ polylang #: admin/table-string.php:111 msgid "String" msgstr "Řetězec" # @ polylang #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Přidat nový" # @ polylang #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Přepínač jazyků" # @ polylang #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "Zobrazí přepínač jazyků" # @ polylang #: include/widget-languages.php:75 msgid "Title:" msgstr "Název:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "Přidá možnosti vícejazyčnosti do WordPressu" # @ polylang #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "Používáte WordPress %s. Polylang vyžaduje alespoň WordPress %s." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "" "Polylang byl deaktivován, protože jste upgradovali z příliš staré verze." # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "Prosím upgradujte nejdříve na %s předtím, než budete upgradovat na %s." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "Skupina" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "Zobrazit všechny skupiny" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "Tímto zcela a navždy vymažete daný jazyk. Jste si jistý?" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "Toto použijte, chcete-li z databáze odstranit nepoužité řetězce a překlady. " "Například potom, co byl odinstalován nějaký plugin." # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "Sychronizační nastavení umožňuje udržovat stejné hodnoty (nebo překlady v " "případě taxonomií a nadřazených stránek) meta obsahu mezi různými překlady " "příspěvků či stránek." # @ polylang #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "Kód jazyka obsahuje nepovolené znaky" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "Jazyk nastavit podle obsahu" # @ polylang #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "URL příspěvků, stránek, rubrik a štítků nebudou pozměněny." # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "Jazyk bude nastaven podle adresáře v pěkných URL" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "Příklad:" # @ polylang #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "Jazyk je nastaven podle subdomény v pěkných URL" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "Jazyk bude nastaven podle odlišných domén" # @ polylang #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "Odstranit /language/ v pěkných URL" # @ polylang #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "Ponechat /language/ v pěkných URL" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "" "Úvodní stránka bude mít v URL jen kód jazyka a ne název stránky či její ID" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "Příklad: %s namísto %s" # @ polylang #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "" # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "" # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "" # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "" # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "" # @ polylang #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "" # @ polylang #: admin/admin-strings.php:60 msgid "Widget text" msgstr "" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "" languages/polylang-hu_HU.mo000066600000026017152100561460011714 0ustar00o ` a :p : -   - )A k z  * "     . ? F ^ {         n7    2  ?# c $    A #5G Ycjpu {   1J\)1 8&7K]f y Q-2 ` *@@OimDrd kxa"T2 p@DX@ ` n|y9K&@Qh.! % <F ^l,"&<V q~  }(H1%#  ( : 5D z        !h"!U!h!J"#8# \# f#@s##(## $!$ 0$=$S$[$p$$%$$X$%(%$N%+s%6%9%8&I&g&E&3'*''( (((!((n)`~) )d)Q*/l**A +b++,^ ,_BG"` >jo('QT c7MO[KEmCP=N/ *4 i&Vb+DA1).kXH80n]R$J?I@Y9lUWge\d#LS6f; <%a5h3!FZ2-:About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: polylang Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: Last-Translator: Erdei Csaba Language-Team: Csaba Erdei Language: hu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2: nplural=n>1; X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: _e;__;_x X-Poedit-Basepath: . X-Generator: Poedit 1.5.4 X-Poedit-SearchPath-0: .. X-Poedit-SearchPath-1: ../include Polylang bővítményrőlEgyedi bejegyzés típusok fordításának bekapcsolása.Egyedi taxonómiák (kategóriák, címkék) fordításának bekapcsolása.Médiák fordításának bekapcsolásaÚj hozzáadásaÚj nyelv hozzáadásaÚj fordítás hozzáadásaTöbbnyelvű tartalom, fordítások kezelése.Adminisztrációs felület nyelveMinden nyelvNyelv kiválasztásaNyelv írásmódjának kiválasztásaSzöveg fordítások törléseNyelvkódHozzászólás állapotEgyedi mezőkEgyedi bejegyzés típusokEgyedi taxonómiák (kategóriák, címkék)Alapértelmezett nyelvTörlésBöngésző nyelvének használataNyelv választó elhelyezéseMegjelenítés legördülő menükéntNyelv zászlók mutatásaNyelvek nevének mutatásaSzerkesztésNyelv szerkesztéseWordPress nyelvkód (pl. hu_HU)Példa:Például: %s (%s helyett)Kiemelt képTartalom szűrése nyelv szerintVagy a lentebbi gombra kattintva adományozással is hozzá lehet járulni a fejlesztéséhez, amit ez úton is köszönünk!ZászlóFőoldal linkje tartalmazza a nyelvet isNyelv teljes neveCsoportNyelvkód eltávolítása a linkekből az alapértelmezett nyelv eseténAktuális nyelv elrejtéseHa hasznosnak bizonyult a bővítmény, akkor %sfejlesztéssel, teszteléssel vagy fórum válaszokkal%s is lehet segíteni folyamatos fejlődését.Nem lehetséges a nyelv hozzáadása./language/ megtartása a linkekben.NyelvNyelv választóNyelv hozzáadva.NyelvkódNyelvkód - 2 karakteres ISO 639-1 nyelvkód (pl. hu)Nyelv törölve.Nyelv választóNyelv frissítve.NyelvekWP nyelvkódMédiaNévSorrendOldal sorrendSzülő oldalOldal sablonmintaÉrtesítés (ping) állapotElőször a(z) %s verzióra kell elvégezni a frissítést, majd csak utána lehet a(z) %s verzióra is.Polylang bővítmény ki lett kapcsolva, mert túl régi verzióról lett frissítve.Polylang bővítmény ingyen használható és a WordPress-el azonos, %sGPL%s licensz alatt lett kiadva.A bővítményhez részletes %sdokumentáció%s áll rendelkezésre (angol nyelven), amely tartalmazza a telepítéshez és a mindennapos használathoz szükséges leírásokat, és a fejlesztők számára szükséges információkat is.Hányadikként jelenjen meg a nyelvFormátumBejegyzésekBejegyzés, oldal, kategória és címke linkek nem módosulnak.Közzététel időpontja/language/ eltávolítása a linkekből.Fordítás kereséseNyelvek beállításaBeállításokMinden nyelvRagadós bejegyzésekSzövegSzöveg fordításokSzöveg fordításokSzinkronizálásTaxonómiák (kategóriák, címkék)Nyelv írásmódjaA főoldal linkje a nyelv kódját tartalmazza az oldal neve vagy azonosítója helyett.Nyelvkód hibás karaktert tartalmaz.A nyelvkódnak egyedinek kell lennieA nyelvet a tartalom nyelve határozza meg.A nyelvet a linkben található domén határozza meg.A nyelvet a linkben található mappanév határozza meg.A nyelvet a linkben található aldomén határozza meg.Nevet is kell adni a nyelvnekA nyelv hozzá lett adva, de a WordPress fordítások (.mo fájlok) ehhez a nyelvhez nem lettek letöltve, ezt kézzel kell megtenni.A nyelv teljes neve, ahogy majd a honlapon is megjelenik (pl. Magyar)A szinkronizálás segítségével az oldalakhoz vagy bejegyzésekhez tartozó metadatok a fordítások esetén is ugyanazokat az értékeket veszik fel.Widget megjelenítése ennél a nyelvnél:Vannak bejegyzések, oldalak, kategóriák és címkék, amelyekhez még nincs nyelv megadva. Ezek használják az alapértelmezett nyelvet.Cím:FordításokFordítások frissítve.Linkek módosításaNyelv fájlok frissítése…Már nem használt szöveg fordítások törlése adatbázisból, pl. eltávolított bővítményhez tartozó szövegek fordításai.Összes csoportAmikor meglátogatják a honlapot, akkor a látogató böngészőjének nyelvét vegyük alapul.Widget címeWordPress nyelvkód (pl. hu_HU). A nyelvhez tartozó .mo fordítás fájlt kézzel kell telepíteni.WordPress alapértelmezettValóban töröljük véglegesen ezt a nyelvet?Jelenleg a WordPress %s verziója van használva. Polylang bővítmény használatához legalább WordPress %s verzió szükséges.Kiválasztható egy nyelv, vagy lentebb megadhatók a részletei:Továbbá a %stámogató fórumban%s is találhatók hasznos információk, de új téma indítása előtt érdemes a keresést is használni.balról jobbrajobbról balralanguages/polylang-zh_CN.mo000066600000025242152100561460011704 0ustar00t\  : : -V    )   * "5 X ] l z         ' , : Y b |  n   5 ? 2E #x  ?  $<EW gAu     & 41@Jr\1 JV8\& !.5I^ nyAQ- J k*,@@%fiD3r{ a9TI  p(@:D{@  -*! (5E"U x  !  *7>Tm  &  >E[b&iD  5 < I Y =f       ! ! !+*!BV!F!!*" ""9" 8# E#R# p# }### # #### # #3#D-$r$$$$$'$'%*A%l%T%A%?&_'`x' ''' '(Z(u(9(((V(9)0I)Mz)H)v* * *+$iaY-3&D[E\k*;8!fO)Bep sS . c '>:0M=_"TKoU7nX< ZqRI/GCgFAt(WmrQP%?`^645V@b#dN]LJ 2j9hH1l,About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides languages with no translationHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRecommended pluginsRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe chosen static front page must be translated in all languages.The front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the code in the URLThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget textWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: zh_CN Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: Last-Translator: 倡萌@WordPress大学 Language-Team: 倡萌@WordPress大学 Language: zh_CN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Poedit 1.6.5 Plural-Forms: nplurals=2; plural=(n!=1); X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c X-Poedit-Basepath: . X-Poedit-SearchPath-0: .. 关于 Polylang为自定义文章类型启用语言和翻译为自定义分类法启用语言和翻译为多媒体启用语言和翻译添加新的添加新语言添加新翻译增加多语言功能到 WordPress管理语言所有语言选择语言选择语言的文字方向清除未使用的字符串翻译代码评论状态自定义字段自定义文章类型自定义分类法默认语言删除检测浏览器语言显示一个语言切换显示下拉菜单显示国旗显示语言名称编辑编辑语言输入一个有效的 WordPress 区域例如:例如:%s 代替 %s特色图像按语言过滤内容最后,如果你喜欢该插件,或者它有助于你的生意,不妨捐助作者。

非常感谢 WordPress大学 为 Polylang 提供简体中文支持。国旗强制链接到主页全名分组为默认语言隐藏 URL 语言信息隐藏没有翻译的语言隐藏当前语言如果你想知道如何帮助改项目,不妨 %s阅读这里%s。无法添加语言在链接中保留 /language/语言语言切换语言已添加语言代码语言代码 - 最好是2个字母的ISO 639-1(例如 en)语言已删除语言切换语言已更新语言区域多媒体名称顺序页面顺序父级页面页面模板Ping 状态在升级到 %s 前,请先升级到 %s。Polylang 已经停用,因为你是从太旧的版本升级的。Polylang 是免费的,它和WordPress一样基于 %sGPL%s 发布。Polylang 提供了一个全面的 %s帮助文档%s (英文的),它包括使用 Polylang 创建你的多语言网站和如何日常使用它,以及帮助程序员如何使 Polylang 适应他们的主题和插件。该语言在语言切换中的排列顺序文章格式文章文章、页面、分类和标签的URL不会被修改。发布日期推荐插件在链接中移除 /language/搜索翻译设置语言设置显示所有语言置顶文章字符串字符串翻译字符串翻译同步分类法文字方向所选的静态首页必须翻译为所有语言。首页的URL中包含语言代码,而不是页面名称或页面ID语言代码包含无效字符语言代码必须是唯一的语言根据内容来设置语言根据不同的域名来设置语言是从URL中的代码来设置的语言根据链接的目录名来设置语言根据链接的二级域名来设置语言必须有一个名字语言已被创建,但是没有下载到WordPress语言包,请手动安装它。这个名字是用来在网站上显示的(例如: English)同步选项允许在一篇文章或页面的翻译之间保持相同的元数据内容的值(或分类法和页面的父级)。[ The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page. ]该小工具显示为:有文章、页面、分类和标签没有设置语言,你要设置它们为默认语言吗?标题:翻译翻译已更新URL修改升级语言文件...使用它从数据库中删除未使用的字符串,例如一个插件被卸载以后。查看所有分组当主页被访问时,根据浏览器偏好设置语言小工具文本小工具标题WordPress 语言区域(例如:en_US)。你需要为该语言安装 .mo 文件。WordPress默认您将要永久删除此语言。您确定吗?你现在使用的是 WordPress %s,Polylang 要求至少为 WordPress %s。你可以在列表中选择一个语言或者直接在下面编辑它。你还可以在 %s支持论坛%s 获取更多有用的信息。发表新话题前,请不要忘了先搜索一下。从左到右从右到左languages/polylang-zh_TW.mo000066600000025040152100561460011732 0ustar00o ` a :p : -   - )A k z  * "     . ? F ^ {         n7    2  ?# c $    A #5G Ycjpu {   1J\)1 8&7K]f y Q-2 ` *@@OimDrd kxa"T2 p@DX@ ` nz|-05'f  !  !? F S`s   , @J dq$ CR1k  K 0 = P W d n u | + < G!a!*E" p"}"?" "1" # ##$# 7#D# K# X#e# l# y#>#$#!#5 $6B$<y$?$!$Z%4s%7%&f& ]'g'n'''Q''<(O(^_((-(K(EI)|) * *^ ,_BG"` >jo('QT c7MO[KEmCP=N/ *4 i&Vb+DA1).kXH80n]R$J?I@Y9lUWge\d#LS6f; <%a5h3!FZ2-:About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: Polylang v1.5 Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: 2015-02-14 09:28+0100 Last-Translator: 張香腸 Language-Team: 香腸炒魷魚 Language: zh_TW MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: ../ X-Textdomain-Support: yes X-Generator: Poedit 1.5.4 X-Poedit-SearchPath-0: . 關於 Polylang為自訂文章格式啟用語言與翻譯。為自定義分類啟用語言與翻譯功能。為媒體庫啟用語言與翻譯功能新增新增語言新增翻譯讓WordPress增加多語言功能管理語言所有語言選擇一個語言選擇此語言的文字方向清除資料庫中翻譯的字串代碼迴響狀態自訂欄位自訂文章格式自定義分類預設語言刪除偵測瀏覽器語言顯示語言切換工具顯示為下拉式選單顯示旗幟顯示語言名稱編輯編輯語言輸入一個有效的 WordPress 語言環境範例:範例: %s 而不是 %s特色圖片透過語言過濾內容最後,如果你喜歡這個外掛或是它有助於你的業務,不妨贊助作者。

Polylang 正體中文語系由 香腸炒魷魚阿腸網頁設計工作室 翻譯提供。旗幟強制鏈結到首頁全名群組隱藏預設語言的 URL 訊息隱藏當前語言如果你想知道如何協助這個專案,請%s閱讀這篇%s。無法加入此語言。在漂亮的固定網址中保留「/language/」語言語言切換語言已新增。語言代碼語言代碼 - 2 字元語言代碼,依據 ISO 639-1 標準 (例如: en)語言已刪除。語言切換語言已更新。語言語言環境媒體庫名稱順序分頁順序分頁上層分頁模板通知狀態在升級到 %s 之前請先升級到 %s。Polylang 已經停用,因為你從太舊的版本升級。Polylang 是免費的,與 WordPress 一樣是基於 %sGPL%s 釋出。Polylang 提供一個完整的 %s說明文件%s (僅提供英文)。這包含了如何設定多語言網站並日常使用,常見問題說明,以及幫助程式設計師可快速套用到他們的外掛或是佈景主題。此語言在語言切換選項中的位置文章格式文章文章、頁面、分類與標籤的網址並不會被改寫。發佈日期在漂亮的固定網址中移除「/language/」搜尋翻譯設定語言設定顯示所有語言置頂文章字串字串翻譯字串翻譯同步自訂分類文字方向首頁URL包含語言代碼而不是頁面名稱或是頁面ID語言代碼中帶有無效的字元語言代碼必須是獨一無二只針對內容作多語言設定。(網址不變更)透過不同的網域名稱來設置不同的語言。語言設置是在漂亮的固定網址中加入目錄名稱語言設置是透過子網域來設定漂亮的固定網址。這個語言必須有一個名字語言已經被建立,但是WordPress語言包並沒有下載到,請手動安裝它。這個名字是顯示於網站上(範例: English)同步的設定允許在一篇文章或是頁面(或自定義分類、上層頁面)的翻譯保存相同內容的值。
[ The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.]此小工具顯示:有文章、頁面、分類或標籤尚未設置語言。你要將要全部設定為預設語言嗎?標題:翻譯翻譯已更新。URL 網址改寫升級語言檔案 …使用它從資料庫中刪除未使用的字串。例如在外掛被移除後。檢視全部群組當首頁被訪問時,根據瀏覽器的偏好設置語言小工具標題WordPress 語言環境設定(範例:en_US)。你必須安裝對應此語言的 .mo 檔案。WordPress 預設你將永遠刪除此語言。確定刪除?你正在使用 WordPress %s。 Polylang 最低系統需求 WordPress %s。你可以在列表內選擇一個語言或直接在這邊編輯它。你也可以在%s支援論壇%s獲取更多有用的資訊。但別忘記,發新問題詢問前,要先搜尋與爬文。左到右右到左languages/polylang-vec.mo000066600000021214152100561460011453 0ustar00[::-N|) * "- P U d r          $ 2 Q ` n|    2 M ?h           * 16 Jh \  1 @LRau   +iIDr T 3p@D@I  <$==7{( 0Ni{0-8P a$l$"# !82k$|#(, UbAhM4EW`u| 7] ag140 CNcu  *,#W~{K$Fnk  " % g7  o &!P=!L!!l"|"K/[V>S@? ':G590 CLA 4$*!)D+<Y.ZQX&H B W27=3-P(R%MNF";I8T6J,E1UO# About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides the current languageIf you wonder how you can help the project, just %sread this%s.LanguageLanguage SwitcherLanguage codeLanguage switcherLanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPublished dateSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe language code must be uniqueThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsURL modificationsUpgrading language files…View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: Polylang v1.1dev10 Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: 2015-02-14 09:27+0100 Last-Translator: Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: ../ X-Textdomain-Support: yes X-Generator: Poedit 1.5.4 Language: vec X-Poedit-SearchPath-0: . Informaçion su PolylangAtiva łéngue e traduçion par tipi artìcoło personałixaiAtiva łéngue e traduçion par tasonomie personałixaeAtiva łéngue e traduçion par i mèdiaZónta nóvoZónta na łéngua nóvaZónta na traduçion nóvaEl zónta łe funçion multiłéngua a WordPressŁéngua de l'aministradorTute łe łéngueSeji na łénguaSeji n'altra direçion de testo par ła łénguaNéta fora el database de traduçion stringheCòdexeStato del coméntoCanpi personałixaiTipi artìcoło personałixaiTasonomie personałixaeŁéngua de baxeScançełaCata fora ła łéngua del navigadorEl fa védar un sełetor de łénguaEl vixuałixa come menù a cascadaEl fa védar łe bandiereEl fa védar i nomi de łe łéngueModìficaCànbia łénguaMiti rento na inpostaçion locałe de WordPress vàłidaImàxene in evidençaEl filtra el contegnùo par łénguaIn ùltima, se te piaxe sto plugin chì o se sto cuà el te juta a guadagnar, te pol far vołentiera na donaçion a l'autor.BandieraEl força łe łigadure in prima pàxenaNome intieroGrupoScundi l'informaçion lenguìstica de l'URL par ła łéngua baxeEl scónde ła łéngua ativaSe te si drio domandarte come che te pol jutarne, basta che te %slezi cuà%s.ŁénguaSełetor de łénguaCòdexe łénguaSełetor łénguaŁéngueInpostaçion locałiMèdiaNomeÓrdeneÓrdene de pàxenaMare de ła pàxenaModeło de pàxenaStato de pingPar favor, agiórna prima a %s, vanti de agiornar a %s.Polylang el xe stà dexativà parché te ghè fato n'agiornaménto da na version masa vècia.Polylang el xe a gràtis e 'l vien dà fora sóto ła stésa łicença de WordPress, ła %sGPL%s.Polylang el vien dà fora co na %sdocumentaçion%s conpleta (sol che in Ingléxe). El contien anca informaçion su come métar sù un sito multiléngue e su come dopararlo tuti i di, na pàxena de FAQ (domande frecuenti) e na documentaçion par programaturi parché i posa adatar i so plugin e i so tèmi.Poxiçion de ła łéngua 'ntel sełetor de łénguaFormato artìcołoArtìcołoData de publicaçionÇerca traduçionL'inposta ła łénguaInpostaçionFa védar tute łe łéngueArtìcoło evidençiàStringaTraduçion de stringheTraduçion de stringheSincronixaçionTasonomieDireçion testoBexon che'l còdexe łéngua el sia ùnicoŁa łéngua ła ga da aver un nomeŁa łéngua ła xe stà creà, ma el file de łéngua de WordPress no l'è mìa stà tirà zo. Par favor, metìło sù a man.El nome l'è come che 'l vien mostrà 'ntel to sito (par exenpio: Ingléxe)Ła widget ła vien vixuałixà par:Ghe xe artìcołi, pàxene, categorie o tag sensa łèngua inpostà. Vuto inpostarle tute a ła łéngua baxe?Tìtoło:TraduçionCanbiaminti de URLAgiornaménto del file de łénguaVidi tuti i grupiCuando che vien vixità ła prima pàxena, inposta ła łéngua conforme łe preferençe del navigador.Tìtoło de ła widgetInpostaçion locałi par ła łéngua (par exenpio: en_US). Par sta łéngua cuà bexon métar sú el file .mo.Stàndard de WordPressTe si drio doparar WordPress %s. Polylang el ga bixogno almanco de WordPress %s.Te pol sèjer na łéngua da ła lista o modificarla diretamente chì sóto.Te cati anca informaçion ùtiłi nel %sfòrum de suporto%s. Parò no stà desmentegarte de far na riçérca prima de postar n'argoménto nóvo.sinistra-destradestra-sinistralanguages/polylang-bel.mo000066600000033226152100561460011446 0ustar00q,  : : - < D U )i   * "   $ 2 D V g n         4 C n_    2 0 ?K  $    A K]o     1J\Q1 8)&8_s  AQJ-  * @7@xiDA>r[  a*T  p {@D@T  T GlUgV* &Q23fv.J+&G'n ,43*^$|: $# H 9d z!v!! ")"&G"wn")"0#A##J#n###"$=$O$l$ u$ $$$$'$$ %r$%%&&<1(n( (l()0 )Q)q)) )!) ))*&*A*V*t*+F+<+@,:V,[,\,+J-v-fU.[.&0?0 11&/1V15q11(2Q2)3C3]3:4VR4l4w55b6|6nQ !PV<\"XmBdb'hIH`Mf-l0F $_ TS(C[=8R 32)i>U7*KDO.:,A o @&195/aN^G]cqg4L6k#j;YepW+?EZ%JAbout PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe chosen static front page must be translated in all languages.The front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget textWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: polylang Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: Last-Translator: Aljaksandr Markevitch Language-Team: Language: ru_RU MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Poedit-SourceCharset: utf-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: . X-Textdomain-Support: yes X-Generator: Poedit 1.5.4 X-Poedit-SearchPath-0: .. Аб PolylangАктывіраваць мовы і пераклады для адвольных тыпаў запісаў.Актывіраваць мовы і пераклады для адвольных таксанамій.Актывіраваць мовы і пераклады для медыа-файлаўДадаць новуюДадаць новую мовуДадаць новы перакладДадае магчымасць падтрымкі шматмоў'я ў WordPressМова панэлі адміністратараУсе мовыВыбраць мовуВыберыце напрамак тэкстуАчысціць базу дадзеных радкоў перакладуКодСтан каментараАдвольныя паліАдвольны тып запісаўАдвольныя таксаномііМова па змаўчаннюВыдаліцьВызначыць мову браўзераПаказвае пераключальнік моўПаказвае як выпадальны спісПаказваць сцягіПаказваць назвы моўРэдагавацьРэдагаваць мовуВызначце карэктную WordPress лакальНапрыклад:Прыклад: %s заместа %sВыбраная выяваАдбіраць змесціва паводле мовыІ нарэшце, калі Polylang вам спадабаецца альбо дапамагае ў вашай працы, вы заўседы можаце ахвяраваць грошаў аўтару праекта.СцягПрымусова пераходзіць на галоўную старонку сайта пры змене мовыПоўная назваГрупаСхаваць назву мовы з URLСхаваць бягучую мовуАб тым, як вы можаце дапамагчы праекту, вы можаце прачытаць %sтут%s.Немагчыма дадаць мову.Захаваць /language/ у pretty permalinksМоваПераключальнік моўМова дададзена.Код мовыКод мовы - пажадана дзвюхлітарны згодна са стандартам ISO 639-1 (напрыклад: en)Мова выдалена.Выбар моўМова аднаўлена.МовыЛакальМедыаІмяПарадакПарадак старонакБацькоўская старонкаШаблон старонкіАдказ на запытКалі ласка, аднавіце перш да версіі %s, каб аднавіць да версіі %s.Polylang быў выключаны, таму што вы аднаўляецеся з немагчыма старой версіі.Polylang - бясплатны і распаўсюджваецца пад той жа ліцэнзіяй %sGPL%s, што і WordPress.Polylang забяспечаны шырокай %sдакументацыяй%s (толькі на англійскай мове). У яе ўваходзіць інфармацыя пра наладу шматмоўнага блога і яго паўсядзённае выкарыстанне, адказы на частыя пытанні і дакументацыя для праграмістаў.Месца мовы ў пераключальніку моўФармат запісуЗапісыСпасылкі запісаў, старонак, катэгорый і тэгаў не змяняюцца.Дата публікацыіВыдаліць /language/ у pretty permalinksПошук перакладаўВызначае мовуНаладкіПаказаць усе мовыЗаліпаючыя запісыРадокПераклад радкоўПераклады радкоўСінхранізацыяТаксаномііНапрамак тэкстуВыбраная статычная галоўная старонка павінна быць перакладзена на ўсе мовы.Спасылка на галоўную старонку ўтрымлівае код мовы замест імя альбо id старонкіКод мовы ўтрымлівае нядзейныя сімвалыКод мовы павінны быць унікальнымМова наладжана згодна са змесцівамМова наладжана з розных даменаўМова наладжана згодна з імём дырэкторыі pretty permalinksМова наладжана згодна з імём паддамена ў pretty permalinksМова павінна мець назвуМова была створана, але патрабуемые моўныя файлы не былі запампованы. Калі ласка, запампуйце ды устанавіце іх самастойна.Назва для адлюстравання на сайце (напрыклад: Беларускі).Налады сінхранізацыі дазваляюць падтрымліваць гэткія ж самыя значэнні (альбо пераклады ў выпадку таксанаміі і бацькоўскай старонкі) мета-змесціва паміж перакладамі запісу альбо старонкі.Паказваць віджэт дляБылі знойдзены запісы, старонкі, катэгорыі ды тэгі без зазначанай мовы. Вызначыць мову выкарыстання па змаўчанню?Назва:ПеракладыПераклады аднаўлены.Мадыфікацыі URLАбнаўленне моўных файлаў…Выкарыстоўвайце гэтую функцыю, калі вам патрэбна выдаліць невыкарастаныя радкі з базы дадзеных (напрыклад, пасля таго, як плагін быў выдалены).Прагледзець усе групыВызначыць мову сайта паводле налад браўзераТэкст віджэтаНазва віджэтуЛакаль WordPress для мовы (напрыклад: be_BY). Вы павінны устанавіць файлы .mo для панэлі адміністратара ды выкарыстоўваемай тэмы.Па змаўчаннюВы збіраецеся выдаліць гэтую мову. Вы ўпэўнены?Вы выкарыстоўваеце WordPress %s. Polylang патрабуе не менш за WordPress %s.Вы можаце выбраць мову са спіса альбо дадаць яе ніжэй самастойна.Таксама, вы можаце знайсці карысную інфармацыю на %sфоруме%s. Зрэшты, не забывайце сперш шукаць адказ, а потым пытаць.злева направасправа налеваlanguages/polylang-pl_PL.po000066600000041255152100561460011716 0ustar00msgid "" msgstr "" "Project-Id-Version: polylang\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Sebastian Janus \n" "Language-Team: \n" "Language: pl_PL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: .\n" "X-Textdomain-Support: yes\n" "X-Generator: Poedit 1.5.4\n" "X-Poedit-SearchPath-0: ..\n" # @ polylang #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang jest dostarczany z obszerną %sdokumentacją%s (tylko w języku " "angielskim), która zawiera informacje jak skonfigurować stronę wielojęzyczną " "i korzystać z niej w codziennej pracy, dział FAQ, oraz dokumentację dla " "programistów o tym jak adaptować wtyczki i motywy." # @ polylang #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "Przydatne informacje znajdziesz w %sforum pomocy%s. Nie zapomnij go " "przeszukać, zanim dodasz nowy temat." # @ polylang #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polylang jest bezpłatne i opublikowane na takiej samej licencji jak " "WordPress, czyli %sGPL%s." # @ polylang #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "" "Jeśli zastanawiasz się jak mógłbyś pomóc w tym projekcie, po prostu " "%sprzeczytaj to%s." # @ polylang #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "Wreszcie, jeśli lubisz tę wtyczkę i pomaga Ci ona w prowadzeniu biznesu, " "wsparcie dla jej autora będzie mile widziane." # @ polylang #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "Języki" # @ polylang #: include/switcher.php:22 msgid "Displays language names" msgstr "Wyświetla nazwy języków" # @ polylang #: include/switcher.php:23 msgid "Displays flags" msgstr "Wyświetla flagi" # @ polylang #: include/switcher.php:24 msgid "Forces link to front page" msgstr "Wymusza link do strony głównej" # @ polylang #: include/switcher.php:25 msgid "Hides the current language" msgstr "Ukrywa aktualny język" # @ polylang #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "Wyświetla się jako menu rozwijane" # @ polylang #: admin/admin.php:267 msgid "Filters content by language" msgstr "Filtrowanie treści wg języka" # @ polylang #: admin/admin.php:258 msgid "Show all languages" msgstr "Pokaż wszystkie języki" # @ polylang #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "Dodaj nowe tłumaczenie" # @ polylang #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "Język" # @ polylang #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Tłumaczenia" # @ polylang #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "Ustawia język" # @ polylang #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Widget wyświetlany jest dla:" # @ polylang #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "Wszystkie języki" # @ polylang #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Język administratora" #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "Domyślny" # @ default # @ polylang #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "Ustawienia" # @ polylang #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Uaktualnianie pliku językowego…" # @ polylang #: admin/settings.php:62 msgid "About Polylang" msgstr "O Polylang" # @ polylang #: admin/settings.php:78 msgid "Strings translations" msgstr "Tłumaczenia ciągów tekstowych" # @ polylang #: admin/settings.php:101 msgid "Strings translation" msgstr "Tłumaczenie fraz" #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "Proszę podać prawidłowy kod lokalizacji" # @ polylang #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "Kod języka musi być unikalny" # @ polylang #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "Język musi mieć nazwę" # @ polylang #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "Język został dodany, ale plik językowy WordPress nie został załadowany. " "Proszę zainstalować go ręcznie." # @ polylang #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Nazwa widgeta" #: admin/settings.php:319 msgid "Taxonomies" msgstr "Taksonomie" #: admin/settings.php:320 msgid "Custom fields" msgstr "Własne pola" #: admin/settings.php:321 msgid "Comment status" msgstr "Status komentarza" #: admin/settings.php:322 msgid "Ping status" msgstr "Status ping" #: admin/settings.php:323 msgid "Sticky posts" msgstr "Przyklejone wpisy" #: admin/settings.php:324 msgid "Published date" msgstr "Data publikacji" #: admin/settings.php:325 msgid "Post format" msgstr "Format wpisu" # @ default #: admin/settings.php:326 msgid "Page parent" msgstr "Rodzic strony" #: admin/settings.php:327 msgid "Page template" msgstr "Szablon strony" # @ polylang #: admin/settings.php:328 msgid "Page order" msgstr "Kolejność stron" #: admin/settings.php:329 msgid "Featured image" msgstr "Zdjęcie główne" # @ polylang #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Edytuj język" # @ polylang #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "Dodaj nowy język" # @ polylang #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Wybierz język" # @ polylang #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "Możesz wybrać język z listy lub edytować go bezpośrednio poniżej" # @ polylang #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Pełna nazwa" # @ polylang #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "Nazwa, tak jak będzie wyświetlana na stronie (np. English)" # @ polylang #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "Lokalizacja" # @ polylang #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "Lokalizacja WordPress dla języka (np. en_US). Dla tego języka będziesz " "musiał zainstalować plik .mo." # @ polylang #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Kod języka" # @ polylang #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Kierunek zapisu języka" # @ polylang #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "od lewej do prawej" # @ polylang #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "od prawej do lewej" # @ polylang #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Wybierz kierunek zapisu języka" # @ polylang #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "Kolejność" # @ polylang #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Pozycja języka w przełączniku języka" # @ polylang #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "Przełącznik języka" # @ polylang #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Szukaj tłumaczeń" # @ polylang #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Wyczyść tłumaczenia fraz z bazy" # @ polylang #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Domyślny język" # @ polylang #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "Istnieją wpisy, strony, kategorie i tagi bez określonego języka. Czy chcesz " "ustawić dla nich domyślny język?" # @ polylang #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "Wykryj język przeglądarki" # @ polylang #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "" "Przy wejściu na stronę domową, ustaw język zgodnie z ustawieniami " "przeglądarki" # @ polylang #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "Modyfikacje URL" # @ polylang #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "Ukryj informację o języku w URL dla domyślnego języka" #: admin/view-tab-settings.php:162 msgid "Media" msgstr "Media" #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "Aktywuj języki i tłumaczenia dla mediów." #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "Synchronizacja" #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "Własne typy wpisów" #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "Aktywuj języki i tłumaczenia dla własnych typów wpisów." #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "Własne taksonomie" #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "Aktywuj języki i tłumaczenia dla własnych taksonomii." # @ polylang #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "Edytuj" # @ polylang #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "Usuń" # @ polylang #: admin/table-languages.php:76 msgid "Code" msgstr "Kod" # @ polylang #: admin/table-languages.php:78 msgid "Flag" msgstr "Flaga" # @ polylang #: admin/table-languages.php:79 msgid "Posts" msgstr "Wpisy" # @ polylang #: admin/table-string.php:110 msgid "Name" msgstr "Nazwa" # @ polylang #: admin/table-string.php:111 msgid "String" msgstr "Ciąg tekstowy" # @ polylang #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Dodaj nowy" # @ polylang #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Przełącznik języka" # @ polylang #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "Wyświetla przełącznik języka" # @ polylang #: include/widget-languages.php:75 msgid "Title:" msgstr "Tytuł:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "Dodaje wsparcie wielojęzykowe do WordPressa" # @ polylang #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "Używasz WordPress %s. Polylang wymaga przynajmniej WordPress %s." #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "" "Polylang został wyłączony ponieważ aktualizowałeś go ze zbyt starej wersji." #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "Najpierw zaktualizuj do %s zanim wykonasz aktualizację do %s." #: admin/table-string.php:109 msgid "Group" msgstr "Grupa" #: admin/table-string.php:187 msgid "View all groups" msgstr "Zobacz wszystkie grupy" #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "Zamierzasz całkowicie usunąć ten język. Czy jesteś pewny?" #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "Użyj tego aby usunąć nieużywane frazy z bazy danych, np. po tym jak " "odinstalowałeś wtyczkę." #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "Ustawienia synchronizacji pozwalają zachować dokładnie takie same wartości " "(lub tłumaczenia w przypadku taksonomii i rodziców stron) meta danych " "pomiędzy tłumaczeniami stron i wpisów." # @ polylang #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "Kod języka zawiera nieprawidłowe znaki" #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "Język jest ustawiony na podstawie zawartości" # @ polylang #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "Wpisy, strony, kategorie i adresy tagów nie są zmodyfikowane." # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "Język jest ustawiany ze ścieżki katalogów w bezpośrednich odnośnikach" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "Przykład:" # @ polylang #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "Język jest ustawiany z nazwy subdomeny w bezpośrednich odnośnikach" #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "Język jest ustawiany z różnych domen" # @ polylang #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "Usuń /language/ z bezpośrednich odnośników" # @ polylang #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "Zatrzymaj /language/ w bezpośrednich odnośnikach" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "Adres strony głównej zawiera kod języka zamiast nazwy lub id strony." # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "Przykład: %s zamiast %s" # @ polylang #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "Dodanie języka jest niemożliwe." # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "Dodano język." # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "Usunięto język." # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "Język zaktualizowany." # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "Tłumaczenia zaktualizowane." # @ polylang #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "" "Kod języka - preferowane 2 litery zgodnie z ISO 639-1 (na przykład: en)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "" "Wybrana statyczna strona główna musi być przetłumaczona we wszystkich " "językach." # @ polylang #: admin/admin-strings.php:60 msgid "Widget text" msgstr "Tekst widgetu" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "" #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "" #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "" languages/polylang-ka_GE.mo000066600000040770152100561460011654 0ustar00t\  : : -V    )   * "5 X ] l z         ' , : Y b |  n   5 ? 2E #x  ?  $<EW gAu     & 41@Jr\1 JV8\& !.5I^ nyAQ- J k*,@@%fiD3r{ a9TI  p(@:D{@  i% /v(5,Db7*b|fZ ^ :k 1 J C#!.g!!A!M!:6"+q"5"!"."H$#m#9#:#]#Z$K%Q[%"%%X%j9&>&&Hh'@' '4',1(^(sx(#(4)/E)u))))')4)+*%J*(p*b**+i,c~.(. /!/:/I0>b010"0!0211K1}17171'2$.27S22%3d3OQ4P4y4Il5596B667f8/m9C9::D;%\;H;;2<<(=(==.>>y??@7A7A+$iaY-3&D[E\k*;8!fO)Bep sS . c '>:0M=_"TKoU7nX< ZqRI/GCgFAt(WmrQP%?`^645V@b#dN]LJ 2j9hH1l,About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides languages with no translationHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRecommended pluginsRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe chosen static front page must be translated in all languages.The front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the code in the URLThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget textWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: Polylang v1.6beta1 Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: 2015-02-15 11:50+0100 Last-Translator: Language-Team: Rusudan Tsiskreli Language: ka_GE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: ../ X-Textdomain-Support: yes X-Generator: Poedit 1.5.4 X-Poedit-SearchPath-0: . Polylang-ის შესახებპოსტების დამატებითი ტიპებისთვის ენების და თარგმანების აქტივაციადამატებითი ტაქსონომიებისთვის ენების და თარგმანების აქტივაციამედიისთვის ენების და თარგმანების აქტივაციაახლის დამატებაახალი ენის დამატებაახალი თარგმანის დამატებაWordPress-სთვის მრავალენოვანი შესაძლებლობის დამატებაადმინისტრატორის ენაყველა ენაენის არჩევაენისთვის აირჩიეთ ტექსტის მიმართულებასტრიქონების თარგმნის ბაზის წაშლაკოდიკომენტარების სტატუსიდამატებითი ველებიპოსტების დამატებითი ტიპებიდამატებითი ტაქსონომიებინაგულისხმევი ენაწაშლაბრაუზერის ენის აღმოჩენაენების გადამრთველის ჩვენებაჩამოსაშლელად ასახავსდროშებს ასახავსენის სახელს ასახავსრედაქტირებაენის რედაქტირებაშეიყვანეთ მართებული WordPress localeმაგალითი:მაგალითი: %s %s-ს ნაცვლადმთავარი გამოსახულებაშიგთავსის ენის მიხედვით ფილტრაციათუ მოგწონთ პლაგინი და ის გეხმარებათ ბიზნესში, ავტორი მადლობელი იქნება შემოწირულობისთვის.დროშაბმულით სათაო გვერდზე გადასვლასრული სახელიჯგუფიენის URL დამალვა ძირითადი ენისთვისდამალე ენები რომლებზეც არაა თარგმანებიმიმდინარე ენის დამალვათუ გაინტერესებთ თუ როგორ დაეხმაროთ პროექტს, %sread this%s.ენის დამატება შეუძლებელია.Pretty permalink-ში /language/ -ის ჩვენებაენაენების გადამრთველიენა დამატებულია.ენის კოდიენის კოდი - სასურველია 2 ასო ISO 639-1 (მაგალითად: ka)ენა წაშლილია.ენების გადამრთველიენა განახლებულია.ენებილოკალურიმედიასახელითანმიმდევრობაგვერდის მიმდევრობაგვერდის მშობელიგვერდის თარგიპინგის სტატუსიგთხოვთ ჯერ გაახლეთ %s -მდე და მერე %s-მდე.Polylang გამოირთო, რადგან თქვენ ძალიან ძველი ვერსია გაახლეთპოლილანგი უნასია და იგივე ლიცენზიითაა რაც WordPress %sGPL%s.Polylang -ს მოყვება ფართო %sdocumentation%s (მხოლოდ ინგლისურად). ეს შეიცავს ინფორმაციას, თუ როგორ უნდა გამართოთ მრავალენოვანი საიტი და გამოიყენოთ იგი ყოველდღიურად, ხდკ და ასევე დოკუმენტაცია პროგრამისტებისთვის, თემისა და სხვა პლაგინების მოსარგებად.ენის მდებარეობა ენების გადამრთველშიპოსტის ფორმატიპოსტებიპოსტების, გვერდების, კატეგორიების და ჭდეების მისამართები არ შეცვლილა.გამოქვეყნების თარიღირეკომენდირებული პლაგინებიPretty permalink-ებიდან /language/ წაშლათარგმანების ძებნაენას აყენებსპარამეტრებიყველა ენის ჩვენებამიმაგრებული პოსტისტრიქონისტრიქონების თარგმნასტრიქონების თარგმნასინქრონიზაციატაქსონომიებიტექსტის მიმართულებაარჩეული სტატიკური თავფურცელი ყველა ენაზე უნდა ითარგმნოსთავფურცელის მისამართი შეიცავს ენის კოდს გვერდის სახელის ან აიდის ნაცვლადენის კოდი არასწორ სიმბოლოებს შეიცავსენის კოდი უნიკალური უნდა იყოსენა შიგთავსიდანაა დაყენებულიენა სხვადასხვა დომეინებიდან არის დაყენებულიენა დაყენებულია URL-ს კოდიდანენა დაყენებულია დირექტორიის სახელიდან pretty permalinks-შიენა დაყენებულია ქვედომეინის სახელიდან pretty permalinks-შიენას სახელი უნდა ჰქონდესენა შეიქმნა, მაგრამ WordPress-ის ფაილები არ იყო ჩამოტვირთული. გთხოვთ ხელით დააყენოთ.სახელი, თუ როგორ გამოჩნდება იგი ვებ გვერდზე (მაგ. ქართული).სინქრონიზაციის პარამეტრი საშუალებას ეძლევა ერთი პარამეტრი გამოიყენოთ ყველა თარგმნილ ვარიანტში.ვიდჯეტი აისახება:ჩვენ გვაქვს გვერდები, პოსტები, კატეგორიები მინიჭებული ენის გარეშე. გსურთ მათთვის ყველასთვის ნაგულისხმევი ენის მინიჭება?სათაური:თარგმანებითარგმანები განახლებულია.URL მოდიფიკაციაენის ფაილების განახლება…ეს გამოიყენეთ ბაზიდან გამოუყენებელი სტრიქონების წასაშლელად, მაგალითად პლაგინის წაშლის შემდეგყველა ჯგუფის ნახვასათაო გვერდზე ბრაუზერის პარამეტრებში მითითებული ენის დაყენებავიჯეტის ტექსტივიჯეტის სახელიWordPress ლოკალური ენისთვის (მაგალითად: ka_GE). თქვენ უნდა დააყენოთ .mo ამ ენისთვის.WordPress ნაგულისხმევითქვენ აპირებთ ენის სამუდამოდ წაშლას. დარწმუნებული ხართ?თქვენ იყენებთ WordPress %s. Polylang მოითხოვს მინიმუმ WordPress %s.ენის არჩევა შეგიძლიათ სიაში, ან პირდაპირ დაამატეთ იგი ქვემოთ.სასარგებლო ინფორმაციის ნახვა ასევე შეგიძლიათ %ssupport forum%s. თუმცა ჯერ დაგუგლეთ, მერე დაპოსტეთ.მარცხნიდან მარჯვნისმარჯვნიდან მარცხნივlanguages/polylang-ru_RU.po000066600000043670152100561460011747 0ustar00msgid "" msgstr "" "Project-Id-Version: polylang\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: danalan \n" "Language-Team: \n" "Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: .\n" "X-Textdomain-Support: yes\n" "X-Generator: Poedit 1.5.4\n" "X-Poedit-SearchPath-0: ..\n" # @ polylang #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang предоставляется с исчерпывающей %sдокументацией%s (только на " "английском), которая включает информацию по настройке и использованию вашего " "многоязычного сайта, ответы на частые вопросы, а также документацию для " "программистов для адаптации их собственных плагинов и тем." # @ polylang #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "Также вы можете найти полезную информацию на %sфоруме поддержки%s. Однако, " "не забывайте пользоваться поиском, прежде чем создавать новые темы." # @ polylang #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polylang бесплатен и предоставляется на таких же, как и WordPress условиях, " "%sGPL%s." # @ polylang #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "" "Если вас интересует, как можно помочь проекту, просто %sпрочтите это%s." # @ polylang #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "Если же вам понравился этот плагин, или он помогает вам в бизнесе, автор " "будет весьма признателен за любые добровольные пожертвования." # @ polylang #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "Языки" # @ polylang #: include/switcher.php:22 msgid "Displays language names" msgstr "Показывать названия языков" # @ polylang #: include/switcher.php:23 msgid "Displays flags" msgstr "Показывать флаги" # @ polylang #: include/switcher.php:24 msgid "Forces link to front page" msgstr "Принудительно переходить на главную страницу при смене языка" # @ polylang #: include/switcher.php:25 msgid "Hides the current language" msgstr "Убрать текущий язык" # @ polylang #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "Показывать как выпадающий список" # @ polylang #: admin/admin.php:267 msgid "Filters content by language" msgstr "Устанавливает язык" # @ polylang #: admin/admin.php:258 msgid "Show all languages" msgstr "Показать все языки" # @ polylang #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "Добавить новый перевод" # @ polylang #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "Язык" # @ polylang #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Переводы" # @ polylang #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "Устанавливает язык" # @ polylang #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Показывать виджет для" # @ polylang #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "Все языки" # @ polylang #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Язык админ.панели" #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "По умолчанию" # @ default # @ polylang #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "Настройки" # @ polylang #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Обновление языковых файлов…" # @ polylang #: admin/settings.php:62 msgid "About Polylang" msgstr "О Polylang" # @ polylang #: admin/settings.php:78 msgid "Strings translations" msgstr "Переводы строк" # @ polylang #: admin/settings.php:101 msgid "Strings translation" msgstr "Перевод строк" # @ polylang #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "" # @ polylang #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "Код языка должен быть уникальным" # @ polylang #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "У языка должно быть название" # @ polylang #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "Язык был успешно создан, однако отсутствует языковой файл WordPress. " "Пожалуйста, установите его вручную." # @ polylang #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Название виджета" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "Таксономия" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "Пользовательские поля" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "Статус комментария" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "Статус отклика" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "Прилепленные записи" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "Дата опубликования" #: admin/settings.php:325 msgid "Post format" msgstr "Формат записи" # @ default #: admin/settings.php:326 msgid "Page parent" msgstr "Родительская страница" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "Шаблон страницы" # @ polylang #: admin/settings.php:328 msgid "Page order" msgstr "Порядок страниц" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "Выбранный рисунок" # @ polylang #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Редактировать язык" # @ polylang #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "Добавить новый язык" # @ polylang #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Показать все языки" # @ polylang #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "Выберите язык из списка или укажите сами." # @ polylang #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Полное название" # @ polylang #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "Название для отображения на сайте (например: Русский)." # @ polylang #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "Локаль" # @ polylang #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "Локаль WordPress'a для языка (например: ru_RU). Вы должны установить файлы ." "mo для админ.панели и используемой темы." # @ polylang #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Код языка" # @ polylang #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Направление текста" # @ polylang #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "слева направо" # @ polylang #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "справа налево" # @ polylang #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Выберите направление текста для языка" # @ polylang #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "Порядок" # @ polylang #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Порядок языка в переключателе языков" # @ polylang #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "Переключатель языков" # @ polylang #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Поиск перевода" #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Почистить базу данных переводов строк" # @ polylang #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Язык по умолчанию" # @ polylang #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "Найдены записи, страницы, категории или метки без указанния какого-либо " "языка. Установить им язык по-умолчанию?" # @ polylang #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "Определять язык в браузере" # @ polylang #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "Установить язык сайта согласно настройкам браузера" # @ polylang #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "Модификации URL" # @ polylang #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "Спрятать название языка по-умолчанию из URL" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "Медиа" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "Активировать языки и переводы для мультимедиа материалов" #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "Синхронизация" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "Пользовательские типы записей" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "Активировать языки и переводы для пользовательских типов записей." # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "Пользовательская таксономия" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "Активировать языки и переводы для пользовательской таксономии." # @ polylang #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "Редактировать" # @ polylang #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "Удалить" # @ polylang #: admin/table-languages.php:76 msgid "Code" msgstr "Код" # @ polylang #: admin/table-languages.php:78 msgid "Flag" msgstr "Флаг" # @ polylang #: admin/table-languages.php:79 msgid "Posts" msgstr "Записи" # @ polylang #: admin/table-string.php:110 msgid "Name" msgstr "Название" # @ polylang #: admin/table-string.php:111 msgid "String" msgstr "Строка" # @ polylang #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Добавить новый" # @ polylang #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Переключатель языков" # @ polylang #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "Показывает переключатель языков" # @ polylang #: include/widget-languages.php:75 msgid "Title:" msgstr "Название:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "" # @ polylang #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "" "Установлен WordPress %s. Для корректной работы Polylang требуется минимум " "WordPress %s." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "" "Polylang деактивирован, потому что вы выполнили обновление со слишком старой " "версии." # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "Пожалуйста, обновитесь сначала до %s перед обновлением до %s." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" # @ polylang #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "" #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "" #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "" #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "" # @ polylang #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "" # @ polylang #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "" # @ polylang #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "" # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "" # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "" # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "" # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "" # @ polylang #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "" # @ polylang #: admin/admin-strings.php:60 msgid "Widget text" msgstr "" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "" languages/polylang-af.mo000066600000024706152100561460011275 0ustar00pp q : : - $ , = )Q {  * "    , > O V n         + nG    2  ?3 s $    A 3EW isz    1J\91 8& G[mv  Q-B p *,@ @KiDYr. a_To pB@TD@   79%' MWh$   #! $6M fs|   2Av^ -2;K"!  <5 DRchouz   @IV>  )! !!A!'"&9"`" t" "" """"" " "Q"'P#x#!#0##>#@+$l$g$I$8%%q&& &&&"&s&]'On' 'r'>(EP(A(?() ) )_ ,`BG"a >kp('QT d7MO\KEnCP=N/ *4 j&Vc+DA1).lYH80o^R$J?I@Z9mUXhf]e#bLS6g; <%W5i3!F[2-:About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the code in the URLThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: polylang Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: 2015-02-14 09:11+0100 Last-Translator: Kobus Joubert Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2: nplural=n>1; X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: _e;__;_x X-Poedit-Basepath: . X-Generator: Poedit 1.5.4 Language: af X-Poedit-SearchPath-0: .. X-Poedit-SearchPath-1: ../include Oor PolylangAktiveer tale en vertalings vir persoonlike post tipes.Aktiveer tale en vertalings vir persoonlike taksonomieë.Aktiveer tale en vertalings vir mediaMaak nuweLas nuwe taal byLas 'n nuwe vertaling byVoeg veeltalige vermoë by WordPressAdmin taalAlle taleKies a taalKies die skrif rigting vir die taalSkoon stringe vertaling databasisKodeKommentaar statusPersoonlike veldePersoonlike post tipesPersoonlike taksonomieëDefault taalVerwyderSpoor browser taal opToon 'n taal selektorToon as dropdownToon vlaeToon taal nameVeranderVerander taleGee 'n geldige WordPress localeVoorbeeld:Voorbeeld: %s in plaas van %sFeatured prentFiltreer inhoud volgens taalLaastens as jy van hierdie plugin hou, of as dit jou besigheid help, sal donasies aan die skrywer opreg waardeer word.VlagDwing skakel na voorbladVolle naamGroepVerberg URL taal inligting vir standaard taalVerberg die huidige taalAs jy wonder hoe jy die projek kan help, %slees hierdie%s.Onmoontlik om die taal by te voeg.Hou / taal / in pretty permalinksTaalTaal SelektorTaal bygevoeg.Taal kodeTaal-kode - verkieslik 2-letters ISO 639-1 (byvoorbeeld: af)Taal verwyder.Taal selektorTaal opgedateer.TaleLocaleMediaNaamOrdeBladsy ordeBladsy ouerBladsy sjabloonPing statusGradeer asseblief eers op na %s toe voor jy opgradeer na %s toe.Polylang was gedeaktiveer omdat jy van te ou weergawe af opgegradeer het.Polylang is gratis en is vrygestel onder dieselfde lisensie as WordPress, die %sGPL%s.Polylang word voorsien met 'n uitgebreide %s dokumentasie %s (slegs in Engels). Dit sluit inligting in oor hoe om jou veeltalige werf op te stel en dit op 'n daaglikse basis te gebruik, 'n FAQ, sowel as 'n dokumentasie vir programmeerders om hul plugins en temas aan te pas.Posisie van die taal in die taal selektorPost formaatPostsPosts, bladsye, kategorieë en etikette urls is nie verander nie.Gepubliseer datumVerwyder / taal / in pretty permalinksSearch translationsStel die taalInstellingsToon alle taleSticky postsStringString vertalingString vertalingsSinkroniseringTaksonomieëSkrif rigtingDie voorblad url bevat die taal kode in plaas van die bladsy se naam of bladsy idDie taal kode bevat ongeldige karaktersDie taal kode moet uniek weesDie taal word ingestel van inhoudDie taal word gestel vanuit verskillende domiansudDie taal is ingestel van die gids se naam in pretty permalinksDie taal word gestel uit die subdomein naam in pretty permalinksDie taal moet 'n naam hêDie taal is geskep, maar die WordPress taallêer is nie afgelaai nie. Installeer dit asseblief by hand.Die naam is hoe dit vertoon word op jou webwerf (byvoorbeeld: Afrikaans).Die sinkronisasie opsies voorsien om presies dieselfde waardes in stand te hou (of vertalings in die geval van taksonomie en bladsy ouer) van meta-inhoud tussen die vertalings van 'n post of bladsy.Die widget is vertoon vir:Daar is posts, bladsye, kategorieë of tags sonder 'n taal gestel. Wil jy hulle almal stel na die standaard taal?Titel:VertalingsVertalings opgedateer.URL veranderingeOpgradering van taal lêers…Gebruik hierdie om ongebruikte strings te verwyder uit die databasis uit, byvoorbeeld na verwydering van 'n module.Sien alle groepeWanneer die voorblad besoek word, stel die taal volgens die browser se voorkeurWidget titelWordPress Locale vir die taal (byvoorbeeld: af_ZA). Jy gaan nodig hê om die .mo leêr te installeer vir die taal.WordPress defaultJy is op die punt om hierdie taal permanent te verwyder. Is jy seker?Jy gebruik WordPress %s. Polylang vereis ten minste WordPress %s.Jy kan 'n taal in die lys kies of dit direk verander hieronder.Jy sal ook nuttige inligting in die %s support forum %s vind. Maar moenie vergeet om 'n soektog te maak voordat 'n nuwe onderwerp gepos word nie.links na regsregs na linkslanguages/polylang-bg_BG.mo000066600000035436152100561460011651 0ustar00t\  : : -V    )   * "5 X ] l z         ' , : Y b |  n   5 ? 2E #x  ?  $<EW gAu     & 41@Jr\1 JV8\& !.5I^ nyAQ- J k*,@@%fiD3r{ a9TI  p(@:D{@  xk(J%)QC=3<9v$}'</&7^6qD1( :H  & H ! !.9!@h!!"O"# !#,#4#-#q$8$,$$,$! %B%oY%%,%!& 8&C&`&o&&*&(&&&'W.'j''y(m_**** +$+++2+&,B,[,/n,O,,,-3-N-c--.G.F.@./Go/F/\/H[0L0012*23]3\4n4-}4$4B45$56 6&6#7(7s8w88B9:;+$iaY-3&D[E\k*;8!fO)Bep sS . c '>:0M=_"TKoU7nX< ZqRI/GCgFAt(WmrQP%?`^645V@b#dN]LJ 2j9hH1l,About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides languages with no translationHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRecommended pluginsRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe chosen static front page must be translated in all languages.The front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the code in the URLThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget textWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: polylang Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: Last-Translator: Pavel Sofroniev Language-Team: Павел Language: bg MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2: nplural=n>1; X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: _e;__;_x X-Poedit-Basepath: . X-Generator: Poedit 1.5.4 X-Poedit-SearchPath-0: .. X-Poedit-SearchPath-1: ../include Относно PolylangВключване на многоезичност за потребителските типове публикацииВключване на многоезичност за потребителските таксономииВключване на многоезичност за файловетеДобави новДобавяне на нов езикДобавяне на нов преводДобавя многоезична функционалност към WordPressЕзика на администраторския панелВсички езициИзберете езикИзберете посоката на писанеИзтриване на запазените преводи КодСтатус на коментараПотребителски полетаПотребителски типове публикацииПотребителски таксономииЕзик по подразбиранеИзтриванеЗасичане на езика на браузъраПоказване на джаджа за смяна на езикаПоказване като падащо менюПоказване на знаменцаПоказване на имената на езицитеРедактиранеРедактиране на езикаВъведете валидно (WordPress) местоположениеПример:Пример: %s вместо %sКартинка на публикациятаФилтриране на съдържанието по езикНе на последно място, ако наистина харесвате това разширение и/или то помага на Вашия бизнес, авторът му високо оценява всяко едно дарение.ЗнаменцеВсички връзки сочат към началната страницаНаименованиеГрупаСкриване на информацията за езика от адресите за езика по подразбиранеСкриване не езици без преводСкриване на текущия езикАко се питате как можете и Вие да помогнете, %sпрочетете това%s. Езикът не може да бъде добавен.Добавяне на /language/ в URL-тоЕзикДжаджа за смяна на езикаЕзикът бе добавен.Код на езикаКод на езика - за предпочитане двубуквен по ISO 639-1 (например: bg)Езикът бе изтрит.Джаджа за смяна на езикаЕзикът бе обновен.ЕзициМестоположениеФайловеНаименованиеПодредбаПодредба на страницатаРодител на страницатаШаблон на страницатаСтатус на ping-аМоля първо обновете до %s, преди да обновите до %s.Polylang бе изключен, защото обновихте от твърде стара версия.Polylang е безплатно разширение, публикувано под същия лиценз като WordPress, %sGPL%s.Polylang има подробна %sдокументация на английски%s, съдържаща информация за първоначалното настройване и поддръжка на многоезични уебсайтове, отговори на често задавани въпроси, както и документация за разработчици за интегриране на Polylang с техните разширения и теми. Кой подред ще се показва езикът в джаджата за смяна на езициФормат на публикациятаПубликацииURL-тата на публикациите, страниците, категориите и етикетите не се променятДата на публикуванеПрепоръчани разширенияПремахване на /language/ от URL-тоПреводи за търсенетоИзбор на езикНастройкиПоказване на всички езициПубликации, залепени на началната страницаНизПревод на низовеПревод на низовеСинхронизацияТаксономииПосока на писанеИзбраната статична начална страница трябва да бъде преведена на всички езици.Началната страница съдържа кода на езика вместо името или ID-то на страницатаКодът на езика съдържа невалидни знациКодът на езика трябва да бъде уникаленЕзикът се определя от съдържаниетоЕзикът се определя от различни домейниЕзикът се определя от кода в адреса (URL)Езикът се определя от името на директорията в URL-тоЕзикът се определя от поддомейна в URL-тоКодът на езика трябва да има наименованиеЕзикът беше добавен, но езиковият файл не може да бъде зареден. Моля инсталирайте го ръчно. Наименованието както ще се показва в уебсайта (например: български, English)Чрез синхронизацията мета съдържанието (и преводите за таксономии и родителски страници) е едно и също за различните преводи на публикации и страници.Джаджата се показва за:Намерени са публикации, страници, категории и етикети, за които не е посочен език. Искате ли да бъдат прехвърлени към езика по подразбиране?Заглавие:ПреводиПреводите бяха обновени.Промени в адреса (URL)Обновяване на езиковите файлове…Използвайте, за да премахнете неупотребявани низове от базата данни, например след изключване на разширение (плъгин).Покажи всички групиКогато потребителят посети началната страница, езикът му да се настройва според предпочитанията на браузъра. Текст на джаджатаЗаглавие на джаджатаМестоположение според WordPress (например: bg_BG, en_GB). Ще трябва да инсталирате съответния езиков файл (.mo). Езика по подразбиранеВие сте на път да изтриете необратимо този език. Сигурни ли сте?Вие използвате WordPress %s. Минималните изисквания за Polylang включват WordPress %s.Можете да изберете език от падащото меню или да създадете нов използвайки полетата по-долу. Освен това можете да намерите полезна информация във %sфорума за поддръжка%s; но не забравяйте да потърсите дали някой вече не е задал Вашия въпрос преди да изпратите запитване. отляво надясноотдясно налявоlanguages/polylang-lv.po000066600000041723152100561460011331 0ustar00msgid "" msgstr "" "Project-Id-Version: Polylang 1.5.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2015-02-14 09:22+0100\n" "Last-Translator: Andis Grosšteins \n" "Language-Team: \n" "Language: lv_LV\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " "2);\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: ../\n" "X-Textdomain-Support: yes\n" "X-Generator: Poedit 1.5.4\n" "X-Poedit-SearchPath-0: .\n" # @ polylang #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang tiek piedāvāts ar plašu %sdokumentāciju%s (tikai angliski). Tā " "satur informāciju par to kā uzstādīt vietni vairākās valodās un kā to lietot " "ikdienā, BUJ, kā arī dokumentāciju programmētājiem par spraudņu un kažociņu " "pielāgošanu." # @ polylang #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "Noderīgu informāciju varat atrast arī %satbalsata forumā%s. Ieteicams veikt " "meklēšanu pirms atvērt jaunu foruma tematu." # @ polylang #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polylang ir bezmaksas un tiek piedāvāts ar to pašu licenci kā WordPress, " "%sGPL%s." # @ polylang #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "Ja jūs prātojat kā varētu palīdzēt šim projektam, %sizlasiet šo%s." # @ polylang #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "Visbeidzot, ja jums patīk šis spraudnis vai ari tas palīdz jūsu biznesā, " "ziedojumi autoram tiks augsti vērtēti." # @ polylang #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "Valodas" # @ polylang #: include/switcher.php:22 msgid "Displays language names" msgstr "Rāda valodu nosaukumus" # @ polylang #: include/switcher.php:23 msgid "Displays flags" msgstr "Rāda karogus" # @ polylang #: include/switcher.php:24 msgid "Forces link to front page" msgstr "Valodas saite ved uz sākumlapu" # @ polylang #: include/switcher.php:25 msgid "Hides the current language" msgstr "Paslēpt aktīvo valodu" # @ polylang #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "Rāda kā nolaižamo izvēlni" # @ polylang #: admin/admin.php:267 msgid "Filters content by language" msgstr "Filtrēt saturu pēc valodas" # @ polylang #: admin/admin.php:258 msgid "Show all languages" msgstr "Rādīt visas valodas" # @ polylang #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "Pievienot jaunu tulkojumu" # @ polylang #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "Valoda" # @ polylang #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Tulkojumi" # @ polylang #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "Nosaka valodu" # @ polylang #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Logdaļa tiek rādīta:" # @ polylang #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "Visas valodas" # @ polylang #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Vadības valoda" # @ polylang #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "WordPress noklusējums" # @ default # @ polylang #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "Uzstādījumi" # @ polylang #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Atjaunina valodu failus…" # @ polylang #: admin/settings.php:62 msgid "About Polylang" msgstr "Par Polylang" # @ polylang #: admin/settings.php:78 msgid "Strings translations" msgstr "Tekstu tulkojumi" # @ polylang #: admin/settings.php:101 msgid "Strings translation" msgstr "Tekstu tulkošana" # @ polylang #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "Lūdzu ievadiet derīgu WordPress lokāles kodu." # @ polylang #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "Valodas kodam jābūt unikālam" # @ polylang #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "Valodai ir nepieciešams nosaukums" # @ polylang #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "Valoda tika izveidota, bet WordPress tulkojumu fails netika lejuplādēts. " "Lūdzu uzstādiet to manuāli." # @ polylang #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Logdaļas virsraksts" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "Taksonomijas" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "Lietotāja lauki" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "Komentāru statuss" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "Atpingu statuss" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "Izceltie raksti" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "Publicēšanas Datums" # @ polylang #: admin/settings.php:325 msgid "Post format" msgstr "Raksta formāts" # @ default #: admin/settings.php:326 msgid "Page parent" msgstr "Vecāka lapa" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "Lapas veidne" # @ polylang #: admin/settings.php:328 msgid "Page order" msgstr "Kārtas numurs" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "Satura izvēlētais attēls" # @ polylang #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Rediģēt valodu" # @ polylang #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "Pievienot jaunu valodu" # @ polylang #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Izvēlēties valodu" # @ polylang #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "Jūs varat izvēlēties valodu no saraksta, vai ari rediģēt to zemāk." # @ polylang #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Pilns nosaukums" # @ polylang #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "Nosaukums, kādu to attēlos lapā (piemēram: Latviešu)" # @ polylang #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "Lokāle" # @ polylang #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "WordPress valodas lokāle šai valodai (piemēram: en_US). Jums nāksies " "uzstādīt .mo failu šai valodai." # @ polylang #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Valodas kods (piem.: lv)" # @ polylang #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Lasīšanas virziens" # @ polylang #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "no kreisās uz labo" # @ polylang #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "no labās uz kreiso" # @ polylang #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Izvēlieties lasīšanas virzienu šai valodai" # @ polylang #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "Secība" # @ polylang #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Valodas atrašanās vieta valodu izvēlnē" # @ polylang #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "Valodu izvēlne" # @ polylang #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Meklēt tulkoumos" # @ polylang #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Iztīrīt tulkojumu datubāzi" # @ polylang #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Noklusētā valoda" # @ polylang #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "Ir atrasti raksti, lapas, tēmas, vai birkas bez uzstādītas valodas. Vai " "vēlaties uzstādīt tām visām noklusēto valodu?" # @ polylang #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "Noteikt pārlūka valodu" # @ polylang #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "" "Kad tiek apmeklēta sākumlapa, uzstāda valodu atkarībā no pārlūkprogrammas " "uzstādījumiem" # @ polylang #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "Saišu modifikācijas" # @ polylang #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "Paslēpt noklusētās valodas informāciju hipersaitēs" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "Datnes" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "Iespējot valodas un tulkošanu datnēm" # @ polylang #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "Sinhronizācija" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "Pielāgotie rakstu tipi" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "Iespējot valodas un tulkošanu pielāgotajiem rakstu tipiem." # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "Pielāgotās taksonomijas" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "Iespējot valodas un tulkošanu pielāgotajām taksonomijām." # @ polylang #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "Rediģēt" # @ polylang #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "Dzēst" # @ polylang #: admin/table-languages.php:76 msgid "Code" msgstr "Kods" # @ polylang #: admin/table-languages.php:78 msgid "Flag" msgstr "Karogs" # @ polylang #: admin/table-languages.php:79 msgid "Posts" msgstr "Raksti" # @ polylang #: admin/table-string.php:110 msgid "Name" msgstr "Nosaukums" # @ polylang #: admin/table-string.php:111 msgid "String" msgstr "Teksts" # @ polylang #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Pievienot jaunu" # @ polylang #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Valodu Izvēlne" # @ polylang #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "Parāda valodu izvēlni" # @ polylang #: include/widget-languages.php:75 msgid "Title:" msgstr "Virsraksts:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "" # polylang #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "" "Jūs lietojat WordPress %s. Polylang nepieciešama vismaz WordPress %s versija." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "" "Polylang tika atslēgts, jo jūs atajuninājāt to no pārāk vecas versijas." # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "Lūdzu vispirms atjauniniet uz %s un tikai pēc tam uz %s." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "Grupa" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "Skatīt visas grupas" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "Šī valoda tiks neatgriezeniski dzēsta. Vai esat pārliecināts?" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "Šo iespēju var lietot lai izdzēstu neizmantotos tulkojums. Piemēram pēc " "spraudņa noņemšanas." # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "Sinhronizācijas iespēja ļauj uzturēt vienādas lietotāja lauku vērtības, kā " "arī taksonomija un lapu vecākus, starp rakstu un lapu tulkojumiem." # @ polylang #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "Ievadītais valodas kods satur neatļautus simbolus" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "Valoda tiek uzstādīt no satura" # @ polylang #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "Rakstu, lapu, kategoriju un birku saites netiek mainītas." # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "Valoda tiek uzstādīta no direktorijas nosaukuma glītajās saitēs" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "Piemērs:" # @ polylang #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "Valoda tiek uzstādīta no subdomēna nosaukuma" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "Valoda tiek uzstādīta dažādiem domēniem" # @ polylang #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "Nerādīt /language/ glītajās saitēs" # @ polylang #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "Rādīt /language/ glītajās saitēs" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "Sākumlapas adrese satur valodas kodu, nevis lapas nosaukumu vai id" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "Piemēram: %s, nevis %s" # @ polylang #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "Neizdevās pievienot valodu." # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "Valoda pievienota." # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "Valoda izdzēsta." # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "Valoda atjaunināta." # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "Tulkojums atjaunināts." # @ polylang #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "Valodas kods - vēlams divu burtu ISO 639-1 (piemēram: lv)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "" # @ polylang #: admin/admin-strings.php:60 msgid "Widget text" msgstr "" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "" #~ msgid "— No Change —" #~ msgstr "— Bez izmaiņām —" languages/polylang-ar.mo000066600000031710152100561460011302 0ustar00t\  : : -V    )   * "5 X ] l z         ' , : Y b |  n   5 ? 2E #x  ?  $<EW gAu     & 41@Jr\1 JV8\& !.5I^ nyAQ- J k*,@@%fiD3r{ a9TI  p(@:D{@   F]TNCEUn@2 4@ u,  = ^  B  & F )b 0!:;!v!!^!7!"6"`Y","J" 2#=#S#q#f##$$ 4$ A$N$ ]$h$w$$$$e$M5%t%y%.r'''h'5(K(Eg((((( ) ")/)E)]) l)y)n)w)5p*3*'*2+55+^k+d+$/,T,L,--1.C..//5/'Q/y/-0tL00&001Y1_2fv22#~3%3+$iaY-3&D[E\k*;8!fO)Bep sS . c '>:0M=_"TKoU7nX< ZqRI/GCgFAt(WmrQP%?`^645V@b#dN]LJ 2j9hH1l,About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides languages with no translationHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRecommended pluginsRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe chosen static front page must be translated in all languages.The front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the code in the URLThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget textWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: Polylang v1.5 Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: 2015-02-14 09:12+0100 Last-Translator: Anas H. Sulaiman Language-Team: Language: ar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5); X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: ../ X-Textdomain-Support: yes X-Generator: Poedit 1.5.4 X-Poedit-SearchPath-0: . عن Polylangفعّل اللغات والترجمات من أجل أنواع المقالة المخصصةفعل اللغات والترجمات من أجل الفئات المخصصةفعّل اللغات والترجمات من أجل الوسائطأضف جديدأضف لغة جديدةأضف ترجمة جديدةإضافة إمكانية تعدد اللغات لووردبرسلغة لوحة الإشرافكل اللغاتاختر لغةاختر جهة النص الخاصة باللغةنظف قاعدة بيانات ترجمة الجملالرمزحالة التعليقحقول مخصصةأنواع المقالة المخصصة CPTالفئات المخصصةاللغة الافتراضيةحذفاكتشف لغة المتصفحيعرض مبدلاً للغاتيعرض قائمة منسدلةيعرض الأعلاميعرض أسماء اللغاتتحريرتحرير اللغةأدخل رمز مكان صحيح متوافق مع ووردبرسمثال:مثال: %s بدلاً من %sالصورة المميزةيرشح المحتوى حسب اللغةأخيراً، إن أعجبتك هذه الإضافة أو أنها مفيدة لأعمالك، تفضل بالتبرع لكاتبها ولك كل التقدير.العلميجبر الرابط إلى الصفحة الأماميةالاسم الكاملالمجموعةاخف معلومات اللغة في الرابط من أجل اللغة الافتراضيةاخف اللغات التي ليس لها ترجماتيخفي اللغة الحاليةإذا كنت تتسائل كيف يمكنك دعم المشروع، فقط %sاقرأ هذا%s.من المستحيل إضافة اللغة.ابق على /language/ في الروابط الدائمة الجميلةاللغةمبدل اللغاتتمت إضافة اللغة.رمز اللغةرمز اللغة - يفضل أن يكون حرفين حسب المعيار ISO 639-1 (مثلاً: ar)تم حذف اللغة.مبدل اللغاتتم تحديث اللغة.اللغاتالمكانالوسائطالاسمالترتيبترتيب الصفحةأب الصفحةقالب الصفحةحالة التنبيهرجاء حدّث أولاً إلى الإصدار %s قبل التحديث إلى الإصدار %s.تم تعطيل Polylang لأنك حدثت من إصدار قديم جداً.Polylang إضافة مجانية، منشورة تحت رخصة ووردبرس نفسها، وهي رخصة %sGPL%s.تأتي Polylang مع %sتوثيق%s شامل (باللغة الإنكليزية فقط). يتضمن التوثيق معلومات عن كيفية ضبط موقعك متعدد اللغات واستخدامه اليومي، وقسماً بالأسئلة الشائعة، بالإضافة إلى توثيق خاص بالمبرمجين لضبط قوالبهم وإضافاتهم.موضع اللغة في مبدل اللغاتتنسيق المقالةالمقالاتلا تعدل روابط المقالات أو الصفحات أو التصنيفات أو الوسوم.تاريخ النشرإضافات مستحسنةاحذف /language/ من الروابط الدائمة الجميلةابحث في الترجماتيضبط اللغةإعداداتاعرض كل اللغاتمقالات مثبتةالجملةترجمة الجملترجمات الجملالتزامنالفئاتجهة النصيجب أن تكون الصفحة الأمامية المختارة مترجمة إلى جميع اللغات.يتضمن رابط الصفحة الأمامية رمز اللغة بدلاً من اسم الصفحة أو رقمهايحتوي رمز اللغة على محارف خطأيجب أن يكون رمز اللغة فريداًتضبط اللغة من المحتوىتضبط اللغة من نطاقات مختلفةتحدد اللغة من رمزها في الرابطتضبط اللغة من اسم الدليل في الروابط الدائمة الجميلةتضبط اللغة من النطاق الفرعي في الروابط الدائمة الجميلةيجب أن يكون للغة اسمتم إنشاء اللغة، لكن لم يتم تحميل ملف اللغة الخاص بووردبرس. رجاءً ثبته يدوياً.الاسم كما سيظهر على موقعك (مثلاً: العربية).يسمح خيار المزامنة بالحفاظ على القيم نفسها (أو الترجمات في حالة الفئات وأب الصفحة) للمحتوى التعريفي بين ترجمات مقالة أو صفحة.يعرض المربع الجانبي من أجل:هناك مقالات أو صفحات أو تصنيفات أو وسوم غير محددة اللغة. هل تريد تحديد اللغة الافتراضية كلغة لهم؟العنوان:الترجماتتم تحديث الترجمة.تعديلات الرابطتحديث ملفات اللغة…استخدم هذا لإزالة الجمل غير المستخدمة من قاعدة البيانات. على سبيل المثال، عندما تحذف أحد الإضافات.عرض كل المجموعاتعندما زيارة الصفحة الأمامية، اضبط اللغة وفقاً لتفضيلات المتصفحنص الودجتعنوان المربع الجانبيرمز المكان الموافق لووردبرس والخاص باللغة (مثلاً: ar_SA). سيتوجب عليك تثبيت ملف .mo لهذه اللغة.افتراضي ووردبرسأنت على وشك حذف هذه اللغة إلى الأبد. هل أنت متأكد؟أنت تستخدم ووردبرس %s. تتطلب Polylang ووردبرس %s على الأقل.يمكنك اختيار لغة من القائمة أو تحريرها مباشرة في الأسفل.ستجد معلومات مفيدة أيضاً في %sمنتدى الدعم%s. لكن لا تنس أن تبحث قبل أن تفتح موضوعاً جديداً.من اليسر إلى اليمينمن اليمين إلى اليسارlanguages/polylang-et.po000066600000041076152100561460011321 0ustar00msgid "" msgstr "" "Project-Id-Version: Polylang\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2015-02-14 09:17+0100\n" "Last-Translator: Ahto Naris \n" "Language-Team: \n" "Language: et\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: ../\n" "X-Textdomain-Support: yes\n" "X-Generator: Poedit 1.5.4\n" "X-Poedit-SearchPath-0: .\n" # @ polylang #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang on varustatud ulatusliku %sdokumentatsiooniga%s (ainult inglise " "keeles). See sisaldab teavet kuidas luua ja kasutada igapäevaselt oma " "mitmekeelset kodulehte, KKK-d ning ka dokumentatsiooni programmeerijatele " "kuidas kohandada oma pluginad ja teemad." # @ polylang #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "Kasulikku informatsiooni on võimalik ka leida %sfoorumist%s. Paljud teemad " "on enne foorumis juba läbi arutatud, seega kasuta enne uue teema postitamist " "otsingut." # @ polylang #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polylang on tasuta ja avaldatud sama litsentsi alusel nagu WordPress - %sGPL" "%s." # @ polylang #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "Kui sul on isu selles projektis abiks olla alusta %ssiit%s." # @ polylang #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "Kui see plugin meeldib teile või aitab teie äri kaaluge autorile annetuse " "tegemist." # @ polylang #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "Keeled" # @ polylang #: include/switcher.php:22 msgid "Displays language names" msgstr "Näita keelte nimetusi" # @ polylang #: include/switcher.php:23 msgid "Displays flags" msgstr "Näita lippe" # @ polylang #: include/switcher.php:24 msgid "Forces link to front page" msgstr "Suuna viide avalehele" # @ polylang #: include/switcher.php:25 msgid "Hides the current language" msgstr "Peidab hetkel kasutusel oleva keele" # @ polylang #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "Näita rippmenüüna" # @ polylang #: admin/admin.php:267 msgid "Filters content by language" msgstr "Filtreerib sisu keele järgi" # @ polylang #: admin/admin.php:258 msgid "Show all languages" msgstr "Näita kõiki keeli" # @ polylang #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "Lisa uus tõlge" # @ polylang #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "Keel" # @ polylang #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Tõlked" # @ polylang #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "Määrab keele" # @ polylang #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Moodul kuvatakse:" # @ polylang #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "Kõik keeled" # @ polylang #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Halduri keel" # @ polylang #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "WordPressi vaikimisi väärtus" # @ polylang #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "Sätted" # @ polylang #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Keelefailide uuendamine…" # @ polylang #: admin/settings.php:62 msgid "About Polylang" msgstr "Polylang info" # @ polylang #: admin/settings.php:78 msgid "Strings translations" msgstr "Sõnade tõlkimised" # @ polylang #: admin/settings.php:101 msgid "Strings translation" msgstr "Sõnade tõlkimine" # @ polylang #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "Sisesta määrustepärane WordPressi locale" # @ polylang #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "Keelekood peab olema unikaalne" # @ polylang #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "Keelel peab olema nimetus" # @ polylang #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "Keel loodi, aga WordPressi keelefaili allalaadimine ebaõnnestus. Palun " "paigalda see käsitsi." # @ polylang #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Mooduli pealkiri" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "Taksonoomiad" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "Kohandatud väli" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "Kommentaari seis" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "Ping-i seis" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "Esilehepostitused" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "Avaldamise kuupäev" # @ polylang #: admin/settings.php:325 msgid "Post format" msgstr "Postituse vorming" # @ polylang #: admin/settings.php:326 msgid "Page parent" msgstr "Ülemleht" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "Lehe mall" # @ polylang #: admin/settings.php:328 msgid "Page order" msgstr "Lehe järjekorranr." # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "Tunnuspilt" # @ polylang #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Muuda keelt" # @ polylang #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "Lisa uus keel" # @ polylang #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Vali keel" # @ polylang #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "" "Saate valida keele loendist või vahetult redigeerida allpool olevates " "lahtrites." # @ polylang #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Täisnimi" # @ polylang #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "Täisnimi kuvatakse sinu lehel (näiteks: Eesti)." # @ polylang #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "Locale" # @ polylang #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "WordPress Locale keelele (näiteks: en_US). Peate paigaldama .mo tõlkefaili " "selle keele jaoks." # @ polylang #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Keelekood" # @ polylang #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Teksti suund" # @ polylang #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "vasakult paremale" # @ polylang #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "paremalt vasakule" # @ polylang #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Vali keele teksti suund " # @ polylang #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "Järjekord" # @ polylang #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Keele positsioon keele vahetajas" # @ polylang #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "Keele vahetaja" # @ polylang #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Otsi tõlkeid" # @ polylang #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Puhasta sõnade tõlkimise andmebaas" # @ polylang #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Vaikimisi keel" # @ polylang #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "Leidub postitusi, lehti, rubriike või silte millel pole keel määratud. Kas " "soovite neile määrata vaikimisi keele?" # @ polylang #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "Tuvasta veebilehitseja keel" # @ polylang #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "" "Kui külastatakse esilehte, kasuta keele määramiseks veebilehitseja eelistusi" # @ polylang #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "aadressi (URL) modifikatsioon" # @ polylang #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "Peida keeleinfo aadressides (URL-ides), kui on kasutusel vaikekeel." # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "Meedia" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "Aktiveeri keeled ja tõlked meedia jaoks." # @ polylang #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "Sünkroniseerimine" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "Kohandatud postitusetüübid" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "Aktiveeri keeled ja tõlked kohandatud postitusetüüpide jaoks." # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "Kohandatud taksonoomiad" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "Aktiveeri keeled ja tõlked kohandatud taksonoomiate jaoks." # @ polylang #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "Muuda" # @ polylang #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "Kustuta" # @ polylang #: admin/table-languages.php:76 msgid "Code" msgstr "Kood" # @ polylang #: admin/table-languages.php:78 msgid "Flag" msgstr "Lipp" # @ polylang #: admin/table-languages.php:79 msgid "Posts" msgstr "Postitused" # @ polylang #: admin/table-string.php:110 msgid "Name" msgstr "Nimi" # @ polylang #: admin/table-string.php:111 msgid "String" msgstr "Sõna(d)" # @ polylang #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Lisa uus" # @ polylang #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Keele vahetaja" # @ polylang #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "Näitab keele vahetajat" # @ polylang #: include/widget-languages.php:75 msgid "Title:" msgstr "Pealkiri:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "Lisab mitmekeelsuse WordPressile" # @ polylang #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "" "Kasutusel on WordPress %s. Polylang vajab töötamiseks vähemalt WordPress " "versiooni %s." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "Polylang on deaktiveeritud kuna uuendasite liiga vana versiooni pealt." # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "" "Palun uuendage kõigepealt versioonile %s ja alles seejärel versioonile %s." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "Grupp" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "Vaata kõiki gruppe" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "Oled sa kindel, et tahad selle keele jäädavalt kustuda?" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "Kasutage seda kasutamata sõnade eemaldamiseks andmebaasist, näiteks pärast " "plugina eemaldamist." # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "Sünkroniseerimise võimalused lubavad säilitada meta seosed tõlgitud " "postituste ja lehtede vahel. " # @ polylang #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "Keelekood sisaldab sobimatuid tähemärke" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "Keel on määratud sisust" # @ polylang #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "Postituste, lehtede, rubriikide ja siltide aadresse (URLe) ei muudeta." # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "Keel on määratud kataloogidega" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "Näide:" # @ polylang #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "Keel on määratud alamdomeenidega" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "Keel on määratud domeenidega" # @ polylang #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "Eemalda /language/ ilusatest püsiviidetest" # @ polylang #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "Säilita /language/ ilusates püsiviidetes" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "Esilehe aadress (URL) sisaldab lehe nime või lehe id asemel keelekoodi" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "Näide: %s asendab %s" # @ polylang #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "Seda keelt pole võimalik lisada." # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "Keel lisatud." # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "Keel kustutatud." # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "Keel uuendatud." # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "Tõlked uuendatud." # @ polylang #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "" "Keelekood - soovitatavalt ISO 639-1 standardile vastav 2-täheline (näiteks: " "et)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "" # @ polylang #: admin/admin-strings.php:60 msgid "Widget text" msgstr "" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "" languages/polylang-ary.mo000066600000034034152100561460011475 0ustar00   7 F :O : -    )* T c q  * "     $ 6 H T e l         2 A H nd      2 #H l ?  $  ' 7AE       ) 71CuJ~\&1$ Vb8h &-4HZcs   AQ:-  *,'@T@iD^[rx  )? Q_faT M Ypf@D*@o2Mk  j,& S a]lNC ]hx@ $ E 2U 4    ,!4!P!f!! ! ! !! " )"4"BJ" """ ")"# #:## $$$^5$7$"$`$,P%J}% %%%&f&&&& &&& '' '++' W'e't''''e'2(MD(t(y).***h*D+Z+t++E++, ,!,@,T,c,,,, ,,, - -%-n5-w-5.3R.'.2.5.^/dv/$/0L0011122$222343 F3'Q3y3-4tL44&445Y5_6fv66 ~777#7%7 8— No Change —About PolylangActivateActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaActivatedAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesAutomatically Translate My SiteChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCongratulations!Custom fieldsCustom post typesCustom taxonomiesDate FormatDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilterFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFrédéric DemarleFull nameGroupHide URL language information for default languageHides languages with no translationHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLearn moreLearn more...LocaleMediaNameNeed Extra Services?NoneOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.PolylangPolylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRecent CommentsRecent PostsRecommended pluginsRemove /language/ in pretty permalinksRequest ServicesRequest TranslationSearchSearch translationsSets the languageSettingsSettings saved.Show all languagesSite TitleSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe chosen static front page must be translated in all languages.The front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the code in the URLThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Time FormatTitle:Translation Management SystemTranslationsTranslations updated.URL modificationsUncategorizedUpdateUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget textWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.calendar caption%1$s %2$shttp://polylang.wordpress.comhttp://polylang.wordpress.com/left to rightright to leftwidgets%1$s on %2$sProject-Id-Version: Stable (latest release) Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: Thu Nov 12 2015 21:36:21 GMT+0100 (CET) Last-Translator: admin Language-Team: Language: Unknown locale Plural-Forms: nplurals=2; plural=n != 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-SourceCharset: UTF-8 X-Generator: Loco - https://localise.biz/ X-Poedit-Basepath: . X-Poedit-SearchPath-0: .. X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2 X-Loco-Target-Locale: ary_GB— لا توجد تغييرات —عن Polylangتفعيلفعّل اللغات والترجمات من أجل أنواع المقالة المخصصةفعل اللغات والترجمات من أجل الفئات المخصصةفعّل اللغات والترجمات من أجل الوسائطمفعّلأضف جديدأضف لغة جديدةأضف ترجمة جديدةإضافة إمكانية تعدد اللغات لووردبرسلغة لوحة الإشرافكل اللغاتترجمة موقعي تلقائيااختر لغةاختر جهة النص الخاصة باللغةنظف قاعدة بيانات ترجمة الجملالرمزحالة التعليقألف مبروك!حقول مخصصةأنواع المقالة المخصصة CPTالفئات المخصصةشكل التاريخاللغة الافتراضيةحذفاكتشف لغة المتصفحيعرض مبدلاً للغاتيعرض قائمة منسدلةيعرض الأعلاميعرض أسماء اللغاتتحريرتحرير اللغةأدخل رمز مكان صحيح متوافق مع ووردبرسمثال:مثال: %s بدلاً من %sالصورة المميزةتصفيةيرشح المحتوى حسب اللغةأخيراً، إن أعجبتك هذه الإضافة أو أنها مفيدة لأعمالك، تفضل بالتبرع لكاتبها ولك كل التقدير.العلميجبر الرابط إلى الصفحة الأماميةفريديريك درملالاسم الكاملالمجموعةاخف معلومات اللغة في الرابط من أجل اللغة الافتراضيةاخف اللغات التي ليس لها ترجماتيخفي اللغة الحاليةإذا كنت تتسائل كيف يمكنك دعم المشروع، فقط %sاقرأ هذا%s.من المستحيل إضافة اللغة.ابق على /language/ في الروابط الدائمة الجميلةاللغةمبدل اللغاتتمت إضافة اللغة.رمز اللغةرمز اللغة - يفضل أن يكون حرفين حسب المعيار ISO 639-1 (مثلاً: ar)تم حذف اللغة.مبدل اللغاتتم تحديث اللغة.اللغاتقراءة المزيدتعلم أكثر...المكانالوسائطالاسمهل تحتاج لخدمات إضافية؟لا يوجدالترتيبترتيب الصفحةأب الصفحةقالب الصفحةحالة التنبيهرجاء حدّث أولاً إلى الإصدار %s قبل التحديث إلى الإصدار %s.بولي لانغتم تعطيل Polylang لأنك حدثت من إصدار قديم جداً.Polylang إضافة مجانية، منشورة تحت رخصة ووردبرس نفسها، وهي رخصة %sGPL%s.تأتي Polylang مع %sتوثيق%s شامل (باللغة الإنكليزية فقط). يتضمن التوثيق معلومات عن كيفية ضبط موقعك متعدد اللغات واستخدامه اليومي، وقسماً بالأسئلة الشائعة، بالإضافة إلى توثيق خاص بالمبرمجين لضبط قوالبهم وإضافاتهم.موضع اللغة في مبدل اللغاتتنسيق المقالةالمقالاتلا تعدل روابط المقالات أو الصفحات أو التصنيفات أو الوسوم.تاريخ النشرآخر التعليقاتآخر المقالاتإضافات مستحسنةاحذف /language/ من الروابط الدائمة الجميلةطلب خدماتطلب الترجمةالبحثابحث في الترجماتيضبط اللغةإعداداتتم حفظ الاعدادات.اعرض كل اللغاتعنوان الموقعمقالات مثبتةالجملةترجمة الجملترجمات الجملالتزامنالفئاتجهة النصيجب أن تكون الصفحة الأمامية المختارة مترجمة إلى جميع اللغات.يتضمن رابط الصفحة الأمامية رمز اللغة بدلاً من اسم الصفحة أو رقمهايحتوي رمز اللغة على محارف خطأيجب أن يكون رمز اللغة فريداًتضبط اللغة من المحتوىتضبط اللغة من نطاقات مختلفةتحدد اللغة من رمزها في الرابطتضبط اللغة من اسم الدليل في الروابط الدائمة الجميلةتضبط اللغة من النطاق الفرعي في الروابط الدائمة الجميلةيجب أن يكون للغة اسمتم إنشاء اللغة، لكن لم يتم تحميل ملف اللغة الخاص بووردبرس. رجاءً ثبته يدوياً.الاسم كما سيظهر على موقعك (مثلاً: العربية).يسمح خيار المزامنة بالحفاظ على القيم نفسها (أو الترجمات في حالة الفئات وأب الصفحة) للمحتوى التعريفي بين ترجمات مقالة أو صفحة.يعرض المربع الجانبي من أجل:هناك مقالات أو صفحات أو تصنيفات أو وسوم غير محددة اللغة. هل تريد تحديد اللغة الافتراضية كلغة لهم؟شكل الوقتالعنوان:نظام إدارة الترجماتالترجماتتم تحديث الترجمة.تعديلات الرابطغير مصنّفتحديثتحديث ملفات اللغة…استخدم هذا لإزالة الجمل غير المستخدمة من قاعدة البيانات. على سبيل المثال، عندما تحذف أحد الإضافات.عرض كل المجموعاتعندما زيارة الصفحة الأمامية، اضبط اللغة وفقاً لتفضيلات المتصفحنص الودجتعنوان المربع الجانبيرمز المكان الموافق لووردبرس والخاص باللغة (مثلاً: ar_SA). سيتوجب عليك تثبيت ملف .mo لهذه اللغة.افتراضي ووردبرسأنت على وشك حذف هذه اللغة إلى الأبد. هل أنت متأكد؟أنت تستخدم ووردبرس %s. تتطلب Polylang ووردبرس %s على الأقل.يمكنك اختيار لغة من القائمة أو تحريرها مباشرة في الأسفل.ستجد معلومات مفيدة أيضاً في %sمنتدى الدعم%s. لكن لا تنس أن تبحث قبل أن تفتح موضوعاً جديداً.%1$s %2$shttp://polylang.wordpress.comhttp://polylang.wordpress.com/من اليسر إلى اليمينمن اليمين إلى اليسار%1$s on %2$slanguages/polylang-id_ID.po000066600000050530152100561460011654 0ustar00# Translation of Stable (latest release) in Indonesian # This file is distributed under the same license as the Stable (latest release) package. msgid "" msgstr "" "PO-Revision-Date: 2015-10-09 08:56:35+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: GlotPress/1.0-alpha-1100\n" "Project-Id-Version: Stable (latest release)\n" #: lingotek/lingotek.php:85 msgid "Activated" msgstr "" #: lingotek/lingotek.php:85 msgid "Activate" msgstr "" #: lingotek/lingotek.php:90 msgid "Request Translation" msgstr "" #: lingotek/lingotek.php:96 msgid "Request Services" msgstr "" #: lingotek/lingotek.php:103 msgid "Polylang is now fully integrated with Lingotek, a professional translation management system!" msgstr "" #: lingotek/lingotek.php:106 msgid "Automatically Translate My Site" msgstr "" #: lingotek/lingotek.php:107 msgid "Polylang is now fully integrated with Lingotek!" msgstr "" #: lingotek/lingotek.php:109 lingotek/lingotek.php:120 msgid "Access free machine translation for your site for up to 100,000 characters." msgstr "" #: lingotek/lingotek.php:110 msgid "Machine translation is an excellent option if you're on a tight budget, looking for near-instant results, and are okay with less-than-perfect quality." msgstr "" #: lingotek/lingotek.php:117 msgid "Translation Management System" msgstr "" #: lingotek/lingotek.php:118 msgid "Do you need to connect to a professional translation management system?" msgstr "" #: lingotek/lingotek.php:121 msgid "Access an online translator workbench." msgstr "" #: lingotek/lingotek.php:122 msgid "Have linguists compare side-by-side versions of original and translated text." msgstr "" #: lingotek/lingotek.php:123 msgid "Save and re-use previously translated material (leverage translation memory (TM))." msgstr "" #: lingotek/lingotek.php:130 msgid "Professionally Translate My Site" msgstr "" #: lingotek/lingotek.php:131 msgid "Do you need to professionally translate your site?" msgstr "" #: lingotek/lingotek.php:133 msgid "Start the process of getting a professional translation bid." msgstr "" #: lingotek/lingotek.php:134 msgid "Activate account so Lingotek can get an accurate count of how many words you have on your site and which languages you wish to translate into." msgstr "" #: lingotek/lingotek.php:135 msgid "Once activated click on the request translation bid and a certified translation project manager will contact you to give a no obligations translation bid." msgstr "" #: lingotek/lingotek.php:142 msgid "Need Extra Services?" msgstr "" #: lingotek/lingotek.php:143 msgid "Do you need help translating your site?" msgstr "" #: lingotek/lingotek.php:145 msgid "Start the process of getting extra services." msgstr "" #: lingotek/lingotek.php:146 msgid "Do you need someone to run your localization project?" msgstr "" #: lingotek/lingotek.php:147 msgid "Do you need customized workflows?" msgstr "" #: lingotek/lingotek.php:148 msgid "Do you you have existing Translation Memories you would like to use?" msgstr "" #: lingotek/lingotek.php:149 msgid "Do you need help creating glossaries and terminologies?" msgstr "" #: lingotek/lingotek.php:254 msgid "Learn more..." msgstr "" #. Plugin Name of the plugin/theme msgid "Polylang" msgstr "" #. Plugin URI of the plugin/theme msgid "http://polylang.wordpress.com/" msgstr "" #. Description of the plugin/theme msgid "Adds multilingual capability to WordPress" msgstr "Tambahkan kapabilitas multi-bahasa pada WordPress" #. Author of the plugin/theme msgid "Frédéric Demarle" msgstr "" #. Author URI of the plugin/theme msgid "http://polylang.wordpress.com" msgstr "" #: admin/admin-filters-columns.php:141 admin/admin-filters-columns.php:236 msgid "Add new translation" msgstr "Tambahkan terjemahan baru" #: admin/admin-filters-columns.php:161 msgid "— No Change —" msgstr "" #: admin/admin-filters-columns.php:174 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:159 admin/admin-filters-term.php:85 #: admin/admin-filters-term.php:136 include/model.php:591 msgid "Language" msgstr "Bahasa" #: admin/admin-filters-post.php:133 admin/admin.php:96 admin/settings.php:70 #: admin/settings.php:97 include/model.php:590 msgid "Languages" msgstr "Bahasa" #: admin/admin-filters-post.php:239 msgid "(no parent)" msgstr "" #: admin/admin-filters-post.php:474 admin/admin-filters-term.php:763 #: admin/table-languages.php:65 admin/view-translations-media.php:21 msgid "Edit" msgstr "Sunting" #: admin/admin-filters-term.php:92 admin/admin-filters-term.php:144 msgid "Sets the language" msgstr "Setel bahasa" #: admin/admin-filters-term.php:454 msgid "None" msgstr "" #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Widget tersebut ditampilkan untuk:" #: admin/admin-filters.php:55 include/model.php:592 msgid "All languages" msgstr "Semua bahasa" #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Bahasa untuk Admin" #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "Bawaan WordPress (default)" #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Memperbarui berkas-berkas bahasa…" #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "Halaman depan statis terpilih harus diterjemahkan ke dalam semua bahasa." #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "Tidak dimungkinkan menambah bahasa." #: admin/admin-model.php:66 msgid "Language added." msgstr "Bahasa ditambahkan." #: admin/admin-model.php:145 msgid "Language deleted." msgstr "Bahasa dihapus." #: admin/admin-model.php:224 msgid "Language updated." msgstr "Bahasa diperbarui." #: admin/admin-model.php:241 msgid "Enter a valid WordPress locale" msgstr "Masukkan lokala (locale) WordPress yang valid." #: admin/admin-model.php:245 msgid "The language code contains invalid characters" msgstr "Kode bahasa berisi karakter yang tidak valid" #: admin/admin-model.php:249 msgid "The language code must be unique" msgstr "Kode bahasa harus unik" #: admin/admin-model.php:254 msgid "The language must have a name" msgstr "Bahasa harus memiliki nama" #: admin/admin-nav-menu.php:52 admin/admin-nav-menu.php:73 #: admin/admin-nav-menu.php:76 admin/admin-nav-menu.php:107 #: admin/admin-nav-menu.php:169 install/upgrade.php:302 msgid "Language switcher" msgstr "Pengalih Bahasa" #: admin/admin-strings.php:54 msgid "Site Title" msgstr "" #: admin/admin-strings.php:55 msgid "Tagline" msgstr "" #: admin/admin-strings.php:56 msgid "Date Format" msgstr "" #: admin/admin-strings.php:57 msgid "Time Format" msgstr "" #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Judul widget" #: admin/admin-strings.php:60 msgid "Widget text" msgstr "Teks widget" #: admin/admin.php:204 admin/settings.php:102 msgid "Settings" msgstr "Pengaturan" #: admin/admin.php:312 msgid "Show all languages" msgstr "Tampilkan semua bahasa" #: admin/admin.php:321 msgid "Filters content by language" msgstr "Pilah konten sesuai bahasa" #: admin/admin.php:419 admin/settings.php:183 msgid "The language was created, but the WordPress language file was not downloaded. Please install it manually." msgstr "Bahasa telah dibuat, namun file bahasa untuk WordPress belum terunduh. Silahkan menginstalnya secara manual." #: admin/settings.php:52 msgid "Recommended plugins" msgstr "Daftar plugin yang disarankan" #: admin/settings.php:62 msgid "About Polylang" msgstr "Tentang Polylang" #: admin/settings.php:78 msgid "Strings translations" msgstr "Terjemahan string" #: admin/settings.php:101 msgid "Strings translation" msgstr "Penerjemahan string" #: admin/settings.php:242 msgid "Translations updated." msgstr "Terjemahan diperbarui." #: admin/settings.php:300 msgid "Settings saved." msgstr "" #: admin/settings.php:321 msgid "Taxonomies" msgstr "Taksonomi" #: admin/settings.php:322 msgid "Custom fields" msgstr "Bidang kustom (custom fields)" #: admin/settings.php:323 msgid "Comment status" msgstr "Status komentar" #: admin/settings.php:324 msgid "Ping status" msgstr "Status ping" #: admin/settings.php:325 msgid "Sticky posts" msgstr "Tulisan-tulisan lekat (sticky posts)" #: admin/settings.php:326 msgid "Published date" msgstr "Tanggal terbit" #: admin/settings.php:327 msgid "Post format" msgstr "Format pos" #: admin/settings.php:328 msgid "Page parent" msgstr "Induk halaman" #: admin/settings.php:329 msgid "Page template" msgstr "Templet halaman" #: admin/settings.php:330 msgid "Page order" msgstr "Urutan halaman" #: admin/settings.php:331 msgid "Featured image" msgstr "Gambar fitur (featured image)" #: admin/table-languages.php:70 msgid "You are about to permanently delete this language. Are you sure?" msgstr "Anda akan menghapus permanen bahasa ini. Anda yakin?" #: admin/table-languages.php:71 admin/table-string.php:168 msgid "Delete" msgstr "Hapus" #: admin/table-languages.php:85 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Nama bahasa" #: admin/table-languages.php:86 admin/view-tab-lang.php:61 msgid "Locale" msgstr "Lokala (locale)" #: admin/table-languages.php:87 msgid "Code" msgstr "Kode" #: admin/table-languages.php:88 admin/view-tab-lang.php:91 msgid "Order" msgstr "Urutan" #: admin/table-languages.php:89 msgid "Flag" msgstr "Bendera" #: admin/table-languages.php:90 msgid "Posts" msgstr "Tulisan (posts)" #: admin/table-string.php:109 msgid "String" msgstr "String" #: admin/table-string.php:110 msgid "Name" msgstr "Nama" #: admin/table-string.php:111 msgid "Group" msgstr "Grup" #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Terjemahan" #: admin/table-string.php:187 msgid "View all groups" msgstr "Tampilkan semua grup" #: admin/table-string.php:200 msgid "Filter" msgstr "" #: admin/view-about.php:3 msgid "Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes." msgstr "Polylang disediakan beserta %sdokumentasi%s yang lengkap (tapi dalam Bahasa Inggris). Dokumentasi tersebut meliputi informasi tentang cara mengatur situs multi-bahasa Anda dan menggunakannya sehari-hari, sebuah FAQ, serta dokumentasi untuk para programer untuk mengadaptasi plugin dan theme buatan mereka." #: admin/view-about.php:9 msgid "You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic." msgstr "Anda juga akan menemukan informasi bermanfaat di dalam %sforum pendukung (support forum)%s. Walaupun demikian, lakukan terlebih dahulu pencarian mengenai topik Anda yang inginkan sebelum membuat topik baru di forum tersebut." #: admin/view-about.php:16 msgid "Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s." msgstr "Polylang disediakan gratis dan dirilis di bawah lisensi yang sama dengan WordPress, yaitu %sGPL%s." #: admin/view-about.php:22 msgid "If you wonder how you can help the project, just %sread this%s." msgstr "Jika Anda ingin tahu bagaimana agar bisa berkontribusi dalam proyek ini, silahkan %sbaca ini%s." #: admin/view-about.php:27 msgid "Finally if you like this plugin or if it helps your business, donations to the author are greatly appreciated." msgstr "Akhir kata, jika Anda menyukai plugin ini ataupun merasa bahwa plugin ini membantu bisnis Anda, donasi kepada pengembangnya sangat dihargai." #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Sunting bahasa" #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:103 msgid "Add new language" msgstr "Tambahkan bahasa baru" #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Pilih sebuah bahasa" #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "Anda dapat memilih satu bahasa dari daftar yang ada atau langsung menyuntingnya di bawah ini." #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "Sebutan tersebut sebagai nama bahasa yang akan ditampilkan pada situs Anda (contohnya: Bahasa Indonesia)" #: admin/view-tab-lang.php:66 msgid "WordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language." msgstr "Lokala WordPress untuk bahasa tersebut (contohnya: id_ID). Anda harus menginstal file .mo untuk bahasa ini." #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Kode bahasa" #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "Kode bahasa - sebaiknya 2-letters ISO 639-1 (for example: en)" #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Arah teks" #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "kiri ke kanan" #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "kanan ke kiri" #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Pilih arah teks untuk bahasa tersebut" #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Posisi bahasa dalam Pengalih Bahasa" #: admin/view-tab-lang.php:103 msgid "Update" msgstr "" #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Bahasa bawaan (default)" #: admin/view-tab-settings.php:29 msgid "There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?" msgstr "Terdapat tulisan, halaman, kategori atau tag tanpa set bahasa. Anda ingin menyetel semua itu ke bahasa bawaan (dafault language)?" #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "Modifikasi URL" #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "Bahasa disetel dari konten" #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "URL untuk pos, halaman, kategori dan tag tidak berubah." #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "Bahasa disetel dari nama direktori pada permalink cantik" #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "Bahasa disetel dari kode pada URL" #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:109 admin/view-tab-settings.php:118 msgid "Example:" msgstr "Contoh:" #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "Bahasa disetel dari nama subdomain pada permalink cantik." #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "Bahasa disetel dari domain yang berbeda." #: admin/view-tab-settings.php:92 msgid "Hide URL language information for default language" msgstr "Sembunyikan URL informasi bahasa untuk bahasa bawaan (default language)" #: admin/view-tab-settings.php:106 msgid "Remove /language/ in pretty permalinks" msgstr "Hilangkan /language/ pada permalink cantik" #: admin/view-tab-settings.php:115 msgid "Keep /language/ in pretty permalinks" msgstr "Biarkan /language/ pada permalink cantik" #: admin/view-tab-settings.php:130 msgid "The front page url contains the language code instead of the page name or page id" msgstr "URL halaman depan berisi kode bahasa, seharusnya nama halaman atau id halaman" #: admin/view-tab-settings.php:138 msgid "Example: %s instead of %s" msgstr "Contoh: %s dan bukan %s" #: admin/view-tab-settings.php:148 msgid "Detect browser language" msgstr "Deteksi bahasa peramban (browser language)" #: admin/view-tab-settings.php:154 msgid "When the front page is visited, set the language according to the browser preference" msgstr "Saat halaman depan dikunjungi, setel bahasa sesuai preferensi peramban (browser preference)" #: admin/view-tab-settings.php:161 msgid "Media" msgstr "Media" #: admin/view-tab-settings.php:167 msgid "Activate languages and translations for media" msgstr "Aktifkan bahasa dan terjemahan untuk media" #: admin/view-tab-settings.php:175 msgid "Custom post types" msgstr "Jenis tulisan kustom (Custom post types)" #: admin/view-tab-settings.php:188 msgid "Activate languages and translations for custom post types." msgstr "Aktifkan bahasa dan terjemahan untuk jenis tulisan kustom." #: admin/view-tab-settings.php:195 msgid "Custom taxonomies" msgstr "Taksonomi kustom" #: admin/view-tab-settings.php:208 msgid "Activate languages and translations for custom taxonomies." msgstr "Aktifkan bahasa dan terjemahan untuk taksonomi kustom." #: admin/view-tab-settings.php:214 msgid "Synchronization" msgstr "Sinkronisasi" #: admin/view-tab-settings.php:225 msgid "The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page." msgstr "Opsi-opsi sinkronisasi memungkinkan untuk menjaga nilai (atau terjemahan, jika pada taksonomi dan induk halaman) dari isi meta agar tepat sama antara terjemahan pos atau halaman." #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Cari terjemahan" #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Bersihkan database terjemahan semua string" #: admin/view-tab-strings.php:12 msgid "Use this to remove unused strings from database, for example after a plugin has been uninstalled." msgstr "Gunakan ini untuk menghapus string-string dari database, misalnya setelah suatu plugin baru di-uninstall." #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Tambah yang baru" #: frontend/frontend-filters-search.php:80 msgid "Search" msgstr "" #: include/model.php:755 msgid "Uncategorized" msgstr "" #: include/plugins-compat.php:89 msgid "Import posts, pages, comments, custom fields, categories, and tags from a WordPress export file." msgstr "" #: include/switcher.php:22 msgid "Displays language names" msgstr "Tampilkan nama-nama bahasa" #: include/switcher.php:23 msgid "Displays flags" msgstr "Tampilkan bendera" #: include/switcher.php:24 msgid "Forces link to front page" msgstr "Paksa tautan ke halaman depan" #: include/switcher.php:25 msgid "Hides the current language" msgstr "Sembunyikan bahasa saat ini" #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "Sembunyikan bahasa yang tak memiliki terjemahan" #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "Tampilkan sebagai dropdown" #. translators: Calendar caption: 1: month name, 2: 4-digit year #: include/widget-calendar.php:124 msgctxt "calendar caption" msgid "%1$s %2$s" msgstr "" #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Pengalih Bahasa" #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "Tampilkan sebuah Pengalih Bahasa" #: include/widget-languages.php:75 msgid "Title:" msgstr "Judul:" #: include/widget-recent-comments.php:46 msgid "Recent Comments" msgstr "" #. translators: comments widget: 1: comment author, 2: post link #: include/widget-recent-comments.php:84 msgctxt "widgets" msgid "%1$s on %2$s" msgstr "" #: include/widget-recent-posts.php:46 msgid "Recent Posts" msgstr "" #: install/install.php:24 msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "Anda menggunakan WordPress %s. Polylang memerlukan setidaknya WordPress %s." #: install/upgrade.php:76 msgid "Polylang has been deactivated because you upgraded from a too old version." msgstr "Polylang telah dinonaktifkan karena Anda meningkatkannya dari versi yang sangat lama." #: install/upgrade.php:78 msgid "Please upgrade first to %s before ugrading to %s." msgstr "Mohon tingkatkan dahulu ke %s sebelum meningkatkannya ke %s." #: lingotek/lingotek.php:26 msgid "You’ve just upgraded to the latest version of Polylang! Would you like to automatically translate your website for free?" msgstr "" #: lingotek/lingotek.php:30 msgid "Close" msgstr "Tutup" #: lingotek/lingotek.php:33 msgid "Learn more" msgstr "" #: lingotek/lingotek.php:39 msgid "Click on Activate Lingotek to start translating." msgstr "" #: lingotek/lingotek.php:42 msgid "Activate Lingotek" msgstr "" #: lingotek/lingotek.php:54 msgid "Congratulations!" msgstr ""languages/polylang-nb_NO.mo000066600000025660152100561460011702 0ustar00t\  : : -V    )   * "5 X ] l z         ' , : Y b |  n   5 ? 2E #x  ?  $<EW gAu     & 41@Jr\1 JV8\& !.5I^ nyAQ- J k*,@@%fiD3r{ a9TI  p(@:D{@  Y =;C) 5  &2A&`&1 DPai#x tz /!@ !U $w   : ! !&!8!?!F!L! Q!]! n!|! !=!R!J!"l"%~###=##$#$;$N$ a$o$$$$$$ $ $B$F+%$r%%%#%$%9&6T&&g&A 'M'(q0(( ((((b)f)Iw) ) )d)A*@T*;*B*u++++$iaY-3&D[E\k*;8!fO)Bep sS . c '>:0M=_"TKoU7nX< ZqRI/GCgFAt(WmrQP%?`^645V@b#dN]LJ 2j9hH1l,About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides languages with no translationHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRecommended pluginsRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe chosen static front page must be translated in all languages.The front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the code in the URLThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget textWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: Polylang v0.9.8 Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: 2015-02-15 07:02+0100 Last-Translator: Tom Boersma Language-Team: Language: nb_NO MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Poedit-SourceCharset: utf-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: ../ X-Textdomain-Support: yes X-Generator: Poedit 1.7.4 X-Poedit-SearchPath-0: . Om PolylangAktiver språk og oversettelser for tilpassede innleggstyper.Aktiver språk og oversettelser for tilpassede taksonomier.Aktiver språk og oversettelser for mediaLegg til nyLegg til nytt språkLegg til ny oversettelseLegger til flerspråklig funksjonalitet til WordPressAdmin språkAlle språkVelg et språkVelg tekstretning for språketRens string oversettelsene i databasenKodeKommentar statusTilpassede feltTilpassede innleggstyperTilpassede taksonomierStandard språkSlettDetekter nettleserens språkpreferanceViser en språkskifterVises som dropdownViser flaggViser språknavnRedigerRediger språkTast inn en gyldig WordPress LocaleEksempel:Eksempel: %s i stedet for %sFremhevet bildeFiltre innhold etter språkTil slutt, hvis du liker denne plugin'en eller hvis det hjelper din bedrift: donasjoner til forfatteren er verdsatt i høyeste grad.FlaggTvinger lenke til forsidenFullt navnGruppeSkjul URL språkinformasjon for standard språkGjemmer språk uten oversettelserSkjuler nåværende språkHvis du lurer på hvordan du kan hjelpe prosjektet, %sles her%s.Ikke mulig å legge til språket.Behold /language/ i pene permalenkerSpråkSpråkskifterSpråk lagt til.SpråkkodeSpråkkode - helst 2-bokstav ISO 639-1 (for eksempel: en)Språk slettet.SpråkskifterSpråk oppdatert.SpråkLocaleMediaNavnRekkefølgeSide rekkefølgeSide forelderSidemalPing statusVennligst oppgrader først til %s før du oppgraderer til %s.Polylang er blitt deaktivert fordi at du har oppgradert fra en for gammel versjon.Polylang er gratis og er utgitt under samme lisens som WordPress, %sGPL%s.Polylang er utstyrt med omfattende %sdokumentasjon%s (bare på engelsk). Den inneholder informasjon om hvordan du setter opp ditt flerspråklige nettsted og bruker det på en daglig basis, en FAQ, samt dokumentasjon til programmerere for å tilpasse sine plugins og temaer.Språkets plasering i språkskifterenFormatInnleggInnlegg, sider, kategrier og stikkord urls er ikke tilpasset.Dato publiseringAnbefalte utvidelserFjern /language/ i pene permalenkerSøk oversettelserBestemmer språketInnstillingerVis alle språkKlebrige innleggStringString oversettelseString oversettelserSynkroniseringTaksonomierTekstretningDen valgte statiske forsiden må være oversettes for alle språk.Forside url inneholder språkkoden i stedet for sidenavn eller side idSpråkkoden inneholder ugyldige tegnSpråkkoden må være uniktSpråket bestemmes av innholdSpråket bestemmes av andre domenerSpråket bestemmes av koden i URL'enSpråket bestemmes av directory navnet i pene permalenkerSpråket bestemmes av subdomenenavn i pene permalenkerSpråket må ha et navnSpråket ble opprettet, men WordPress språkfilen ble ikke lastet ned. Vennligst installer den manuelt.Navnet som det vises på nettstedet ditt (for eksempel: English).Synkroniseringsvalgene tillater å ta vare på nøyaktig de samme verdiene (eller oversettelser når det gjelder taksonomier og sideforelder) av metainnhold mellom oversettelser av et innlegg eller en side.Widgeten vises for:Det finnes innlegg, sider, kategorier eller tags uten et valgt språk. Vil du sette dem alle til standard språk?Tittel:OversettelserOversettelser oppdatert.URL modifikasjonerOppgraderer språkfiler…Bruk dette for å fjerne ubrukte stringer fra databasen, f.eks. når en utvidelse er avinstallert.Vis alle grupperNår forsiden besøkes, velg språk i henhold til nettleserens preferanseWidget tekstWidget tittelWordPress Locale for språket (for eksempel: en_US). Du må installere .mo filen for dette språket.WordPress standardDu holder på å slette dette språket permanent. Er du sikkert?Du bruker WordPress %s. Polylang krever minst WordPress %s.Du kan velge et språk fra listen eller redigere direkte nedenfor.Du vil også finne nyttig informasjon i %sforumet%s. Men ikke glem å gjøre et søk før du legger til et nytt emne.venstre til høyrehøyre til venstrelanguages/polylang-he_IL.po000066600000044310152100561460011663 0ustar00msgid "" msgstr "" "Project-Id-Version: polylang\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Ariel Klikstein \n" "Language-Team: Pojo Team \n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: .\n" "X-Textdomain-Support: yes\n" "X-Generator: Poedit 1.7.4\n" "X-Poedit-SearchPath-0: ..\n" # @ polylang #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "התוסף מסופק עם %sתיעוד מסודר%s (באנגלית בלבד). התיעוד כולל מידע על הקמת אתר " "רב לשוני והשתמשות בו על בסיס יומיומי, שאלות נפוצות, וכן תיעוד עבור מפתחים " "להתאמת תוספים וערכות נושא לתוסף." # @ polylang #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "תוכלו למצוא מידע שימושי ב %sפורום תמיכה%s של התוסף. רק אל תשכחו לחפש לפני " "שאתם שואלים." # @ polylang #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "התוסף ללא תשלום והוא משוחרר לשימוש חופשי ברישיון %sGPL%s בדומה לוורדפרס." # @ polylang #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "אם הינכם מעוניינים לעזור לפרויקט הזה %sקראו כאן%s." # @ polylang #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "אם אתם ממש אוהבים את התוסף הזה או שזה עוזר לעסק שלכם, אני מאוד אעריך אם " "תתמכו בי." # @ polylang #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "שפות" # @ polylang #: include/switcher.php:22 msgid "Displays language names" msgstr "הצגת שם שפה" # @ polylang #: include/switcher.php:23 msgid "Displays flags" msgstr "הצגת דגלים" # @ polylang #: include/switcher.php:24 msgid "Forces link to front page" msgstr "לקשר תמיד לעמוד הבית" # @ polylang #: include/switcher.php:25 msgid "Hides the current language" msgstr "הסתרת שפה נוכחית" # @ polylang #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "תצוגה בתפריט נפתח" # @ polylang #: admin/admin.php:267 msgid "Filters content by language" msgstr "סינון תוכן לפי שפה" # @ polylang #: admin/admin.php:258 msgid "Show all languages" msgstr "הצגת כל השפות" # @ polylang #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "הוספת תרגום חדש" # @ polylang #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "שפה" # @ polylang #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "תרגומים" # @ polylang #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "הגדרות שפה" # @ polylang #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "וידגט' זה יוצג בשפה:" # @ polylang #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "כל השפות" # @ polylang #: admin/admin-filters.php:123 msgid "Admin language" msgstr "שפת פאנל ניהול" #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "ברירת מחדל" # @ default # @ polylang #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "הגדרות" # @ polylang #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "עדכון קבצי שפה…" # @ polylang #: admin/settings.php:62 msgid "About Polylang" msgstr "אודות התוסף" # @ polylang #: admin/settings.php:78 msgid "Strings translations" msgstr "מחרוזות תרגומים" # @ polylang #: admin/settings.php:101 msgid "Strings translation" msgstr "מחרוזות תרגום" # @ polylang #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "יש להזין מקום שתקף בוורדפרס" # @ polylang #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "קוד שפה חייב להיות ייחודי" # @ polylang #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "שם שפה חובה" # @ polylang #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "השפה נוצרה, אבל את הקובץ שפה של וורדפרס לא היה ניתן להוריד. יש להתקין את " "הקבצים באופן ידני." # @ polylang #: admin/admin-strings.php:59 msgid "Widget title" msgstr "וידג'ט טקסט" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "טקסונומיות" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "שדות מיוחדים" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "סטטוס תגובה" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "סטטוס פינג" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "פוסטים דביקים" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "תאריך פרסום" # @ polylang #: admin/settings.php:325 msgid "Post format" msgstr "סוג תוכן" # @ default #: admin/settings.php:326 msgid "Page parent" msgstr "עמוד אב" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "תבנית עמוד" # @ polylang #: admin/settings.php:328 msgid "Page order" msgstr "סידור עמוד" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "תמונה ראשית" # @ polylang #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "עריכת שפה" # @ polylang #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "הוספת שפה חדשה" # @ polylang #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "בחירת שפה" # @ polylang #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "אפשר לבחור שפה מהרשימה או ישירות לערוך אותה בהמשך." # @ polylang #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "שם מלא" # @ polylang #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "השם שיוצג באתר שלך (לדוגמא: עברית)" # @ polylang #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "מיקום" # @ polylang #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "קבצי שפה של וורדפרס (לדוגמא he_IL ). חייב להיות קובץ .MO בשביל הגדרת שפה" # @ polylang #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "קוד שפה" # @ polylang #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "כיוון טקסט" # @ polylang #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "שמאל לימין" # @ polylang #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "ימין לשמאל" # @ polylang #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "בחירת כיווניות טקסט עבור השפה" # @ polylang #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "סידור" # @ polylang #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "מיקום שפה במחליף השפות" # @ polylang #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "מחליף שפות" # @ polylang #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "חיפוש תרגומים" # @ polylang #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "ניקוי מחרוזות תרגום מהדטא בייס" # @ polylang #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "שפת ברירת מחדל" # @ polylang #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "יש הודעות, דפים, קטגוריות או תגיות שאינם מוגדרים בשפה מסויימת. האם להגדיר את " "כולם שפת ברירת המחדל? " # @ polylang #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "זיהוי שפת דפדפן" # @ polylang #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "כאשר הגולש הגיע לעמוד הבית, להציג את השפה על פי שפת הדפדפן של הגולש" # @ polylang #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "שינויי URL" # @ polylang #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "הסרת שינוי כתובת עבור שפת ברירת מחדל" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "מדיה" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "הפעלת תרגום שפות עבור מערכת המדיה" #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "סנכרון" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "סוגי פוסטים מותאמים אישית" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "הפעלת תרגום שפות עבור סוגי פוסטים מותאמים אישית" # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "טקסונומיות מותאמות אישית" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "הפעלת תרגום שפות עבור טקסונומיות מותאמות אישית" # @ polylang #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "עריכה" # @ polylang #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "מחיקה" # @ polylang #: admin/table-languages.php:76 msgid "Code" msgstr "קוד" # @ polylang #: admin/table-languages.php:78 msgid "Flag" msgstr "דגל" # @ polylang #: admin/table-languages.php:79 msgid "Posts" msgstr "פוסטים" # @ polylang #: admin/table-string.php:110 msgid "Name" msgstr "שם" # @ polylang #: admin/table-string.php:111 msgid "String" msgstr "מחרוזת" # @ polylang #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "הוספת חדש" # @ polylang #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "מחליף שפות" # @ polylang #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "הצגת מחליף השפות" # @ polylang #: include/widget-languages.php:75 msgid "Title:" msgstr "כותרת:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "הוספת יכולות שפות מרובה בוורדפרס" # @ polylang #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "המערכת על וורדפרס גרסה %s. התוסף דורש לכל הפחות וורדפרס גרסה %s." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "תוסף השפות (Polylang) בוטל בגלל ששדרגת מגרסה ישנה מידי" # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "אנא שדרגו ראשית כל ל %s לפני שאתם משדרגים ל %s" # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "קבוצה" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "הצגת כל הקבוצות" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "השפה עומדת להמחק לצמיתות. האם למחוק בכל זאת?" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "יש להשתמש באפשרוית זו כדי להסיר מחרוזות שאינן בשימוש ממסד הנתונים, לדוגמא: " "לאחר הסרת התוסף מהמערכת." # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "אפשרויות הסנכרון תאפשר לשמור על אותם ערכים מדויקים (או תרגומים במקרה של " "טקסונומיות ועמודי אב) של תוכן מטא בין התרגומים של הפוסט או העמוד." # @ polylang #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "קוד השפה מכיל תווים לא חוקיים" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "השפה מוגדרת רק בתוכן" # @ polylang #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "ה URL של הפוסטים, העמודים, הקטגוריות והתגיות אינו משתנה. " # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "במבנה הקישורים השפה מופיעה כתיקיה" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "לדוגמא:" # @ polylang #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "במבנה הקישורים השפה מופיעה כסאב דומיין" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "השפות מופיעות בדומיינים שונים" # @ polylang #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "למחוק /language/ לפני שם השפה במבנה הקישורים" # @ polylang #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "לשמור /language/ לפני שם השפה במבנה הקישורים" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "כתובת עמוד הבית מכילה את קוד השפה במקום שם העמוד או ID העמוד" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "לדוגמא: %s במקום%s" # @ polylang #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "לא ניתן להוסיף את השפה." # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "שדה נוספה." # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "שפה נמחקה." # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "שפה מעודכנת." # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "תרגומים מעודכנים." # @ polylang #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "קוד שפה - רצוי 2 אותיות ISO 639-1 (לדוגמא: he)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "עמוד סטטי שנבחר לעמוד בית חיב להיות מתורגם לעל השפות." # @ polylang #: admin/admin-strings.php:60 msgid "Widget text" msgstr "וידג'ט טקסט" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "תוספים מומלצים" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "השפה מוגדרת מהקוד של של ה URL" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "להסתיר שפות ללא תרגום" languages/polylang-tr_TR.mo000066600000027027152100561460011740 0ustar00q,  : : - < D U )i   * "   $ 2 D V g n         4 C n_    2 0 ?K  $    A K]o     1J\Q1 8)&8_s  AQJ-  * @7@xiDA>r[  a*T  p {@D@T  z?;-  7 AO-`  $  .AQU)o% # 19Rg- *4 _ i 2n  Y !@,!m!q! !!?! !!!" "!"'" -"7"F"U" d"Ip"U"#>#.$$%W%q%D%%!%%&&/&6&F&V& e& r&2&H&(&,$'!Q'+s'L'P'"=(Z`(8((&)) f* p*z**)*x*I+Ee+++r+B,9Z,,Z-v- - .nQ !PV<\"XmBdb'hIH`Mf-l0F $_ TS(C[=8R 32)i>U7*KDO.:,A o @&195/aN^G]cqg4L6k#j;YepW+?EZ%JAbout PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe chosen static front page must be translated in all languages.The front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget textWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: Polylang v1.5 Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: 2015-02-14 09:26+0100 Last-Translator: Abdullah Pazarbasi Language-Team: Language: tr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Poedit-SourceCharset: utf-8 X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2 X-Poedit-Basepath: . X-Loco-Target-Locale: tr_TR X-Generator: Poedit 1.5.4 X-Language: tr_TR X-Source-Language: C X-Poedit-SearchPath-0: .. X-Poedit-SearchPath-1: ../include Polylang HakkındaÖzel gönderi tipleri için diller ve çevrileri etkinleştir.Özel taksonomiler için diller ve çevrileri etkinleştir.Medya için diller ve çevrileri etkinleştirYeni ekleYeni Dil EkleYeni çevri ekleWordPress'e çokludil kabiliyeti kazandırırYönetici diliTüm dillerDil SeçDil için yazma yönünü seçinCümle çevri veritabanını temizleKodYorum durumuÖzel alanlarÖzel gönderi tipleriÖzel taksonomilerVarsayılan dilSilTarayıcı dilini algılaDil değiştirme ekranını görüntülerAçılır menü halinde görüntülerBayrakları görüntülerDil isimlerini görüntülerDüzenleDili düzenleGeçerli bir WordPress adresi girinÖrnek:Örnek: %2$s yerine %1$sÖne çıkan görselDile göre içerik filtreleriVe son olarak bu eklentiyi beğendiyseniz veya profesyonel anlamda size yararı dokunduysa, proje sahibine yapacağınız parasal destek mutlulukla karşılanacaktır.BayrakBağlantıyı önsayfa yapmak için zorlarTam İsimGrupURL'de varsayılan dil için dil belirtecini gizleGeçerli olan dili saklaEğer bu projeye nasıl katkıda bulunabileceğinizi merak ediyorsanız, %sbunu okuyun%s.Dili eklemek imkansız./language/ kısmını anlaşılır kalıcı bağlantılarda koruDilDil Değiştirme EkranıDil eklendi.Dil KoduDil kodu - tercihen 2 harfli ISO 639-1 içinden (örneğin: tr)Dil silindi.Dil DeğiştiriciDil güncellendi.DilBölge KoduMedyaİsimSıralamaSayfa sırasıSayfa ebeveyniSayfa şablonuPing durumuLütfen %2$s elemanını yükseltmeden önce %1$s elemanını yükseltin.Polylang aşırı eski bir versiyondan yükseltmenizden dolayı devredışı durumda.Polylang'ın kullanımı ücretsizdir ve dağıtımı WordPress ile aynı lisans sözleşmesi %sGPL%s altında yapılmıştır.Polylang geniş bir %sdocumentation%s (sadece ingilizce) temin etmektedir. Belge içerisinde; çoklu dil desteğinin kendi sitenize nasıl kurulacağı ve kolay kullanımı, sık sorulan sorular ve geliştiriciler için kendi temalarını ve eklentilerini uyumlu hale getirmeleri için gerekli bilgiler bulunmaktadır.Dilin dil değiştirici listesindeki pozisyonuGönderi formatıYazılarYazılar, sayfalar, kategoriler ve etiketlerin URL'leri dönüşüme uğramış değil.Yayımlanma tarihi/language/ kısmını anlaşılır kalıcı bağlantılardan kaldırÇevrilerde araDili geçerli dil olarak ayarlar.AyarlarTüm dilleri gösterYapışkan gönderilerCümleCümle ÇevrisiCümle çevrisiSenkronizasyonTaksonomilerYazma yönüSeçilen sabit ön sayfa tüm dillere çevrilmeli.Ön sayfa URL'si sayfa adı veya sayfa ID'si yerine dil kodunu içeriyorDil kodu geçersiz karakterler içeriyorDil kodu daha önce kullanılmamış olmalıDil içerik üzerinden ayarlanırDil farklı domainler üzerinden ayarlanırDil anlaşılır kalıcı bağlantılardaki dizin adı üzerinden ayarlanırDil anlaşılır kalıcı bağlantılardaki subdomain adı üzerinden ayarlanırGirdiğiniz dilin bir ismi olmalıDil oluşturuldu fakat WordPress için dil dosyası indirilemedi. Lütfen elden yükleyin.Sitede dilin gösterileceği isim (örneğin: Türkçe).Senkronizasyon seçenekleri bir yazı ya da sayfanın çevrileri arasında meta içeriğin değerlerinin (veya taksonomi ve sayfa ebeveynleri çevrilerinin) tam olarak aynı kalmasına izin verir.Bu bileşenin görüntüleneceği dil:Dili belirlenmemiş yazılar, sayfalar, kategoriler ve etiketler var. Varsayılan dil bunların hepsinin dili olarak ayarlansın mı?Başlık:ÇevrilerÇevriler güncellendi.URL dönüşümleriDil dosyaları güncelleştiriliyor…Kullanılmayan cümleleri veritabanından kaldırmak için bunu kullanın. Örneğin bir eklentiyi kaldırdıktan sonra.Tüm grupları görüntüleAnasayfa açıldığında, geçerli dili tarayıcının diline ayarlaBileşen metniBileşen başlığıDil için WordPress Bölge Kodu (örneğin: tr_TR). Bu dilin .mo uzantılı dil dosyasını yüklemeniz gerekiyor.WordPress varsayılanıBu dili kalıcı olarak silmek üzeresiniz. Emin misiniz?Siz WordPress'in %s sürümünü kullanıyorsunuz. Polylang'ı kullanabilmeniz için en az WordPress %s sürümüne ihtiyacınız var.Listeden bir dil seçebilirsiniz ya da direk aşağıdaki bölümden düzenleyebilirsiniz.Ayrıca %ssupport forum%s 'dan da yararlı bilgilere ulaşabilirsiniz. Ama yeni bir başlık açmadan önce arama yapmayı unutmayın.soldan sağasağdan solalanguages/polylang-hu_HU.po000066600000040266152100561460011721 0ustar00msgid "" msgstr "" "Project-Id-Version: polylang\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Erdei Csaba \n" "Language-Team: Csaba Erdei \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2: nplural=n>1;\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: _e;__;_x\n" "X-Poedit-Basepath: .\n" "X-Generator: Poedit 1.5.4\n" "X-Poedit-SearchPath-0: ..\n" "X-Poedit-SearchPath-1: ../include\n" #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "A bővítményhez részletes %sdokumentáció%s áll rendelkezésre (angol nyelven), " "amely tartalmazza a telepítéshez és a mindennapos használathoz szükséges " "leírásokat, és a fejlesztők számára szükséges információkat is." #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "Továbbá a %stámogató fórumban%s is találhatók hasznos információk, de új " "téma indítása előtt érdemes a keresést is használni." #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polylang bővítmény ingyen használható és a WordPress-el azonos, %sGPL%s " "licensz alatt lett kiadva." #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "" "Ha hasznosnak bizonyult a bővítmény, akkor %sfejlesztéssel, teszteléssel " "vagy fórum válaszokkal%s is lehet segíteni folyamatos fejlődését." #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "Vagy a lentebbi gombra kattintva adományozással is hozzá lehet járulni a " "fejlesztéséhez, amit ez úton is köszönünk!" #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "Nyelvek" #: include/switcher.php:22 msgid "Displays language names" msgstr "Nyelvek nevének mutatása" #: include/switcher.php:23 msgid "Displays flags" msgstr "Nyelv zászlók mutatása" #: include/switcher.php:24 msgid "Forces link to front page" msgstr "Főoldal linkje tartalmazza a nyelvet is" #: include/switcher.php:25 msgid "Hides the current language" msgstr "Aktuális nyelv elrejtése" #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "Megjelenítés legördülő menüként" #: admin/admin.php:267 msgid "Filters content by language" msgstr "Tartalom szűrése nyelv szerint" #: admin/admin.php:258 msgid "Show all languages" msgstr "Minden nyelv" #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "Új fordítás hozzáadása" #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "Nyelv" #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Fordítások" #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "Nyelvek beállítása" #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Widget megjelenítése ennél a nyelvnél:" #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "Minden nyelv" #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Adminisztrációs felület nyelve" #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "WordPress alapértelmezett" #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "Beállítások" #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Nyelv fájlok frissítése…" #: admin/settings.php:62 msgid "About Polylang" msgstr "Polylang bővítményről" #: admin/settings.php:78 msgid "Strings translations" msgstr "Szöveg fordítások" #: admin/settings.php:101 msgid "Strings translation" msgstr "Szöveg fordítások" #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "WordPress nyelvkód (pl. hu_HU)" #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "A nyelvkódnak egyedinek kell lennie" #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "Nevet is kell adni a nyelvnek" #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "A nyelv hozzá lett adva, de a WordPress fordítások (.mo fájlok) ehhez a " "nyelvhez nem lettek letöltve, ezt kézzel kell megtenni." #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Widget címe" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "Taxonómiák (kategóriák, címkék)" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "Egyedi mezők" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "Hozzászólás állapot" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "Értesítés (ping) állapot" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "Ragadós bejegyzések" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "Közzététel időpontja" #: admin/settings.php:325 msgid "Post format" msgstr "Formátum" #: admin/settings.php:326 msgid "Page parent" msgstr "Szülő oldal" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "Oldal sablonminta" #: admin/settings.php:328 msgid "Page order" msgstr "Oldal sorrend" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "Kiemelt kép" #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Nyelv szerkesztése" #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "Új nyelv hozzáadása" #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Nyelv kiválasztása" #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "Kiválasztható egy nyelv, vagy lentebb megadhatók a részletei:" #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Nyelv teljes neve" #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "A nyelv teljes neve, ahogy majd a honlapon is megjelenik (pl. Magyar)" #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "WP nyelvkód" #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "WordPress nyelvkód (pl. hu_HU). A nyelvhez tartozó .mo fordítás fájlt kézzel " "kell telepíteni." #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Nyelvkód" #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Nyelv írásmódja" #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "balról jobbra" #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "jobbról balra" #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Nyelv írásmódjának kiválasztása" #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "Sorrend" #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Hányadikként jelenjen meg a nyelv" #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "Nyelv választó" #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Fordítás keresése" #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Szöveg fordítások törlése" #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Alapértelmezett nyelv" #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "Vannak bejegyzések, oldalak, kategóriák és címkék, amelyekhez még nincs " "nyelv megadva. Ezek használják az alapértelmezett nyelvet." #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "Böngésző nyelvének használata" #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "" "Amikor meglátogatják a honlapot, akkor a látogató böngészőjének nyelvét " "vegyük alapul." #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "Linkek módosítása" #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "Nyelvkód eltávolítása a linkekből az alapértelmezett nyelv esetén" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "Média" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "Médiák fordításának bekapcsolása" #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "Szinkronizálás" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "Egyedi bejegyzés típusok" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "Egyedi bejegyzés típusok fordításának bekapcsolása." # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "Egyedi taxonómiák (kategóriák, címkék)" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "Egyedi taxonómiák (kategóriák, címkék) fordításának bekapcsolása." #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "Szerkesztés" #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "Törlés" #: admin/table-languages.php:76 msgid "Code" msgstr "Nyelvkód" #: admin/table-languages.php:78 msgid "Flag" msgstr "Zászló" #: admin/table-languages.php:79 msgid "Posts" msgstr "Bejegyzések" #: admin/table-string.php:110 msgid "Name" msgstr "Név" #: admin/table-string.php:111 msgid "String" msgstr "Szöveg" #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Új hozzáadása" #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Nyelv választó" #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "Nyelv választó elhelyezése" #: include/widget-languages.php:75 msgid "Title:" msgstr "Cím:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "Többnyelvű tartalom, fordítások kezelése." #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "" "Jelenleg a WordPress %s verziója van használva. Polylang bővítmény " "használatához legalább WordPress %s verzió szükséges." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "" "Polylang bővítmény ki lett kapcsolva, mert túl régi verzióról lett frissítve." # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "" "Először a(z) %s verzióra kell elvégezni a frissítést, majd csak utána lehet " "a(z) %s verzióra is." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "Csoport" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "Összes csoport" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "Valóban töröljük véglegesen ezt a nyelvet?" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "Már nem használt szöveg fordítások törlése adatbázisból, pl. eltávolított " "bővítményhez tartozó szövegek fordításai." # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "A szinkronizálás segítségével az oldalakhoz vagy bejegyzésekhez tartozó " "metadatok a fordítások esetén is ugyanazokat az értékeket veszik fel." #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "Nyelvkód hibás karaktert tartalmaz." #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "A nyelvet a tartalom nyelve határozza meg." #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "Bejegyzés, oldal, kategória és címke linkek nem módosulnak." #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "A nyelvet a linkben található mappanév határozza meg." # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "Példa:" #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "A nyelvet a linkben található aldomén határozza meg." # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "A nyelvet a linkben található domén határozza meg." #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "/language/ eltávolítása a linkekből." #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "/language/ megtartása a linkekben." # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "" "A főoldal linkje a nyelv kódját tartalmazza az oldal neve vagy azonosítója " "helyett." # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "Például: %s (%s helyett)" #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "Nem lehetséges a nyelv hozzáadása." # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "Nyelv hozzáadva." # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "Nyelv törölve." # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "Nyelv frissítve." # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "Fordítások frissítve." #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "Nyelvkód - 2 karakteres ISO 639-1 nyelvkód (pl. hu)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "" #: admin/admin-strings.php:60 msgid "Widget text" msgstr "" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "" #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "" languages/polylang-cs_CZ.mo000066600000024603152100561460011704 0ustar00id  : :K -    )   ( *: "e          0 ? W \ j     n F K e o 2u  ? $ ( 1 C Q c m t z  1 J \31 8 &AUgp  Q-< j *@@YiwD&rn uaT& {p@ DL@ T bqp 42#2V 0  $&Dkp!0@X ` n m"t +\#Mqw L)NvW) %G!m! !D!!$! " " 7"B"[" v""" " " "S"&#!A#c#,#4#2#$h,$L$$%~%9& A&K&#^&&'Q('z'l''=(DL(A(( g) u)Y +Z=B" 9di('O ]2HJVF@g>K8I- L/ &Q\*?<S)ecC3[hXM$E:D;T4fPRa_W^#GN1`6 7%0b!AU.,5About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides the current languageIf you wonder how you can help the project, just %sread this%s.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage codeLanguage switcherLanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsURL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: Polylang v1.4 Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: 2015-02-14 09:14+0100 Last-Translator: Přemysl Karbula Language-Team: Přemysl Karbula Language: cs_CZ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: ../ X-Textdomain-Support: yes X-Generator: Poedit 1.5.4 X-Poedit-SearchPath-0: . O PolylanguZapnout jazyky a překlady u vlastních typů obsahuZapnout jazyky a překlady u vlastních taxonomiíZapnout jazyky a překlady u mediálních souborůPřidat novýPřidejte nový jazykPřidat nový překladPřidá možnosti vícejazyčnosti do WordPressuJazyk adminaVšechny jazykyZvolte jazykVyberte směr textu pro daný jazyk.Vyčistit databázi s překlady textůKódStav komentářeUživatelská poleVlastní typy obsahuVlastní taxonomieVýchozí jazykSmazatDetekovat jazyk prohlížečeZobrazí přepínač jazykůZobrazí jako rozbalovací seznamZobrazí vlajkyZobrazí názvy jazykůUpravitUpravit jazykZadejte platný WordPress localePříklad:Příklad: %s namísto %sNáhledový obrázekFiltruje obsah podle jazykaNakonec, pokud se Vám tento plugin líbí nebo pokud Vám pomáhá při práci, jeho autor velmi ocení jakoukoliv finanční podporu.VlajkaVynutí odkaz na úvodní stránkuCelý názevSkupinaU výchozího jazyka v URL skrýt jeho kódSkryje aktuální jazykPokud by Vás zajímalo, jak můžete pomoci při vývoji projektu, přečtěte si %stoto%s.Ponechat /language/ v pěkných URLJazykPřepínač jazykůKód jazykaPřepínač jazykůPolylang — JazykyLocaleMédiaNázevPořadíPořadí stránekNadřazená stránkaŠablona stránkyStav pingbackuProsím upgradujte nejdříve na %s předtím, než budete upgradovat na %s.Polylang byl deaktivován, protože jste upgradovali z příliš staré verze.Polylang je k dispozici zdarma a je vydán pod stejnou %sGPL%s licencí jako WordPress.Polylang disponuje rozsáhlou %sdokumentací%s (pouze v angličtině), která obsahuje informace o nastavení vašeho vícejazyčného webu a o tom, jak jej každodenně používat. Obsahuje i FAQ a dokumentaci pro programátory, kteří by Polylangu chtěli přizpůsobit své pluginy a šablony.Pozice jazyka v přepínači jazyků.Formát příspěvkuPříspěvkyURL příspěvků, stránek, rubrik a štítků nebudou pozměněny.Datum publikováníOdstranit /language/ v pěkných URLVyhledat překladyTímto nastavte jazyk.NastaveníZobrazit všechny jazykyZvýrazněné příspěvkyŘetězecPřeklady textůPřeklady textůSynchronizaceTaxonomieSměr textuÚvodní stránka bude mít v URL jen kód jazyka a ne název stránky či její IDKód jazyka obsahuje nepovolené znakyKód jazyka musí být unikátníJazyk nastavit podle obsahuJazyk bude nastaven podle odlišných doménJazyk bude nastaven podle adresáře v pěkných URLJazyk je nastaven podle subdomény v pěkných URLJazyk musí mít názevJazyk byl vytvořen, ale WordPress jazykový soubor nebyl stažen. Prosím, nainstalujte jej manuálně.Název jazyka, jak bude zobrazen na vašem webu (např. Čeština, English).Sychronizační nastavení umožňuje udržovat stejné hodnoty (nebo překlady v případě taxonomií a nadřazených stránek) meta obsahu mezi různými překlady příspěvků či stránek.Widget zobrazí pro:Některé příspěvky, stránky, kategorie nebo štítky nemají nastavený jazyk. Chcete jim všem nastavit výchozí jazyk?Název:PřekladyModifikování URLAktualizuji soubory s jazyky…Toto použijte, chcete-li z databáze odstranit nepoužité řetězce a překlady. Například potom, co byl odinstalován nějaký plugin.Zobrazit všechny skupinyPři návštěvě úvodní stránky nastavit jazyk podle předvoleb prohlížečeTitulek widgetuWordPress locale tohoto jazyka (např. cs_CZ, en_US). Pro tento jazyk bude potřeba nainstalovat .mo soubor.Předvolené WordPressTímto zcela a navždy vymažete daný jazyk. Jste si jistý?Používáte WordPress %s. Polylang vyžaduje alespoň WordPress %s.Jazyk můžete vybrat ze seznamu nebo jej zde dole přímo zadat.Užitečné informace najdete také ve %sfórech%s. Nicméně nezapomeňte problém nejprve zkusit vyhledat, než o něm vytvoříte nové vlákno.zleva dopravazprava dolevalanguages/polylang-zh_CN.po000066600000036305152100561460011711 0ustar00msgid "" msgstr "" "Project-Id-Version: zh_CN\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: 倡萌@WordPress大学 \n" "Language-Team: 倡萌@WordPress大学 \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.6.5\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n" "X-Poedit-Basepath: .\n" "X-Poedit-SearchPath-0: ..\n" #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang 提供了一个全面的 %s帮助文档%s (英文的),它包括使用 Polylang 创建" "你的多语言网站和如何日常使用它,以及帮助程序员如何使 Polylang 适应他们的主题" "和插件。" #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "你还可以在 %s支持论坛%s 获取更多有用的信息。发表新话题前,请不要忘了先搜索一" "下。" #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "Polylang 是免费的,它和WordPress一样基于 %sGPL%s 发布。" #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "如果你想知道如何帮助改项目,不妨 %s阅读这里%s。" #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "最后,如果你喜欢该插件,或者它有助于你的生意,不妨捐助作者。

非常" "感谢 WordPress大学 为 Polylang 提供简体中文" "支持。" #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "语言" #: include/switcher.php:22 msgid "Displays language names" msgstr "显示语言名称" #: include/switcher.php:23 msgid "Displays flags" msgstr "显示国旗" #: include/switcher.php:24 msgid "Forces link to front page" msgstr "强制链接到主页" #: include/switcher.php:25 msgid "Hides the current language" msgstr "隐藏当前语言" #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "显示下拉菜单" #: admin/admin.php:267 msgid "Filters content by language" msgstr "按语言过滤内容" #: admin/admin.php:258 msgid "Show all languages" msgstr "显示所有语言" #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "添加新翻译" #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "语言" #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "翻译" #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "设置语言" #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "该小工具显示为:" #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "所有语言" #: admin/admin-filters.php:123 msgid "Admin language" msgstr "管理语言" #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "WordPress默认" #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "设置" #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "升级语言文件..." #: admin/settings.php:62 msgid "About Polylang" msgstr "关于 Polylang" #: admin/settings.php:78 msgid "Strings translations" msgstr "字符串翻译" #: admin/settings.php:101 msgid "Strings translation" msgstr "字符串翻译" #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "输入一个有效的 WordPress 区域" #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "语言代码必须是唯一的" #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "语言必须有一个名字" #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "语言已被创建,但是没有下载到WordPress语言包,请手动安装它。" #: admin/admin-strings.php:59 msgid "Widget title" msgstr "小工具标题" #: admin/settings.php:319 msgid "Taxonomies" msgstr "分类法" #: admin/settings.php:320 msgid "Custom fields" msgstr "自定义字段" #: admin/settings.php:321 msgid "Comment status" msgstr "评论状态" #: admin/settings.php:322 msgid "Ping status" msgstr "Ping 状态" #: admin/settings.php:323 msgid "Sticky posts" msgstr "置顶文章" #: admin/settings.php:324 msgid "Published date" msgstr "发布日期" #: admin/settings.php:325 msgid "Post format" msgstr "文章格式" #: admin/settings.php:326 msgid "Page parent" msgstr "父级页面" #: admin/settings.php:327 msgid "Page template" msgstr "页面模板" #: admin/settings.php:328 msgid "Page order" msgstr "页面顺序" #: admin/settings.php:329 msgid "Featured image" msgstr "特色图像" #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "编辑语言" #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "添加新语言" #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "选择语言" #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "你可以在列表中选择一个语言或者直接在下面编辑它。" #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "全名" #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "这个名字是用来在网站上显示的(例如: English)" #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "区域" #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "WordPress 语言区域(例如:en_US)。你需要为该语言安装 .mo 文件。" #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "语言代码" #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "文字方向" #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "从左到右" #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "从右到左" #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "选择语言的文字方向" #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "顺序" #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "该语言在语言切换中的排列顺序" #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "语言切换" #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "搜索翻译" #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "清除未使用的字符串翻译" #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "默认语言" #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "有文章、页面、分类和标签没有设置语言,你要设置它们为默认语言吗?" #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "检测浏览器语言" #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "当主页被访问时,根据浏览器偏好设置语言" #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "URL修改" #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "为默认语言隐藏 URL 语言信息" #: admin/view-tab-settings.php:162 msgid "Media" msgstr "多媒体" #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "为多媒体启用语言和翻译" #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "同步" #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "自定义文章类型" #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "为自定义文章类型启用语言和翻译" #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "自定义分类法" #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "为自定义分类法启用语言和翻译" #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "编辑" #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "删除" #: admin/table-languages.php:76 msgid "Code" msgstr "代码" #: admin/table-languages.php:78 msgid "Flag" msgstr "国旗" #: admin/table-languages.php:79 msgid "Posts" msgstr "文章" #: admin/table-string.php:110 msgid "Name" msgstr "名称" #: admin/table-string.php:111 msgid "String" msgstr "字符串" #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "添加新的" #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "语言切换" #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "显示一个语言切换" #: include/widget-languages.php:75 msgid "Title:" msgstr "标题:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "增加多语言功能到 WordPress" #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "你现在使用的是 WordPress %s,Polylang 要求至少为 WordPress %s。" #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "Polylang 已经停用,因为你是从太旧的版本升级的。" #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "在升级到 %s 前,请先升级到 %s。" #: admin/table-string.php:109 msgid "Group" msgstr "分组" #: admin/table-string.php:187 msgid "View all groups" msgstr "查看所有分组" #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "您将要永久删除此语言。您确定吗?" #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "使用它从数据库中删除未使用的字符串,例如一个插件被卸载以后。" #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "同步选项允许在一篇文章或页面的翻译之间保持相同的元数据内容的值(或分类法和页" "面的父级)。[ The synchronization options allow to maintain exact same " "values (or translations in the case of taxonomies and page parent) of meta " "content between the translations of a post or page. ]" #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "语言代码包含无效字符" #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "语言根据内容来设置" #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "文章、页面、分类和标签的URL不会被修改。" #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "语言根据链接的目录名来设置" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "例如:" #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "语言根据链接的二级域名来设置" #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "语言根据不同的域名来设置" #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "在链接中移除 /language/" #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "在链接中保留 /language/" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "首页的URL中包含语言代码,而不是页面名称或页面ID" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "例如:%s 代替 %s" #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "无法添加语言" # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "语言已添加" # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "语言已删除" # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "语言已更新" # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "翻译已更新" #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "语言代码 - 最好是2个字母的ISO 639-1(例如 en)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "所选的静态首页必须翻译为所有语言。" #: admin/admin-strings.php:60 msgid "Widget text" msgstr "小工具文本" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "推荐插件" #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "语言是从URL中的代码来设置的" #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "隐藏没有翻译的语言" languages/polylang-zh_TW.po000066600000041311152100561460011734 0ustar00msgid "" msgstr "" "Project-Id-Version: Polylang v1.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2015-02-14 09:28+0100\n" "Last-Translator: 張香腸 \n" "Language-Team: 香腸炒魷魚 \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: ../\n" "X-Textdomain-Support: yes\n" "X-Generator: Poedit 1.5.4\n" "X-Poedit-SearchPath-0: .\n" # @ polylang #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang 提供一個完整的 %s說明文件%s (僅提供英文)。這包含了如何設定多語言網站" "並日常使用,常見問題說明,以及幫助程式設計師可快速套用到他們的外掛或是佈景主" "題。" # @ polylang #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "你也可以在%s支援論壇%s獲取更多有用的資訊。但別忘記,發新問題詢問前,要先搜尋" "與爬文。" # @ polylang #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "Polylang 是免費的,與 WordPress 一樣是基於 %sGPL%s 釋出。" # @ polylang #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "如果你想知道如何協助這個專案,請%s閱讀這篇%s。" # @ polylang #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "最後,如果你喜歡這個外掛或是它有助於你的業務,不妨贊助作者。

" "Polylang 正體中文語系由 香腸" "炒魷魚阿腸網頁設計工作" "室 翻譯提供。" # @ polylang #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "語言" # @ polylang #: include/switcher.php:22 msgid "Displays language names" msgstr "顯示語言名稱" # @ polylang #: include/switcher.php:23 msgid "Displays flags" msgstr "顯示旗幟" # @ polylang #: include/switcher.php:24 msgid "Forces link to front page" msgstr "強制鏈結到首頁" # @ polylang #: include/switcher.php:25 msgid "Hides the current language" msgstr "隱藏當前語言" # @ polylang #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "顯示為下拉式選單" # @ polylang #: admin/admin.php:267 msgid "Filters content by language" msgstr "透過語言過濾內容" # @ polylang #: admin/admin.php:258 msgid "Show all languages" msgstr "顯示所有語言" # @ polylang #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "新增翻譯" # @ polylang #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "語言" # @ polylang #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "翻譯" # @ polylang #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "設定語言" # @ polylang #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "此小工具顯示:" # @ polylang #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "所有語言" # @ polylang #: admin/admin-filters.php:123 msgid "Admin language" msgstr "管理語言" # @ polylang #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "WordPress 預設" # @ polylang #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "設定" # @ polylang #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "升級語言檔案 …" # @ polylang #: admin/settings.php:62 msgid "About Polylang" msgstr "關於 Polylang" # @ polylang #: admin/settings.php:78 msgid "Strings translations" msgstr "字串翻譯" # @ polylang #: admin/settings.php:101 msgid "Strings translation" msgstr "字串翻譯" # @ polylang #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "輸入一個有效的 WordPress 語言環境" # @ polylang #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "語言代碼必須是獨一無二" # @ polylang #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "這個語言必須有一個名字" # @ polylang #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "語言已經被建立,但是WordPress語言包並沒有下載到,請手動安裝它。" # @ polylang #: admin/admin-strings.php:59 msgid "Widget title" msgstr "小工具標題" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "自訂分類" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "自訂欄位" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "迴響狀態" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "通知狀態" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "置頂文章" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "發佈日期" # @ polylang #: admin/settings.php:325 msgid "Post format" msgstr "文章格式" # @ polylang #: admin/settings.php:326 msgid "Page parent" msgstr "分頁上層" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "分頁模板" # @ polylang #: admin/settings.php:328 msgid "Page order" msgstr "分頁順序" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "特色圖片" # @ polylang #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "編輯語言" # @ polylang #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "新增語言" # @ polylang #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "選擇一個語言" # @ polylang #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "你可以在列表內選擇一個語言或直接在這邊編輯它。" # @ polylang #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "全名" # @ polylang #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "這個名字是顯示於網站上(範例: English)" # @ polylang #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "語言環境" # @ polylang #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "WordPress 語言環境設定(範例:en_US)。你必須安裝對應此語言的 .mo 檔案。" # @ polylang #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "語言代碼" # @ polylang #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "文字方向" # @ polylang #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "左到右" # @ polylang #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "右到左" # @ polylang #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "選擇此語言的文字方向" # @ polylang #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "順序" # @ polylang #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "此語言在語言切換選項中的位置" # @ polylang #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "語言切換" # @ polylang #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "搜尋翻譯" # @ polylang #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "清除資料庫中翻譯的字串" # @ polylang #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "預設語言" # @ polylang #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "有文章、頁面、分類或標籤尚未設置語言。你要將要全部設定為預設語言嗎?" # @ polylang #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "偵測瀏覽器語言" # @ polylang #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "當首頁被訪問時,根據瀏覽器的偏好設置語言" # @ polylang #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "URL 網址改寫" # @ polylang #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "隱藏預設語言的 URL 訊息" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "媒體庫" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "為媒體庫啟用語言與翻譯功能" # @ polylang #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "同步" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "自訂文章格式" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "為自訂文章格式啟用語言與翻譯。" # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "自定義分類" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "為自定義分類啟用語言與翻譯功能。" # @ polylang #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "編輯" # @ polylang #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "刪除" # @ polylang #: admin/table-languages.php:76 msgid "Code" msgstr "代碼" # @ polylang #: admin/table-languages.php:78 msgid "Flag" msgstr "旗幟" # @ polylang #: admin/table-languages.php:79 msgid "Posts" msgstr "文章" # @ polylang #: admin/table-string.php:110 msgid "Name" msgstr "名稱" # @ polylang #: admin/table-string.php:111 msgid "String" msgstr "字串" # @ polylang #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "新增" # @ polylang #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "語言切換" # @ polylang #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "顯示語言切換工具" # @ polylang #: include/widget-languages.php:75 msgid "Title:" msgstr "標題:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "讓WordPress增加多語言功能" # @ polylang #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "你正在使用 WordPress %s。 Polylang 最低系統需求 WordPress %s。" # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "Polylang 已經停用,因為你從太舊的版本升級。" # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "在升級到 %s 之前請先升級到 %s。" # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "群組" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "檢視全部群組" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "你將永遠刪除此語言。確定刪除?" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "使用它從資料庫中刪除未使用的字串。例如在外掛被移除後。" # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "同步的設定允許在一篇文章或是頁面(或自定義分類、上層頁面)的翻譯保存相同內容的" "值。
[ The synchronization options allow to maintain exact same values " "(or translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page.]" # @ polylang #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "語言代碼中帶有無效的字元" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "只針對內容作多語言設定。(網址不變更)" # @ polylang #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "文章、頁面、分類與標籤的網址並不會被改寫。" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "語言設置是在漂亮的固定網址中加入目錄名稱" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "範例:" # @ polylang #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "語言設置是透過子網域來設定漂亮的固定網址。" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "透過不同的網域名稱來設置不同的語言。" # @ polylang #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "在漂亮的固定網址中移除「/language/」" # @ polylang #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "在漂亮的固定網址中保留「/language/」" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "首頁URL包含語言代碼而不是頁面名稱或是頁面ID" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "範例: %s 而不是 %s" # @ polylang #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "無法加入此語言。" # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "語言已新增。" # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "語言已刪除。" # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "語言已更新。" # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "翻譯已更新。" # @ polylang #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "語言代碼 - 2 字元語言代碼,依據 ISO 639-1 標準 (例如: en)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "" # @ polylang #: admin/admin-strings.php:60 msgid "Widget text" msgstr "" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "" languages/polylang-vec.po000066600000040367152100561460011470 0ustar00msgid "" msgstr "" "Project-Id-Version: Polylang v1.1dev10\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2015-02-14 09:27+0100\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: ../\n" "X-Textdomain-Support: yes\n" "X-Generator: Poedit 1.5.4\n" "Language: vec\n" "X-Poedit-SearchPath-0: .\n" # @ polylang #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang el vien dà fora co na %sdocumentaçion%s conpleta (sol che in " "Ingléxe). El contien anca informaçion su come métar sù un sito multiléngue e " "su come dopararlo tuti i di, na pàxena de FAQ (domande frecuenti) e na " "documentaçion par programaturi parché i posa adatar i so plugin e i so tèmi." # @ polylang #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "Te cati anca informaçion ùtiłi nel %sfòrum de suporto%s. Parò no stà " "desmentegarte de far na riçérca prima de postar n'argoménto nóvo." # @ polylang #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polylang el xe a gràtis e 'l vien dà fora sóto ła stésa łicença de " "WordPress, ła %sGPL%s." # @ polylang #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "" "Se te si drio domandarte come che te pol jutarne, basta che te %slezi cuà%s." # @ polylang #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "In ùltima, se te piaxe sto plugin chì o se sto cuà el te juta a guadagnar, " "te pol far vołentiera na donaçion a l'autor." # @ polylang #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "Łéngue" # @ polylang #: include/switcher.php:22 msgid "Displays language names" msgstr "El fa védar i nomi de łe łéngue" # @ polylang #: include/switcher.php:23 msgid "Displays flags" msgstr "El fa védar łe bandiere" # @ polylang #: include/switcher.php:24 msgid "Forces link to front page" msgstr "El força łe łigadure in prima pàxena" # @ polylang #: include/switcher.php:25 msgid "Hides the current language" msgstr "El scónde ła łéngua ativa" # @ polylang #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "El vixuałixa come menù a cascada" # @ polylang #: admin/admin.php:267 msgid "Filters content by language" msgstr "El filtra el contegnùo par łéngua" # @ polylang #: admin/admin.php:258 msgid "Show all languages" msgstr "Fa védar tute łe łéngue" # @ polylang #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "Zónta na traduçion nóva" # @ polylang #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "Łéngua" # @ polylang #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Traduçion" # @ polylang #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "L'inposta ła łéngua" # @ polylang #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Ła widget ła vien vixuałixà par:" # @ polylang #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "Tute łe łéngue" # @ polylang #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Łéngua de l'aministrador" # @ polylang #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "Stàndard de WordPress" # @ polylang #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "Inpostaçion" # @ polylang #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Agiornaménto del file de łéngua" # @ polylang #: admin/settings.php:62 msgid "About Polylang" msgstr "Informaçion su Polylang" # @ polylang #: admin/settings.php:78 msgid "Strings translations" msgstr "Traduçion de stringhe" # @ polylang #: admin/settings.php:101 msgid "Strings translation" msgstr "Traduçion de stringhe" # @ polylang #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "Miti rento na inpostaçion locałe de WordPress vàłida" # @ polylang #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "Bexon che'l còdexe łéngua el sia ùnico" # @ polylang #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "Ła łéngua ła ga da aver un nome" # @ polylang #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "Ła łéngua ła xe stà creà, ma el file de łéngua de WordPress no l'è mìa stà " "tirà zo. Par favor, metìło sù a man." # @ polylang #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Tìtoło de ła widget" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "Tasonomie" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "Canpi personałixai" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "Stato del coménto" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "Stato de ping" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "Artìcoło evidençià" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "Data de publicaçion" # @ polylang #: admin/settings.php:325 msgid "Post format" msgstr "Formato artìcoło" # @ polylang #: admin/settings.php:326 msgid "Page parent" msgstr "Mare de ła pàxena" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "Modeło de pàxena" # @ polylang #: admin/settings.php:328 msgid "Page order" msgstr "Órdene de pàxena" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "Imàxene in evidença" # @ polylang #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Cànbia łéngua" # @ polylang #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "Zónta na łéngua nóva" # @ polylang #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Seji na łéngua" # @ polylang #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "Te pol sèjer na łéngua da ła lista o modificarla diretamente chì sóto." # @ polylang #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Nome intiero" # @ polylang #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "" "El nome l'è come che 'l vien mostrà 'ntel to sito (par exenpio: Ingléxe)" # @ polylang #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "Inpostaçion locałi" # @ polylang #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "Inpostaçion locałi par ła łéngua (par exenpio: en_US). Par sta łéngua cuà " "bexon métar sú el file .mo." # @ polylang #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Còdexe łéngua" # @ polylang #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Direçion testo" # @ polylang #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "sinistra-destra" # @ polylang #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "destra-sinistra" # @ polylang #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Seji n'altra direçion de testo par ła łéngua" # @ polylang #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "Órdene" # @ polylang #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Poxiçion de ła łéngua 'ntel sełetor de łéngua" # @ polylang #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "Sełetor łéngua" # @ polylang #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Çerca traduçion" # @ polylang #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Néta fora el database de traduçion stringhe" # @ polylang #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Łéngua de baxe" # @ polylang #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "Ghe xe artìcołi, pàxene, categorie o tag sensa łèngua inpostà. Vuto " "inpostarle tute a ła łéngua baxe?" # @ polylang #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "Cata fora ła łéngua del navigador" # @ polylang #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "" "Cuando che vien vixità ła prima pàxena, inposta ła łéngua conforme łe " "preferençe del navigador." # @ polylang #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "Canbiaminti de URL" # @ polylang #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "Scundi l'informaçion lenguìstica de l'URL par ła łéngua baxe" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "Mèdia" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "Ativa łéngue e traduçion par i mèdia" # @ polylang #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "Sincronixaçion" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "Tipi artìcoło personałixai" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "Ativa łéngue e traduçion par tipi artìcoło personałixai" # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "Tasonomie personałixae" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "Ativa łéngue e traduçion par tasonomie personałixae" # @ polylang #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "Modìfica" # @ polylang #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "Scançeła" # @ polylang #: admin/table-languages.php:76 msgid "Code" msgstr "Còdexe" # @ polylang #: admin/table-languages.php:78 msgid "Flag" msgstr "Bandiera" # @ polylang #: admin/table-languages.php:79 msgid "Posts" msgstr "Artìcoło" # @ polylang #: admin/table-string.php:110 msgid "Name" msgstr "Nome" # @ polylang #: admin/table-string.php:111 msgid "String" msgstr "Stringa" # @ polylang #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Zónta nóvo" # @ polylang #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Sełetor de łéngua" # @ polylang #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "El fa védar un sełetor de łéngua" # @ polylang #: include/widget-languages.php:75 msgid "Title:" msgstr "Tìtoło:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "El zónta łe funçion multiłéngua a WordPress" # @ polylang #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "" "Te si drio doparar WordPress %s. Polylang el ga bixogno almanco de WordPress " "%s." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "" "Polylang el xe stà dexativà parché te ghè fato n'agiornaménto da na version " "masa vècia." # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "Par favor, agiórna prima a %s, vanti de agiornar a %s." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "Grupo" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "Vidi tuti i grupi" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" # @ polylang #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "" # @ polylang #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "" # @ polylang #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "" # @ polylang #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "" # @ polylang #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "" # @ polylang #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "" # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "" # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "" # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "" # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "" # @ polylang #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "" # @ polylang #: admin/admin-strings.php:60 msgid "Widget text" msgstr "" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "" languages/polylang-my_MM.mo000066600000046256152100561460011731 0ustar00q,  : : - < D U )i   * "   $ 2 D V g n         4 C n_    2 0 ?K  $    A K]o     1J\Q1 8)&8_s  AQJ-  * @7@xiDA>r[  a*T  p {@D@T  V!Ik: |99O--h3S (6& I] < " !V!Tk!6!.!I&"p"7""b#Nx#1#z#dt$ %t%*X&&&w5''bR(p(&)<?)=|)$))=*< +sG+$+?+ , 3,@,1V,$,1,1,--._/Rf333364d56l575-59 6'C6k636?6T60P7$77v8\9z :: ;;I<F<BE=>?3AAzC$CsC(2Dq[D)DHE@F$TG0yGG+HH[IIJLLnQ !PV<\"XmBdb'hIH`Mf-l0F $_ TS(C[=8R 32)i>U7*KDO.:,A o @&195/aN^G]cqg4L6k#j;YepW+?EZ%JAbout PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe chosen static front page must be translated in all languages.The front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget textWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: Polylang v1.3 Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: 2015-02-14 09:22+0100 Last-Translator: Sithu Thwin Language-Team: Language: my_MM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: ../ X-Textdomain-Support: yes X-Generator: Poedit 1.5.4 X-Poedit-SearchPath-0: . Polylang အကြောင်းစိတ်ကြိုက်စာမူအများအစားများအတွက် ဘာသာစကားနှင့် ဘာသာပြန်များဖွင့်ထားရန်စိတ်ကြိုက်ဝေါဟာရများအတွက် ဘာသာစကားနှင့် ဘာသာပြန်များဖွင့်ရန်မီဒီယာအတွက် ဘာသာစကားနှင့် ဘာသာပြန်များ ဖွင့်ထားရန်အသစ်ဘာသာစကားအသစ်ထည့်ရန်ဘာသာစကားအသစ်ထည့်ရန်ဘာသာစကားပေါင်းစုံစနစ်အား WordPress အတွင်းထည့်သွင်းရန်ထိန်းချုပ်ခလုပ်ခုံ ဘာသာစကားဘာသာစကားအားလုံးဘာသာစကားရွေးရန်ဘာသာစကားအတွက် စာသားဦးတည်ရာကို ရွေးပါဘာသာပြန် ဒေတာဗေ့စ်အား ရှင်းပါကုဒ်မှတ်ချက် အခြေအစိတ်ကြိုက်ဖြည့်ရန်စိတ်ကြိုက် စာမူအမျိုးအစားစိတ်ကြိုက်ဝေါဟာရများမူလ ဘာသာစကားဖျက်ဘရောက်ဇာ ဘာသာစကားအား စစ်ဆေးရန်ဘာသာစားပြောင်းခလုပ်ဖော်ပြရန်ဆွဲချဇယားအဖြစ်ပြပါအလံများ ဖော်ပြပါဘာသာစကားအမည်များ ဖော်ပြပါပြုပြင်ဘာသာစကား ပြုပြင်ရန်သင့်လျှော်မှန်ကန်သော WordPress ဘာသာစကား သင်္ကေတကို ဖြည့်သွင်းပါဥပမာ။ ။ဥပမာ။ ။ %s သည် %s ၏ အစားဖြစ်သည်။သရုပ်ဖော် ရုပ်ပုံအကြောင်းအရာများအား ဘာသာစကားဖြင့် စစ်ထုတ်ပါဒီပလပ်အင်ကို နှစ်သက်လျှင် သို့မဟုတ် သင့်လုပ်ငန်းအား အထောက်အကူဖြစ်လျှင် ရေးသူအား လှူဒါန်းမှုအား ကျေးဇူးအထူး တင်ရှိမည်ဖြစ်သည်။အလံလိပ်စာများအား ရှေ့စာမျက်နှာသို့ ညွှန်းပါအမည်အပြည့်အစုံအုပ်စုမူလဘာသာစကားအတွက် URL မှ ဘာသာစကား အချက်အလက်အား ဖျောက်ထားရန်ယခုအသုံးပြုထားသော ဘာသာစကားအား ဖျောက်ထားပါပရောဂျက်အား မည်သို့ကူညီနိုင်မည်ကို သိလိုပါက %sဒါကိုဖတ်ပါ။%s ဘာသာစကား အသစ်ထည့်ရန် မဖြစ်နိုင်ပါ။ချိတ်ဆက်လိပ်စာတွင် /language/ အား ဖော်ပြထားရန်ဘာသာစကားဘာသာစကားပြောင်းခလုပ်ဘာသာစကား ထည့်ပြီးပြီ။ဘာသာစကားကုတ်ဘာသာစကား ကုဒ်သင်္ကေတ - အက္ခရာ ၂ လုံးပါဝင်သော ISO 639-1 ဘာသာစကားကုတ် ဖြစ်သင့်ပါသည် ( ဥပမာ။ ။ my )ဘာသာစကား ဖျက်ပြီးပြီ။ဘာသာစကားပြောင်းခလုပ်ဘာသာစကား အသစ်ဖြည့်စွက်ပြုပြင်ပြီးပါပြီ။ဘာသာစကားများေဒသန္တရဘာသာစကားအုပ်စုမီဒီယာအမည်အစီအစဉ်စာမျက်နှာ အစီအစဉ်စာမျက်နှာပင်စာမျက်နှာ စံပုံစံချိတ်ဆက်မှု အခြေအ%sသို့ အဆင့်မြှင့်တင်ပြီးမှ %s သို့ အဆင့်မြှင့်ပါ။အလွန်ဟောင်းလွန်းသော ဗားရှင်းမှ အဆင့်မြှင့်တင်ခြင်းပြုလုပ်ခဲ့သဖြင့် Polylang အား ပိတ်ထားလိုက်သည်။Polylang အား WordPress ၏ လိုင်စင်အတိုင်း %sGPL%s လိုင်စင်ဖြင့်သာ အခမဲ့ ဖြန့်ချိပါသည်။ပိုမိုပြည့်စုံသော %sလမ်းညွှန်ချက်စာတမ်း%s (အင်္ဂလိပ် ဘာသာြဖင့်သာလျှင်) အား Polylang မှ ပံ့ပိုးပေးထားသည်။ ဤလမ်းညွှန်ချက်စာတမ်းတွင် ဘာသာစကားစုံ ဆိုဒ်တစ်ခုအား ပြင်ဆင်လွှင့်တင်ရန် နည်းလမ်းများနှင့် နေ့စဉ်သုံး လိုအပ်သော အချက်အလက်များပါဝင်ပါသည်။ FAQ အပြင် ပရိုဂရမ် ရေးသားသူများအတွက် ၎င်းတို့၏ ပလပ်အင်များ အခင်းအကျင်းများအား လိုအပ်သလို ပြုပြင်နိုင်သည့် နည်းလမ်းများလည်း ပါဝင်သည်။ဘာသာစကားပြောင်းခလုပ်ရှိ နေရာစာမူပုံစံစာမူများစာမူများ၊ စာမျက်နှာများ၊ ကဏ္ဍများနှင့် စကားစုတွဲများအတွက် URL များအား မပြုပြင်ပါ။ထုတ်ဝေခဲ့သောနေ့စွဲချိတ်ဆက်လိပ်စာမှ /language/ အား ဖယ်ရှားရန်ဘာသာပြန်များရှာရန်ဘာသာစကား သတ်မှတ်ရန်သတ်မှတ်ချက်များဘာသာစကားအားလုံးပြပါဦးစားပေးစာမူစာကြောင်းစာကြောင်းဘာသာပြန်စာကြောင်းဘာသာပြန်များတိုက်ရိုက်ကူးယူချိတ်ဆက်ခြင်းဝေါဟာရအုပ်စုများစာသားဦးတည်ရာရွေးချယ်ထားသော ပင်မစာမျက်နှာအား ဘာသာစကားအားလံုးသို့ ဘာသာပြန်ဆိုထားရမည်။ပင်မစာမျက်နှာ URL တွင် စာမျက်နှာအမည် သို့မဟုတ် စာမျက်နှာ id အစား ဘာသာစကားကုဒ်ပါဝင်သည်ဘာသာစကားကုဒ်တွင် သင့်လျှော်မှုမရှိသော အက္ခရာများပါဝင်နေသည်။ဘာသာစကားကုတ်မှာ တစ်မျိုးစီ သီးသန့်ဖြစ်ရမည်အကြောင်းအရာအပေါ်မူတည်၍ ဘာသာစကားအား သတ်မှတ်ရန်မတူညီသော ဒိုမိန်းများမှ ဘာသာစကားအား သတ်မှတ်သည်ချိတ်ဆက်လိပ်စာတွင် တည်နေရာညွှန်းအမည်ဖြင့် ဘာသာစကားအား သတ်မှတ်ရန်ချိတ်ဆက်လိပ်စာတွင် ဒိုမိန်းခွဲအမည်ဖြင့် ဘာသာစကားအား သတ်မှတ်ရန်ဘာသာစကားတွင် အမည်ရှိရမည်ဘာသာစကားအား ဖန်တီးပြီးပါပြီ။ သို့သော် ဘာသာစကားဖိုင်များ ဆွဲချရယူမှု မပြီးမြောက်သေးပါ။ ကိုယ်တိုင် ထည့်သွင်းပေးပါ။သင့်ဆိုဒ်တွင် ဖော်ပြမည့်အမည်။ (ဥပမာ။ ။ အင်္ဂလိပ်)။တိုက်ရိုက်ကူးယူချိတ်ဆက်ခြင်းကိုသုံးခြင်းဖြင့် ဘာသာပြန်ထားသော စာမူသို့မဟုတ် စာမျက်နှာတစ်ခု၏ မီတာအကြောင်းအရာများ၏ တန်ဖိုးများ (သို့မဟုတ် စာမျက်နှာပင်မ နှင့် ဝေါဟာရအုပ်စုများတွင် ဘာသာပြန်များ)အား တူညီမှု ရှိစေရန် ထိန်းသိမ်းဆောင်ရွက်ပေးသည်။ဝစ်ဂျစ်ဖော်ပြမှု - ဘာသာစကားသတ်မှတ်မှု မရှိသေးသော စာမူများ၊ စာမျက်နှာများ၊ ကဏ္ဍများ သို့မဟုတ် စကားစုတွဲများ ရှိနေပါသည်။ မူလဘာသာစကားဖြင့် သတ်မှတ်ပေးလိုပါသလား။ခေါင်းစဉ် :ဘာသာပြန်များဘာသာပြန် အသစ်ဖြည့်စွက်ပြုပြင်ပြီးပါပြီ။URL ပြုပြင်ခြင်းဘာသာစကားဖိုင်များ အသစ်ဖြည့်စွက်နေသည်…အသုံးမပြုသောစာကြောင်းများအား ဒေတာဗေ့စ်မှ ဖျက်ရန် ဒါကိုသုံးပါ။ ဥပမာ ပလပ်အင်တစ်ခုအား ဖျက်ထုတ်လိုက်သောအခါ။အုပ်စုအားလုံးကိုကြည့်ရန်ပင်မစာမျက်နှာသို့ လာရောက်လည်ပတ်သောအခါ ဘရောက်ဇာသတ်မှတ်ချက်ကို မူတည်၍ ဘာသာစကားအား သတ်မှတ်ဖော်ပြပါဝစ်ဂျက်စာသားဝစ်ဂျက်ခေါင်းစဉ်WordPress ဘာသာစကားသင်္ကေတ ( ဥပမာ။ ။ my_MM ) ။ ဤဘာသာစကားအတွက် .mo ဖိုင်အား ထည့်သွင်းပေးရန်လိုအပ်ပါသည်။WordPress မူလဘာသာစကားဒီဘာသာစကားကို အပြီးဖျက်တော့မည်။ တကယ်သေချာရဲ့လား။သင် WordPress %s အား အသုံးပြုနေသည်။ WordPress %s အား Polylang မှ လိုအပ်ပါသည်။စာရင်းအတွင်းရှိ ဘာသာစကားတစ်ခုအားရွေးပါ သို့မဟုတ် အောက်တွင် တိုက်ရိုက် ပြုပြင်ပါ။%sအကူအညီ ဖိုရမ်%s တွင်လည်း အသုံးဝင်သော အချက်အလက်များ ရှာဖွေနိုင်သည်။ သို့သော် ခေါင်းစဉ်အသစ်တစ်ခု ဖွင့်လှစ် မမေမြန်းခင် အရင် ရှာဖွေကြည့်ရန် မမေ့ပါနှင့်။ဘယ်မှ ညာညာမှ ဘယ်languages/polylang-sr_RS.po000066600000043010152100561460011727 0ustar00msgid "" msgstr "" "Project-Id-Version: Polylang v1.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2015-02-14 09:26+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: sr_RS\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: ../\n" "X-Textdomain-Support: yes\n" "X-Generator: Poedit 1.5.4\n" "X-Poedit-SearchPath-0: .\n" # @ polylang #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang sadrži obimnu %sdokumentaciju%s (in English only). Ona sadrži " "informacije kako da instališete vašu višejezičku stranicu i koristite je " "svakodnevno, Pitanja i Odgovore (FAQ), kao i dokumentaciju za programere da " "modifikuju njihove plugin-ove i teme." # @ polylang #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "Takođe, moći ćete da nađete korisne informacije na %ssupport forum%s. " "Nemojte da zaboravite da prvo pretražite forum pre nego što postavite " "pitanje." # @ polylang #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polilang je besplatan i objavljen pod istom licencom kao WordPress, %sGPL%s." # @ polylang #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "" "Ako se pitate kako možete pomoći ovaj projekat, samo %spročitajte ovo%s." # @ polylang #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "Na kraju, ako želite ovaj plugin, ili ako vam pomaže u poslu, donacije " "autoru će biti veoma cenjene." # @ polylang #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "Jezici" # @ polylang #: include/switcher.php:22 msgid "Displays language names" msgstr "Prikazuje imena jezika" # @ polylang #: include/switcher.php:23 msgid "Displays flags" msgstr "Prikazuje zastave" # @ polylang #: include/switcher.php:24 msgid "Forces link to front page" msgstr "Forsira link ka naslovnoj stranici (home page)" # @ polylang #: include/switcher.php:25 msgid "Hides the current language" msgstr "Skriva trenutni jezik" # @ polylang #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "Prikazuje se u opadajućem meniju" # @ polylang #: admin/admin.php:267 msgid "Filters content by language" msgstr "Filteriše sadržaj prema jeziku" # @ polylang #: admin/admin.php:258 msgid "Show all languages" msgstr "Prikaži sve jezike" # @ polylang #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "Dodaj novi prevod" # @ polylang #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "Jezik" # @ polylang #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Prevodi" # @ polylang #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "Postavlja jezik" # @ polylang #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Vidžet je prikazan za:" # @ polylang #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "Svi jezici" # @ polylang #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Jezik Administratora" # @ polylang #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "Podrazumevani (originalni) WordPress (WordPress default)" # @ polylang #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "Podešavanja" # @ polylang #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Nadogradnja jezičke datoteke…" # @ polylang #: admin/settings.php:62 msgid "About Polylang" msgstr "O Polylangu" # @ polylang #: admin/settings.php:78 msgid "Strings translations" msgstr "Prevod veza (Strings translation)" # @ polylang #: admin/settings.php:101 msgid "Strings translation" msgstr "Prevod veze (Strings translation)" # @ polylang #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "Unesite važeći WordPress lokal (Enter a valid WordPress locale)" # @ polylang #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "Kod jezika mora biti jedinstven" # @ polylang #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "Jezik (novi) mora imati ime" # @ polylang #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "Jezik je kreiran, ali WordPress jezička datoteka nije preuzeta. Molimo " "instalirajte je ručno" # @ polylang #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Naslov Vidžeta (Widget title)" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "Taksonomije" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "Prilagođena polja" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "Status komentara" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "Ping status" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "Lepljivi članak-ci (Sticky posts)" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "Datum objave" # @ polylang #: admin/settings.php:325 msgid "Post format" msgstr "Format članka" # @ polylang #: admin/settings.php:326 msgid "Page parent" msgstr "Roditelj stranice " # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr " Izgled (šablon) stranica" # @ polylang #: admin/settings.php:328 msgid "Page order" msgstr "Redosled stranica" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "Odabrana slika (Featured image)" # @ polylang #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Izmeni jezik" # @ polylang #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "Dodaj novi jezik" # @ polylang #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Izaberite jezik" # @ polylang #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "Možete odabrati neki od jezika u listi ili ga direktno izmenite ispod." # @ polylang #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Puno ime" # @ polylang #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "Ime je kako se prikazuju na vašem sajtu (na primer : engleski) " # @ polylang #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "Lokalno" # @ polylang #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "WordPress (lokalni) prostor za jezik (na primer: en_US ). Moraćete da " "instalirate Mo datoteku za taj jezik" # @ polylang #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Jezički kod" # @ polylang #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Pravac teksta" # @ polylang #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "Sa leva na desno" # @ polylang #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "Sa desna nalevo" # @ polylang #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Odaberite smer teksta za jezik" # @ polylang #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "Redosled" # @ polylang #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Položaj jezika u izmenjivaču redosleda jezika" # @ polylang #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "Promena jezika" # @ polylang #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Pretraži prevode" # @ polylang #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Očisti svojstva prevoda databaze (Clean strings translation database)" # @ polylang #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Podrazumevani jezik " # @ polylang #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "Postoje članci, stranice, kategorije ili tagovi-oznake bez podešenog jezika. " "Da li želite da ih postavite na podrazumevani jezik ?" # @ polylang #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "Detektuj jezik pretrživača (na pr: Google Chrome. Firefox...)" # @ polylang #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "" "Kada je naslovna strana posetćena , podesite jezik na osnovu preferenca " "pretraživača - brovzera (na pr: Google Chrome. Firefox...)" # @ polylang #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "URL izmene - modifikacije" # @ polylang #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "Sakrij Informacije URL jezika za podrazumevani jezik" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "Mediji" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "Aktivirajte jezike i prevode za medije" # @ polylang #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "Sinhronizacija" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "Izmenjeni članci" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "" "Aktivirajte jezike i prevode za izmenjene tipove članka. (Activate languages " "and translations for custom post types.)" # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "Prilagođene nomenklature (Custom taxonomies)" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "" "Aktivirajte jezike i prevode za prilagođene nomenklature. (Activate " "languages and translations for custom taxonomies.)" # @ polylang #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "Izmeni" # @ polylang #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "Obriši" # @ polylang #: admin/table-languages.php:76 msgid "Code" msgstr "Kod" # @ polylang #: admin/table-languages.php:78 msgid "Flag" msgstr "Zastava" # @ polylang #: admin/table-languages.php:79 msgid "Posts" msgstr "Članak" # @ polylang #: admin/table-string.php:110 msgid "Name" msgstr "Ime" # @ polylang #: admin/table-string.php:111 msgid "String" msgstr "Veza" # @ polylang #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Dodaj nov" # @ polylang #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Izmena/Promena jezika" # @ polylang #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "Prikazuje izmenu jezika (Displays a language switcher)" # @ polylang #: include/widget-languages.php:75 msgid "Title:" msgstr "Naslov:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "Dodaje višejezičku sposobnost za WordPress" # @ polylang #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "Vi koristite WordPress %s. Polylang zahteva najmanje WordPress %s." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "Polilang je deaktiviran jer ste nadogradili sa veoma stare verzije ." # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "Molimo nadogradite prvo na %s pre nego nadogradite %s." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "Grupa" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "Pogledaj sve grupe" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "Vi hoćete da trajno izbrišete ovaj jezik. Da li ste sigurni?" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "Koristite ovo za uklanjanje neiskorišćenih žica iz baze podataka, na primer " "kada je plugin deinstaliran. (Use this to remove unused strings from " "database, for example after a plugin has been uninstalled.)" # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "Opcije sinhronizacije omogućavaju da se održe potpuno iste vrednosti (ili " "prevode u slučaju nomenklaturama i stranice roditelja ) od meta sadržaja " "između prevoda članka ili stranice." # @ polylang #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "Jezički kod sadrži nevažeće znakove/slova" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "Jezik je postavljen iz sadržaja (The language is set from content)" # @ polylang #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "" "Članci, stranice, kategorije i tagovi nisu modifikovani (Posts, pages, " "categories and tags urls are not modified.)" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "" "Jezik je podešen u imenu direktorijuma u lepim permalinkovima (The language " "is set from the directory name in pretty permalinks)" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "Primer:" # @ polylang #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "" "Jezik je namešten od sub-imena u lepim permalinkovima (The language is set " "from the subdomain name in pretty permalinks)" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "" "Jezik je namešten za različito web ime (The language is set from different " "domains )" # @ polylang #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "" "Uklonite /ljezik/ u lepim permalinkovima ( Remove /language/ in pretty " "permalinks) " # @ polylang #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "Sačuvajte /jezik/ u lepim permalinkovima (in pretty permalinks)" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "" "Url naslovne stranice sadrži jezičkii kod umesto imena stranice ili id " "stranice" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "Primer: %s umesto %s" # @ polylang #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "" # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "" # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "" # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "" # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "" # @ polylang #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "" # @ polylang #: admin/admin-strings.php:60 msgid "Widget text" msgstr "" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "" languages/polylang-uk.po000066600000047702152100561460011332 0ustar00msgid "" msgstr "" "Project-Id-Version: polylang\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Andrii Ryzhkov \n" "Language-Team: \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: .\n" "X-Textdomain-Support: yes\n" "X-Generator: Poedit 1.7.4\n" "X-Poedit-SearchPath-0: ..\n" # @ polylang #: admin/view-about.php:3 #, php-format msgid "" "Polylang is provided with an extensive %sdocumentation%s (in English only). " "It includes information on how to set up your multilingual site and use it " "on a daily basis, a FAQ, as well as a documentation for programmers to adapt " "their plugins and themes." msgstr "" "Polylang забезпечений обширною %sдокументацією%s (тільки англійською мовою). " "Вона включає в себе інформацію про те, як налаштувати багатомовний сайт і " "використовувати його на щоденній основі, запитання та відповіді, а також " "документацію для програмістів, щоб адаптувати свої плаґіни і теми." # @ polylang #: admin/view-about.php:9 #, php-format msgid "" "You will also find useful information in the %ssupport forum%s. However " "don't forget to make a search before posting a new topic." msgstr "" "Ви також знайдете корисну інформацію в %sфорумі підтримки%s. Однак не " "забувайте зробити пошук, перш ніж додавати нову тему." # @ polylang #: admin/view-about.php:16 #, php-format msgid "" "Polylang is free of charge and is released under the same license as " "WordPress, the %sGPL%s." msgstr "" "Polylang є безкоштовним і поширюється за тією ж ліцензією, як і WordPress, " "%sGPL%s." # @ polylang #: admin/view-about.php:22 #, php-format msgid "If you wonder how you can help the project, just %sread this%s." msgstr "" "Якщо вам цікаво, як Ви можете допомогти проекту, просто %sпрочитайте це%s." # @ polylang #: admin/view-about.php:27 msgid "" "Finally if you like this plugin or if it helps your business, donations to " "the author are greatly appreciated." msgstr "" "Нарешті, якщо Вам подобається цей плаґін або, якщо це допоможе вашому " "бізнесу, пожертвування автору вітаються." # @ polylang #: admin/admin-filters-post.php:115 admin/admin.php:90 admin/settings.php:70 #: admin/settings.php:97 include/model.php:561 msgid "Languages" msgstr "Мови" # @ polylang #: include/switcher.php:22 msgid "Displays language names" msgstr "Відображати назви мов" # @ polylang #: include/switcher.php:23 msgid "Displays flags" msgstr "Відображати прапорці" # @ polylang #: include/switcher.php:24 msgid "Forces link to front page" msgstr "Примусовий перехід на головну сторінку" # @ polylang #: include/switcher.php:25 msgid "Hides the current language" msgstr "Приховувати поточну мову" # @ polylang #: include/switcher.php:30 msgid "Displays as dropdown" msgstr "Відображати як меню, що випадає" # @ polylang #: admin/admin.php:267 msgid "Filters content by language" msgstr "Фільтрує вміст за мовою" # @ polylang #: admin/admin.php:258 msgid "Show all languages" msgstr "Показати всі мови" # @ polylang #: admin/admin-filters-columns.php:140 admin/admin-filters-columns.php:230 msgid "Add new translation" msgstr "Додати новий переклад" # @ polylang #: admin/admin-filters-columns.php:173 admin/admin-filters-media.php:55 #: admin/admin-filters-post.php:141 admin/admin-filters-term.php:75 #: admin/admin-filters-term.php:122 include/model.php:562 msgid "Language" msgstr "Мова" # @ polylang #: admin/table-string.php:112 admin/view-translations-media.php:5 #: admin/view-translations-post.php:5 admin/view-translations-term.php:6 #: admin/view-translations-term.php:11 msgid "Translations" msgstr "Переклади" # @ polylang #: admin/admin-filters-term.php:82 admin/admin-filters-term.php:130 msgid "Sets the language" msgstr "Встановити мову" # @ polylang #: admin/admin-filters.php:52 msgid "The widget is displayed for:" msgstr "Віджет відображається для:" # @ polylang #: admin/admin-filters.php:55 include/model.php:563 msgid "All languages" msgstr "Всі мови" # @ polylang #: admin/admin-filters.php:123 msgid "Admin language" msgstr "Адміністратор мови" #: admin/admin-filters.php:126 msgid "WordPress default" msgstr "WordPress за замовчуванням" # @ default # @ polylang #: admin/admin.php:167 admin/settings.php:102 msgid "Settings" msgstr "Налаштування" # @ polylang #: admin/admin-filters.php:160 admin/admin-filters.php:169 msgid "Upgrading language files…" msgstr "Оновлення мовних файлів…" # @ polylang #: admin/settings.php:62 msgid "About Polylang" msgstr "Про Polylang" # @ polylang #: admin/settings.php:78 msgid "Strings translations" msgstr "Переклади рядків" # @ polylang #: admin/settings.php:101 msgid "Strings translation" msgstr "Переклад рядків" # @ polylang #: admin/admin-model.php:244 msgid "Enter a valid WordPress locale" msgstr "Введіть дійсну локаль WordPress " # @ polylang #: admin/admin-model.php:252 msgid "The language code must be unique" msgstr "Код мови повинен бути унікальним" # @ polylang #: admin/admin-model.php:256 msgid "The language must have a name" msgstr "Мова повинна мати ім'я" # @ polylang #: admin/admin.php:367 admin/settings.php:180 msgid "" "The language was created, but the WordPress language file was not " "downloaded. Please install it manually." msgstr "" "Мова була створена, але файл мовний файл WordPress не був завантажений. Будь " "ласка, встановіть його вручну." # @ polylang #: admin/admin-strings.php:59 msgid "Widget title" msgstr "Назва віджету" # @ polylang #: admin/settings.php:319 msgid "Taxonomies" msgstr "Таксономії" # @ polylang #: admin/settings.php:320 msgid "Custom fields" msgstr "Власні поля" # @ polylang #: admin/settings.php:321 msgid "Comment status" msgstr "Статус коментарю" # @ polylang #: admin/settings.php:322 msgid "Ping status" msgstr "Статус пінгу" # @ polylang #: admin/settings.php:323 msgid "Sticky posts" msgstr "Прикріплені публікації" # @ polylang #: admin/settings.php:324 msgid "Published date" msgstr "Дата публікації" #: admin/settings.php:325 msgid "Post format" msgstr "Формат публікації" # @ default #: admin/settings.php:326 msgid "Page parent" msgstr "Батьківська сторінка" # @ polylang #: admin/settings.php:327 msgid "Page template" msgstr "Шаблон сторінки" # @ polylang #: admin/settings.php:328 msgid "Page order" msgstr "Номер сторінки" # @ polylang #: admin/settings.php:329 msgid "Featured image" msgstr "Головне зображення" # @ polylang #: admin/view-tab-lang.php:21 msgid "Edit language" msgstr "Редагувати мову" # @ polylang #: admin/view-tab-lang.php:21 admin/view-tab-lang.php:96 msgid "Add new language" msgstr "Додати нову мову" # @ polylang #: admin/view-tab-lang.php:37 msgid "Choose a language" msgstr "Вибрати мову" # @ polylang #: admin/view-tab-lang.php:51 msgid "You can choose a language in the list or directly edit it below." msgstr "" "Ви можете вибрати мову зі списку або безпосередньо відредагувати її нижче." # @ polylang #: admin/table-languages.php:74 admin/view-tab-lang.php:55 msgid "Full name" msgstr "Повне ім'я" # @ polylang #: admin/view-tab-lang.php:57 msgid "The name is how it is displayed on your site (for example: English)." msgstr "" "Це ім'я, як воно відображається на вашому сайті (наприклад, Англійська)." # @ polylang #: admin/table-languages.php:75 admin/view-tab-lang.php:61 msgid "Locale" msgstr "Локаль" # @ polylang #: admin/view-tab-lang.php:66 msgid "" "WordPress Locale for the language (for example: en_US). You will need to " "install the .mo file for this language." msgstr "" "Локаль WordPress для мови (наприклад, en_US). Вам потрібно буде встановити " "файл .mo для даної мови." # @ polylang #: admin/view-tab-lang.php:70 msgid "Language code" msgstr "Код мови" # @ polylang #: admin/view-tab-lang.php:76 msgid "Text direction" msgstr "Напрямок тексту" # @ polylang #: admin/view-tab-lang.php:80 msgid "left to right" msgstr "зліва направо" # @ polylang #: admin/view-tab-lang.php:85 msgid "right to left" msgstr "зправа наліво" # @ polylang #: admin/view-tab-lang.php:87 msgid "Choose the text direction for the language" msgstr "Виберіть напрямок тексту для мови" # @ polylang #: admin/table-languages.php:77 admin/view-tab-lang.php:91 msgid "Order" msgstr "Порядок" # @ polylang #: admin/view-tab-lang.php:93 msgid "Position of the language in the language switcher" msgstr "Положення мови в перемикачі мов" # @ polylang #: admin/admin-nav-menu.php:54 admin/admin-nav-menu.php:92 #: admin/admin-nav-menu.php:95 admin/admin-nav-menu.php:126 #: admin/admin-nav-menu.php:188 install/upgrade.php:301 msgid "Language switcher" msgstr "Перемикач мов" # @ polylang #: admin/view-tab-strings.php:8 msgid "Search translations" msgstr "Пошук перекладів" #: admin/view-tab-strings.php:11 msgid "Clean strings translation database" msgstr "Очистити базу даних перекладу строк" # @ polylang #: admin/view-tab-settings.php:14 msgid "Default language" msgstr "Мова за замовчуванням" # @ polylang #: admin/view-tab-settings.php:29 msgid "" "There are posts, pages, categories or tags without language set. Do you want " "to set them all to default language ?" msgstr "" "Є публікації, сторінки, категорій або теґи без вибраної мови. Ви хочете " "встановити їм мову за замовчуванням?" # @ polylang #: admin/view-tab-settings.php:149 msgid "Detect browser language" msgstr "Визначати мову браузера" # @ polylang #: admin/view-tab-settings.php:155 msgid "" "When the front page is visited, set the language according to the browser " "preference" msgstr "" "Встановлювати мову відповідно до уподобань браузера, коли відвідується " "головна сторінка" # @ polylang #: admin/view-tab-settings.php:37 msgid "URL modifications" msgstr "Модифікації URL " # @ polylang #: admin/view-tab-settings.php:93 msgid "Hide URL language information for default language" msgstr "Приховати інформацію мови в URL для мови за замовчуванням" # @ polylang #: admin/view-tab-settings.php:162 msgid "Media" msgstr "Медіафайли" # @ polylang #: admin/view-tab-settings.php:168 msgid "Activate languages and translations for media" msgstr "Активувати мови та переклади для медіафайлів" #: admin/view-tab-settings.php:215 msgid "Synchronization" msgstr "Синхронізація" # @ polylang #: admin/view-tab-settings.php:176 msgid "Custom post types" msgstr "Власні типи публікації" # @ polylang #: admin/view-tab-settings.php:189 msgid "Activate languages and translations for custom post types." msgstr "Активувати мови та переклади для власних типів публікацій." # @ polylang #: admin/view-tab-settings.php:196 msgid "Custom taxonomies" msgstr "Власні таксономії" # @ polylang #: admin/view-tab-settings.php:209 msgid "Activate languages and translations for custom taxonomies." msgstr "Активувати мови та переклади для власних таксономії." # @ polylang #: admin/admin-filters-post.php:433 admin/admin-filters-term.php:642 #: admin/table-languages.php:54 admin/view-translations-media.php:21 msgid "Edit" msgstr "Редагувати" # @ polylang #: admin/table-languages.php:60 admin/table-string.php:168 msgid "Delete" msgstr "Видалити" # @ polylang #: admin/table-languages.php:76 msgid "Code" msgstr "Код" # @ polylang #: admin/table-languages.php:78 msgid "Flag" msgstr "Прапор" # @ polylang #: admin/table-languages.php:79 msgid "Posts" msgstr "Публікації" # @ polylang #: admin/table-string.php:110 msgid "Name" msgstr "Назва" # @ polylang #: admin/table-string.php:111 msgid "String" msgstr "Рядок" # @ polylang #: admin/view-translations-media.php:30 admin/view-translations-post.php:21 #: admin/view-translations-term.php:30 msgid "Add new" msgstr "Додати новий" # @ polylang #: include/widget-languages.php:16 msgid "Language Switcher" msgstr "Перемикач мови" # @ polylang #: include/widget-languages.php:16 msgid "Displays a language switcher" msgstr "Відображає перемикач мови" # @ polylang #: include/widget-languages.php:75 msgid "Title:" msgstr "Назва:" # @ polylang #. translators: plugin header field 'Description' #: polylang.php:0 msgid "Adds multilingual capability to WordPress" msgstr "Додає магатомовні властивості до WordPress" # @ polylang #: install/install.php:24 #, php-format msgid "You are using WordPress %s. Polylang requires at least WordPress %s." msgstr "" "Ви використовуєте WordPress %s. Для Polylang потрібно принаймні WordPress %s." # @ polylang #: install/upgrade.php:76 msgid "" "Polylang has been deactivated because you upgraded from a too old version." msgstr "Polylang був відключений, тому що ви оновили з занадто старої версії." # @ polylang #: install/upgrade.php:78 #, php-format msgid "Please upgrade first to %s before ugrading to %s." msgstr "Будь ласка, оновіть спочатку до %s перед оновленням до %s." # @ polylang #: admin/table-string.php:109 msgid "Group" msgstr "Група" # @ polylang #: admin/table-string.php:187 msgid "View all groups" msgstr "Переглянути всі групи" # @ polylang #: admin/table-languages.php:59 msgid "You are about to permanently delete this language. Are you sure?" msgstr "Ви збираєтесь остаточно видалити цю мову. Ви впевнені?" # @ polylang #: admin/view-tab-strings.php:12 msgid "" "Use this to remove unused strings from database, for example after a plugin " "has been uninstalled." msgstr "" "Використовуйте це, щоб видалити з бази даних рядки, які не використовуються. " "Наприклад, після видалення плаґіну." # @ polylang #: admin/view-tab-settings.php:226 msgid "" "The synchronization options allow to maintain exact same values (or " "translations in the case of taxonomies and page parent) of meta content " "between the translations of a post or page." msgstr "" "Опція синхронізації дозволяє підтримувати точно таке саме значення (або " "переклад у випадку таксономій та батьківської сторінки) метаданих вмісту між " "всіма перекладами публікації або сторінки." # @ polylang #: admin/admin-model.php:248 msgid "The language code contains invalid characters" msgstr "Код мови містить недопустимі символи" # @ polylang #: admin/view-tab-settings.php:43 msgid "The language is set from content" msgstr "Мова встановлена з вмісту" #: admin/view-tab-settings.php:46 msgid "Posts, pages, categories and tags urls are not modified." msgstr "URL публікацій, сторінок, категорій та теґів не змінюються." #: admin/view-tab-settings.php:51 msgid "The language is set from the directory name in pretty permalinks" msgstr "Мова встановлена з назви каталогу в постійному посиланні" # @ polylang #: admin/view-tab-settings.php:54 admin/view-tab-settings.php:63 #: admin/view-tab-settings.php:110 admin/view-tab-settings.php:119 msgid "Example:" msgstr "Приклад:" #: admin/view-tab-settings.php:60 msgid "The language is set from the subdomain name in pretty permalinks" msgstr "Мова встановлена з субдомену в постійному посиланні" # @ polylang #: admin/view-tab-settings.php:69 msgid "The language is set from different domains" msgstr "Мова встановлена з іншого домену" # @ polylang #: admin/view-tab-settings.php:107 msgid "Remove /language/ in pretty permalinks" msgstr "Вилучити /language/ в акуратних постійних посиланнях" # @ polylang #: admin/view-tab-settings.php:116 msgid "Keep /language/ in pretty permalinks" msgstr "Залишити /language/ в акуратних постійних посиланнях" # @ polylang #: admin/view-tab-settings.php:131 msgid "" "The front page url contains the language code instead of the page name or " "page id" msgstr "" "URL головної сторінки містить код мови замість назви сторінки або ID сторінки" # @ polylang #: admin/view-tab-settings.php:139 #, php-format msgid "Example: %s instead of %s" msgstr "Приклад: %s замість %s" # @ polylang #: admin/admin-model.php:38 msgid "Impossible to add the language." msgstr "Неможливо додати мову." # @ polylang #: admin/admin-model.php:66 msgid "Language added." msgstr "Мова додана." # @ polylang #: admin/admin-model.php:146 msgid "Language deleted." msgstr "Мова видалена." # @ polylang #: admin/admin-model.php:227 msgid "Language updated." msgstr "Мова оновлена." # @ polylang #: admin/settings.php:239 msgid "Translations updated." msgstr "Переклади оновлені." # @ polylang #: admin/view-tab-lang.php:72 msgid "Language code - preferably 2-letters ISO 639-1 (for example: en)" msgstr "Код мови - бажано 2-символьний ISO 639-1 (наприклад, en)" # @ polylang #: admin/admin-filters.php:203 msgid "The chosen static front page must be translated in all languages." msgstr "Вибрана статична головна сторінка має бути перекладена на всі мови." # @ polylang #: admin/admin-strings.php:60 msgid "Widget text" msgstr "Текст віджету" # @ polylang #: admin/settings.php:52 msgid "Recommended plugins" msgstr "Рекомендовані плаґіни" # @ polylang #: admin/view-tab-settings.php:51 msgid "The language is set from the code in the URL" msgstr "Мова встановлена з коду в URL" # @ polylang #: include/switcher.php:26 msgid "Hides languages with no translation" msgstr "Приховати мови без перекладу" languages/polylang-lt_LT.mo000066600000026352152100561460011724 0ustar00t\  : : -V    )   * "5 X ] l z         ' , : Y b |  n   5 ? 2E #x  ?  $<EW gAu     & 41@Jr\1 JV8\& !.5I^ nyAQ- J k*,@@%fiD3r{ a9TI  p(@:D{@   >; $Hm}5!#+Eqw #)6`t ( x%. 3& F >b  *   ! !M!l!}!!!!!!!!!!!8"HO"Y""$#$*$?3$s$$/$$$ $$(%:%B%U%h% y%%S%L%%6&#\&&&&,&>&;1'm'r'D'B(() )))) )g)K*Tf***_*C+BY+L+N+8,,,+$iaY-3&D[E\k*;8!fO)Bep sS . c '>:0M=_"TKoU7nX< ZqRI/GCgFAt(WmrQP%?`^645V@b#dN]LJ 2j9hH1l,About PolylangActivate languages and translations for custom post types.Activate languages and translations for custom taxonomies.Activate languages and translations for mediaAdd newAdd new languageAdd new translationAdds multilingual capability to WordPressAdmin languageAll languagesChoose a languageChoose the text direction for the languageClean strings translation databaseCodeComment statusCustom fieldsCustom post typesCustom taxonomiesDefault languageDeleteDetect browser languageDisplays a language switcherDisplays as dropdownDisplays flagsDisplays language namesEditEdit languageEnter a valid WordPress localeExample:Example: %s instead of %sFeatured imageFilters content by languageFinally if you like this plugin or if it helps your business, donations to the author are greatly appreciated.FlagForces link to front pageFull nameGroupHide URL language information for default languageHides languages with no translationHides the current languageIf you wonder how you can help the project, just %sread this%s.Impossible to add the language.Keep /language/ in pretty permalinksLanguageLanguage SwitcherLanguage added.Language codeLanguage code - preferably 2-letters ISO 639-1 (for example: en)Language deleted.Language switcherLanguage updated.LanguagesLocaleMediaNameOrderPage orderPage parentPage templatePing statusPlease upgrade first to %s before ugrading to %s.Polylang has been deactivated because you upgraded from a too old version.Polylang is free of charge and is released under the same license as WordPress, the %sGPL%s.Polylang is provided with an extensive %sdocumentation%s (in English only). It includes information on how to set up your multilingual site and use it on a daily basis, a FAQ, as well as a documentation for programmers to adapt their plugins and themes.Position of the language in the language switcherPost formatPostsPosts, pages, categories and tags urls are not modified.Published dateRecommended pluginsRemove /language/ in pretty permalinksSearch translationsSets the languageSettingsShow all languagesSticky postsStringStrings translationStrings translationsSynchronizationTaxonomiesText directionThe chosen static front page must be translated in all languages.The front page url contains the language code instead of the page name or page idThe language code contains invalid charactersThe language code must be uniqueThe language is set from contentThe language is set from different domainsThe language is set from the code in the URLThe language is set from the directory name in pretty permalinksThe language is set from the subdomain name in pretty permalinksThe language must have a nameThe language was created, but the WordPress language file was not downloaded. Please install it manually.The name is how it is displayed on your site (for example: English).The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.The widget is displayed for:There are posts, pages, categories or tags without language set. Do you want to set them all to default language ?Title:TranslationsTranslations updated.URL modificationsUpgrading language files…Use this to remove unused strings from database, for example after a plugin has been uninstalled.View all groupsWhen the front page is visited, set the language according to the browser preferenceWidget textWidget titleWordPress Locale for the language (for example: en_US). You will need to install the .mo file for this language.WordPress defaultYou are about to permanently delete this language. Are you sure?You are using WordPress %s. Polylang requires at least WordPress %s.You can choose a language in the list or directly edit it below.You will also find useful information in the %ssupport forum%s. However don't forget to make a search before posting a new topic.left to rightright to leftProject-Id-Version: polylang Report-Msgid-Bugs-To: POT-Creation-Date: PO-Revision-Date: Last-Translator: Naglis Jonaitis Language-Team: Language: lt_LT MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2); X-Poedit-SourceCharset: utf-8 X-Poedit-KeywordsList: _e;__;_x X-Poedit-Basepath: . X-Generator: Poedit 1.7.4 X-Poedit-SearchPath-0: .. X-Poedit-SearchPath-1: ../include Apie PolylangĮgalinti kalbas bei vertimus pasirinktiniams įrašų tipams.Įgalinti kalbas ir vertimus pasirinktinėms taksonomijoms.Įgalinti kalbas ir vertimus failamsPridėti naująPridėti naują kalbąPridėti naują vertimąPrideda daugiakalbystės funkciją WordPress sistemaiAdministravimo skydelio kalbaVisoms kalbomsPasirinkite kalbąPasirinkite kalbos teksto kryptįIšvalyti eilučių vertimų duomenų bazęKodasKomentarų būsenaPasirinktiniai laukaiPasirinktiniai įrašų tipaiPasirinktinės taksonomijosNumatytoji kalbaIštrintiNustatyti naršyklės kalbąLeidžia pasirinkti puslapio kalbąRodyti kaip išskleidžiamą pasirinkimąRodyti vėliavėlesRodyti kalbų pavadinimusRedaguotiRedaguoti kalbąĮveskite taisyklingą WordPress lokalęPavyzdys:Pavyzdys: %s vietoje %sSpec. paveikslėlisAtrenka turinį pagal kalbąGaliausiai, jei Jums patinka šis įskiepis arba jei jis padeda Jūsų verslui, autorius labai vertintų Jūsų paramą.VėliavaPriverstinai nukreipti į pagrindinį puslapįPilnas vardasGrupėNumatytajai kalbai nerodyti kalbos informacijos URLNerodyti kalbų, neturinčių vertimųNerodyti dabartinės kalbosJei norite prisidėti prie šio projekto, %sskaitykite čia%s.Neįmanoma pridėti kalbos.Palikti /language/ pastoviosiose nuorodoseKalbaKalbų perjungimasKalba pridėta.Kalbos kodasKalbos kodas - geriausia naudoti dviejų raidžių ISO 639-1 kodą (pvz.: lt)Kalba ištrinta.Kalbų perjungimasKalba atnaujinta.KalbosLokalėFailaiVardasTvarkaPuslapio tvarkaTėvinis puslapisPuslapio šablonasRyšio patikrinimo būsenaPrašome atsinaujinti iki %s, prieš atnaujinant iki %s.Polylang buvo išjungtas, nes atsinaujinote iš per daug senos versijos.Polylang yra nemokamas ir leidžiamas su ta pačia licencija kaip ir WordPress - %sGPL%s.Polylang pateikiams su išsamia %sdokumentacija%s (tik anglų kalba). Joje rasite informaciją kaip sukurti kelių kalbų svetainę bei naudotis ją kasdien, D.U.K. bei dokumentaciją programuotojams, aprašančią kaip pritaikyti savo įskiepius bei temas.Kalbos pozicija kalbos perjungiklyjeĮrašo formatasĮrašaiĮrašų, puslapių, kategorijų ir žymų adresai nekeičiami.Paskelbimo dataRekomenduojami įskiepiaiPašalinti /language/ iš pastoviųjų nuorodųIeškoti vertimuoseNustatyti kalbąNustatymaiRodyti visas kalbasNuolat pirmame puslapyje rodomi įrašaiEilutėEilučių vertimasEilučių vertimasSinchronizavimasTaksonomijosTeksto kryptisPasirinktas statinis puslapis privalo būti išverstas į visas pasirinktas kalbas.Pradžios puslapio adrese yra kalbos kodas vietoje puslapio pavadinimo ar idKalbos kode yra neleistinų simboliųKalbos kodas privalo būti unikalusKalba nustatoma pagal turinįKalba nustatoma iš skirtingų domenųKalba nustatoma iš URL esančio kalbos kodoKalba nustatoma iš aplanko pavadinimo pastoviosiose nuorodoseKalba nustatoma iš subdomeno vardo pastoviosiose nuorodoseKalba privalo turėti vardąKalba buvo pridėta, tačiau jos WordPress kalbos failas nebuvo parsiųstas. Prašome tai padaryti rankiniu būdu.Vardas, kuris bus rodomas Jūsų svetainėje (pavyzdžiui: English).Sinchronizacijos parinktys leidžia išlaikyti pastovias vienodas turinio reikšmes (ar vertimus taksonomijų ar tėvinių puslapių atveju) tarp puslapio ar įrašo vertimų.Valdiklį rodyti:Yra įrašų, puslapių, kategorijų arba žymų, kuriems nenustatyta kalba. Ar norite visiems jiems priskirti numatytąją kalbą?Pavadinimas:VertimaiVertimai atnaujinti.URL pakeitimaiAtnaujinami kalbų failai…Naudokite nenaudojamų eilučių pašalinimui iš duomenų bazės, pavyzdžiui po įskiepio ištrynimo.Peržiūrėti visas grupesKai aplankomas pagrindinis puslapis, nustatyti kalbą pagal naršyklės pageidavimąValdiklio tekstasValdiklio pavadinimasKalbos WordPress lokalė (pavyzdžiui: lt_LT). Jums reikės įsidiegti šios kalbos .mo failą.WordPress numatytasisKetinate visam laikui ištrinti šią kalbą. Ar tikrai to norite?Jūs naudojatės WordPress %s. Polylang reikalauja mažiausiai WordPress %s.Galite pasirinkti kalbą iš sąrašo arba tiesiogiai redaguoti ją apačioje.Naudingos informacijos taip pat galite rasti %spalaikymo forume%s. Tiesa, nepamirškite paieškoti prieš sukurdami naują temą.iš kairės į dešinęiš dešinės į kairęuninstall.php000066600000010336152100561460007275 0ustar00get_col( "SELECT blog_id FROM $wpdb->blogs" ) as $blog_id ) { switch_to_blog( $blog_id ); $this->uninstall(); } restore_current_blog(); } else { $this->uninstall(); } } /** * Removes ALL plugin data * only when the relevant option is active * * @since 0.5 */ function uninstall() { $options = get_option( 'polylang' ); if ( empty( $options['uninstall'] ) ) { return; } // Suppress data of the old model < 1.2 // FIXME: to remove when support for v1.1.6 will be dropped global $wpdb; $wpdb->termmeta = $wpdb->prefix . 'termmeta'; // registers the termmeta table in wpdb // Do nothing if the termmeta table does not exists if ( count( $wpdb->get_results( "SHOW TABLES LIKE '$wpdb->termmeta'" ) ) ) { $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_translations'" ); $wpdb->query( "DELETE FROM $wpdb->termmeta WHERE meta_key = '_language'" ); $wpdb->query( "DELETE FROM $wpdb->termmeta WHERE meta_key = '_rtl'" ); $wpdb->query( "DELETE FROM $wpdb->termmeta WHERE meta_key = '_translations'" ); } // Need to register the taxonomies $pll_taxonomies = array( 'language', 'term_language', 'post_translations', 'term_translations' ); foreach ( $pll_taxonomies as $taxonomy ) { register_taxonomy( $taxonomy, null , array( 'label' => false, 'public' => false, 'query_var' => false, 'rewrite' => false ) ); } $languages = get_terms( 'language', array( 'hide_empty' => false ) ); // Delete users options foreach ( get_users( array( 'fields' => 'ID' ) ) as $user_id ) { delete_user_meta( $user_id, 'pll_filter_content' ); delete_user_meta( $user_id, 'pll_duplicate_content' ); foreach ( $languages as $lang ) { delete_user_meta( $user_id, 'description_' . $lang->slug ); } } // Delete menu language switchers $ids = get_posts( array( 'post_type' => 'nav_menu_item', 'numberposts' => -1, 'nopaging' => true, 'fields' => 'ids', 'meta_key' => '_pll_menu_item', ) ); foreach ( $ids as $id ) { wp_delete_post( $id, true ); } // Delete the strings translations ( <1.2 ) // FIXME: to remove when support for v1.1.6 will be dropped foreach ( $languages as $lang ) { delete_option( 'polylang_mo' . $lang->term_id ); } // Delete the strings translations 1.2+ register_post_type( 'polylang_mo', array( 'rewrite' => false, 'query_var' => false ) ); $ids = get_posts( array( 'post_type' => 'polylang_mo', 'post_status' => 'any', 'numberposts' => -1, 'nopaging' => true, 'fields' => 'ids', ) ); foreach ( $ids as $id ) { wp_delete_post( $id, true ); } // Delete all what is related to languages and translations foreach ( get_terms( $pll_taxonomies, array( 'hide_empty' => false ) ) as $term ) { $term_ids[] = (int) $term->term_id; $tt_ids[] = (int) $term->term_taxonomy_id; } if ( ! empty( $term_ids ) ) { $term_ids = array_unique( $term_ids ); $wpdb->query( "DELETE FROM $wpdb->terms WHERE term_id IN ( " . implode( ',', $term_ids ) . ' )' ); $wpdb->query( "DELETE FROM $wpdb->term_taxonomy WHERE term_id IN ( " . implode( ',', $term_ids ) . ' )' ); } if ( ! empty( $tt_ids ) ) { $tt_ids = array_unique( $tt_ids ); $wpdb->query( "DELETE FROM $wpdb->term_relationships WHERE term_taxonomy_id IN ( " . implode( ',', $tt_ids ) . ' )' ); } // Delete options delete_option( 'polylang' ); delete_option( 'widget_polylang' ); // Automatically created by WP delete_option( 'polylang_wpml_strings' ); // Strings registered with icl_register_string delete_option( 'polylang_licenses' ); // Delete transients delete_transient( 'pll_languages_list' ); delete_transient( 'pll_upgrade_1_4' ); delete_transient( 'pll_translated_slugs' ); } } new PLL_Uninstall(); lingotek/image03.png000066600000017220152100561460010321 0ustar00PNG  IHDRZρsBIT|d pHYs  ~tEXtCreation Time2/26/13QI_$tEXtSoftwareAdobe Fireworks CS6輲IDATx{l\ם߿΋ !)I)n75 T6պ o?dcvw7ZrĶKdTТ(RDP|ygp33qp>'I  !$A0#p BCH8` G !!$A0#p BCH8` G !!$A0#p BCH8` G !!$A0#p BCH8` G !!$A0#p BCH8` G !!$A0#p BCH8` G !!$A0#p BC6p(z.w?~8 _ǃK_~B%#\Kk"O:YρFjHS2¹|&,z:7{ JF88a+jXCOI si?+.l?#JNPu5}^QcĊb®K^6xUVO]֧:0~i 9߮KXQ\\wYM m>㑟hxixΧ۳a1zZôJ1_l6qdμΝ;7|VQneBĦ\njQ(pjeW]5,b`pf=Dvg[us*+?~=UElXv:/T#-ۺ\hcK"oPU90^u4ʖe[i_"]jnN&?G+\>ʖcnN)ZN $ 'ӧ+)ϱT#9džeVֶEX1 PseSz`unBtss2$~6Mim5(Xo\.H-7'C2;eSs#unj(2j˖!@pǟ|!kȦroI5TH-7'CڄSATs#ioI5TJ+7'Cmn 4\QMl:ҵK-7 IyQ'R6ʹMޒjss(.[n.ns\8ms+7TH+7 IPYOk5upw;5kL(Y³Gɉn^F -bJ, m6~?<Ѐ2 M$p+m?oeـ5 Ǒz Ae|abigڳ(/ozT4ٳgq5Xm疣Q$133|-foN:!njj<bxJNlFK)۾#;'N`z:HY&n11>x<|>==*]"ӧ100`5 -]z5_d>6q@}ƔA8V%lva?mZܼS*˭:r2_E$BIK$LMM!)kDQD0.^{Vc]nj 2(Aӣ#-5ڷB֯ෟuab| k:F#:.ZEdZfhhh6v1::H$Vv0DSSoөF/2֕+Wz gptF&%I$188ECeٱG048RYuZ !".]^,//g} ߫ W\Yݍٳɿ#8wepukbߣEW\'|b5v*[>Uw!ى_7<< uւDb_ػw/n]}#t5Yp9IFmBV˸`m[ƸJ ~'NP%VA~ӧO#H~T$I­[/ΎDt]ւ$q |mxo2"fqŴkE"K8ګ!{7MmsquLZe#u愺VrH[X :m }?KCøt)KL Tkﰫdn͎0WA"l'bvv$a ŭہȿ: .\ÍF__V< 2Q|d6!ӹ3B_p-WA02J #H)z=Q|n\pKF\s!\YRfG֤ȅ^b k+۷okF&&&k>ʕ+* ҥKw- )[!PV*ݙ@+]k (bbe1f1;;sgN ;o_.D|!c||\5t I$1[ME\~(]% \~V㸂N&f,锴Bzۨ5XS |.u ;jis<\HM+P"VHtt]%I*`<ׯ(X\\˪bii Ӧ}kX7H:)l­-H͍+fll̴q[t:_[߭e#6 hNaDd]+'Bƙjg fng>~ߖNM+UcOͱ"Úl/GYDpqqq\(goL9tjZ!-ix~sv<G4e\3Dтri[ S@"ݻZp+$Ic\+8)Vp%֝<2 s=IxAfh%l[yąrK4"Vg׶,&J l(//G0{A|>v&KHWU< g~lzj&V8BkkxGKK \.WA&M68}R_G:+_||477($+v;~?LN @UUUroҍ$՚!v;GO~l =n7Z[[Q___tonzy 8C[[[ޱ&3,K73& 闰r(}mMW>nr@(B (hhL;TUU!>H B=Gp ϐ/9ޫH?v^ Wm҂&B߹$ gXzfgW PH sp'39a%u)++Ö-[za6p<V+N'Bjjj -7 uJXHd)cl¡ڛ({B!x^HKJ8D8χm۶p8hooGyyyw+Y~?,zvgR*cco;Y?r{\.4-X,xVuǃm۶:_R$>'D}}}5>Ӣ:jA`p\\r7"|kjz í[47eA߯t:PYYB!wBQ100v|8٢jNĒ$%O&UbG"ۘg8TWW>\]]V+Tw5gc}UC0wߍF]oI0::'Oρ Y#IqIf_ryqoUUn7V+DQD4 FFF088; w5E3qJ^etwwիE?8wݸ뮻4nOpU]hllu$ n/Kf}+_AssseKaHl0z{{L555yod%̆n.(x\S}uut Ӄ.f~ł-[  e3 *++yo~~'Oľ}sΜ7ԒE|BUUHe6D"~]aݎ*X Аu<͛9lQάmt)KQ4ߏZTVVvp(ڐ'arrXXXy Fε|xQ(p(ڵk8w\̿s:ضmlق@ ˕&Z/#,!ŋرct:aavƫpOW[\\D,KN$PLd ڊ/$ 裏k CGGG2vvc``^=?9+-+֊JU|Džbv;v܉zd2… ~zkY/"-kQQQłCZ:Ñ1b4~;H:-ٲɲ---ĉFToOOO{'PSSjC#w_S,v%LzhllL;nqqzz [We D)yQS4-\</_q$Ib+"Tr2#!$p BCH8` G !!$A0#p BCH8` G !!$A0#p BCH8` G !!$A0#p BCH8` G !!$A0#p BCH8` G !!$A0#p BCH8` G !!$A0#p BCH8` G ٖMtIENDB`lingotek/image04.png000066600000064360152100561460010331 0ustar00PNG  IHDRZρ pHYs  ~ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F^IDATxyTK@CC74Qܗ訃F3Y$f~8ms}Ϙ5&15qW H#hCC 4KQuΩn>sy}s?G'H&ԔT]SwɎ TW{񴎝񛐹x IdTG: oƌew,'[*%zS2 N;Ń''K;dåX (nr@Z B7::` ++ Պ lj$ xp݄B!l6 $%3 'c Rx!IL###fl6dggc6u|>\.Q|>yyy2ДS=3q_pcfd B2ߥ(:B RgFGGn#"6 x/I5V("  p:QPP@VV9un7CCC`@*>Kpql d###XV`0M^<|@L+jhG Ikc8{<1oZf3z~jc'Qc?5o;/ hj.b0$O4|>>O ׬lč>FQX|9 td1c۩Eǃ #ш`jb6crngOO]]]ư^<;g,>SMb@ d٧Yt:~^/^7i;_t0łdOСCȌ'Lst:Z\O(b֬Yr. ǃI\*LU2V}24Պj%;;8. FQݯ নhR0TWWm@t:e1ȴ\t+tjRkB:j3 |PNϏ2֋gs<'>g~?z1M*Œ\F57($s!m.]VeS* :::c3^<%;'5]Yh~`08fQ*}r\uXM d NLv8rX]MAbx=>VL~~?444 P(###aMr2s;QcN|\M5z(((Hۃ|b0LL.3jRU:~z{{K{ -`jdcqa ^28" ӎv;溺Lf< | $`8\*V1L̘1#mp84ә2lo PPPVrEb|M7lq1,\H%|>_ڱᠯOΤ}tvzҴl6lr1$#ŢEN>vuuTK"|T -%fʔnbTVV&ZB%1kJ)Ymxx |8G14]GeHd>w%𲳳X,愗*@QQQa@ ={O`T{vSpj`S\˓c Ig Sԁq\I3wܔ1yOOCۧbN8%|ckz{{7o^J_ttz2@| !&ztdeer`߾}Nfy6ecŘL&acQ,Zrĉdgg &-|ᇔƀNbN SlJr``Ƥci-<+IE88l|nrrrd0 )Y0ĉkF7L466sNQicI Sl)׋bI344$+6vHgvz'bEQ~fJ Ba(((P=``߿_UFbNj`|p¤.d?^7ej кݎ?-5LRQQAYY8yH^V|)))t18|0Gi Sl6Rc|>e_m|-~.~w}cǎӹKj@ :^.JJJ4f͢M6/-uuuŰX:ڇv6oތ2m:v_Xz%,P.*++5AWRRȔb:a*Mb`a`` } rb>FB6,-n|tǙÜsɝhiCN~M6rl`d`QOFQQr@ 6n:wʣ,y0dNM6qצt])x`qvѐ6,X@uuuR LN8]`~e#Érڡ#|r\G^䋋c߮vn@!?{eRצc>׹s~Τ{/%Ī|nlV#(_60T$Ta5Bˇ/.0{'U@ͯ~>P~ûǓr{qe/ur;|_ΐ~}q}iNŘ%甆 LsLT+ݘG[_`2z^xf8W{e.4o><yN>ٙtޫ`}6E,D ZƲobQP4-"8:HK åKK 6:;;n4K$).ҡ8('NrVNk.6NlwNZ&2\tcn87HUv|+B}?,D\΁{q j &K.9eKhjπ;0Kr|^G>'FGGlSyi')) .~?ܿ'NPWW6q5Q3P!VԞl;KxeqvngEQ,d&~{ۧyj"'@c+=k15?ɟ*kE`=On٧<rm7ryu(#H&&'ca?X˖U;1DvźjWΠ ]|Y|?sC~j3j ZKtGN`@p8層T9{liF+V-bgt->ngŊIȎ~M&GuXVP* 4JοlMD zA\`-eɃ%~G*ۣUCg] < EܜGe^}M&|xM7?o[L)+!\.C~E)Ѥ٦ ?R* EXW~ǻ# /@GT.|tyTV5pŌf6M?Y6$[*ЁN0#E_wo-\oA}} |2ALۤƔ`SU(}!!/K78t_T@+ʯwd-|fH?O,6Q?h) ʾG(;/:Ndw&3hLfΝܙ3ykF(]Ͷ/w=<跹5 W~~~~g4z&t~UՔ122@A~dg$.暫/_/Cɟ)oISoRjb&I}D ^~y'xy]z*zz( 4--^8X 6e&Rl1G8ͪ/߼3*n`玧yfw6B=Vt8(}Fqf}y4?$3fG/$'⑟sq{__7\˯!1Y};?>xaiBח6 W`EXЇ(*6ۼ| mAUQkm eYg?~PZZ:!.eLe8Kn!:q.eppcdxb>޳rMhO4ش6G]]fe0cҖyN:ѳ/ݺ8&k>ر_Gv8q;ݾscV I!|+/Bfuof9E/%{ql|S_Ow?`/Gx'8389 6GG{6rd),o`3I/ʦ*p䕏>p /`ep''1?7P7~釼Jêm̲aN6i2l҄B5z$ԙL%d=PcZǽk,Ѹ EO'Or⡵WŊ/}3k}woQO/F]ct:LMxfy^FGG5+^/ǎC%n߾}%](Cc6 rRl6r hwDnq}:P($󈢈59M&rL&m(iK~?pX 9MIzɄ^ I۞0ovźuҜ2Q0`w%.\$u-]OwVvT,E|?vZvAwwی3XhF1K(^/@~:;;9sf" ݭDiL&M~\." jH $v/~_sNF())X̟3ce/%) H ECS1JKr 2 v63ڎ<`Tt\@__999&|>yVT9Tn/^uuu"M2`;wm"u<%kvtt0|U9 ,ΔIgxM6MsHZY l3Ƀ1jR *,^);|0sI8b?(-0{lv;>Oua=5v+))vkʣe5ǣ S~ZL?rKYYY|I7~? {^T]P{st:rssٿ?YYYhd1N &<w<5/ݒt rssUY,X@ggj2/?ցxf۸n QYICZx);؛MRYYF1& !@ p<ق"ʙ`W_z{bXbȫw@|LS|>ǏrJMWr``@ʐ*I-ܙ81!Z' *j&zYY<oXVYJ]c\<7t `pp0an[ dVGgI}1 /|.'o PPh a, ZwttTM*M6ަZ'c 'ʤ) twwDEEE=zTN%kM+Qp8Te,cU&y]>áCCXYX?7DRB^mMZA)q+M4@R__jݫlվ^ 56k,퇆dY4aD% ᰦXӬY4'Né8i.Zdhh(A_k;c;O*Аjl=%ri`WR$~E+Z*ᰈ`07>4Q0Q=~`v"=&,Ha1-86ɂ}tpT*.\Pdm2d2kKSRNKɅJn7ӧOWM9z.E/("@0s@(QZZD! rQ,f f͢4؄$j0ͪ L~=JVV\%\ˤ $s:`|X^***d2b6S\\Bc1b& a˵!aNfLV%2DYtޒICacRjZ@?favR\\^o@0X, Q_dFaXD.dd8Bel2Ek.\[[f3ɌbFv{Dž bX~1 X0c{|'K/n[VV&D5Rn PX*cԌp܄!Uxx=^&P8$/j͵E,42Qw4c;@۸qj,HOOO f'KH;kI#YIkV&)"b04d'fC0 `fG.!z>5`030Ovv~/2vVHL2mN&s'N':.Z9h4rB9dYCGdfY.c;@S~ʭLԧJhJ-JAKF(..q8F(eɳn:P ^'36֦ f['Jr']HYVEE% `FArrr1 F\UbZd6 x}KOlyEPP^+cJnƍ >> ?VZZNz(..0"YY8]Ny#?.ZpR\T"3''˅lŠ7`1gRzɓtJu5N|MwRj>Hn ߏt24lYa4|l D, .^rsmӅd" f|Ʀʺ:ĉ%t:U%wR׳ɱ'O !>yܸq#6l>''v.II(Nz<.Yyh*M(X$cǎA+Y!>eSs'%+'gT2v>Vd 1\]P(P][{f|6mڔݬYd1x@d ~̴ 2vMmmmH"jKRJӚz3X@ss6fY\Je2]eT3vݎ;T(pXUJA>jYcV #zNӊqpti.g)oa9X5D- (p1kr ti>Χ;vlٲhoo+yNY22>%oJvꁮO4T&o5Ѵd]q->9Ck?;(@w/dʕHKy+WUgifp!&(i1v% {x8Bǣ!?M'&#xͱb4Z1 ^8'^OL5K)+Vڦ}-kVJ˩VAԀ6uA7s?zX~_ ?~_*gɭ<~la5Wjn[3|#xٷ_?>>AU`<{@Ms@qzze+Vs"ڹk<ȿ/o癷s D@3^OME=ů+Z۝Œ5#b{9+aEZ(^§"i%;y=HΒ[y`pPSS;YMsO??8oGa)!< Az_o=5>Jʺ⥝e^TW 9;ǒjb>+Vcy )Z11ш!kA ? n>߅*JnN.Jrs)).ʝ̭857bUؼ%y%qD`ͭgU1XrrɍanMIt#%5+> HKhnrxm7Zs|I>_LMP)RYAAjy>ޝ ê>/p9tWy`dj#~{e_з3 9LΗȎ_?̷BÁkBe^m~~BC=~盏ÿf(t먈>C}N% ׳,N2J栣3PuBsP1[. "P?C=EwJe1#"/o}D$g&="^J de|-t:ߟ}UUUBR'Nvn xyk}⊕+ߠO7v㡺&a"/Mx~.';G/uVc/x?*G\P)ڝ:)^8̏0mj+7QzQX g?o { },c6s(`Vbe[}[#'(F]]]9p@biW<GGG5b`scoZOf|O0NjC%xq{y"Y)_IR^ߝC[k;}[ TTGFg0v 1eCCX3lEPzm'#=[d`u71- Khq ɄJ_]xȲKC=S죴zO_qBNj|xR4%ʼn7J,*z%-c"ONz{"hߴoZ& e|vq }2Ju\J'Y/;'yh{+cۋlu&3zزKPmR73MPH㏿:$Ll#0t_7FXǚ+m| xvm-8fƄJ}>^ۍlV]шhgx+W~<iM@miioN~Μ&q^\^t30NDȡ8!d`` eN|859䂣36-P\^L;z&lp~,V~u\15-|OC0ښ7OjX0RyUZ<\I){sJA'= =_0x΁ga1kt9s+d?]M|Np$_p1&VS,Mu;޼}[85`iaD2[ &عd;^cǙ;|Z/: e,c(JkhhHZA.c;n2 N$?2c:.pie-XN3261e\[elc7(jp8E\̓d5Qil0%xQSmNQQ~g.~Ҷ(B޽{1L1Z@1.eƭX&ޝT*I0l<3˝Lx!xRN%8zz>\e,c'MM h`` ANNQXV$ae,p***TQ'05[K_PlVe8Y3} (455(O4ZB$L;wnw'N ??xR4uLeJJJFJ6kR,v44-OLq"[" YǺax.HĢ`Or 8dzf;QU0<<p1IxЍ.S>jуBd!Ð{tr=|yЦ#8 B ö?#GTÇxmKkdjBUB(fg>š?IuUR0c% {ؓ ߦl`֬Y1Ҭ41 zFGGU.iEpXGIIǏ~/>>==x-S4L,)OcƌL+. ?zGѲg---4o{A(f~+ZMagkP{eP07QUn޽z Cb2h0cr`0DžB!< ΀՚M}̟N^o@G.6N;fYN>pt/yz["ib$M(j.o_833+ذ3݅O:f I D3gTᘒq(Fz#,#G(]'7pLW/fE#rQ90v\bu˙=*['o@v  0. v{=iIyf;_ f\IYƵVD5i"Zle2l 0--'?(OEuTY{trŌro":y.>_Jq^0vܸ"<o:+; X%#FL.x<\.dgg'FF#999 3JҮ>*a9sU%~O8,FMG~I~wM$???ӳ2V@QiiI  jd2a4AKtêO8rǴhr^g2~_z궝TWW' .e| '`0KUU*|>>ՓdLo^{>}}}NJVNIvvv⁗/$@nnn d8 xJ2//ݮV\g2v$MR---'$LM6% @oo[lعjYj-fveICcr(metoJN'LR2SY=V);Zl×_~9 ܹ3Ɲ*JI?AHVfee%qj\x;ہw 7n+DDpj7UӬZtCeldUUUY&ai[HUޞՃXi d(r׫>132yb4 ˀ-cg \. F1ev2%BU^j5E2,snFdIkk+555:6:}|W2v. T;v옪;lL!q *'B2vα 7ܠ=ӣ,I(>|>6-r;PݯEƃpZ5F˭I,'H3'+dѪE\;Y3Y[9|n>n9{1__JXT}6>uD}1gY4ΨTe7PXɴc&v6kоZV\ Ru̞=;I\h|m FVe9ł?3,'L!6,y?O9(C&"VeEM]g" y c>A_S٭z"^//.We,Y(UptttP[[ˣP($NPdtAwȍۮNKʕY"c%6T/kSw/FFFp, ,ʒ:E5yהkhoą븹!+><,X),l!%UkuTYkKvi=w߳*Vs:Ǣm6gpɚFGۯTUafE&Midȑ#kdxbXNb:b DYQ=]eOහJJ/;S6Gw|^J[^nu h,|8G$柱_ wS$FD J339qۘ\Ji@YWl6 B LHookeΈ,?8R7sOI)yE4î0 hv99;:l h-Oyk#v y$j~[VQYKnm*N,ޒ~9̹~`_7_ -G.M~}:/6.;g}|!x X"/cK{sc6JfqEůEpDnN*͙3'f(`6&g9 t&V,Yget:UYn27h[[ճpKo55>k,ؘ'+ˌ}MY޹4#$#Y֧nS™W x;wnD2?eFj**(a-x/q:&YH1r$Q;>\Kn3#+, Cet J7^n ncMɥKr+0`\U% JvPgU:|,XD%@I=Y-lkcmsýݴZV-.h3k>Vk) \e6-ooӾ+XP ;5ڙm#&q' fŵz0ͫuwt⥆kYۂ,.J?fu }–-tRʦ1ϭ%x{b0̴|mY5Q044DII)[ZYJr62:;՟nnn 4)cUsyꠓV)bN}=s̑?55TA Bi j }#AT:cXb;~%pn߂-mHզ9q[yY̼Hҡ52jm&P[A/y XwU$b)/T?z,ȫ骫X\mfpЛVoMxfAU\մ<\| Ew1)s!֭8Hpk^ۯTOf͊YCk)0$w+W|>^/3fʎ~F}*dg[N KE (,c߮(,) os:,uR[qUM?y,%ss(̳vN{[#M(0ۀ_=ߔ 1B[ ]]\~ߨ.=ӃjbX0͘LݒI1 )@1Lɮt(pە8=၅rmJڵܲҢl۞l!7v5 vmc\m5y%jFڸfӔbESM,kGiQޑN^vh>l2͹n_x%p %=JaakY\\LOOOLDy#3vb/ݙ6eGUݷG˧2=a @\yy9c`z/LXdME}QUɕ6mZƛ()NdǏ-rrr2c6-,[L3+Y__/ce6 72IIH(xZ ۨ,w-Ī;E5kh>|eW2x3p(f?PU@(f|N9F%&al|{St!'2Q2STc2`߾}I9D,]2c+rssoc2ؔ xx &A'VgКL&JKKoR"8K;U}lj?Sm_cx~eB*Qڈ0`!re٪oDQQAf~ꔜ$Le3? V\4?dTܾ}TgCd\$//Ov-g+sݲ,IUЧ/ l7===Jchg\ e]޲!ɺFE>c⊄_@vEf$ѺȪ{)mw?Q ^F* xݑN~سj{(rb>EU×=F}W &RIzl({]X K"s<`gp \VmG} <um,^1"е/njnL~3sgIaY1BؤhrܹSsJl6[LEzJS]\RE(bqc= &u$H;2w,>WN+tG"(koȩq단OtI?6+L`Eٔ+Q{5w];ޡ3ݴd\}7`{͍b'nWI)?UK,٤(q: IWj]בևҔ%(uGSOвIwmuT7|; !{5t+hB4bcv9p{ǻgr ze\^ ۶mc3N1 t+**Rd(x#>uQt458PL#_pl'A8D蓤"apN-41_C^C9ى3.ˋ#jn$ B֭$p )VZZ*->nK#v{ti)nxx)3\1պ#.Ew}aZ 3$:48Tyƪ!1AT} y{SꋸcV:u|Z*HC:*2CV7q4SjEȑ4o`=Yt1lB8V5`DD1:4x%ˮ.H|dim)- Aഌ$+<2X,o5'??`0Z[).mj#fѰJ\ՀMtZ:hPFtrcQ=Q$RIߒ奨nXGM籝Y̿|Bzvo/o L( KnxqRm1[vhऌ%(J)) z^|>6Rm _ϲe b|wRb``hMRCI7NNU_TOKG%k9_³}h ^F&+RK}FK&1t\NcttQ)++S=d==mmm b.\|DG#^cxJ4b6g~콊htlc[xe\I9irڋDvc̛7'|5k$dfLEGcnw%}6ɞ5kx'7^ر/~_:ˀnj-$-YF̝ J(~wZd2aXZr,e˖olٲN ;3/t|ZûK}},:N/? .磷yiؕ駟~R˸S}׾)Ykk+###s6?*p$ރL )oR9t>\ՙJۿ?_ikkK ,дN"3%iix"p8)8-): x.#'''%=c2<=)Ytzhj#c{]x)wAf͚ŬY!F|eq\[wpx(4~JXT}6C1 ._ҙ%u޲]GI}{ߣ2:0jfmSl$Ij###SpSs1%;z(k׮My_O<` U|mn?OV퟿JKHf~҇)VUU׾5֬Yt{j&x5tܮ_ SYƯnYxXtin̾۸,atGOLޣ6 AI>t7l]wݕ26<2{Zjjk֝>#Jt(g0hhhСCqeilaxf^}񽟿Ȓoqf)]O;G^./,'={(FvIoEzTEV>_=͝!D2I}lIngVWxg9n(b]lkϱ<.?§i%3+TDfϞU /255:Bː1~ϡP);6b0}tyMz|;-6m.!4pRtn[uӍSd10Vۘ^T|>uZ,:9;9U~EYuRRi$7mObO0Or,̪*Q9q[~!r-R-PSU?mWߔlü[d[L6M~EߜnX,YbZ.Aa\z{9Bŗ%=fYQ>֭q~c<כBC!N<阵n53{E¢(+/ wϋ<t:ŗ+EEQU'% 4V*K8OrEWְp4Zz%">H')/鎪jh3/[Euu,[,/y u8]H^'z=g R񠓙l:7n$??Ƥ-,_u?=v@(`~kI\7s3[ }=L@pX$l]3c^=EOLq-sN9>Ju( dÅT3M&pV.DG8Ve9syYy l|~~wmwW 'S X܃(ӊ:a?^1D'@$˖2Š>~x C:oI/jA/ČH8,E$O2uX\0zLȇwtX,;KB4.^LSMlD0= ϟ6pes6:Sט~Ǖ̬gu<ly\-2+Ӂ7'/Z̪@ؑoǼWQJv":n2g uspAttt ^xa lǎcN83eh"6I.bUU˖-c~J>:N> 5551|:@k'"I-1vX\G|,XXlq ʼn'&|ZJקo6WΝR[[Ws' h$I:nKxg?i_9;viA}}}Y^^,IDI;6D:]0p^N xjv**WWWwnbNǀL`bl&F{n @d n㙸%e5SOmoo';;ӧ{Ç9v.9s樺l!Zv`V`<Ts;aoo/F***N)y&n62M`ʪIf3:~%2 gN`)ߓL Ӡ HJr/P\>WpcR1$}w~t:S.5^vlmm3(b2O`!6KfJ-'d/STaOT?>|*ⵤ)RTI-;CLf/7Dѕ,(Sia:K]1_0&c- "2CDykM%d@+é/o3XLӦZf@50YT,LVw-NA;A$,=7 (dBIENDB`lingotek/image02.png000066600000042640152100561460010324 0ustar00PNG  IHDRZρsBIT|d pHYs  ~tEXtCreation Time2/26/13QI_$tEXtSoftwareAdobe Fireworks CS6輲 IDATxyt\ՕCUJ* <'$XMVү#;it_tJVH^^ج_4`C$ !ے%BU*pVKVT%UVխ{OW{sGBl(x'O:]uoߞv|>eeeܹkH,Xz5}}}ݕYg…l޼9mB!V\?>fy'mE0>TUe߾}455MO$i0gxq:)i{͚5_uש)苍ͬSVVE؂")--0E؂")))g3{xY$)99`&,( !DU0 !DhmDc>~NwuP(1a8B/^LjTEE p*ͪuCˊ0Mȍ'a` HD5L4MU% t: Å)̘t]GUT 3rc hB`&,#LÁtMC$K4XERϊ"a @VEU#D $Ӂn9}gϦBڂgIuL c'>lD7F?,gaq&oYIwPQ`?KC5,X+L7t `Y$]@E0ELxQ72 ĨS0 EQN뺁,KH,ɣi XB'B1'IZXCQ +2 gΜg3}LDVjy%xkyuӷ\`aI?;_&z!lـ)rDGr,lY"ApAVU^;ߌހFT-!> rQVЇ.8-0, %jK4ZyXQ(Ϻ:Wr{g3mLDV-왏 BgahiEڂ%ʹdq$E|Tﷷdi>:>ŲΐEM[-ח/!+,&3\"s\"CGN$-˩f*BF@%dYAu˚ɖ4 Mp:]TDVC.ʲd LaHe UR r#PR` n"of:Íif %‹ @@NJTel"' n(@Ϸ ݛN{{;IJ :>,Nlt YVb"aFې$ M (jnEDȰƑ#>/؂gȲ$Kr ȔJꏼKFRJhnigG(BL6Dea%?fV[ڐddzg_.Lo:MޜY[12L6љA2rsȭ,喵i@w|4D߅ ܾv 'f@7 gy㽏X+qts}ŋO_Μb|N<& Me m¢lB ”Ɛ~.7%y Bd]\["GƄ6l5~z|k_WQZ0u$ymOZOo7^ ߯aZ(kk[h@ [|O6!o1:w\_r:ZYK!G&dl$ "LwWmun\sm$ECUU[p6'M~^>jٴ+Y˿k43 r |Aǫ][ (koHckLl+D[;Y{m,ĺ5pJ0Vi .d@7Y@vZdj҃=\Lnn7ƾhfRLXګFEW Fob)=ՕFwwy(n'=]Ȫ-*[9^:[)^t@_/l4C q)0#+NJ<12Pe~d B@fP(Pp/ØaLB@,ǮP 7# SrVPC"Eaˆdc na&i.IL48?C摛p8OGe[gt=^|ݝϧ̀4U,7 ]r*l` PU.qz2QThEQqhr'Tp2CB H(r4 AEu k:Qº a e+ hLl3e&@_D£-GqtN'YTkʣ]W]r28֊eU%ufQBIs. WR_w+V2ݯ dz?Aݤ8?>n  A?9d)?faY1CA~?.4IPp3tqr c*I`躕`6eҁ,V^Sr)f,>]>f 8….j;uF~*3w"͇?3Inq6gZ;8q ,|/~߼ɖvr8ςN%Ew΀Wي' gQhEyWTp:im=0 ʗb(2'jjXqu92 A/4SPNyegN7>//#0YTVl%jBHs27ϰX, 'RG]Igo+>_kU.c54߾[{^S}_ygF:_-uKU1[6ob8y  u30CN~'6z#ǝ̦t# L#UUWj曮ƛ?W %-X ѧ"% Y# wlیpaXpu6g}%_waUUUY+BPd84kTIX%U'Ml,h0 {N0^eR`R IpD[o6N>EfffQwgx$^$I7U)+ՏpGFz\JI❣u_uN`$_B_d=`:ɿqPWWG'+U\d>6N>Qrs7ƻ"xLa/֛oq 裏O${.<ġ: "iZΣ$EX.ái:"RΪ2\?Ru80"ճHx0ML*tQ4 (Zf8t`wmٚ%77'\8{fȲ) .w,¡8х%mfqIKc ISY|wA׆ؓ&6FaY$E'?d.nض|R뿥n\NqMqҫWgWJGH+܉Xw T.}?vnMg},Mrkn\ lXhM/!v+V_5pցTu 00u-)m\.$ }H,(-8#"N'ND D\chh!.mGPg3mu$\ٰ0#PL!rZXH*ᰆ7=@E1n'ͅ$셱h]J0$I|G.[wܼ.Cɤ|A,pr ! ZO  4&A .@dYB #);!2PЮlbjDno<_ceGnf!k%ʪj>nXwYKM-`s)\;iVoyt1ˀƕ%-"{ pXF to6[7.',?\Alt8LTVU"9i8 amɕx[p#~hxBK9h!XАtʍw뤣E+ɢe+(O-;%9ZQ@f2gɪt49<A+-e-˅Zx7zZ܌,1xY`qa pf哙eꚋ^UphdddқaWN^=GYx1؉3E"[jlT` n.`1䱗sڨhPRRBcǘaj n臣e&B夯cAZη8r϶xqKwRRVBWGyt]ӹ̐E+Ff4;ɓ'dIANQ.7w["Y(Jrv`A!a)[0.~}Z;{Y~ ҝ&>ę }]':?Ɠ'ҭ= Y[p m$91J8&--MnD2C{&ek۝7VމsA֭Oil8ſv_g7/O~mk?u@5؂I izg" w)n;uu_c߫AwK6kre.Dy>D2dOIp{>$g:g;غ_S'ueŚ۷S؄ʮs?Mp8J2fZɳje+,--vL/޸y3?u ʡ w^çJVVĎ/|T}}p8LQQ1}*PY* )**Bʖşg&B(l ]NUwêO~8nm Kg=!oJ _5zz4g|g'S:(\_[wY9v(UQ CȊL# p7a-Ky)4 a4tБ% ]ב1"WXP]׭hnfM ǦeIBukR5 92VRdô~IDuTjCBB7HjkZ,;rkN]׬ܹHŰ!K2i IV15Qb% h[ˆZKlVXB[#5 2'OsXN4]g(Q ͟ slOblg,4a?㨑9h=R-d2UKlkZ?fbl%r+}{؂KS3blA$< ?YlMDGY'}t`W,Ihnn>M;R;icQTTD}}}Bx<{)ȌdbسgtOgzEDuk#`Q/.*ZW﻾hxzAw3 [bIu$)[qq# [dtC~~ޔL7u`.z=B8#9|eɜ[ffM=΍>z܈c0G?\3&meee!J+Xp-puKh&T/sܙdj0Fmە5146,yoӍL5#,e&q)SY|gQO9r999deetNc)c-uldT15#],㰿8MY\AĨsuboÖHH:Fus^z%KhokG+@p3Yd-#軿i=Hss3G! ωR6SGe\.'Ww5巠y{2 WL]]N3p/3TUUqUUd/_~ .?{>=wѤEtuu3WlfdffIyy9yyV2'Zx᡹gբ.YuARE]yKgMz%㩧bcŬ]jg]r+urytaZniLsVr^_e'l9|Kr!^|QIuuuLk׮d s_p ?ߓue+iw'& $Ga^{z^C@CC555]tNuu5;v숹dn .˗\j:h N~4m"$bﰾ)ÇSSS{'x"nwꁧ{ZF[ ֺj< 'vr4%Imw$sOp,+j˗}568 q㠾{ 6Ks+56<1d3qMjXuw|XCÇc֭;S7.[;c sc[9YA` kf6m'HXnn H6v ]櫫zS]]ͦMf$kn nvYB-q4u2̝IxBYÒ8wLLsGpD;3'/W/b&[,[aOT7$}<\^_;^7&sgqfvc .q&[+-ܼ#^&'fލ?f<>mM,`-'; 3{kwykVQ['b@U/$v]q~Ls#w%;o3;kx}[bh8m|z#<}Un9[VqMF6W>-uVſ_\xI_XeseO ?8[ IDATsH v$my'eE۞={ƭcjmvQzMMMB6/%nJ:lA՜"tβDɞ={8|xՀkjjя~Pk׮]vqϟEئڻyhFpS;˚M+v4OHp ))[~>{Zfs߬S"_|VwO"$0`l5+sz@85J@XØrܙVn,J|oD7I7K>آɿ-Fkkk\Iwr*3GptzWSf< GUʭeq|>_\ٳ{Nø?:s/ECCC\u:([oZMSO ,]r]"24jeL`$6m4y1;cDw+"QW_ MD]ʖvqѱxܽbXrjį}ᡤ-O_pV|6[l)e<15;f͚iiNrIDz-% .-l\\,+(w$}`_ .y0Oh9[9 Sᜢly{iO+y{m&())ww) 7тlL .0053w|NAʥ&E&c%. ʖ'ٱקN65cr+}f\K-'ƌ?X#xgaú==na&r'rPwr,;iM'.vŷJ8 q^LLD"ZBu₳xqE7LeCC\a\^Ҍeb>go)5Op-O\0&L# xCb'RjV׭͌nR8qgoO< :1MVR:Zf֘h ޱmۼnQ9$iNحLLpmb^ep>o\H[r<$eޝ|vr*k\x#62F" .<"۝LnGAn2o nl ۝#L>ނ!( [ $4_p5&6)gqx.D-x\JgPz0Q@}}=.x8[s'-CexnÇ["`SO=93w_Q\\<2!^%.; q:y`m 7HDD̑<2Î09'iWI>TI, .@9E<ٶuEO`v)`l 7M *%Q[psb$KZ1ҢJsODړ3t9/:Bu/D"w<y<^Nd=o6W-Ϲ }/xf*ݔfs4{9 u lJ~?a66sxKUJp0566sw㿏LNLp(466s1VnM8g.1S$h Ifix7x ;kM:8mlZ)=N<8ml.?>u[cJ9 nyMq;Y!ПvSCcj˷ys͌˿+[c&vgNSjfFixh4Ymi5 ΝImxwZ!ؤ@bGUgpw3>3S&K@??{fx3`z[uw|k~=l}?IJXx{l 삟'0n+[0},Ń-:g[NR3ǡ'|IۓҎ磬;wr]w%M" w&S\SSW/i\Yp!7oNjP+W'yIKe6ve.O>i-BEEa$*i˛מ7&.;.6$)}lyq:)i{͚5_uJھ`S /\3yL͸*i}ۋH R*67mJKK1 c1i|{ziaFhk혦9룟&=t]' %{ic/]CI߹I`pg_MztH,^ը@PUL!U놖aOt4 dYA $ Ӊki(J8t:N S1Q麎fUUt0M$ $$$YF&蚆$Ih&HUE)( F>WQ! "I2 9s gϞiSoߔ/۔sۦBg&K@31.޳dAzPřgY|'9CErB. R `)r2=pUOQtMI,+f1E-H$H[VL0tE!:,!$Va4b !p8a,$Iha EU@ȼ+9svIg;`DIPlWq]`˝[7}𳺃jeYYxK h>Kղ*L}!죰(EQhmm};r 0AXviJeu;:2̩se!Ǿ'[p3;˲jaJ'WqDŽB!0}ubmtr\2 Iu">y[Y4_~bYg좦˗p dqE.rxMp IrSR̡#'pTS3y!#I edri8.*z"PrgeYF2i 0 K*nɑ?(ZR9R:K)of:Íif %‹ @@NJTel"' n(@Ϸ ݛN{{;IJ :>,Nlt YVb"aFې$ M (jnEDȰƑ#>&E9o'2,Q^VNWWq^Kss3 S^^$G%p)4xQь#!Krڤ +C{}g .ba%?fV[ڐddyLrzs<.͙~he#cA$Rª=2%B088HFn.~yܲv5mOp׮ìXL#or%znεxi˙SIǤ|=@s PXMD29ߏ妤0@ s Q$(S~ؘжpIl2pԦBJGdկ}1^Ei!ԑOZOo7^ ߯#-\صm}'7C~@l}B&<Ĵ?o8t/"j֮]YRR2qc-ol|FѦKJ'M%ctD={{nxG/~ҥKg#qURpFkӺi?S<ޠ=C2򍿸ʖ>P2yw(_52HފY9O\ ݺv&^o4ᅦ&3+ABmͭ*уF(?q >n_AZ5A=Mn  A?9d)?faY1CA~?.4IPp3tqr c*I`躕pPiS__s=mۦ\&H -b5 :khk-\gs?rw{mli玊0[ ., QXR{G 8X{U>ݝx p%Yđw~OqE |)"sWѱ(.*B#9WV~}oc2EeV⬦!@128|p̺UWWsg&)]q]-u5teV_:֮_CW훼%>pf{Qo[D^YnȖ͛bؾkN9C;vL+ 9ľMވ$qg:i8݈'A0,rUգں1UkE z)9qs4Çimm@j6mO~y.VUUeDAHAi&.*J:(:g&Ms=`?Kqq1lڴ!^W)p@ U?1Fie ~z)ömۨ4# &e 79 IH5z+Vtǧ=qlo$ۋ$I*eSsR_kW)CCCs_c~}Οp #@]]$B+Ԟ' _?7Hc%K< ~քŮ]عsb5[}Ov>4Ѳvcx_BD#)L^|Ez-ۣ>)?mRJPQdY4-VQuD,P4)cg:YFi h < 3I۷{nymƎ;$˺(4l` vr[*?xT\Í\))Sz zLJiiE՜;nـsUץ;8N7wݦ> XV91K/}6޽{ٻw/űDx&Pl#qލsἛ ir/Ďeڹ~n^:PQ.2&b&%m˅$AIEuy^}Qmmmݻwy ekیKJ-Mt8i:JhBʚ5vil\fkیKJCb!KD+5!ad)d\N+ I%120M𤹐$#0Cw:]s¥;[;5E'$I;/r5M48Y;-TVUq43bL DQB:;Yĺ˒4\jb'E0.l R&8ek')!Z 4lyx7]D @rf͢e+(&ug(d Ws׳#9b@\WF?X6bw K@3+,T\ UNFF&/9vu DcpX-kYNMخX-BPT5|N)/u%Y3AmmT4f())cLӰvM7AJu;;^vr= 'Bv/~^JJ /7.k:ڛRT }Els8y$B,)ȗaŮ R=x,XPas%L |^_tOq(zvpBBɩ ~tk84@$f@[[>/%[;]NnXzz:dq# sٍIcp(@GISeNh '5dIƏ%`0z&>zjM4|N)u)x|tguv^}IR0j]}+o5W/UY ?z̲Ji$w̹4վ*|>_clӦMYj2wHm]$\ʖB ]CQ:4cm&<1먅C8VB`0DMF!L$IF'F S*iHfc={$l-;q.`úu4i? e<ޯtRS.pHN]hhhg}֎ävV#"`0;/}]W5tdg&WBi@Wpã yP-'Omw@~~m jk܅#4ȅl,C,*CXHVN Crs漃hQ}}IDAT> rboHU/GUU,X0`AH*oM Нh?i~ -Ryy]{9{1[ts/h0 9'7!P0Lk"ճVTֆXd h晰b#;eY&Dڷ.Qh^z*U$Y0 PL#dܘ'>Y9v(UQ CȊLs\,8j oRS/i$i StK#K#+ bDE* [iQ`̚M˒֌$krd iUӉ먪ՆndYA״XvD N'YsaaMCd @cj$J65+1)nҥ ԟpY>i~DQ#?s6R{$uֱgϞXRh4BMM ?@sIO> DǦMxmgtͤ\r5^a~;r7[ݻww^Oqq1=, v6K.'^-lR-8X8L 7QcOaǎ)XOEQ7hv4&uHp8]{MFMSD&my/rREtgy2EEtuucD'P|gx8.srϛ֎0EG'|"~L; uk Ԍǹ{#_\ql#~ZkƄWWw|m4\iG MgddcbYʵkch?ldGY#xǧCjJKKGXL˪MjJJJXf6`[K9֢YFVL\=7';,Ę6bqcq+Y7q]%67$۹ca %ÂS C0KE܍K\*dIKt(.m !?՗||?7!PUն使w]eYn+eyУ B}c,Zknm!㈔RJ@D "(4|e+Y=`BIENDB`lingotek/image01.gif000066600001271374152100561460010315 0ustar00GIF89a      $' )7 9&%* #< (7 3: '$#<+<(84:4(/)(&4+&84)33333;>>=;56,1- !&H75Y76F6)j75r93y=5W1D)F 6G 7T $C+D,K+D,J%G3C3K3K8G,R7U+R +H"5J$8V%4O-;cEXJMoR IeFW&YG8LL0yH8oS9Kg,ri$85J75Y*;P58h5>y+WF3RI7ZL5Kj 7SA4W- [p7hנ ٘rh{HW0ރ}?.xNrҁ5ul΁],i9opn~a ;{EJtZGr, sh`H%n*(D(  (F1^)m=Y+ 3a @q:Zm|G Âٙuoq͑|YPS$H;vAB{t 45A!WAf%$`SXA)`:iw9G**$#4j<# ǡ{މ Xq':y2;,)W&`ȆXZ\(s[*oDž3ҊSO>lsF O9)8ϤU<&`U@:f>k >Y07 H'AEВBY-`@bч)sA!F"%P.o& +]%lO T"%zu$G^Y*>ɘ'  hf5'vcX6[p%p~r@D`8cJ&Ͼ)O L$ҾX19) _ r@ #%J!nA`r1RaC X}<"e j9 `Ϥֈ m_Uq.p:#.H#oLWR#(pO) ~j\ԂѰ cE0xf.x"ǘX ^FZ%nR ZY_&KIŖO(PĤt˺`ðkK(R0l~.o:uw}2Y(l|ɘb\F6`E, }8^M8Q g*aZj7%˕` H!`ȸ ǙLX= G|Rdȇbſ9`pFҨ "<4X>@%bѹQU> R&P%pMfLͪVb}O XݪXNJ>x}%xB%p\J׺xͫ^׾ `KMb:d'KZͬf7z hGKҚMjWֺlgKKRsے hx.@ \ p \`Ȁ6 H@(Pvt48/0@#Ȁ|`7z3@ Wh.ip2|``@p+  j  ?A dp@ bp X8A$\n0 1pm|R:s@9A{& . 0p \1o7] l 36~Ե4]6.n3砾? bͳ78 & 8bWYz/L# =r@ +q|!ets0y`̊v<x:8پnilw0&nL8=t? 6E!b2Vf26wszw~ xy'zy70-Fh:5]zH \gnpYj2@fp7pF{u{z?xep{/[:k5ag兂zuc:PFB?iŅ_lg0\Xbucugc_u:"VtM7s-601n6d$'S+L1<yHy,b'(]Cp7'H{8_IKU _CsA< }[ywD7r ]'_ا5h:2G}.PbfFӷ? ldt&~101'Un( vf&g ^6_f]5BWk3sAfHb%f30w~`"^N` (ew! p Qgb C `p! 0XTw;)iH@u#?A Up H[? $x(@/$p(Q `0 Ky0 'P&x~2J#PT1v[Du%tEm]L@7]o]%qh87c0gyhŅc)`dc4@hoo5sueEu|'gh_s6_D5kwi`t1m3h4nxif]凪քEGUa`vA@5fF!I2q PN (Q r `g0 (!`(p  ) f )` J xp$*Yp Q` Zːp) &@ %OBA J @0TJ{Q z Pǀ[p 0~pzɗVl0 i42b&w&yvH0шL3p'^zuy7d^]5&pc_[pLFa4 ;x?4(_0u]]-d67G8^Ef,3vb91ihu{j=I7d6H۩`9s8@j;Dvyf ${'Ā0T= sN&`4FSщR{4Y9LIp`0h o *b U `$Qiʯk}z3bUHFI0@pfb~嘌oq8i6g ~ǘQV`hpd]™e?H4`mrFh[As>$^g^YF89E%dh`y~F^*buи@13PE! 4-] P V{P" I@pNp 5I q(8i&`K #@ڰT`!&П N )1Lr$PKHBܦ'XIkIsH^G0i}kO Eha.~[ `sx'hca(hwp|@@ӆ]:HAP;"<>Y۸qgCFjfdd Vh7HriVfܵ5-Н0f%Ƒ *P g3H``? r!1g+Qi8 0w] ,QgI B0*j N r0 pk/u`= ?Q i@I4P^]ϙb,:0F{ zIۚ]H_Vb(0siPaPy֦uftE™6`0z:P uk v^>u]Gr>0.5evn<`0ffNiUH^cGnwqjfY=csIi/@J R@II2XB{B״ P Pxx]xz-pIZ& 3 Xp}4ֆnj9˼: WH3r%}}-x@H{wi5ѱ)}rx`fF],r_q[gݖ_Mw"'u d =`@>@@%g`_k1Wa4j0cLjdwfjPab-Paݹ^IwaxFn-`f Ȁ'(&`Vz A+ͤ, Qp`0 *AJjw>e͐bOV̐ F>9J (VuẀ](m`] 1͠ތ(*`Px͛м!1A"g_,&en."WU6w]؅5z=b]8`0!'@ dPe0A0. u`^]f>`6D@ od`5kFʩ3hU0 A@@f sp&[X43V#B> 1fPD]ϔJ !4R VmܰVPQ X5Ey h @|A?@ٝ!Е0 W0 3W!$3`ba#__?&b_:@\ca'c}ՙ%k}[y1i9h6bW`8fD6¥g 0 {dp @e _ Pe%aG +` V`LhnJ,a;f( BR [1+p9{`7!-=Dzhrj"_6fMX? :h8HD$ bȰB 4dXA4T`a $! m 1dȑ 2pCdH"Vg?媵=~긾߽p+ˋL]|Ā >Z?2hݸH\x 4h\@LcZBÅ  <>ҥMFZyi&'PlmƝ{uKzBMu+Kb\r%SB*_sudQc_1bTxqCF -0`Aƍ ('2H /j06 dI$ 6p!!baw]Y%qypȊg~dTuAKoz]h†@kD `^/Bl>+ j *L* .,/:?QFpkD4@ACSGK.QKuk#.4>s#4=S5xA7}S1n` `v%"6C$ ,`%hh$h`%2.83c01`x͇ `zxG!w1z1oGpz#p!4}"[s> KVd @ T-+ p*Swg@ "t@=,H#Y@ j*= P0/"PB`& h)O#!qJSfzx$nۥ]w)Fz`]d|`z ~Z,‡ !h=(/xLO='"1 տ9 r8 !;9h矇>zF쁿j=XI ~fsV½x*z(M`l RT2 A xI)>iA! x܃+c,rU#=8!nEE cG#L%֊O \p5 `#F\Envӛe0rcY'#ic""?h1 d ~{g f $(*rj إ 81oB@nbǏʩ]RL9vU i<B C0noHC!2QƘw╰@6 r"O=/fg& k /gX:oNFf9 (i[?nD8Hh0֣c .PyYúAG6 U#\OE&@;5Aau+>Rz0G p m#xHn0MB`(Guх"Sv!Ryx >xL`>9b;:׼ZcX~ez2+d XkDH /HCxکڦT6V]HN <a(?1}F؇Sas)= 6Fbot+- ]a!bƗe@Iv~z9\#"Wzռf6SGM \Гk6p(0Q/îɁm X$ FCFθRLA^p+V=b{+q˸Z%1kUx#[вBȓ(Kd {j<'},)20jF7iSN"W0{'P1F #FB x "XJUrBΩ# A~t,AHv)U)-,諤'UrԚU0(޸LQn 8\~|g΅C"`HB_1Ls1OvG D@ zAվ^m@B WdWa3gXL2 dMqF@khM9a6U@YBɓ+V9cqŌ) sZ}ǽ@Fys -ʏZ>{bG [%^u{Mh4l{<{sf Z`uhLi˭p$(' ZiH_8!ҠIzxxH-pq[--ZAzY^`A^|aнgcߣP:x d⻪{i&r'F"1Rf+B".A>0 p 2'뷆>P{ 7Xjz 0pA[9zp0|9 A p@]={E u"cX鶭jڥ-!&Ȁ?I,i8فÐK@ 0; C 8P$#λ i"ay2a1 t )sxz9]DJ9BaX ^^`AE$I^x^x']Z+bb*'W#p xFC mJ|@MXCWPFX84z DxltЂ&DJ`Ld6k F'z/Ȉ 8ҕ(&Pѧа DLDFb)1e)H]-qSyԚdرtٹT=T\YT$ޔZP 2xS+:€ X )T KiHKK3PԸJ0 | SK|'~<y8U OX6˖-Á`2rG ځԦ͐=$0> Ѐ 2x̙5[1 , dHoDdȱL@ 1iґZ8=[t$ɕ,];2}rcpiW&837O4Ȅ]D(O?FhB3HO}O?6̀r8`x aC,J Ekx6A$@a1xk9ta1z"e%UQsYo=؃Y=^'R_˂+&АP: Ơ;70"@QXفDIpKh|83 HOJf8h-$0KeRȃ }`% -tB,dxKJ?EKx${T4(}ZpSCm`HԸ\@(XbHMZŇ4B00H/M1F%LO@xm d@m5{ m>&ځ  `âX ƨ~rTz/ֽX#uXy,}s臃z@ViEz@Eta@a=d[Vq[V1YYYhI(ԅ,R_Ѕ2Уpaq6/K&I= q͇s8O} J1ϳU6YR4G`4XT|FPtuh%z~eJ(8{P%H[tPZePx@rPՇ[pPG|MX#.xӐ8uZE\i+-x8$QP{8T}J5b0]y*]8tT!qc]5gA(GBpňY}rݜ P<;9؀ D̑lvQLVoМx^AM=V=:Ѓ$WsփeRۅ^:YPɎ, ؝Hѷ% x ΆEՇ?uOOEDJ)HpҀzHp d/m%6Y%Hyhm# D0H4"{Fųex ,-q2pPD-^dMf@q(Do(>ns_2n1XgXvng^[_I &20 ա& R5 ϥsc SEKy؎6ap&ilWxքd|h3pk( zHjLTZj7<4Ԑ4(b">ApquO@-Jv!3gx?pҸʬtN''wvD$HH/NWy`򑁍nCP| #qT1"k(6)U6CVY ]9n^^]cJL=sH`hdt``dt߹_V01(/ /20tuA'QI'wm/r0 x 7`lv( $b|Yi?6pwhҨwnJ'~ԿeOC y·OI& yT?8i}H!jHw> Cp<>DJ|r8&y(А6Pp26.O, f>x~N"9vaƎ1&\Ac2X \.^|AF9h Ń1oȠAC2~<$ʔ2\#:XW/u} ^¼mqaťC /`|_7\ęEl֞=cԩ̗˔Dp:nuK\jEٗ.̻j 1l! "Cz5nI 2n`PA‡/g`ߜF!J1*԰[I D7aH.Ç&0/(9u/L ӌԣ#B`p4>sƒL4*6E7 Xi w[ 1pdN1QdM0GLhN4ݠ4PA?0l4\p@t 9tWK/\T 0G}8 ,.!z|!]PEex-]&uqK-r.,F / (+ (A|kA3;0 q>gLPܠ&像1 le:f4Ҏ>ǜAI&8q;^ `f^01 73A d1%Su\tZ\PL!'b!'d!tbS gk.C̠Cq x:@oF'@`F1Ah:ҨdCv) 6D:K>v:IQKV[QeN/4+$3L}0} -Ӭ^I$aG4|@@0-jM/Ed!s͂R.hQ&*@;տ^pkHѴ>vԳ# 110$ 2=8S9#i [" "T u3@Lbj"^Ѓ P@yA4 ) d a1jQ`@p z@!t@0 $l V9bdx 1,`!~}X0=EC/ h@H-mr4e ڂL 4p \@# a%4I( &H jHLD}iG@4! 9}9<8AIӐl$8x'ujD6q$ $#5 (Xd PdC0G `m:GWҍY"Hh6X 2cC,Ї_aqC`$|@0-Fk-9Z",VAjʉ 8iMI8dv$4ђv!3N'(-l72'-Hi02="nFz 1Qr#@r  0R{F0Ҽ$o4rzx@l^EU^Z/=BdE4x8D;y X $aIL 0"0A\zE5 :0!vC8pB)^0N124b -=pS5 9mP( zMt(@J+x?ie8@'i|#[hY2 KDxCЀ" g*u0lBЁxH@52a (N1-.D@@ DL XQ ĎMĚIQ^ AH) րebIn DJGXZhʢ|:e,Lɀ"d}!C.4Ct@3)1B+B!,AE!$!H`pal yOd. CР0lP`a甎cJLĨd **VL t  Ml N܀M[IؠO  @IPDX@(D,7[$2-!!ALށ ]x4]>DxAtu Lҡ!P`b(-/-%S q(`a@P)"NNP@DɚH Q" U= @\䀟[ :@] L\L PiNL@  \ @<.0/!A!=!B!]A-A$,!c A@qyAOlB.A%X@]MÀ YTnTiN>'tF'pn dGRq#V2FtH ņ XQ TĆ8C7B8®B-//X O+AAAc6AdaAifrfT@Batatx`h"US/d-$eJ!KqnȀtf"A|RTSA۾|D88DL]J=pIZ D$RcMI^"4^&/@h7l-A|ꧾA?NFapKgA[ApKxCfGr-IATN)FGDf |R> ȹ~DLL@8 nЀ \MS稨NsX N @  <@ `-  'i1ql"8 DmTqp' , @F`x9U7qSCȀX E| L4 m[.D/C?8n& 1vA.L8.tKFZB򶈲~p+UPEqrg@pJhݩ?@4ˇ>)C6?q3lB"<5^?!# I:> ZIILTv MPbN\ aאePD#C@B\tt/x?(X"pwrqz l |,ؒ,r_-75S2͆Ax5(! 5#9mƔ?DZg>|Q*96pt3!<: p:'O0ѹڔ&.OGQpfE@n|& "@VFЀAF0A^"wm/ ^nOvr(Lw2N@4 $Pā\ɗA+h_5lV-,BLI-ɷi@ QA$ {Gx@ؠ| |HN @0 <@ߠ$ # @|>lM_7!D@ ]'1XڰdȮ&|M&lC:$B?4 Bh4xC@C G!72'8), q8C x3>\C<;4C H7ONqص@ Gx\+T HG)1@ރ p3# l50ɖ\>Xi HܠqDn(hЛ؞|9 K&DMtJN JYG>-X`.܏yC<\@4[O4Cg>D`g 6m Cde'V=;(@֝\\֭&{gIa4|reHP)>  D~N!-ʕ>KΌ4;g?x#fŴ>HFZvw?{U8pQ ".(cG-l̈qShB &? 0d bzAtЁfA $@v@ @_nnzQoA>c* b*P0Xc=_jY /C 2tfKPnZh)# (P h Ƞ !rઅG}!, rds+1} +"lG8 ?L^Y+81}vKՏ2$:C 'IdD'TSUXSc3v͐'ub:|J"\'M1;czٞЦiZLNXzA+ v=\jd2P t rd1s hD ad 4@J n IpQ^|Ao~GoB8L h1X ZtɅn^|ᅗ\f%dZ4< 2MK$w3:nプ} @ x^mGSA ^9C#bǏFQ 3p_UVeNxE/dxbw!'|5EK'IY߁x@ ce^VItP'ovܛKei#أ4 y@D#@Blt0>H L#ك\ EhA &$O L/ȋ^tޠQ/oG?u eADXRx0 e (fq[̂tQ_4%9у/" !TP"(`Be0@Bi &4'u>*0 ` ┽B, U ޷P50Kx;_'`6?zch2R, ì[b5{~Q Q0T+^I_gAĩʙ@yΓa3X!c =e=eNqtHK*( :*>P (qL#A<4"| _bq/zp C7:p-"J8REd" HHBF‹a" \h%1aMbYe!:f-d THpP@`0`QI= LN_u]> 8f 0P%!9VhLlazē BAqNdDf9[}az#!YJ{O9~$4KH- #Y|KNғ?1vX`>q4p;\Wi@zJШP*E1J g+!{;z ]N=-z1pPX7!t\-*p$ Y"f4r@%AqEmYbU A6EI9K9EP$J?P |X@WW.ppyA%C` / PBie@ ccMNPaP8g1B Ҧ<.8:0`Y<[ F l#C Ee  7Ţv@/0sТ2A`t!H["Zqm*ӸL 0~|L"Ix[ HHm8AkugG:Ap`n (ob@+>0&,d=B```Tff$\Oqnjϼv0@d4Fv`h>&0t\F-I/)J`>x ~H|!pPF ؀ Y`HL@h $$ N˺,L"鼤^"˨  "g&l $@`,Vhfh""A12#5r#e=rr*fB.Ds`ch.aphNdNhPO6PT((Qd<,=pB  p̉|a|/$ qn J|AjpMKL,j! nQ M$9J,0(,"*4 8#A34EaH"tY2 4p`qx`U}? b0 !gǦ! p` r= 'vqxxa -r/ O,!hr@!pl2,,` ,d@N'o@FDMD )v jj@K1. b`pÂ`N)Ol*\ @hp&/!Spf ,@ W,! xdr.Jpn ,$.i,d[Eto*PQ@h :$)t@>if.EMTQ;(s@m0=lua6a6MƠ@X@P @)*nb`,(Vap5fA!kpkp,!["|AMlLS`Ҭ .O2dMfK ʮ($Ai.Z``BB %ZTCFD+ A`>%UUveM5ކ`,0%I@6Pۣ% {aeDXd46"dn@(^2u1c4kԡFAskłjs j `P3ot֪J LqtAPitMLR@TF~@0P421# vi eQ7u9Rf<Ȃ\Үix=έ7)|=9 lAak}V+skxmpؖ`L V/'|!@%^Ld'rAQAq o߄Ƞx! l=OȂrEk5bHnfnhUQXmfvwv lE_47m>6{gs*Tn | ×3kFly=Lvngf2Z Jop- '  ABAu+.u{n8sV;8cap%q@wAтtc^4&{@YZ4W{t7#`b#{eT  J!^H]tVyk0&G'6q ?xw7p^,& W+P b0H62:z+8 yǧFhFz؝<9XM r/L*sddqj tzNmyFƮF=idH!+ QJAFC a_˳ ^9ޗƒ؇W :\V{h16[FIb^K+J%=A _®6:`H @fi$t(ޕ^wNLu uK hPed or(Ɲ> r$@\@+B@ \\A8a1^:# lMF*>tBdČ Pq=m QhQ2f)30K)dt̐4P N: !\Ȕ>Nz*#UBO:.B$ d<(5 QVu .0< CEC oäO ` ;!^t7 -8T$J"8B!4I$QBM?7d> .[8xL, /٢GzG-2u7-+,d!]AF-v؂,Ԣ% (֡KL /` Q:䐃3` e0 L L8Ea <81 )RO2'\NT_r8kdR"OX0~ze*tR=:q y I)4ͨHhq9r馫: / @EQp 1C.\TU<{p /C$P#!0A#|B <ހ#7|ceOlƚ/w37 3/›_dpĠ_b](,f@_ ׽t.![: %@{Mg 84c28V `c:|> hP@b\eN>HHN#PB#k(:V@iDi+> G:P } !H B ‡1.%uɗbXI!3b ,ii6hqWh>Eө2P6` ~$" )kTz`,` Ԁ/`) a{ 0+ W! :0a膱!̬2*9> db0NqtCGHpByb4l8P.tAe "ש P:HG ?40P jЂ d`=6np @%/#T<#{ HD &2!9E#dUOJ(VS /$i @lc j$|C H3ƚ &,];FhG1Ҕ %vU bunFw0;#H*< ^Π.AWt\̫:p8aPXŲ#"u-#D5 TB8R+tAL< 9jT =23xb=+v ~* RQn0b;Y-x-6HżC# A ۻ$ @|qo0ЃK 8Lb]d+F_K/AZº ¾v! ]#YEP ~,U2A $O+78T\d5@:JbLU V۱QxIԱ# 7FP +K`H!5Gш LtSvDhDj_9h1feُ|*^ nWTLN/L/{0:gAb<2`'w; 4X/~|CX;>qmopq {f4 l׸nыW#t.z!jz0-sa]Vr@ Q5b # hq9|1,q}"RߨŲ0l~uru!b 6 d` p 2@!Ph1 'P&Fe4F8Q @5Qp ЀBZd ^%A+GT7T:,"1Z @"UFPp ѰEgGq7vlwNaK (z o_m ,d q^ {@@ݠ qn Ұ{Wa #Ԋ` uHPbӇ@((tpd >w@d258:cc$S?Dc7 bnJ!lɜ;]9@*Ӆ(ۗG;`JK`aqt# A!an]`^   n  IR F Q@i/(ęQAxc8?@?}"32@,64t )hIq W0O7;FC˕;\dR!=BK`8q5p@^%M496+߀! )z a߀zf#mV q ^Eo @{q  p ֡a/Rǚ:9c.11pLA=$C(GPc?[`UJ!8ߊ;\h\@Cp:;Sa@i5` x;4$X#-s&z@TOR O 0?  .@a/Y`c `!b)* u!&*|d0eu@; Dw)*7;79@JukewF;;չ;Lq)L:;~ ? kY M{ٹ]a0 iOCnzz $ EAz A8[` JA|!.O1Ɗ/fubG-;e@D>qk{vLFc*rw4y j02^dl й@t Jy>Z>0m@`d H@,_-XoVPϐ O.z]RLewa>`w-.:Y} wE\xwc\~)/p*( wzCp' +] º` `SO,怗 `#|:2Qr P@hJ+J !)-ّU A0}B 5L3(:ƶ*{Q.Aqh1/li:KU)`XrJ8CMLK p= '!M\=]0] !Ěa>ᰩ# ĥ>B l P;q`@ȼQ 1!! !pAڑ `_PF4К8L6ɄR<-;`c;%21}:J9DxuKD_6(; Z~ڰ4Tl5ޔ% *N,y%_qɟL7 Ȑ ݰZ г` W`EKaY0PQb$b*3r4  ˤ*P˚:7|ZJ]#cKQ L@e)`05]p sxxyp3M]`NPm00a, _0-O zOJ~{P Ҡz Q|pP%F  H0@`ݸ>*;1 0 27/@:;ɔ( D6pCS 0Tk% #0&0 ڤ {ESw,B,冩 -z l~ @ ?YM{@ Ҁ{d#ځخ  pln˴sn;6;@Ac;oLr}2`ECG`B=]q(+!0#N,,Bb f P@@~F{T PW[pվ #ia !:.NlF I> t1 BLxQ6PU)c1>PG/i;=0n r0pM/p\=# rxk "-3]>zԢ%/π?RaĈπ P ' PH̒ M,oPW\a }&PI?*)D?Kv:s @x@vnj;x :H #@$`(;t+9ŠM'"^:1l^~ M7o/\u9_ݾu֭,^zέ0_fϬZv ׭&MZtъK3]hYuX%Kr] 2%tà A|̈1.lp" `\aƌ/Wqɕ/gsѥO^uٕ!3Hܑc]G80`#B0dLP.n D'.Apn Yo|fqqap%n ǟnŖ8|YƘF]{n|Qg1eEKƐK[Ö_J/]8@` |` ~!0 x &ȭdh*8;uQH+Gc#;O&N!Dks#,,:@`"R"L„$F&+h*H@_iʫ{F__*qVEp 癪xe-}I^l)1shcY噾񥲴f*ixхУ2ĴYh  ~h>p^aCe-Q \aFA#LSl*MGT3{# jC{:h꠻~0BQ}=\xzpx$`%{&`2Q@Ati|Go ^op=Q}B&u1Zxsn,\5݇uYrgeKZrq̰y˼E28P 98  ;. rv}bNzFCFk!Rr :+sԘ@zMA`-5Apc!l# `B.@10 2/ \JtF?‹AYi-F7._H-;j [x! Ü~-**qn1ʣ,̔'-lq\YuN2xM|COf9A r20 ؐN"& 9H3< &R;3ζفܜ9 <B2$.L` < IJB=C|;;B;K_ȹu_W|oQhU]Evo 0[Ql^/صFb*. ~d)(v,M BMK}np" /x"T@M"(%Qy 57 8 j2'L#/$c #؂ni0SKJK [cHCh;p8:67 DiI$` }HM$ *SЪPlMvCU0BA 0,V^]u`,`,`AN:܄e,x^/9Z?"0zF|0TCRcx1Kbrſ1-]h\t]Hc%dA-n2%It@@Ur5g8ADm8AP# p!PF 0f AMCKy0.a6S"0hiAZ" 8B[ d0Q[wp 0bzfY3yaG.\h4HDv@6jd|:@( ѡIXto%,1 nE.r{Bz~c[2}3!=,_я )Ew"̟\1dЅ2 z+3ZY@g#Ar H`/ 0f] bB h3*secjNĚ~hD6Vy1 귛B|x. (9V㴡W /`#ً'(A~uqa.9@ bF[ǔn &0qvdp@KX] YRo yV:<:@ xF`nlIgH0^Xu Zs82H hH9? _PFj]0HʠZй22 *P p #p  CH p Æ?ЂuHM &RSCmH9J1A`$ NȇtPR؇d8,XkCpC+4h=|XMH6X8VHPak.X`(/ 웷苾蕚x ˂bq }ZأoP#K婅n/2򋁑$-!Chx [sp L 0PȂ,iB gw] ȀyZPh ȍؙ(# &t%)4?wB(pDѲ-,D&&:+dfHJx8ܻS%zI3AptwOH,,cDs4<\+9L)Eh;(8o6g6`h@ 0 X'"(j}!`Hn a 2(_pq .(pXK9i(0Xq`^P r)q ^`$BJ pG0H Px. 2Hj48P^HY';# T9 HPQIW%|Fh6B|41-}H;C353|h[x70!/-3!@|Z v*SX2$C0+%)hu 0(ͅ%.H vyژ iAP \T1.MP.>`/6=lg(v.YSPFA00碊ȁ!hU .֎qՕqώ ڈ.n ([|P$@`76/EE`\*pauqƿI#1hZ8ӟ0$K*K  CEچ[ ʂO\e*й'\N (K*4x!Eu(.qZu[gژ. ԡR@0ЧPe[ps[rn(cLSN>3?7EpЅ\`>^ ~p?vYf.tt[P$Yx_Vj8[Թ</.*g,^jPS)(][oyCmKt@(vH ؀c߀`px,S Y>(hlu]<yti$xK(y[fUwnF^9UFs0PZ'`йFRaᄂ,He 7_1u_8 /yo}؁?ٰhڀЀ.v)E8c!K/sn L4% h_̛3ۏ[gכ0ܒk #/q=F3-((y  Ph\BX,b T,80`D%HtŌ.\qs9xR"Mt)ӦNB*u*ժVbͪu+ Afd,-@hF& h0 P$ٰ @$8@AT$%:t@ A (!'`AX@8  lAAFz=k\r5|˗1]Ju XpشT@vo@(&p|3Afٔ NТ.L/RK-cFD~u*@P% aXBKY4(9AFN!WH2GFC1 1<>a _/-k 4`m#7@ @IPޥD!/vBPA:)PJҶ$ c` EPAHB A@ G)R E,, %Q@c@ }9, XvP1zcg?b@<_Xx0lwS$/ ^H;c1@0qCۥF ؍nhܦ&/)$OH~k%B7O| )K dk'H5jϣIHڅ }A@ v# CAp0=4 d`X"dЂZm 0<` Ԋ j@0$hJS#24 Q@s$6 i% 8.U:FO @a,fɉ$ $It`Nb`0bSbz>Yd}" 29 ^p Y4$ 4VЃt,h(fx8ih@3(``.&˔,trOjgULz%}ܲ-0(/caN)bP]E(9pO"Nq:1n"";ia$W9/&`0 ^` a fo a4db) 0T)h+PA)KX|<@h @@30E=͢`?F(ArsbP%@0@ υ0w\Tҡ@,IuM`is#”̼ `%FzMΡH:M̖ `n"AtpV 8Q %ځsX1&+|Ta+E)D/lz@Mϵi1F4Qp'˸IL>@q(tl7dF?L:ᓿEX `h5H~Hlgd锚|7:ٛhnsKSe:^!Fx(8M,}+:)h6pת. piN u'MڬY+.!NdH-8H@ضthq BSk3CD\DNC/`ZTDڦR#dfY%U["f'ӑp;@aPa0H0xM!| $؂% PK8x0|#qd#(B hFKCh| (  >l(%`G KC)P|t PD)Kuw䑂3r<lKQFIC|*4#@fM&y],A  tڹRz%\KepkK%G Gmi\R@ǚQDڙ7-[YbEǵ)FT Hu y&i`$}fX AA8 8  |X<#D_ @(9#^!\:$HB@%.C0@' h5 4!1)BR(C ?4C>C2@)2\A(C2*$<&샢87|^R:DB_Th xM@d p[D4ƻ4 pqd 4  >Ng8ќd&I0MI L ~~ !򴛣U]U H[ސZ%SY@}eL&qSƮy xt y# @H,!RH=hA*j-C Q(B$*1X4" X> RRH:2\4BR)9)$3+$-jQC8;,> d#RC2*Z,>eb W6>\By#y  @H@DԫfEE%% ="@eiHFjdG *GդQL-W xAp! Q`~Yp۽FH]0E!Gf\UM`urzZtP0$T!g$TCRT"ŀVÁQ X2_C2āV &0$ԃ>D(6 \"\X).]RxR T4܃>TB(c  P6cvQ$PCe%v h3'n_18X2E]&ڍRQ=5=$Q.d>0F(viS<|OP 4@'ML@R$y I;ZK j˜ عi˞\J/EJQjESzR%v]G!x HBh2dHxBNI* E* | L!e©%[+!b^%C>`:B; d:Q+S.ma"ŁkR<>mAcVRLhi8Ni2@6uxxh;GY@zqggͽМGI&q`F`Hݣ ͙i}'V*yg"Wd@NHht@JjjPZi :tdE@ p-* VC3:<!C!@y"-X(0 ". L2A+>4 3#>Ac6)C2DZ^r"R%>Bk?>C,R:0_R598p>Lp_0mR@߽Xb.=^^XTtDĈf@g o>@IW@ƺQr̉iLaEVi$z%$Ufwd\o&J&My(`TxZEP*WT H>L D)P 7h dA%ކt.Le"]hde_!fv8n&PQ(|%C3XR 23V1R08t A E VRQdD@ M˹Il hn˽РSH!JˆQ(H0U i:휭}(GrЦQy8~HF̕Fu g40A @AY `oBõUCC7$^tF ] \GlV2ЫŜc9 Ҷ J FnpnjU :$/1U@LBN 2Ʉ]T{'IwPt]oVt&@gc;G}LFuAi`@ 5tb\k7UuC A,Uڠ@Mmz- `'Q:A6@z\VTH /%MLdd5M3@EK[Wx+!}lFY&KY8(&yvK$X  @ P@Uw]vytwCwP: lb$ek2@檅y\aڱȆq6rKv|thQIi$F@rPL;2FjGw*$tZ$ayihdFw]( X@i  ESC>84C34$AD\HE F!  4Z̽Ł =8 +>P l@XjoRtf#l9wI( @ r| D@XA\E 8t-o#<<8:! ԅ6 0HkzAuAglKk9r^XUK5ax[4{\KHUӔ Ŏ֡Nr! -%w; G8iFr^!%TYL\h£}@߾Gd ]LKm_x $pfq[Icd:m Lb;˶'͚ i4 i!D(2F5ܡ]f !?2my&dF0A T{tȟ!V4y\\t+Z$`c"HHi* :Ԝd!aJZrUG xԐ< ` pA& 0bvLѣ‹$``!A t C](@5~0r 6ujTSVzkV[vlTFab48d PXhE^ t߼ $'ܽk ,q 8bT`J,p3#p  00q$LX7Hѧ Ƙ1ƍA> H$@2%,营Rdȋ!Bv2`肀4/Lx+ %@ ~ O&%tS;O [ :h-ҤtN6*ŕp3:7۴WN`ۈ#,@$H0B:QzHN-5 yDvUɀ 4pD$ /@NYK6 0HƗ@[K~Kk6Nn=;[,K4 ʳ@M4jH:RS$̑+z# pɄ . #6-A&xA6Ђ6@BXcykfMWRu1^,[1+zd.ӳ%O8κآ hJ< !# ͺmsNIvnw U@HBr3 \ T'>)XA ^9A~O D#19y#DX D `$GLS1oBqTH#ؔ@hDaO0*P>AQXG~H|db`aJ<J(g 2O@r\opB q 7 3N0O!/)`xN0 iO*rG2@- B| 00ib0A+!53#D;qO2Rp u4C pb @p w,C)t O/!d(8!)HG2RP|D/1,! sA( p A  D( PfN%^bT8"LSڈu0q9 iʸ(qTTC*5a62R٦Pbցc'%/ JJdSqWLIe D|qJ(V+Lf .u|@dJ-=M}024+R0ml沼O/|P׎e ˔?*|o19#JL$ U96)ح>pu\|! `*kg2A qъVt@E8UFU#,pX!ƕαB-.+qVuVvB2ŢP2Y7eqetEݮǴ#|`%2#F<\9NƛfC. k}[}XhhM8 ít.汏u\]EԑBĭ >\ #[)Bv6_{JVvܔrPD2n4<"mXмygdԐ[\[qUy7=^6ũN >5nF &64BCTbi `ִȃ.NyG!F#2EnX4#b cP1a|ط0i +X#ئ: lpG:L᝿~Xuh1t0)Pyع&x%9i6. 3΀ PF )!.P}_C~+HŅoJۿd%`s)᜺@mj BBa `/+r.;?CPGKOSPW[_cPgkosPw{P P %AP qp8+fȎb6fʬ N0*Ђ-HctRX,+Z Hh 0! B 3& bĭAb")A"-  b.1e+Nn+++2у""5-Ƕ4/V) F`hX aaJaZ BBA¤P1 J!PམAɉ)| $a bJ ǪKF @*.  /a I N> >)ʏ   o`Fh&a zl" 1 ˩؋.Rh&ɲ`4 @!i8i[h+<( + r/N1"HAHCz N2%W/ RTl 8( Ȥ?a넪lJ̠ ym! 0aa +@H4+:K >k!*ȭRځ8˳, qҰJJ3F!TJ NNH7ApĪD҈Lԡ@BL@Z& ȬJ&)* )S3:իӻЀ2*8 HT􁫼 |+4븎/I>9ᆬ' *pRACkJKȶh)ڀr(h)뻮+r|T !౒3&Ё@ߪ@+>s(lA A KJA̷A +Tt&:@  R u> s >  =Oȵ s .a`"l{>ހӷA ,5_1lT25bzoJ *Hr`X;j2d* Zc6ո`z7 `H03zk+]Dj49wB@ l,.dS k+  n !V6Vf , sll7FA ^ d6f(wkEB@q`9aV VjGoȷ-]Ya@N/fM) M[m-! 2xg6p7 f$׸ r+r6 ; 6TkB  M FͷBɷQ_U!WA ۲ m'qFT0"!@])ت} "θ+ٜ0XT^*b0 : NsH*B,<)vL ܔc 61 7XV/me( x%[RBզ@-$o.b%A M^LVǜk؈ג8s<(-\ӑKMEGجZm39)`T;טibd &q* mŸlbZw (8ljZhջ܀ Y 1`uT nx;tuŨ`kISm.k`l OkaҞàT 뢑ے f)o#y\Vk}( ?&A& Jͱ깤aKm BR`& @PBJ(4񡢡L zqb2h%7LXrl2@ |+ !a3 `hjJκT:|NF"Lz@8 TlB[.rA  TqoI:8Kz" zhLaXKԑl8) *! ƨQbA$)FvL!N `}k P  Pݡ`@l(T;sD [On% o j(Ie"J{B` &0 癊0$ ~ȵN`L Ԓ#q,ײ)`,$"?<.a B FA O|)nkcנBsVSr˻2<`+Pݵ A*vk`D/9H0-M]*P}vc֠hpJO$ W0pC(7*,RQjAA<l ]CH=w ם]]^ ^oRA S,*Pᇎ W&+Yl@|* <-7e9,aȻ<ݍℒn+-qox\q+>^+ha". *A36=S :*|r^+j"*"X+1JA M9=>@b,">;BiSX>4?F2AQN虆a(AγppҠapRػ!1Ir*_l kA'U*2)D1ɃAi=X H| f*.*Fj+ . &ҹb컼K dv"TȄK&{‰){Mi!>"Ay>?SI98&H`ʆ 'BᤒN2KŃ{ 3St`u;1be'j8.}C¢LbX-m[eDCP(V9sM}hJ2Uf~ŧ&~bM`F[B2.װcVTAXb&Lkj&"*]2%3;EBM_1`<994}PFl<0*Is&$zȥ2wZj坓# $6R/5laX4,Oʨ`sеN:1)D}/"R3SE5J-*S)BsɬF*dqJR:T"A(#.q#OZX$OtqJS~8qM.D5>$B)@9kLMrZx̕eT߅WcqČ}~<_NWu 2O$e4`J=eb)Q(J[;l1&0X0҄Zd_ J"RPK3!I 1fe*q +VV|#)O^)" d H$X33‡*2A3Ỗ>G$ =@gd@HBk`[*)>謀M39*x"aw=jo47>yFtA^+@e*r#>+4Tu>11Z&p=0,/"Tˆ!VkIRA@Ihܮ9("[FM97Hw! #)sBvuW@"J1NdQ"Td,s.o$AXCù 72! f4 %-dcp^'/#s@U@;^Q.'A{(2Ql R9$}xN 4IHqqxZ h :! #JD&pCM1#E1Z3 E)8].s L gד_\|! `"ȽOo>aPB*hw3iF=sHZ t&,Λ!ůJVlhx| ӛlI[6Kͪf7#)ɐZe$R|RYn.C I(68yq>fzy4nkel%# (x,?LR)&i8Bɂ=(}8og73 0ӍԥRb m‹ВEb# '!,(Ӕ*MʢJ IyQ{ˎk q#K"{$,-fk ,#$+OlF|5Ip30982I{I`s3M@&I(f* N@f}lrf7_DZuQ) 552R닊V B>†P|C͈Vz,Qdk>Q>@85)RYŤJaͦX\hM+M%\+D;Oa`HNdDRs7a{(=cr<B؊7hG&`aI#xf^AQ\eo= րjeSD Uz 8BПɜ |q큈T H՟&1OHZՎ{%q-PF J{ x ||Y#3eW3Ű,)RpRSQg-կLA|`AN~?+p $u<`ߤ^맣Cci^vyҡ9͠E. H@q.A%e٢P}EL5 Ho; bs0!qIZ bYB̾b +BB?.O$!,@p< ƲG< #m{s~xE8`ipo•Js^W1_,C >My'9B q?G[@%PVP0J 7H ὔ/d_Rn,a]vMi9#B%p]cU=fRBQjgJ-IA~n;ћ~yv=Wz{|mgO{}o+0oឯHOڿ -?d8̇jP ;|¾YOOOϿ8Xx ؀8Xx؁ xzw~&x'gYEWg0}|F|8ׁB J~R.z81JsL§%{G6~I=H|shyLbU`?H` V GWz8LJU7bs#U;Z!mlf4 mH@nʵ%d#P I6# `/s-N jH6|PoV@X Ja  p$ځQ'r)k/ + AgI "'(@FZly?$a\P`}u f`1/ VY$  b!` `MNr(9s3 0)eaꐛ%Ec9Ĝ mB`pp51i{ii&'I _RS?f-)`h,b{'霢y6-5g5 J`ZIlpQ1N&`TN +B)0.O+`j"!js@)Jq gp2A rE ; >+@Bbsh&+/Qj0`zpW|lU9S׃O@06E3.8W 2EizA!z1"W{"{eBb&D& r Px94sHR TD#pA%Y˪ ʒ` (DAk帅dcH;e7yRi Qj`$^H0 |!mEKeE/?~s8K ̀';({4 87 c/ŀ r `=OA?ń>2  kh2R 'J2|xQקS*Ƴ7(N'^]o+2opE0s˶R3Q|O/X ](&1YV @TJGCeRƶY8wpޘ_Ye [FhK,[ tn41_q[/R$1jN`*c1a'i|SƈmU3>:ipU`A5=\[B4HuyܴA@nU8ҕb??55yVЃ `f0 W L>V%'XK!R $*pUǀï5=HLPQlq1\ !QLK|l;R b"Sq>mzc<|j~>^~舞芾>^~阞难>^ꊾw`}R»{N}Ph"K4}N4pyrQmp;D'85d *@ 'W<Mz` y @3 `0 J˱#0=ɞ$` g8|(ﲇzR.^{kzHlв< y¯#S)8{{'?fs uِq]!Ue`xse=UqVAx[1|_Ww9O$\+tG#QP  `:ru(A1)qKtK 5*! ʈXrrHL1tQ##dFc`v #p7甛 `Rϕ-wȦ u&r)iʭ`jz;Q%v #!_p%3Yч!bא>C (pY@ `)f$]$IL.!e@!07/%u\5~ØQc4 "HZ;P8ů|VD Lҙل(uɔHG;LUq.j(/>?iԧh"=`0uG=/XjNX|ĨPӧlwFQϛVLRWyKѪ7郳RL !)L3Z]h[3"O[!3ɭDg8o͈J1ę coGNQ<ɦVdFSխrp̣Be`R$yB$p"C?QfpEDnP*r3H'- m2  HZMXF  '||K'qB4 D '1IM(1#X| u,-e NR>GUK'MdX$YQIG-"鍢1#'G2`;0IR RNe %NH DHb.GG{q%UѰx2Op0>tp>Zvm![$F5@@DaKe<*N}Ël)x0! 'F4 71ZfpKu[V}cᅓǿ !MlxUɨغNM8\&.@RK! Oܯ,8e(xb;'%+ Jfn+/)1bm˕ѣcjCT\ (12Q%8Un$?|I)yhЉ#Eb+ʹ*{Gxp7\vɓ} l5qwr !Kr/ye>s7yus?zЅ>tGGzҕt7Ozԥ>uWWzֵuw_{>vgG{վv\h! F7X۾wBQTIJ LlXBЙQ {;$LRvL|,7b2ntk RP10}#wA]"y^ 8C BG?RRR3碾C~5f 'G jy4zX(c (KwHi8KH,~x$z;`B:hx3>DFX9=Pf*AX |f =C: Q68!/AA֊7ɃCw{A78 778sH8pK r]xZ Gim'B@()zHh4T>Ȃip1ˈf&B}h&Rt bcqCшcX1H#a@Ђ2j/0K#@,G@DJ8)* cHAE67baŒ8; T2T>8R6kD,AjlTa0Y453Xb t(C?EhцtxK :9CS㗌BQ82$J@OR3jK 3 *]sQ@{ xp J.8a)P|kX| uهFS/*Kso*((zpQ5ځhPf8 wp7C@ tD.H?R!(z8+8Ӈ9F"8F o0 Bef!0FRy DQd& xui @2 d}h4Y$  bHvx2騥1-|@I|z8({LLBhəywx-ss)N砋~Ȋ<1-DpqhB ^A/p"I BԇA R|q3|`Z!@_*BxYLt4hɳ"9x(syu0!y_3Pթ =E٠'P#MHz0rAtl^m8ܜE` ss:Gf`hQI9-]iؓ3†{ p +ۀWp'xIj4 0"/H0,xUu[*t9ϠtZ 4$Xs #{dtY6sK؇d/Rr"^1EQ*!ypEcu"\!Xu=4/Z]0񀮩0 @ORQ%ȮTY&h##D@4Q |ԇrP"+xZ)lAFm&ه4WX!2s׌胇dPVN1Lh* m9\TsR_\`t7Qyf]QՔ$iE^a>fQfҌˈ}xk)r-* : x,~ZIrKk@b΂CSL<@,mFz-J/ #}h)'*$%P_x@A&znچQ Q$'_ x5 FB@8nfPpZHᯘDGR.ScJZX!Gf"-²5'*h8AzȃYA OJ*Kb6~cӀ0/d,V&L2`rƎr,R2x6C( 4xbMp.vޝOĵ%XKi88SeXEGTKJnP'즐ȑeWx҇њ(MQYlYQkgBmDo)TNLr)V|M+}ڔymz5=УWuHl5Mfeg:-D(A9f$,4$cBXO< tE4==OW 0>@N18c2qxAB N$#D\>sN\rSi52'd'm(DP0'l|>Z!9f]jD<#Ő(#e>a$G7mg%(H8Y`DzVc#lωSglhcBH4cG*Lj i9ƩErN#W:|xayeQ(4m $92å(BԞe-Iv C`EVԆ$S6}󯾢u80b CecmS~h8233#RM uO2rʟSBՕ#O`$0HhA#(whh - 9[س+s؜MVPI M.+ ޶Q=OT0&02u_E$ΔHMM!VN2)5]ц?4DDCqo[%%)(tۄy*MKn:gy^+%?rS˩8a_M_UBUfk1-G^k*}dQ t̡idC1E&Qx4iL,&ICKotl6}-DD5ADd93xC7$A(M( IwN1Q Ѓ!drBV &0C*@\ZH0R|8G뎨 G)h-|9Πkc|QR!D88+P2 $O1EC .QyS{1B@&d-E5X:#-AG̠"2l=> ȭz1̥4F0d#AhJ,&2 V$%M |Bk0i$ ]aQ'%t)\#&j#0p/ą * 篁U1N@O,`Cg1su% 3݂ B!,@\0WQC.A"̩ŰUld}bG0Y$`B%}:8"\4KR!OGXB /\Ia_a [ЅHC? `}5 /0fy08a"(t1fd>r5&tm bP+pcN ?xBq`3iH旀 pV@3ю~4#-d y*"Ldmd<1I3zXÈ'dԤ~5c-Y#ki5'Ro*WZy!pDzk; ~6-iS־6ms6-q>7ӭu~7-yӻ7}7.?83![|L{GD$K@I'ȀLǯ51 @ @&P(>[GC5:*4Nax\3:!LW[<7Oc>lCknsAVFh}@GzN66$C7%{l֮m6K{Ů7݂g$W`mB8!<>"!8_ 3M.uԞ\H3PZ'Dp8?p< %XH5 {_A BGFK6RӴi9Llˤ_q#Ԣ^0@,LqL.A)GY @0%=)8:kuD鍀9T\3\@T-hĎ C^6H:L L׏L9Eog BC$!@)4dC8a)ky6$Q Mu`IgV8BhH7\4 ,9O8%98C >bGlL RA]D+#9<;K!$J :>sK$ 19A4UAŤ)CeKB=—+ڃ@E\=l5LH87B!Yg8)Th7(Xz=SуvU x44%V!r9B(adADa$pA!"!BECM4:!ma4> 7XL2Y^]I#56J=Z;lŤ̃ ڝ*j̟p4( U!bXFh(xE=CqFm- Hd: S"T՛ Zf@ݜSM-eZMVD@Hvɩ|P!C" HRDǃ1geG9FtYɤA ZjMR*De .FdFe%̜uUTL<q]efݔXXC<uL@EEDSU}HAY[J[A'_ZPhJ"ɲ+ϑ `C"8VIdAgij =T dDccTD((/X 1vňU2\ 8A˫8^KduB@Q=$I * Z^ Й&,h H EXmbpϻRZllEz $ȩD9\,QďIiTk td+yY )ΉyN >ba *D${PDPOVsS ZMgN9c;yş)dy6 K8g0GήYi+u&яr1ZΙR+&붂` &8i ɬ) ȎtJ,D0$b4ĭ>H`P쀠hbsEl:xRMjV%CxF5idE!g>K"5S2lR0C \7"_]>A1)C2D=B$6C~1IbZib%>XA#+ JOͩ5C>hW5xG(U^洊Mc<àBGd;CDiSC rYh6CF@ ?o=%=d/LH/WB<ԃIU Վ~r e<@َNއbtªXA^6L`.hLHc@9*A9PUh@(kJxd2Z^AhnV^`]ڦ]\:]g>9%<9 5c}\>xtm/w"p殮+ir T20:At-0q-I (1DB kE0M0Gu`+mcEaYb 96[9p9ȍy:6Pt!<SK dZ&UE2 N4R'qR7S?5TGTO5UWU_5VgVo5WwW5XX5YY5ZZ5[[5\'=ܽ̅bn<IqY*5NLjɱ"|X\aiٚ4_2%MR-7|6HdaAN0%\nѯ jY0+ɀ(^ӱ&f$n#wvy05_vIwjww)-t }q 7؎M5}v=wi~_`PMCRM\$`xYgV>$%6H!N@(tΝ8;N[]iqSOMa h}MMy㸣;h|jj9<`6w=Ai1u1 a`Y!}pÇND#any/gZkBZP b^ =6d2yg3V(YOF@%|iGy@D~@/v/^C"L;STI 3DA,W@j*a1 gV@3CG Ц&&$@%c(D?BA_x.&B#xO;9{] #\O"TIBLHy7sRo SdKeDā0{!6>5Dc&d TehD>Y22;x. Ĥ:ʝ2tRB|KDL|˳'O>Y*Bbgie_ `b&]P=.c_3S4cWl/ƒC/:$Dڱp L` ~|tj[ rBBQ>ˊJe:i'DVDQ"xJi jNNl*0HZyΟD>DOtngǍIZ8ՄwOb>4H|,D|̇p{,=-.hG{ @ Ԉ]+Cg>4%8/ͦ| IY_H$&eCMϙ)RߟFPHm,p\T,@PI(nbiShWl "D8ifR;rgHGgKƧˈ'7nc1*Ոt1L= 5#FHIj5)窄An7!al {ӅGr*~6Хŧ!r,=gM}SvE"@Q"~;B&(D a!uz8t3Fq04A=a@F+!Aa, :嘓'DHB(\HOYh(A D2!3V"J.I&f4} ++,!n'_0Ta)'fk)H˴ B*Ɗ$&'8ag'LyG\ n(NC̦ô`V9c(X䌜sM.BOZzȘ*恌vjvqa}H+rXмđ$]B8gW.EZ"VTZy5}xƞy %~IK y#[*6Ƴ!e R!P(Ԥ! !L49cyxM0lYΗ ^RI!` ybRuBר8,Jpp=ҡR=ǪTQB}ri: A G!LLFAMG ~$+N-v0 l /P`HB4D"~11,)bO㇢ "|h`>:[rR:N-(3)UP4P8_ylV I aI $=$29q(<QJAsa"wBoIAG0@\m!KfT%eG2GlBWEN* O9Q45#3q Xܞ@NO Nة;,:_Ɖ^!;jR+A7kh^ @UPA%N)#Ѧ y*hFEb Ab$JAF =HEj̓ea+z̡hL!&ۦdTus]Oh Eꦻe\w^ڥIl^Hae7u{ߐ<+.RwF1 I2^ v0Sr QoAb/w%6Qb-vacϘ5qc=d!E6򑑜d%/Mve)OU򕱜e-o]\_B  GS_207w9Ajlsarkcy /xf#vJ쒫yx{q~DA ׸(#o=,)vrGA<$~l&eM٭s7\[ '32ҔK|u ZzV@k qG0ї hB Ht=hGƊ#V[Eq"(XF"C ݜ[A`xC RU(0OTrgHUE>φ7cՎaJYb-lwwcfv rsUBQ"b)(4ad?k9y0S\WpAr `ɡc h8 o|+W 0"ZF!S8]=Jum< m\lW)Pn67t#xBSb !c ղSCKE68D鎋@hCfDHqo,u"}f02!9J/xA0,i aa7p°H< &!/8 !$}@"BBK%P%gBb+AIV(Y`|`feꤵE J4Z&! ! D P f{!c8pp>"42P `(A,DN$#&\$"((KKg% "n@ȈM fah"  $n"(Lh΀2knBE^P&&`6 s1! jA \(V"%f)$Fb(B.(q Ja!HaBCf̆i!VqBb!V5L nF d>(BL*TR$>b1BSrb\2 w kI& 15hB >V!D iECmy.%9#D"*t+$zk%xMa~eG;4ZKWڬ mPPj*`Z"Qm"n#!, b%ngNa >`gA a"#Oz"2 Fຂ6)* 2A?`f;L+7~BBz 4{@ #"/QhBCDڡm$h*jSTKIa ,&̂bz"9(9A ^ "C>Ѳ-8P(wj]x3(/MLan)S@{/D&! `e w &ҁs^TEK!)XmRm x 5@O!JFar)N1"FCBC\梸tZFYe5uGm$BlbtH,BD OMCI" $њ9p/vM6.xu4"0d'0pPyRsd27nPAB`X_M`MGN |2Qm&kkǾ @.0! ac㒚`!'NHmbtBbtBaV~ʡ DO ϊaHD#:NӾ:B e&RhhJ oG@0g|HHHYVJXXWNOOoSPYfRnjVPSrXjtiigwujxywmppsXrH5W7P5V6]6i:n=ju>rHCP/NP89hSgKCE%?wm/m!O?k3 bV^*^~U Ζa@/XjhQ B1Ў#@hV[N8sBEh?UeB@9*+N86uJCAUwj$_u"K_05Fr#l,BBVkJijB[ŕ-BK $>P>{t$Vw݈#@,Z w{Fҩi3WCCBbfcn۪x۲%K_[li8d( 5Ut }C!sw÷A0Vaz8BPE CPjb/[8Atf(dLH¿ pc:|Q@"Z|Ap&h.qx٦J'D|v&ȌzlC ~Cs' ڐ`1|/^L EZxqeXA,X2ShGY:w%%/Y?B!#xVD$} )1NЂ2v@z#U @LC~0y (a 78LP!A4QnV ɐA-ILX/!,2f:Ќ4IjZ̦6nz 8IrL:v~ @JЂMBІ:D'JъZͨFR!b@*+nHI&^ @$p 0(NuZ@h  `@ lĠ10!* H1p$&v`p\`W`f0*XZ 8`1 b؀C jl ֕@U&b@h  ZŀX-Щj!pSĠ5U耰3* X!>*x *| D%L:|a 9F'졐y !*2 NasD1'C,a 1| &#J@^ TB (WNM ZҶ5&@[ՖV;A]c``M*h6%Ri0U&5jg(;3Aj?Vֺ:Ъ ^``Cq2.HjUFtٚ)qJ`;1(@]42A(J%L\ dl;(H\ẍB)P `o>qcfGAԁUDE>` dMxE>Sd'xEB^d$>`} 0@1`HûY@(3&;K[ X5bb. KRJܚfJf 85m շ~ͪT+n7Z}^dLcV˵]+ho fFsq`5 1*nWЀvce1%+8 hd)9 k´<䠄kP(7 r$#Ў|aF :·aFZMETNs/| Rr$FHBo(B F6D=!It@ " 'D-nыZbĈ=L1M% HL:@Kay2N5 jkft @@TgG!aHtqesvU1AqxRc-e@TZ%_W,,cS6]PUXrk%[eUQ@t70fiqZ [[JEpdX/XyUQT=ShW5{ׄ%jdw7gpeVe I mA|!!`fy^6p % ܰ@P 6n&Xb@%""_p k{ O ]H`{`^bP`p(`J {PxX܈D`a ' 8v{o!ccW@b3f@@@d8d-D@FV9UPpHIeY8p7wq&Z4[6p@HYrRWE;PS5ubOuW5d]ecqSSUusc:08]WEgJg5]OXhZUwu( T-`2@X1  X(]2ZZ/I`x %kf q10ja@[@ذty"@!^ q@^ p_L!@pDp V0w0@  \ P ϐf@z`nj `jRo~q NPyI`0 {CC0Ue?P6dJ5DFp9b Vg ' mT X`W'64`VPvT(yfYSuZs6Є4c106;f@IW7D)5֕UJ9S֟ 2dLZ@6P2 :'YU=`3\03Pi0Pqf@ zx P@zqFRV9ȎP`Pi`zp s@@ aUl N @ V d`W@olz jp p}E %@a !TP$@T й@`RjUiY]0Wlu;\p`anaU:8QugvXBZ Vh@pL9TbUS4UbŒ@+c:V*-HH30YqU9j6YE:&Z/U3UV'ZUY;)^5[yK]$ 0)lyB+I@pJYƦ( 'FQKV$p "%`I`@ Ұ}kh` c  lf pf'f`q֜N QQf N $+YY&0U;Gf7J]H`+)T,TUS7wwHUhVٯE@Ş8cPUq *UFHArUٯhT,i;0uYGW%5XdEUe=gȅe"cZUJUIuhg V򋓛VC684fe~@V`x@1&;šnU~zZn@~8)@Z`ayn[` gPKkf9̸LK`k``&N[+` P nl Vൡ1U^EA5BZTx]g6].UFb5\ ZSZل3ٽ#qkpl2IZ7U,+Z(V4u)g,П;T\/L"p;WES,<25"fuY@EVpeQEVV*J q'6,t.2[41t ` Yno $n9@KRpGi1k | tZqЖg^u ŮI`0@ А H `ap`'|zuI@ZaZPMv* p]Up-YYU>f{HDdkVrR4k%+ @Hw6W8뒺UZ\`,e ZH U0 `Wp6W+ФՕ`\UK .X: [8ucPEZZ51]UZUTl''Z]\a $ mP} vL S-oZ `@\mQ%` >;~[@FՐ P¾ u`p D,ũI*| \ а + f\ IP{dj\e7?EbfS+d`% [@8`PRifǀ b6"P |@\;vC* u26FW2X%<Ox &%%VYXEVy}qJbG {@GenF 0lcVA%w_9 g 7ju @ d0Iˈ0@vab i0x ǧPmKi Ik=xpaLK:Z\fu@pTXU88dհR(i4r,6^VZThcHZ7RD&;0i  a |Є33ь)c|u7X. Y,8>Y6cYR*0YuYgW ZVWOX۴qžkgJly@9! UEU 0& 0k^ P\PZ q QV𙹊`p @PI0 EcƠųiJ0 p{݀P` =.d~d&X +`ac.hL`#! 2Db /hq \̙ D(1paÆ 'Y`PC!,&@hP /|haǎ. 4x/ =D0;;Ddq5\@Ō;f4pP /fB0Bϸ ViB 1t\Ь D;\aj֭]vmĒl}٦mq!unU)ѶO"Zo"R{M$ 3"C,W / n_=¾(/#( ^sNLYqDt"1}qBf6j՘9}r# &6h(' Vza%: z`@ KbKĪLI.X&\R0@ *h@ N2I(tL(ZIh* x@_̉~ 2~2x jġFh`tp, 4 "p!Wfp`"h.b,6#vXD0Y{6dt[!&{E|l}mx^aa'ТZcTI*D鍞d}։":E8ǘ:Ht|!}y(f )tY†:lxz2ɦ~!ʢel0K" Ll >`ޔMj t \`rGRs1OZF|a*yqr!G{!CK^Ae]`x4^+ײgb̅b 30 `!xZ8g>柇67At(m;S lBf ˊ`a1\2|k [);E; CK] zB`f.Q8AG<1qȃ G?vȃG8Z؏rE/zA R x@,ĀNb Y@E ,.p&+Lكc8G:юC]`ـ0"^f@1 L3TPX> q@hv0,@ pD1؁ pЀ̠d(7~PG1q)qPh<.BJ;tb^yvEC8Zc3gՀ89i҂SP6ԡ b0HpIG|.## $UVuPĐMZLOR3@ @ K5>`Art! &;S@ )Kc+Ō>1RUfԲlf5ۚ`iIF"5\4 dL IJN)$=Z b@+i}M'd6]MO0iK4HJi=g0XB vpG1ZUtU!: ֳe56 )rlmC%Y}z 3P@Oa `)ɰ%=iJsXl, dIrAy" rDz^ ,N2׆iNp7%G 7tpPUYSt\% zLB q-6Ao"Z|qbMgHb6p751P2e{evw/GGiH2Rtdf6I D4=4$9}b Ѕ~AY q}N3B/8r8t\?9$7M ]E4*sovzAsov1")xT\7 Xqxг˘܉f))lі xJ9;*p-1Ѱ Ab,{;&|sخbc±j/[!*¾>?a:a j6-;(k@"y{2; -`A$D{98 3.ZÐ8 DٝDMl ׂRt ʛ X`! H.Mc*Yi.#.CȺfҡxêo(rdj6_P;Å;Ӂh z "0C (X(DDPc, a&DIDi tYBțMSG$#IҨtȁyb mƨ;&s3&e:b>;+¾ldHBo__M'p*/D4BK$ w"{BpA0z`tAE;  p{58 HȷVs dII i- @ Ò Er `تk~Ier`j:R2FHYJ_"i\;jiPJ^QT Lq9$`TlHPPh}@戍cهfho0U8X؇yHcpm zPa cu¤ehUh`Q}!RT#h`Pv2_~Ψq L=ė52" *Ő G(*' u*0@fi>n3c,rEFıdoоnL^!LP_/r0p0]. '`;k9SCrB)g 1ʞ(0Miq}PP@ \ zHS8%Cxx5nJuװQ] c}@ @W8$7hS(RՒP48,D8%0!WA4)4Ŗ)J42&I˙բ ؉ ЀЂ;:jC#%;FGEZCEpbTn_\^`dNQ][]\.dq r7a$SOGg1ӝ=p:z}yPw爎۠5X1g8U[ 70j|Yy8s-UC} ~@ȇ5(x#PO#hӆ(@M2 iّ,KDCH;(I X]Hάc%3MJ5$+lDڧrZ`ȅY\ZbUZЅS2Ђ "AÓ 9:E:(+=ʓ!PJp-^IA s@]]s@]APk\7H-]pEܲR?pQԅHys8 X~@-d /I՘Vu@WHz8Jmf@Rp0\͞!8y 0 8Y& 0[d x  `6HCqەA [d8+Z`6{ZTm쾡:qHmdF\ 1zZ!|]Ng_lSġk )yߙ5XЎ·7@bB/0.}P]l^@y.h9(#fdI3P2 A) pm^*i\3h 9]"ht0qUܗ`L˼gAKt=552Q5 &+=1$2 ě!$UY}"H/`|С2.*`I&\JLrHUlJRtZY;>n>胫E[O]-` ǘ+-jxG 9YÏc+3NV%pi5L03܂n PQT6^48k]8(pR~Q *mpztj`u ׀%Z9`{P$}(\F6Nmk4X8r °LEjmd`I$y$8 ʼnkp˽H-8tk&dBs(CwTzxdxGmLd_\>0n[[1>YRF~nS=ն8*-) >$ :M ^:8kuw} K6eQ-"yi f@$ %̀\`&e=PY(-FWp;Uh9!*oUWHр}jp#&>d͚էϬZkZ.\v"30p@3.pa;bG +X!d 07‡ 7:~R x#%wx~ejPlAiE<8 w(wkܘԄ=,p >X12EPsE%xA ܼ#$\>TB_ G?+L W41'v p݀CJ /N@Pp@\0R 6pK2qQL/p,H/0 5ԀOg80C 40@[R7#N69OX,ta }:S(L6-S‹l'$o"po,%8O?ħ:'(=ǰ*#E;1%$ 3'GțNLEO 0B0 1԰»mwH 8@, G 7E+J'Pj1p(V6 F)U|cUSu<#0 K.*0b1w߅bQK/;K/K /P.0t 3,pJ8 D 4n/H`Aa+>n,G\> x xO>p FdRE;}# ߓ⳴'cK@Nv`eg0:RG Ԑ"} 73QMpX|#~0~@@@) #LpI'!pc DPVn5AN8—h-A!XpP;&@4Pͷb@P 1jjP`5B/~pTb/1Q:Qu C-[bǬQd.s/ O ,ywK/&Z)E-G]0٨$1w@8O^s8 b0g<)LY#Aଣޣ `TF=耍e_DH|PG a4u Z* A"DHb W :7HЄcVШpѤsЊ1, "= $Ì"TUB6l&ZqfMVs\pCڀ4 Ivp-C;jY6ؠpf_o.!\nG8۩C,F.=AvhU9!9/^0B"(<,f f-hјZD% l0 9H iB IP(ICI\t=MH} x=:#D< GN.P̂R㩆9|t H*e$z)81ဃ0ow̃")4V\3U>~ ,jkɏ|eg1`7n`mzuQ.2E Q Ud=lBPac@0p 6*Qƫh8BxT hb5+c.Y@XqݼȢٲEu%s]va ]. d3^ ۥ ЀT@(ۖai1c@:/z@L1?Lz Y BP(`@ @ Y8O`Aж,Dg7F`b@&oe\2{ \ozL-ú9E3CG̝/4(+*[JMT  8O.R>nId5#ё_ 7舒/x d/\J/9A!8B"$oAA.xAC @P@h!NHW޳^dco وEҕ\H0ED8@K!!͝8@9E BГ9l ocq\Ěa)EKEM hݰIyY09ì-B#44$ ",AāfPd r@ nP@P2O3܁A(Bvy(@ @ " Ѐ _= DY#>>PD[o\ 4 #F@}\  K FOOR$`:: O TGyY,Nl,B1 !AAA A `@ddP@ @,/f@<--LF\m4A@AE\#dFdN& =dyJ٨hԄ ķAն x Q@ޓ! YDtI8p\ 0́ 0p@r<"!-`-W d@AAT%l1.N\.  `@z IW KE l=&e~(h[l"!@;R ޤYUK}O  RҽkJ$lkgMt</-^ŨAA04B!$Bp'w .]`{ @|&~R1ZrqNb O[fv]O<sAUNj@Db]: Q,D|dl*  ن @ EB 蚈 Yf$,kN@Z@GGpD: t!Yn N 8/ C9P4-$Cv$@ Atg r AxA  r2)[fKa.eh@kpN ́,h|Ns2[rWL .A@ Y耡DlIC#t-è}7B-P+Z$P20B0l/@W@`A[@H." F BHOH GGl!Q`@i* J L5tG7UUZȑ卸0\N7ˮB<]^]MBlEhċ  A79?, #A$'0 >7H)M kohdpnpK^\mB77z5 QDm˻ r;kh _DaR:D_&D©' =dpLؘ/Sfo@Vv' WIFNln\1 Ip>FJˣ_@#@g؂98R(/@\9B;#i4~%#B0L/SLH82L8e݁7cٱ,th^fnI# @Cr͉Fi&H3- iSAl Ad,\Ȉ e -Y}̝1adɢŋT.]ΝYt%guXa 0p`C 0Dh ;.@h`E}'Vq|"k/*`hE )x)ѶXVѲ5 +hIcoY;|AnJ'#Χ=79ݙKc!ćBgzf.1?@L}#mŋyq?/6dCJ3j;fAjcEu#-4&nAxAza hAh0`Ab.Ah!" l :A<|a!yPrtJ fzA_(ʥI`.# Ah=P# n $nB&Ae420>neYl .9c* 26";dQl.Hp`!@ lx ,0A-+-`e#&nyؘ<M|X S'~GFxm'}I$\Q.FgFTL%DWU$3Sg Kcă.`>@eyҨĸ { #Cjكw$AA:N4`b F+t"AnA<`PAa*!yYaz1s4s> <#Cc%>H&@mjI X"& 3RX˜1*09 Np ;R Qڅ**` VXak h`&hcX0leyȘGH k[PG|GK~Ʌh['-oor@%"}! 3Xd)c,f9A f IhajðĤ ڙ<uf9ƁBA0T+1$ !r0pΩYi6 X@/pbI1ARC a'"$nIF9ԋa oF2!GAP(%@Ї9 P X2Lvc YТh D'VeRڜ6H L #>`m " 1eYL髭y@gB =a}r8hO[M̓Ye!ͩAn0{xXϾLl6B RT8XpL8ot0G2>aM!@3&H>  Ql! 2 CNmJ SD T]-V< 4`iT@z)U vP&`J387478gB%`4 :@Lw1r(y 8P0'S~V"BrWч"8C D:pĉ~)A Ec8 /:ā/1B1ĥ/ؠCo 6T! 1@N‹ԯ1A0a:1 aq~'U H&\P Xv`.IcjNd yFX4z22Vl@ i&#!O" &n Γ ĠpA#pAUj!'k!fƀ"T"(Tv&m lAd |A .anXd qdz`NdV6Q@ 1(3ȁ~ cv1Ş@?@ x` .1a0 0 qCP@„CJ K10?؁d1ց} .c>ۦo1tgg0dJP9X0y 2Pg..B/"T$``< b@!r!L=!aan! 04 Μψ.Rla'M4'.(L'!E)He f/,|T+e\@Fhd^@-'t&4"&C>= K/*11 ` :+.kJ791~MN8@8ADA&!_uTA_ 8M1HcmJn/>o(BB T2Ү%" @ LrgӔl TEMt R6T( p,2Gĉ Kif&t1a~6yf|q Jу6$L'#`jgeҋ1ANh'`KK5|FfIJB~Ē-0p,h@zadz7{w{t{wD3Jt 0^JLn`W*?/q\욐LbRv Rgu@ XEST D _YknѠ)z `e-Qyb*,E·x!6ygd@h F%CE@** onv7+X.oPE`R`B @eSv!]g-8I_/(lΌɹѹewŘ*H |Z0Nl`b<_P Vmq GZ !^,{C F !@G2'08a>!,7&'Puh"LD`c"i`ZX)6pa-F0՘GH݂V{)&znd1 2zɺxEXj@p+V0``kh{`*V'XZVl3L,yH8u02.>!A!F\W"zAR &oZgoPa CD4H %'ia@elUp̦FrD&2VF s"wWѬ;x``l`b[@|@Nl!|x@B%pى3<uznP2qyPC>:A5̡!, rDM bx.EOUNDPUD#eL u /Uja aQJp mb`x!„Fv W"ň~k{ټØ6KV[Z`*MĂ˧ Nz V-\@Zlu-D%!aAÁ[G\>a! r+ .E f!B(%NzAvA,& TEyzd A]Shxz@蹛By,x0bEM+|an)T^K4'upAF O(>fz 5s,D٘kh@t  =lF΁@QB8n $E &XPC_",,N؈CEY7rā.Yx*;w̚fZzW;l!3fpՋ(Qj%K0ddLVظC @c -~Xchqլ[~ ;ٴk۾;ݼ{ [ -rxG7T̐CB#o\[P(8r(ϑ%HXq1v8Jn=M2Ɍ/88=T89ɀN80K2K}b,^1T"Kad% -KW̕\2K/5,adU_04[4P=4C@ A .Tw/TC 2 A4 AI\rIgvމn0@q{jf3 ?7-v@\  9Hw 7p\ 6iAEP(v5 ^ =P :GՓ< 7jH#}dK.xG^tWbq,(Dt!FVr2bˑB -%-d^cb&IBFXbBKTkA\0YBCTVTC T 54@C``Aq"uɭI* .xgq{PwҍCؑj@Fڂx,'GP(fMCĊDē 0N⠣SXrC&H4ךsxA+j jpo O|&k anx$q|d%<|7p i`lwfT|5XjK26P$ܱzCm8!L"؄ ?AhRNGAx؂;A xPI~+u3H;A T(p:?ؚ*U@R+.@ hTArljGL±Y(0$td 2Ç@1t \"1D%q!T,*K/_Ұ-5tm0s!.b.Cl`MPI"`:`P/E$3 N Ab)V$$fx_"ad<}r 4A\X6Vs 'xB6фXP [v `( T!Hr5XB7L(yf\6p"\>i{PBVÈʶ2 ހ54\B Y _Yil 0HCC_mܱ(:Ɓ I!DlP  I K:R_@c#C@/ia^W|q+?Jb\ĵQDUKYh_X]8Lxt0܁0g/H V0G8i‘+B cqk=JB()5G>q">YkQOL u@j q}d.ԂRh9;O0= $(Ae9R>F7hCI&QiKB ] 񒠅MB(&h9݀eAor|0GH58fe4 I,}P#%IOˑ(5\|#PE$qZ[ȵ.#BEDqtr2E-z! qEz٢-Ơ!`x 0ؠMJ&MMXO,;1b L&!L슷xCUV6 n #wjH7|BYNˈþ:@L"$ (%QG#0 fd1" B,Pn&lH+ߚy32 - Vw#)A?x f~ FQr_s20p:5h] .Y&ı-(=[K+#;! 7 GQC*8%?-}t%R %xD ScAc tDd A ra lD^f3;p \2 %k1@_QK|kngxvW P AzQivxj` MuZYo @{p hYYqYzwV $0 @ pU g E'mzDt 7#a/CNa`|O`ApGW gbP""[P{+06gReC!  716rw ._ p / | 9DOԁs/OZ@ a8Gb.3p! b @]@v1*1  P6Pf2W%JvrL`HlXDu0 Eg $@= PPJxLX7Zuxkt uP s`V }@Jհn pIlZLo`{@Li ( rXsGg,@kG!)?a?a?!;Ra~a,q!@@ti00 `ӖƠ@ Tru`]L)i~@V`mGqp52}b)6r_` 6oc~*`@tp @ J!a g "+Mȹ`+gS@6 "T-p#R rytZ.cTIdc^Z .^q/Fw9)"p1/=04c jW:4 ;`GS10VђtBkP `ꤨ}{pPSTP@ĔҴ8 t ˠ u\Of=]:r@T I@uԳ& l)j( uE@=i>Ӗ&0 ^hhxpF*1Q!4ԁ414:*)?o>p7α6InjQ#Q bPB,DR&4HB0+ s`j+-u#A#蝒ª_a"T`#` ^A$D0d1);00~ˌ%q#0" b:6R6UL!K"uPB@%}6^$ԫG s0A7fD7Gb9njs<=6Q :T &dP%IdaaGr fM` WI p5x\F PLwWxJ"0lԥy  0< };D@V0 [ۊ}@# FX&,'ZnA +`9)晒BšBYijWQE|I` ~eER;b@%4r! 0&d5A!Z e~s R/GES :b2-UM-VU$ u2" aeE26:|RZv;sRx[L`| c0˽Au@x`AH!?Uİkq kT' @Qgh_$2Hp()"7p4?6@б @ݷwp[0ܘ+ jc7!86$4&$gsK˜>j7bIk0`pK/\z]|ѢKW-Zxg1dpޱUK&Y]Ȍ邧˝.0rP+\XÇ6 VRe[qΥ[]y_?#9Z c ?xE<|XaǐqC+tx`#hQv">hح 5,YdЍW7pʍs._2tQG'O8qЅ&k-" N7QK#}3٫,[ze^2iYb # 1;pCZl0 0 *#(v ptnv 8@zG rH":1!TXVaXxop,*xAh$ۡ^0 66x`FM7 }™t'p g~A4ƫ;t\.eo&Q~Iy!_^8rQ~?_v%W]gE0氐9cYfe QC-`rjhT@dȡI!v &(r^z^|Bl&7!b2rl8r3]!7 ^5l b`6:}gaRpqRpmHy9ƑnS`l&2%x rȉz%\0R%WN&]U\d1oY}p&c8.xTkno@$ATСp`7|+r3X,2*s8LVpraE8"B .M686m|ws`}~dop }YP_^.sxGHn`>RɯjdM5{ɗ_|e^@  @"CjMtA(/ \[{T%,@$P3apˀ)LcATDǵ+2x \ǂ L^@B (@P;|cv`!؂<_C<0sģ<' G8⁏~$9 r #h5 z1 _2& ȕ/v^j,jQ1E@ vLL%F 8 +YCd&S ZD-pRp ;:^#CVLDбڸdoFw7hC G eQG%jEn1[&Qq($@\ҨP}t N~$(dJSBXUDtЁ* Z䂘 $%Jhp[jW$q0Gi|y0K.@U%$@;\,xŃ܉BN,|c7;SsY3Cig?c衼HtHc,p#bE!],#|R*!P/H d%r Lx Q$w 4pV lSp7QӀp@sA)ӫeo{$@SvG( rpܕ n0\*A !A ( SN^EF $8b>hGyTMssHP?Qq>01 .pR`GVU44]P zB$ *0Z`/@\AZ9f"H)GsD`F ݨ$8-ɀ+2 ``TISHN=2wFӄka.HA`|x@F H}8JGN" \xJH9Rud|#H(pWP9G! &SWDpZ; TL]Q 3(DF Xn{C{ F`v` C¸hJB0/XBP9@hQx1 Ȗ]8! ϱ3 3䡀 <р09,؂-,HH0,Z,x`rCI*`𙆨s0Id*?Sya8)F;_S]I _q\؅MH%00%[\0 x z4 P < $bȸ 9&Xvp8Y/w` eBܨSA DA|s"MH/depm @pB:P#7h)}hB)l 1IxH4I8)x|ɉ !- u    ȧ39( >JDz~y:p1U/ 3yqcy`I"v:iLV$-5GSn[J |WKeIp1 1@xzƩ83.:ę hz p/ ȶ4c\.z@,}B bWx|pHH^Hb`HA,LO"X Lɶ0 Dl=0I膸t0U*0I\ K9ĂR>Pd^&w8p[҉  ",{>1a#(@XqxĈISI ʅIITZF[Pa$,S A-`٘ȸZBhuc *@90ixAH30NP u8*Ȇt@u[I(+9 Pİ5Dm9Pkh|l }X'xHhZx*ITR2f;Sp e0}F$-0%՘dBI|H'PNhJ@-V6b2E^l!e0tӅ *H mj*T0*"J"z }HWc] W5Nc=*t zXIPAu8܇M(2iu +ֵq\|$N"HE$ *}`O,)xte(D`tD R6VmF`nH1|hBt$P/$ hmVA)T܇so8ScV8!8/ɯ]z@aCjJh͸H: (%#MO 1J /DnĪ pSTB-5/Z `+֕k ]-iH+C]h%M g,c х^He 3 MB GN" i%PR+dX} ue }Ocpm`CPe B8`jPMxX9pOIKyk(^IB~@aV˼WvpEXS^ ޶`%8z_4)Uv FMC_MX@8Fu(m`p<`'L> ]_݋b-9C `Zd/ (@H9 ˽<̀J؀ sJ>ӀJ$Y--_`@"1vH$L/ _F@c64.61- pb?^Ђ:Ax' D qؑ'#ܡ 96Q$8߉؂Ѝ/}5`W/4H~޷ ȷPjȵh@}3|y`9 +A^-g4UhlxWe8^ }%PtP,E8|@f]l0@x$%(#P|0n\hkЇCI&h@E،km!@ @Xp 8)"+ZslٌqYi12/*V j,0_`K`iX,kbS`e⤇LRcZ%5& -Z2粐] 5Y G  /H$ 9 H9S%f0i}XD8^{4_M]8}PSfeS 0j^e>I~އ~0Vf8wez m~H_WX f0v`z|_ȶvu\ 3`~PH%<0>D`dLЇ3лo / x @Ch+R i$"wCp Zi((Q1[Ѕ0(9*Syn{2 *2F`ZD M[Y 0Qz`96  ` n`)9"( c?FGg&m*A/zxJ8|L^Z|(p؃HOX&hc(dtHUe//.fuHB TH:] ]uFη*dAP|nSKFXwxpBN=2Z x<( >-,@@#h@ Ae@d"$X*p-M!/B,#h,&}H[ 5}R-R/HK-adEdE /4(O2-A - %N@.X h"-h!`a2/[lXXP8B 6 1H 8D1 4԰C 5*L N cĸ=jw1PVb`h-s(x0J8ɠ 1BZ>hKL4Oy.O})B'& OX>o<|X=+밣y8M3phADS!wrDaSH%3s؈>0 /"/= (p$,#E~(]iEnp P@hQb.a@KpGT 07@ղI~C-,d"(B%eB)KOKBCBKI4>.J dhAhA%Y\0C0 @ +X Ypʶ-o%P6"g9' 3 LAPAt`>F<`g`)M=)Fs'2 $!FPBC O 1ȠppfQ-$ $zh.2 0BR! ?9!=,N8(@5x"9@#_#K@ț9 dox h@bQ$ `;\,t |H,(sG81_C FOdGrc|c|AjТ X @^HIZA`DZ`z<ў w -|@(Ƞ%dKЀ4` \0+iv`ڠ=M 8N1 A< *gS~fFC4pvDIb! #xXL:0 i؇2a$ d0)jM Ә3f :U1(zuZ\L&a0:SMH4) |U6"pBG~p#EJs{ `-F* ptQtTj n"a)A: TnqC' ؜z!0! YBja:;)$Z؝BoEaX [`a,w)x-O[P -`wja MByX@0 7`j/xAjp>Ǻ_Z`p!q,8DжUڪ[Q>]B*VBExZZ \Hέ]ʩT|FhS71Hj2Qb<`rbU*<ȇ,)3П &Cv#QIҕ `$݈HE{qq@c.}e\AP[%_8 /%ki$f‹0DZj8JQ2lb Q`c|E?{Kօa^I/0?>Y$A"o]<js :XX0-h inzpkns:9{"Nߠ<ivGBX G\$m`& KJ6 w+XJ0ij/0)cӔ5mW"4pX{ @-0`6(Q&77_FC?_)WiCD+#u0( #:Q]:Ɖd&H9BBT9C/4BMT5xS$&hp0 x̻B0yCǐA=x S x`ēWO@M\\ ō ˰@@D#X hirazaЩHP, ,@ deWR'C ݯ_pȂ &"88/.DIw; t\ M\@H*)%=_Z$@҃n ݯHp +ɘ,eIMDOd5͓OOB?ql& (h̊P('APr 4#OZP[XwzHg @р iJ_|Z8:.p j %P|z-@ ?!pr9ΕMdɑ0lxHl !nADH/.j/F/ў?΍b`-`$ P!@NS-`4^/R`Bՠ6&ܞ]u<@n@ G X XeU k@[@ f_b=`N_$@$ ґt+9H&5TN?ʱf-|C./C/dq@ۯ}N`,^h@o-ЊA/BV$MkB%Pqrj؏P&ʽ ` 7 k ̀0@@!!B&eepx䍧⍑lpRڪ5d$|L.l 0A2J/ڂtXJH ZE?Jw c l TX6t@ . B@,@Hn* 0n,ۅ‚Sq+Rerf4@4ÂAD-|N0h]?汉X/J+hybnhL؂-I<ar $%kI|+t\ \d` 8%\Z)ڸ#*P, $@d@@lWxqXIޘ@ @tj2(zhnl-(y >10k /P/ t,}@hiA1JroPA@Œ ԆaBq +^ ȀЅ%oK>Ö ڨdL0.@*; $sp2,J(ņ.*(Sf(IRō&!jA ϥ 0j+Zn&w]>xP?,v~9XL!jq ]dA X, ԭH @Bu[bC04bЃa >!0A]e0b!QC@@|d@DI>9_F>Vi>C?6iypS1iepM5l>mgTxew@ehGUm,Ä(llv bXFfМt4_bP * C&A|@N(58yU(4D!> /OdF@2.hRiծ -l|@lꐀA*o-:h dMtH#> t$,HKH[bw @@Àa*ٽxAcȹ{7$P<tSԁ+Á"TaBcCH)ø8c'jk F9|A4 'Mҷ96D8/ͩ}]۷AfM!TݾsMd/_'*3 j\rr7ђniTq(uOE7Zhԇ7n0X  0`Ax1AH *Pa ^4h1b+\ *.W7kW0Z 1@H A C(Zw A-Z4= ٿc77m]>M@l C G|Ȁ9V0Cg_?EAQcH" Q!Z!E ! -D)aph!gDU: GOZTQx8Cb9a { NEueB*9H9ڧ".A dl S4ƉmEDPB2ɺKRanP *!ra2(@` 2"RNIX2X2a΀ RlRU@Tx2H M/| Hí:i+9㠋-H8`ݒ-wٕ9Ep֫Z `~<xXj/A%n:>Ğ$VS΢dbfD@>I'IؑyaDaƋƒ-|QBlHn**7:%dD%le40eZ"B':sʔ12a}8C9(!%~ QV!*+(L 4 AN PM8AKSU`[5 +Ҡ0s'̀QK4F7H Lk^N@y^?g˞% (~5`0 @7r`b?  w؇̠~ˆ$( @pZCQW N$'`HC ~h\шNC(-B@(@AF. TB@z E6Ta! $T(Gи~+ه:P|**ڱ[ ^p7̀ƨ-sT ! A2 ,@uڋR SK hǕUzU%ẁݦ~4,7Xg\[|M5:4|%^40)a^H'0@6)4T n`kA`,ŘvVJ>ƀB@B0CN@1xBXtayBRp#Fx*K$CC/|BI$Nb أ& I-vYdGQ-`3LG_9%_җUmL_ĺ7.t]ǒ]`7yYD^K6l+{ !WҩNts?AyTP9OͧcrX> ÝPSAaĩH'eCAEX@j/\Am,CL5e*#H A5I;F0x! Yp (,>5o|C'>D"%# G"GcCIܤHC)QT)Z =OaqH WI@Q5\ 8Tuy/3aI*W&wd㥲3yInżlA#WiDK5S4=Yj3Rm9f^wy7>O +z 4p ,W*M Va|nBUCVaBM%@.h!d nB+aG2NIx!D@ {4bFa> ! wVcE:01`wp1BN=39`a XBq,|K F 2yP=!ǓVM> T_z q#X^#<őBP$X@Pfl F8AD)ԊڊaXˮ21]-lXP^!kF $ruˑmycIW|4rLZs0 :gtK֋g*7=<YFhI7 C @ ;d$0EC!$aC},bj,S&8$>DƌBdsEEhn<q`md8ȑ)xK\s& dda>@Π €Nb"CV R F%"B6JTU U+bWB1lV`ɲi:\H44}#{p+Bg7o|i&-,ŴoaAB(ĈBǤo""!0aP @PPVaI)s`7 R8`( LvbU .pKzE- pBՌgU8|6JmU"Z|T 5Hg6IR|#vR I5GӤC+<b`f@j=pa> e /dL -E'=!>@$!4pA!,AȁLN`` G@BnlA`<@D3ѨT!J`N,!ء!¡4;b@!!! Ĉ4> @p3*K*6 "U4` +L8VL @egTͨ 0W,@ GU:-V. >c>C4^C40"yg(=('((-F%~L+pn)I;HeGUI\dmt@blr,B H! ja5OPl3(.b>:nTF&Tb^/m!0ca:b` 2uQ&bn`5KnHª!SQ >8@L,+- S`' `G-FA]kpg+"p%BW~ cG7 Jk\ӎp;n]V _ƕ|)^ҕ ^k| 4Fz4M)U+&]B@ <-)~@)v`,@ҁ#!a=($brAޣ2b;cU>T\TPP 8` H <`H W{oBx"/\EAMrԠrZѰygӒGZ4:MT`އDmfk|%]w#^Dk~$55e}<5B1jIv VKX>pqWqqCB*VSTc+H 2(ʬv2zUVTB/Rx6N2[ȅ:mGic8mUD@^ 6U)Zr gMpT (7dC"/ :(h@fbÁwa~~+6?T  tS:b7 P7tme+؂B+,5z"+$IzvUR#*ɥU&UkH) _byV^~RkƖFɕ UF I6yp 4 x\ dpXǘq!*<( -UV-xVP%T*~UBF5m/0)k,& 4 sW_vm+FYD5{I^;p`t7ibnk5W+.[ 46>tKЀ k~YYb}hIP.Ev,H@ 4fK>%w²FZy+tn'5p&s WU[UnZ5U6MF4 ly ]em\l9X4k.PԮ%W>48@`eq CZG[@ >W"(,`<  p fuB 8T  @,2.dx)6$qQ ,p=M:ՖXWZVZҒ0[,Nl4bkU}EO>-Z=UD80cVD@**$` [כ#HZ['E>% `Ʞ vƬE0 TRV*\PbR/R.T~%\+Z1В7y4DZgBH9Z}ڧ6.ϙJ9^m( EB@F24` acrbʣ[@p0 LW-"U+ Ji{v9&'oRk8$+Gէ5횐|t 4bų95Fhoǝi\gtt"E +r%``h)\_C:AQP3 r@XZVE,6B~Z.luiPڧcXߎUnӾ54@/w6s|c@ʝdK^x㬫8ƺ\|Ky]Z=2 j`xn 'ۓ BW9]^1N^R`v|quÐ*W<݅gG|Pål5zRD"~ybC)EimE#RX[TG9{`*~8Bbw~ OUA9%aTB >A2!L嚁 *aFH _Nn`< t= o">kbn@TP!D E1=F4Aw!TAUn/TD DĿ mf9Q4a*Ԁs_bw? րҷO,1\`aCfM98 XGaH ױ!*J:̇2.U6TgT?hٓsǐA6І`B Mba3!DK0$hJ%|˷x䵜Ox˷߿ L1]蝹K܆犰j(&Z|e*D:Q)#cNRl-#hD1=ǚXS":|!yI^&d֝,c[Q%DK1pCm߹(1-+"9,uM2f& 68Q3OsL 9p<7{(7<=x 'DcC 5>!IG("$IJ )k*O?O:fRX!IlA-dԈP6$>nt\=i`VxRJukU,y L0QD],iP8ɺI5>cMHǖ'Ĩ R=J|Pt2$XhN)D4 UKQ#JtƸB0Hm {bO?꠱`8!J'¨Yh6-tU$!m*ZO؜# vjxЫdު :L F^SiGHC0FP>o|r%DUȧ]œ !޷Pσr3&$IJ>|TlE{*ogǐ@#$J>RקH&+#LC H]EP%t`iHɠ$"y.ؔCq%oXI"L-Ȏ: 1?x;H fCFrOk9DE;I c0чr2)H%J_5{A&C=!L'͗fvf$r4QDȾ!b! hU #XA3 cd"s|Vw0ha $XvA$&!SC "P֭yH .Gz?}l@G8! B $s"M$@!.Amb YUIdy7=,| zkUB'{?s5&@ Y0A&VBFqFܧz9"8M21H(l[J*Hޑc=R X5'!s#AoCi#-  ѐqr%oO nYPt014%;UM8$r) {UAu#P%>ڰ^A` z e!$ucz` @gu@AqN|]6kpHK4_ a2VH:r]H#swTJPLE4R_-$̀z}$\Y8<Y21Dj"!K} GQ* _`f3\P 'Pj(u``KP EpІ`^13%/ v'g[ [7,e IGh"9ZR(b 8<ńizx$Yn47E'O1oFKlڐ ]g Һ:4/1=i0Ѡ!'BYap""( #o$%4ASE 0  ^Y_X I@fj U PÅK qT} Ճ&z$ ZZPVFtu:_'{ ڸ}%C \Qïǐ p @ Xh .)E \ LɬZkV psr۲;Q= K 8 -{"uQ@RXX"7H` t)kDL¬!za*E *|Eqs/_XЍ%="LfQ2Qp \kGr  RʣFI*а ۮGVSfcER8EL {` \TLy @II.QTPkx oQвH2 'R%oS @Yz\MS s+>PAPV RZ+Y@ `J%`NF@۬J ZJG0rhWZrgh(__r!ؿ >Ft=J`b *\\]p1ݘVůP@RT #ifR2Z{|R3hhvZ* B\@ '$}^D#Pg"GÐ|<^| =?)= νkEOP`w>SS z'0CeSllr?t_vxz|~?_cPkssQVrcPLbq ͷ S '0щ P` _[ F jެ s2 BJ$~p_-0ࠝeP=tוb c!;ӻ cPɀa t taWyzu EP>+hTF"Xj) %TTgƢP^޼ɯܷ_TTi NGGP& JFwt:8n6Z2d"gVhU$ɍҸOs'^۫OnѼCM%ujXkVD|u ,jdåq,!: 4.:ǥJzJP!A%N6.+q +Bdڲ'k>d߹(U.FcPmlJE-y7,I4$(I+hI>Ȃ>/ )7(Gt1sP DEDEz! _-8"N>#(F: (r2S ,8C*(:V I&\H)!Bɂ199[T*eVbyn94mͨF*ia2S$rƉ40ev<~$cE&H",V4 "u9NI>!D08d,sҰ3f ^9<$B5k=L Y5$A̠hآr/dB#D+MQ$t:ܧIAt ( $$} Ib 2t+[=k:RQEPI+;& dPc8=dCI&3̇pőt4^ B B 2c+$A߾,PakKZB7o@ k xH .%oa2 9ʑaߠ0 k`L%` v#WBrPXD 7 W!'<5!%(}ekL6$XL0@A#x3+'zJ؆8a( I(Q3#lD%(8xF :+$1>eNP¦B^9\9R3.l 0!N*i XAB9`K '}aGqmC5!帋)!V#À Gc9$2z*"jH~.aiLC94FɩP9E v$v(C|S$W>ڣB_Fc~TA,9&a#4P'ty ;-AHV RYps D$Hk8D0N@ I2NC9 "MY$xB[IRF{90v&l3kc xUԴZ .­pNASԁ2E2xԂ%dICPJxӠJ a6##IN1Fh"c XQ+EK`/Ak`@@JYJ>r) $ c'#D(R0_~Cr{"0S# A1|$*Lbu`lDFpOlB#+<@-{$CԁeE9"N`F?\_?cKhUЯ'X!4VK~8'h283.GuW}0_ho&y6`)"rXE!B-q^ I櫒z[0}Erc~ ndp N2 BA\"%JU:|I8a(\Fe" "'* sNI b. {E=)OC켉1Lܠ t(^X1A2P:{5 ![DYwP lwī>ЃG<`˺Qv0X"?p=}.i;|(B93| чI7(lf0Y3Ï1&$9 O(Juh((%Lc. *2'N`sb8-fȆ4"2O;X'K 2?} ;`!& ' VH[u0IV[4PȇAP%YByPsSj?768K 9Y:H%8y E#ҠۈBp0lP.+ CXq#d@+ Y$+X"D[j%Ȯ- UHH܇uX4I*W8RS1 I@ep? ‣5 T%-̑!"bHI9" E/b0 5;*Dڇzx$LlM,&|4u0$ jpT6«!R~X\؏ 5. f($xN%ĢBy`NS֘8شt/6$e˰;D‰"yE#ŗJƚ}0cE 6(GMuy1HJ8&g g1pD %!lu M|D\@$CR L6ʨ;Bj@ $@]kHm * 5iRIӨ }N΍ˢTeۇ 6ꆯe @Ff ac]]nx70I"耄](bdžhxq0?@GLH Z ?-@p7˟wHOnƚ dr(E(5Z~uUu,-Uv0JFi8_p ꂰhHA:.@9G%6 GȨ!RVȡQF *r06.6pz0v֮Jw5Sc9N  e(2+y Z*h[N 5q`*= VPo2p0tr.ʛ;nA`Aت#%1UDΠN[?4}/Ӈ|MI„;9URJ@)풄T!"0tˤ 0 {%tKǭ-[,5JbIO 2P8H3rkH"L1p"+m`aq: G轝mzTO\:shoo(4r@A0ݍC@IK-aA7GEH*AHp~d 8 m*:9mh=:u+G("^3cևzV 26 ]fx7 9F-^d2B܇ ZrXMK_]8zǓ) CuX1Ч쯨F *ˈR#5 iy!K +<B훇mt!Ĉ}民m} S-i'aJ䎞HNҬ qD*1(ւZsh,cMuiqkKCɣ|\NׇP:)H|j>9iift{<\Q%'=i*QPNԹ)F=*QlAj8/)ߜHC]T­f!&%˗Dm5QjD$:xgQNX'g+thBerT: zxHBςidר$YL >4`4Do'bkpҐ~#O< 5cC, tRIȱdmC鐃 AF$tP:pP s'S@T_1ޗD1:с5 JBMA \4O9@aDp'$Zd6ZqGCW#a(7>Ȝ0I!WiVxtIȓLF|0J (bBI3EtB6n)9o$LJL.KDTL&$1DNA&Elpwc 26! %J;#oׁ aF=}A1%GMHs@dR090ʤ r A:FFsh 8Ck9H B!DW$ b:`8(Ay! =ۇ>A"E@aD6SMW=^873#obgE4cb0'QRst2DSП~ 9 i59dR[(,m)̇.z<CHPd֊#r!B4 .`A'^[Ї$oʈC*=Q%гl&>ir+U'@*Ьg!,σ2$D-mЀ lhq1Ir(HI~ReIZ%[*әҴ6)Nsӝ>)P*ԡF=*Rԥ2N}*T*թRV*Vխr^*X*ֱf=+ZӪֵn}JIrDO8&jWn4J'ҩÝÇOB2Р nhom4cc11g_y@%iR$cr[#h)yY4Yf;Jz1dmϊ[B'!(DWF)!)CC*Djha@d; Ԏ,,.φ[0_$Ý*8~r HFqAhb/ d RgD _Q"C`2 a(J:\ uT" yH#n?ha 6'~`W3FV6J*q*|w!pWLGGG<đ9 fY [(-x! Z7l0St242N 0c-rTh(L.nĆ ad³3*N}C #++&L$U2'Z/&pk]b449x` & .ǻ JVB8lvuH@ `M1}&43IaI -8Fs~ `*dNH3NhKԆHE8+W-pqʚ 1dWDdH܍q0diH&h gz8Q$vDj7Mwz) Å&o_/EP,SR#} r8/fh9L6wa!x$T醼HT%NZ| x@(p0 F1 xR'`\ʓTT#Q@>p[5 2~ DxQ|07 3q"9N=gE(AsHDց{ USu}PGf1f:8}8. |9XXAǚC?Ck0_?l>> @zLL24oq ĘK=Eu P (&? XB?%TCAGNfC }D@9\"DwX@1-=: CHXC9$eY 1<Y ӜH0xDPhIp92A*?$/PiĨ%j4i@! $%ց)$T]NTA2xAH95D9|4P@ :1(*A9ʼn]5ee3Ճ<>lS)dSDԍ(̓dA$m poNM4qRH} H"TA7A,Qq%Y;zq9A+DkZG(AzUV XA\ (2@=1 &P<^ZmD"|"HFPUeF[ KVEg>x |!D5?W?(8xedEhFj4E//h1`DL"H\~ $>= bJ3%2q(MG@-Y b!Xw>86FV(5|Ѓ4JC>((6x%M; (\XI:^EZ 0>E>HM|P =MU<(@NXVܵzgepvOÑB:TgPaF\VB$('YX+.AuNwҫa3X,H!I#BUdaB#dy*4BI:0C‰%LGT(F@(K%NX`+UI)D : Ë(5}L 'ԃ#K~T\80PC2́7:RIDLTkt&MPiCKf% ȫEB!@H+8{Y*S 41 =%\t衂yC;xpXY:L\;)lcƑ !7\2Թ"  8DpI:LHCoC *:ͬ8ȁn"]~? G:C5]]" *ڂp"G@ [z >\ |B:6xO wPk6 ,)Ǚ'@KBgyҝ:2*A x9D}"1X8'"h-. 0cE"(6*tix@ pT*t5_O `-nD"C>T;Bg,? qH0}֪9 \C-2̕Ad=e!0#T!D>$DB E*Ik󀈚2xw9 @0u]C= C`t֍&[D\Ba>x&Ee55^N5 ܢԋ0HD,$I4N$2dC> S(@?,oxq9$$($C.̂-ZhkZOVuj^ 1Ay-q`7pǜ@{Vfȯ"Ѓ4~DԄi8A.26>8LLV~@MRb:opMC:DS 0xAKM8(>!)"0;MF@9up`|2 L5 C҂/PB$):(K3YRmqՄ>Sjq^an/=7?=GO=W_=go=w=؇؏=ٟٗ=ڧگ=۷ۿ}? GD]R)BD܋[3OX B(1tcC$B9n/XAgx;QnR=2=S@ JC=%I>̃3A|쁔LI*:@->eb5>* x öҫ9KOF==[[\SWXC_mNT=;>|Z vSIC%,@W>zo)k_f'Z58q_7-W%KcJȉN|491:pnbBĒm A\)14#Fۙ0`+m;2r(;w oP{nMOP$_?S$+e%LehJJ%6Z *d|\j֘Z9ow͚T[DDcNnBR [J(O{=Jh)i4-+ڤ^=.Xkt+g4'+yw^bONB2M).!:`1f<: ɓ@Z#z iCn"}DRp'E(lQC$BPBYPȤ`#."bp%bH% a2ăo< , B>HGp#%A~*15F$y!}12,%(J?*ΑÃ-<$RYJyGYcD'sË$0P16 mJιE0":Yr*g9. Aܧ1tarYJeh mȍH AA?8YuPdQl9A{:jE4'eF~F"uΰ"y8EfPnF̪cy$RI7\I(F \ , B:$P N)+L*)n&Xs%ґC /j~q!GTaEѢIj-0"g1fhaíՌDsЀDF+s OÈ%Ф)x0{ .">6j@,o!af*zÓ C]2gJ:+ -8!x9ؔq rn&pe0GkR`~okYjCq%r9܄2AaHCMX@ pH̳z:*'U jf> :h1 +л9F'Rn(@EPF "2EaD3{C :)ŝ(%R@K|ԡH=M$XDt@"q[O )sfpV@P5S ?$` 0uG<@ɫ,-1NH@rC$OZ&D[itH ƒt!" 2`BBqFSM jaX'aUУYJ /")s<%ґEz ,V)jAh$r,܇:BCJЗ .$(b:J$Hgȇ -ةCN*VDUjHdJF2za M `:ЁIpC/ʠ!Y ̇2n1-`!6QJ "a:V G>qFR^XJ:5L) ͅPJ>Q4LM[ yC ɢ$h"b 0m)F2/zF5Fs@BDB4Xj4i,c P3dAXjCʫ1Z"q?XhY\ V0~bmQdLxh0"aC8"B }84#NNv8XT&H20Mz״dRx̂tz.D4Hh,u P2=/)l`j\.`/2l> FRQD`9]]fA_ g-ZO 1 <%m Ms;1[> A YFXQlCbxLI4^a`8#ۆ fL}>!h:rEwoG>̠C$./ڤcK(N ` Z,gF< nmRfw@F N"pjh$>肗a r*B/ί:D2>JޠĢPԢjJ! gh"@_ g,$9J 6T  ` `okOW̠0 X89a \!,v!`R,e> K<г"Aد$J2@DFB8 CE j1ۊ!}j!j&!h xE>b F"G O)A2k!.'! Z@ԡ(n>"<f &8 6 e;DHL̈́T@2D[L@_ `! z `ML!R$!H ٠<& ̎'ЁJ@Aq1 \$ 52" :c(@FF$J42ba|"ó!T4 ^&dh(傑WPg"+ \XK!HAa "-A8N`> 0t%LNlRAnca^><QW/dh* "B ~ !d` H8UehF&b:ؓ"=>`( I4ߥ25A:Dr!6q$bNa4!+H#0Nd: 2t4EB+4$1KH!Ȫ' 18a- G 8AFA %82!IVaH x 5=t1ʯ$B HAv"3;@ TCB$CBVKʡ: ,&1,B^Ъ ֈ8I$4e"!4a8ʅ$!$A$#s6j On"40RD2a%P`e5Orp{<4@!EL˚,Yb*%TsG>eBiQr HrPPH# $!,ӈ1ZahʍTJ&4@(ba5IL^e= +:J( xdӀ 4L B$ dPX? #F`&$>GBt VpϽcfAp~* B fAJp!m`A$VA $&aIc &`!f5fv%$Ѓ=Z(q;BBà N(BaVAЌ:@tA΁ԑ*J!~a fՄ1+FI;DCP4`{ <@a 5(~ lU@TA[I@.!N$2Y!NbDC Et |.(Bmz*N"<&>v $":AH (wt#%x،i鸎InwW8W"*x} y!9%yḑ)195y9=A9EyIMQ9UyY]a9eyimq9uyy}9y9y9?9vX!99A֎;\CY|"8"yaę8,u /s.":p'4jA~5\$rVBo"k@!e'XѫÄf'D!dS̚T[7M๎ǯޚKn隸p]-Ft"%%y-s.+jd VR5ɺXRլW@֭=~[dI1l9?|FBJt"j4B %)7/Qxb! Paՙ1oٖkp 'VCc_3xRsQ dDq`'*RO9gݪ z!<x ֡p u (P!s<R P2D(!R ;#2\$b$xjyW>УkJ=kPZ=#p !_1^Ҝc7Bہ9ILmcOT!I>BqM1c(à@+ SjGIh 9ıDvbTBT&\ȓSAEtL1[fIW!fs DhTB 8Npmm Ԍ.tG-$B$#%tVklyZ{֋t,G+p_u( ݕETC@ɾ J'KOkЬ5ܠ"F4G6z!L# `}fX!^AjP&,;aڡ(?`!bP+IHdG>ኛo*! P)#hh>nh+433·@q e zA aHO 됆rlZ3 -!@ @Wmd)̄AC)@8K ʈE%!YhD l,z Z: xh4Dˎ/$L8S7P 6 ˆ8m ~1$YX%Lsz9``P)V"YBT,phtNh8 ' hD' sDA: 19Et$FPK`XD: 08.<K0Rf`0I@5DYX'=uY&r zDȅcN6TaA !NL$gv;p jbb$LcIe!Q&EIN 3<8\wq N(\М$:E``'807 P5 1'NK;ZÏx=oܤK|~YFLCE \=לd1@bJF4>" "u\D2 |kY0E!Ga`ƞ=A$VZt{YTCʓƱBAxips, DDh4 W se`$8hkUG!WD T`M*1t8$\"Iq +T灛A 1 $9x Kـ'B 6@X2>ݏx]*DT؃?Pcc~(4<K$#X TE}F$/z1:!&D2DdB_(F"@vAcl2OOy~>M>•1x!nD1"XBMWe N.@6`upM( HQ~")0 ucgDV' T 0|"@ H2ZP"QLX0FnszCð4͵51Bd0|RN0 \04:xQY$@Xr/ p5[ /T1(灞rLjYHcH pcX{ȉ.3(H;:h/uQ—I񊢘hȋ苿(HhLjɨȌ(Hh׈٨ȍ(Hh爎騎Ȏ(Hhȏ0艵H1X5D5Đ ar8H1=3p-Q @v0Ĉ-#<0F@ PGKD!Zp'Bp<V`$pp R aG5 K{EpxI@t/GG!D* :sU`7OIf e  &8?҈GQJ)͐23o))(#P ( |0" @V9pwI0 倅V( `  A `pe0&p!d_Qd2"]Q Pqp'$ c=VZ!fni))w@Tшq"P³czX0[Re$`B^-ś|bE$*s0^b`YF̹ ̳"p cjXP "bM&7OP @FyS +0CE _ j9{[@@ G(YPuA  R '=O :F `p` d Gh7:\rXL P)P "CL +B |mIdeI[@u qC:jI @֚hu17 8E0!Z-စ0#%P9c #99!8ޡ ׊PƠd@ ШQ'=l #q4XOyF [_p $@;h9VpkD ɀ IᛩrA'-%C UQCPC;n`c0^`*@!b"$GffXD@S$)[jF`q^EWDа`)A }pf i; l 9!'<S=`uDOt@am`z-I$G\B? RO +:q(YE<&4 :Dp%Zuj@r` TBN*5!b/t9;$(5a0[8ҁ!#!`AU>ʕrRQe6̂zlp 1=Y )ޣpL s#bd  Qu   O@ ڑUa/mpsb g` fE`Q"ap 2Ync0 (_}1l''Yp{!IưCsktQjp YLpR@Iq0!@q3OU%6S(nR qp T&P  4a %D~Prhd:Yc!%"J@OD|g&nrY` \P6tDb0$σ( $q M0 lC`0Ji R`p }QVIX6t*z7&Ňʀ`Tp$Zkfj2,+R/ )bl62oTH -B-B5;Ttۜ$+0 pxFW?CpH.ܢ @ s_ЂWM :B Gȉ!3PVV> I.RoB q1 pbYQ;!0R0},ٴF:QU+ [ @P1 G6Kdk` 2 lDMY@$J$5}&b7 .SSOƟ8p?I#̂)M0Q))uI:I5M' jV9r [ >"A` SA/1'P 3Pz,|ib^DT[N <OU[1#$" ~cToh9r:d%)V`hw I?vP E n^NQ(V u Ca H3I4:p"6S,Ka`#:)Zb &w{ 0'p#MP Ѱ|帆Y%$!ȦG=e 26[msE!(a >H>s/~ʹ%A "dL!<~H/|CI(c>xیr!9rH|8*'&i'IC} " 2ӄIz kB8a aLXy's(:0R7n@ M |[Z9腋Tc+o:!79B3Oj$ 1Hઢh0 wAtuc4&4h@*Hګ or"89ۡelfNBHBK Tw`}I$%y r䂁'RRN0J^;XCG-)<|E6N8BҦ"윈&R}ҡ#}bE&";*: !g8R/t!dH̺O~"ɜ暩 aw%־44,hrp>c8-lA`_Z|0 (G8q qH9~9i!:帇/ M;҄}"4Y"#) n`Gf3^|qT#Zߐ$t 01FT |iWQ sp<zdO(9$yҁ&u+YE?ҏg4a~C:q2{PρpB7Ù0TF:^wjOFDl@PFY#ҡc`/0B vJjhln^LKx]G(G2Wm>ЃFQO[b@xc]lxhhor1 (C2{0у7$ V8ArW1#Mj0[.a0en%NwJ0@&% t@Ӡ 4έgV$I_*,|s#A NO0hBv 'Y EZƥF.,Mwho@qm%?cA HT+a J> DYtF\!B Z n`?L`<\+am7WA 1A ]@&0 P p:pcx֓(œ7M%䂘K':f"=/|iF3³uh@QG ,k1(D|0ĘƱTt0!*`x*7>~u(9gXˢ/`:PB x}Z$ZMl#rH4"! ]|N@:P5 A3U/h"& c.|G.NY Q:* &ƁY[- .|{l "9%Xt؃pdXu\0 #`¤x0%:D.h {kA<));'hE@xuQ u@]+0"(#ygY.9(&P4[?-Ђ+$ga2Ic!Ocx\9ڮb3s6tX6XxH@B=qA&LjQ&Fs(x k,P 虢#9D2#jXoHjxCvKs9 Ů5pGP9OIh#BX2SAڴW__ 01 +X8 rPxٹ0B4FXdkG;Ǡhȇ@E.2';cn|ȇkcDP90Cʫ<h0xrT˘A zljC0;tK>2VGZiX|X- F}ʉ7X<(7H!xDhɇX8#+HXu@Ye | jJ@@B)Jv^j+nB B˵DĊ#p03r03yǁf@I%q2 CX%ڃH-X?8@5(AYrM3 ;z"󩏝x6xCVlEx"F˔* tHFH,~X~hgp)<L8O3xA0̈[:xK(4wڼĻtz_Hj({Ч@1+:0肽odhMHHP. nĊK: ~҉HHzɄnMc Vw/0) A%B@5e,47RLA,(ΛC;8,0#ڂw+@H1z89X5!X5cHsn\x=ڄ $DhVǃЩ jdjxy@ Q +jS РM(5(HW+ 'U(4 ( JkE@x(2+he0Q#$`h"s*i Y5XdWi+_`J~`+4P aH~xMW!@XY4 χp\h}J ̆8@-BeCREXOBL~xkY@kPK(qyХ~qKߒ CFP9~hDܒ-&@瑌`h/7Dݚlx :.8$E% P=QJ Lćr18j nxYf_r(PǠX=m a8ᩪAS\~Lt`i:xx3HI1}-dH 9\BlBНY`|SaaVsڞ T^L9?3HRZR "KĊPQH(tN Yy8R"}8i+s b( 4^XqPya%B\تBED3+ZϪr~H͆pU +H&ȇz"h;u؃ v #ND\HFT8jӉ}r()tXߞ(# +@sHQ?v\)ֽش544i&H f@6)s:dbBK L f"qX3`f>8*cu[ofe`: [AP9(80z%R*z#8hX`hjH/v߆ "(zi Bj1M [s$C0ةī:3昛Kۤjr:s/ЂUeɨp8e؄ 1P[tr%tfDM_|t60`(0jN /<$ݧЄh m(mFzv9ڐ"(éRvmvnvovpwqwr/ws?wtOwu_wvowwwxwywzw{w|w}w~w7ubAvt_xqb^c0N|hAjX)8|hh$F*z>[ ;TS8l +#)Oo\.0jAH91j]E-`db)csꊸxw2o}؞e!y'E$vdIÑT#V #҆ @K<Ȕ,% DI x<5c/̈:p/<XșHk>AyAY,Н/dQoaĆZ0 |o. >60~YSP(U=FM_>8o"{]чc2<`o =5ݚUbT#p7p &雨q#ǎ1QcgI"*9.&c<3s>cRyܗ qѶ嶉ԬDԂ"$Q#=D$Pqe-7=2RҔSV-190 T<0V +L6ȉ@ 4DED<$!!"63}2q^zl wl%XlԄ "r)F֒@FyTʸSoH2sUmAf)[ud(Ԁ7;HK̵RݔN8ࠁ 9[#HQaJOPP7:gTD]?%YHгF"4tQNi]Is [lahWlAˑOa7r@ҍ<>j%( 3SeHQDu-S8)#!$>op 9?r{LJ#/sO?c#% `#$@! WlM9~dO"3R!5 BN3S*c:QS|9J|8!1i'kT1f|JGw8A I,R.U5 O`t o%&SB$PA PR`H#Ձ1L#+,3cƻ(lA aЂ|C򨕃 Ed@ n` r*aEk4z#$PYz$# !@fA:A ~/P,8B ]H!%9G=)1'T{='pєoG(oxZ  G?p*!Etϰ6ۇ!1`R(cf2Dȍ_'ↅxb\Ւk!\:/XʑBHK9 @4H{Rl)ffSB$f`C%Sn e*U E,_f>fYCTBJ$Cn>m$HH@<@V@1`u؂2IOhR#U[B4ꑕdāU@TK$h3 :A^G_"Ё((|ӁIKpO"CzEkMBN$'JB~ Di0-u@QӎB)D^eI0G~'2B1QH:K ȑ#''} ݉6͘PdH'd2*-cELMiQF5+1׀mx!F؀a@Yj#R- 䠆 @Qq;ٌt$uG' )b (\TE0K4*4S7:jBA)HBkYcV0%P4@0[pl .ٙgbҎ{Sz>$! dPwbaV|#<' 2N0 #(BwHxSy>ȼ*BK2BTESW%lf >&I(+d"5IcPYUCaJfKq2);V#U7)ŦVƌ\ 4H!R;7*T.'&y VK,5EF Y v5B8 )t9F&!LtK?cܤn! >0 8Ulu$v! )l} D%F-B {ؤE8,!5%"ǔdզ Œ|QD*uN6zA$!FۊtHB*b{kl! v@a4DqĤE@M6$l'#|8\a T1%pyR@TS5G 0\"ԝY8 (P<>xҌEHڌ1i >|2SiR0#LQ;up>$ 50xVQ:GP4Ќt@%xtS_)OlG,C-\PXX 0SU]EW&y _>d.ָ$%qR=S Eju 0 )C \-XFP5 KHWiR u[B"@HDLE-BM:&B|+L PG`9fR"ݓU@蜑 I]$ Q^PDTjPUlރh!5 K=!G44E 2p&0p5p@zIРbl dX%F9(VT 'TT!(+d;0C'"dZlXê >~8 BU._ipD2D+< $uRP#M>H7`ExWF|@*Hq"R`QL"T>:Bx嫈<- Jtq%M5 nD $Y؃d+>4 ZGM$Od$$ސA$Eؖ'`Fpx`U( ;\FD;`c+!1ĈSn"A0 v %]lHvHfP :/)2MVApHV5D6P"_xU >#pFpX:ݨ_5̄܍@,B` ,\E!u}* 1'<(E=C9<9LCNš||PA4# ؜-ɝ&D#-B]:Bg*A4D`)竸Ul@cH|Š%$G3*ΛɃ2T"ecW%edB`fi9hB<ȁ(c%T%Љo,`i>(J5G;m@YpJlv#E'@ԃ0pA* heþ݃:"԰1@XZw2l?/LDӌzD= Tt% !\:~A(1TF[JqnH|r"Wv߅ 3\f0H1jvXȄ+;u-v ZP7 CCK]4zQO |8,WA4Ju8'C=DΈ:Ёx=C6 (H"xʳ, dBhBjA'eɖ)o<҅F):qvDZoZo=@,ooooop p#p+3p;CpKSp[cpksp{pp p p p >!,      $*)7 9&%* #< (7 3: '$#<+<(84:4(+)(&4+&84)333<3333;=>=97:,2- !%H75Z66F6*j74r93y<4P/D)F 6G 7T $C+D,K+D,J%G3C3K3K8G,R7U+R +H"5J$8V%4O-;cEXJMoR IeFW&YG8LK0xH8oS:Kg,ri%85J75Y(8I4>z48h'UG4TL5K]=Y8GV5Hz;PoBzSRMkYOmiVKYthigvujxzwopm\dWQ5T4_3[4^&k:fy<^&oPxQwqjZm=|yoOϛ+W{or]׊HߛLӓTRV\șpӬuq٥Svmg'3F3L8W5T4]8i`&q+ɴa~JFEUG~N2pld~ÂZ豅b& `>$+Igꄹ7w5A\#qR=6)RIRjt,Y|4)147cd(#>Sbѽǂ]disGǝa-n"z( ]ddJXa3|3Hm(26I- A5u@V9@0xA+ ſ{ ц6$'lRt݄/X&iʀR"ߙ,$ 6DbQ/1uz`! L3y*(ۙ60 P 1 Rz$9ҝ"fDIHA0+ $+7Y"mbD=!61BI;#A&$ /T1q`[) Jeˣa,V-XC‡9V%Mr@`*%`2@S @xÝqf@ /焑ba$*+]# XX 40bFh#pC Kh@ Κz@)QLnTDU%sT\=?`t_ XiѨE{O{ &׊LK5' "97erdցe= hF#UЂ_ }K2b‚8p@*1d@*MxÝZiEFuTBD}A:%! RƃRlOiT+_ wθL7(+Z+-†=`nF_aHIi xQ4~yr IӸ4xaE-xo[V`b6%ao3ړ:v(HkJ70Bԑ4\:6,:L"HN&;PL*[Xβ.{`L2hN6pL:xγ>πMBЈN!q4 T@)@Ng pFQ`Ȁ4 \z4\mWc`@5$@(Kc%@m TBApAn  Z @Ak@ @ H dؖ睁ڟwq=k#[A]y3{ ]]Kԟ@kHp~p}@@$ <6 S&:Sk+{&z=m 4@uc+!VS{8qPoO`.n@¯jk A ;ߑ\8 .Oaw(<^ N{]gn \䜖5vPd; 4(~wDV,-VgHcjGv~vlc[AЁpo Р[c}k00z/09~A`nq{VBnɶlWx5`k3z%==Pp4Ps&v^v7qpr̦iyiz'GjoHiz{3`s7<@4Piww _ e%fV#0i#!f j j@PPmP00oH7tVV hftlaWyEs6@jiVv;dž681Pgn/qr?&,iPvhqV=:`k@6piyivsv:WtH'؂pl&GwG16p7's(a]@@ `(RJ@uHP8@jmvrITtf f6{il@~'w;E87oHsiX/ш4zxi0k~E0mx@84 7hozt`ii@)5`2x.(YsvX1 _Rxq:`|i1W}-PͶD4YpmgD^y}GkCXy:0&}C'0oW%im7VkiU;Pp?@ }glvi3pn=v:`nE~BxlpnPk3;gsňo(o\Iq(b D`n67rBƷ7`NisE8p (< '_p n "P B K" R`%00  ڠ+ "%c#' b! O ĠS  I".*(#3 _'mlhlP)JWlwP\M5in'o l;0q}jVz؋8Wk&nͦlчH^y'}j2ovmog /P|h);W&7zfr:`|lBA0w4@xs޲ `X9@ Ž (@<6`p:9!ECU/a'@ poͰH00pÐZp cPaY bOP 㠠9~ҭ k/@lJp)pIDPI0lJTݗĹxFx)jJmr`j؏k p}la jj vK =Ϧ5p:@Yram֋%W6G97n؃ n69pk@F7.0/6(ƙÇ3nk77mD0ęp^,s{GὧppjR5q`p|Ma($ s.ZQ*z9k `0q!ҭ\tȀ 1bXPRGA.wEinm\ੋ}nxj*w%in0ٳW$')xb DBt(w`@ cp 7{%%?Ws6 +|oww̩t7lGa7/0p&nuryknk #  +ު͠x\PN7 9 "{(3뵎Nh0p̣Ơ &Naʠ^be ,54ݼp-p P#^5*l70r=.}Jklg %:HkB}6sjlNv6r Y&gn.lq\ d @  7sJ/n .@ /onnQ~{o_j܉^ n{g. 1]F5L? w."PZ'P3 f "Zc a ] L\ K< "/ `3QP+uO@ n P# )2 'Za6<}il6w9yf֏[wy!kzs[t}O'tiM4ϩk9P$H@&]ƍ۷.?xdå{rCx낁N8p fA0t!Ì 2tքp#C3d0 a Bk 8fL(K̞EVZmCk;hV^mt֘ U} 6 (0bƍ-c ?ag 2U /(LtƎD5QDCl$J$ (ְtC{KؠA X`i :(8 ?n̠cx 3d\@AIYҞGoŋ ׬}g{~ Gp$&1"hrnB.ݚ )i~A 4*&$ ta *&>,_P(,H%ےJG(Y1bJ-L 3 b p *@ a p. 50p`9(6%**$`486`.pN 2n"|Qb`-d.pgz9p~oΉ'{&ڇ~) p pI\p  *tZS8CB !(a *20t) a1p\.D h27}bk6 ^f8f b!8 .쵌* xg^ r"rxʲ:Hx`70@FB: 02@r/! ( @1tzÏ]~>\ on}{pap Xxh(dA6'@ ǚZqJ+L#|dp9NMWg}j=vٕ nx F PLo411 ǡ3)*媂9 YhK+H. 0 R:dtZ \I>\ïc񳕮nd'Y֡+j؅, 9`HC5XS$&+l"95R *]uC0-TyA)0;|d) ^ ]E!NI!*{L* kBW@Bf(=ȇ}qͪ 쟮?pmo@[#u4T[a h> T*,2_br0s@@vཛྷQ4xAr#$4 @|8LbӘqRp4UB@f&x(XH+q!pE P`89':+뎎 #7@CuM<[+cqzpBuuH*?uCdEMxAG 2@(qRȢ(_޹x 2@k؈c9"rԎ;WX 2"L2Tp|4 r@.;bp+&JA 4Ђ8o #&)tE7e: @~l62 ?AsTt Q%ި fQ˚09pN!Ppd2.`e5w.7qʎ=P T[`ȿvrʫfXlR|Yu=$=Z NtAAgjSh EPB2('9;` LeUA8Ί"89 G1cF~#ǣhG&˖㒲L}華.j%RĬ, L^ Yr~ aheVekSJg.+S!$˕r40+3 + p4g8`A J<#YzZx|`p7>;dAGl^#nԳsBRS  T˔i1LXcd۲@8Yʟ`Xo֍yv9U V(0pGYf;HN cفmx g35# mhÏ!-+ICw6p\TW[qnЅb(e]2X᢫' 0 &8 B?19*( 4*`x 5(l'i"P!>с%؅EY[<ij(h 2o]ȅ @)gx>܅YZ :вnې蓗 x" T6wq(XATU8Ax8AԐ, q1$t 8*` UYm9",!Bh 0({,C0bC0t̏I{4J3K+]C[l@q>ÔrXMk}zHyy*@@ְ=$bB`ŏI(" |i")Jp $\> ġ!ΐ, Z:HLI1ÕZC0;ZGq@0qS(+`h(8]|C{`pB܅\˽F1Sĉ\t08z&&Dlɤ2.H3쁒%l=)=/ kSX>i9l; 2(%b,q<,8,Se^\X[G](~i Yꄐ0#Ԑ !;'x蓍1*2L3PÐ72$5d9 @ ʘ1i gU䣮 Xy2yԖ  Q/Nb`c7YIbXǾK OKDz!SZX8ȃ7?\\\x[9 z.CY* őH2D7AHaP*6t`! U !ہ: `Q)N̘sװۺ6AB)g"aH@P \i:4 /7No(_83t$5np<]]<<9ȃXW[?|S?̅Ăʩ&.OegZu95U \DH R|8J8w0y-8&-,L}82' {ЇBA@GyY08I(tЃ$,Qab`Ȃkz7(")%(7Hd@UЇr@[eٚ_Z((@Q-[}/[Xt\p`Y@v@K I(W(]AڧMc`w5x*)%tIp#틷=AI"p!J6 iNE(,{5OB;2 ֘^=!.ă] sp*4_Py(fu_(F ZX<Z 0WXX Y\xӂS ')`@.S)ӨtAT@V AY,({H%Ϳg8;iЇdPFXb( M.x8%0}x >(#~i "Q^Lbi87%hm02xOpb@5JXqpMrX(B*abS}L?>55 |'(q ohZEYZb8VЇ z]F&d(PFF)ІȂv]} L%Q0vq1F |x[# Y>pz`bR%X2uȅe8z)p e* Z* 4 eU ;2Yخ 0"\؅u`0]90H2 w. xP6xpnO}`Z0ȃYXO}X `!p#R1*RQ)=L @xeP,vd4z76 g>j) &j6f@+`}+^E t(QCȂ+BF6PC]Zvȋ@33 ]}kQЇ@Z6 B^ }Đ]l}PlGM}Pk4d|`58|2@{@p{`I QqM) J0s!4'SYɢ#7MHRA& {\Zq;c!0{WTW^2-xx_h@sXxSZVi109iY[˽]x,h k!-+˦X!(bN', Նy@.hwEh8%?>xmdX,u/%|胠!8&S0e@Fm-'+P>CHbX']m^>?ЅmFL%Fy8f͆y0+-w3*~ ]|Ȧ 5葊ז`IYk#)uBP: sz錘P01Kx/4f(bh^^XW2npp9Z<Wx΃9hiZx g 2@pA:9YLHi.Yy!0GBpr4N}h/Ƈ_ckB?f@ׇQsFдsN Nm@G7Vz8+@u}Xl*/8]|0%nO]>uzgrU7g6CЂlhKX |h&0dǨݜ8NH` +* *N#,y&{Xxyyqq6zXpUW2Mss`gbw=/uh\G^ @ >i12R/@/P2@1Y0؂gZӐPpx2.ܐ=tx!G9hPq 8pL88cH}"G,ir$3fd*L=6܉4%>>Yڕ>4ͻio<5r VU&L}3dZr+PĪ՜S=ϞL˚fV~.%Jy>r{B&v!CJo3EC)l"8/ݒRf®MLy.H7f@G3H!zC@၌04¨C:0ŋ)Ш{ 4b=w3cqɥk8|7/ހ7~39#N1PK/zKt.K1AKsdx^pAF3K.̲ . Ev" .P /$d[ <`pn `@%Ό#K8w% cN?:Qt39`#䃎Y\O/$bd:eD?ce!M< O4 )e@8d z+?T*PE6 U0']#RE54DijQhY9\)4`mօ<|7C7L ԑpPpqLP0 8ȸ!$Pǝu`{d{A80|M7(.uS` .(8`X zq(.ň-px"`x3rD.y - .?"#͒C6CED 6D|A3\ OA6 J5#ẐHƸ\Qr&  Pɨ,,V]}Ȩce)4h2(p0(0J>q_83>rpגf `I2c8 Q%H*1F$ *C Iq`awN䃁ij6.Hz; QF hL@s4P 8Q<%ks0i)Att X @(@đX 3HvM.~Qp(,lQQ  3=4#{P"0IEP$^0xos >|80- b`XE-f"aFs E{ ,FrE܀8wPM*)':өu|'<㩺7hNr$ E XEp*f@!i|@|C h c L( `2H}z$ nlAHЁvэb( P x1G(F/! a41^ %` q $@$` 0@XvF^%. 8^qvuS<`ɉN@`#S@ވ7Ǧ"͒'f3rO`A 2 H7+2 H94[ r-bEB sG?Aq#C@ x!؅D$©( 1:apBRf@ Ѐ 0Vg@F&xuoy%]^΢³ja;+ @f}\baǦ"h*!gs? D=L>^pO0hAr>DE*J@@D}:֔Ar 2`9xlL0\CJ.Ƌ%@DC! = ͯp |X ( -Fz<-@щ94 , ##3ˁF O2C'7ϙ`:)~6ݦ,Dc,z0m68 f 6%3Qq9i3HsŽ@a#9! ?db\HB6p[uЃ `Fׁ{PB 6P P,@+ @` w+ K2aoC#2 ,@KYR  :( S24Q]/ 2p6=5q%`H i!2=+˻YFB=jQ{+쁸xkzN (68Xv դ|hFEJ(4%@4 beS%dLjTT,RJ ;2!hh/{2̦ډ?nI@%=AI@XYEGYBi`<ǠL`QǜЌuI4A8 B,/" ЁY"$U!؁$ AI4~90pA@ xA H+)@ Ĉ,/H.A(A8l H@A @ نDkeGVk&n"'XCq8T D} HE`؟̀LK}(-4X|)"ԁ-8~AX!a4(A @t܍*]]At-`be@,?(@5Q&vK$LΤ@ đ̐_@L]zY 8DULV̬GR0ƀ tLSn8mH8e A /.Ђ.A/P81 B"`RB/ c:88A0 A0x4$ pA|@ +-=$,x,T؎B(!:Y%Q# D6sh SƤp'q0LyPԀnT59ðDp`l A @ՍDT iUTo @DC<- B78aظ E@8A1A`$taX5%ݐ@pAۈ.-%$x.漙 tDpDqFvjAE,GLDFG P L@9E@xEc'XBEP`<ÇtC,^,̂?BA%%8:u{XsrVvV^`Ǜ ۔A d(@1:|w"T oDa tb LAw@"μe-B8(鍈?,x-{]Ɩ:h1&a~z"$U ,@,yAԍt̨A4AHQLFܛ%b@@YH/V} *D7U ي/G n:o@|YGF= ]Gm4ހo,?($H#8A.B-t"Ǿ>,:.f!БA (,AB( jK}DګSY_14Geq@>Lk-gHMC- LI5Q a@ , \ǘ.HހxxG@ DL5C}R,DnA3Mx/$w}a;ZAP~02Ap dqA8$%8,W*..B'Ắ@{xě.Gy)Loɀf(H;]Z)8A{iU8ryH*=IIi\wX}:m 0\``:(c^6G}'r@Uw4=Y[Հ.|HF./(|.$B";R`^aF{(Sp*" ,(-+,ACnkR8$,a'(YJmPuV@ _ۗQqB,r f8`>xtW5[yM#zȴ16}xo+twHkXi7U=-G ,DԄCB䢣B.xh5!Dwf_f_: 0&cTΈCM ACM-k*X8ezlۛL @g((0DOD9@(ADA\ Ci`sD: hP9@+4C"( gilĵ(λ'A ȻI  khD$A DA%S4 L|{$EF,@?qĽ? 4G-֧`bYeGwtoiėxY*gX3 pA,j.Ct-B^{d[`2Z%H9kFH80 D|5ȃ0i8?_D2,@zoЧu<O|Д,YlϓRAGF5SSeK/a|G5{x1FDbPx⁌.d@: O)HPG2f1 7lܨKePx0 ~cnd# 4kW]te x5KdgϠ=u&ϟiQ/uى5k4gYcNL8p#o8`%']sKf`Հ *2.ȐZV92T3#J+'2XY!FqiQ)gST Hq}A Q̠Bpj!LОTHFVGG )>)w4R?h?kT* V[&d81ɜ3sA!~!^&t& $x! (@ nk(` ڡpЁ) t %_Po駛gPbC=HD:̳h!XXs"ZH" <É< Y` /xco[1N5\ZЭ2f*Pk@(@2z!ʌiYD8 HK'[PQ|p%>qA3F(QI=8ɖbyeȢU:ÑU'1 1'H YfO!IyG9.RBCBrkg1Wً[i!|!  A3`_ p *Bk`*\A fA B a ݡ Y‰T +Up&su&`(Ď^?aL <;‰.H &[v '\fq.\nᄣeYh0 JS@1bw0Y`p ,7(lk00#}'8+F "Z˰6} 3Tp3,igEJr640pd#IcU> `V2uLH ]G1 %FJh3̈́ |p8B$,5U D;,ttb0 ԠIQ6םЀJdr-&XU8э_x3яxLh"4д "*@"8 t0<̢ȃ,l ɳ~pO8$Ǟ ΡB @[(;@$0JxГ .@6C$D`Q& ɰFJCH:4~6GDh$6zI.ѐ5 R#fE!QF;OU&D&U}CmI2P॓R$E[WH^Pwb (N( 境ҀP P8p> l8-x 8T`U17ozC7AA؁7H`<s,W[p,-|"NĐ \pv1}i %(=:N].5Wl iP <԰vc'@)GP ~#cӇw2]Eq(UȩڊjtA1 "*gO{¦6 J5I5(j=q$DX7 (JR+G ΈG/HA4@$v+\zI.\$lp\&=k]Y9|v@ʨD*`ю  `N  x. [B 8`}#zVLK1MhQ \E,hh q%`.J9:pXtt@+ d'=6\d2;=k:'LB P,b5@OA`BıdSy8)A@[0o8DX`x DHKX"7 džlf-f`%(e*1aB _E {DJ?NB X:Ptp6spI48 2 74V؀@JTnw+_*/ |R "@@ (a1U1sǪpآ۫ï0;<^$Ђ$ăPrvY[xxsMN sE F=Jlr(=]-e\QJݞoldI 6/ &$ %pMlh/ nϊbҤ&0`;nO `E`@-PDL'\`^  J J `NZ ^+z|{D×46 tiٸ-kxp6m: \- `a  0`8iD)_"MLtV 0,J0MOݎ41EqBFd/ )x.2&p@0Mt zw2s ^+< `-*`0 g@x^1D@aVU)G sW`#XR>@ Zpڤ )[ 6 & x _tj0 (*`t@jNѐ8ѐ\.&qRA rf+~@Nrbz @(.q vss`Oހo0Ol l qbJ 8:`\% aΡA.÷@ 1 LY2H8ȥ\xK9-d[ k8da k+o$_d%Of "s&`j@j ~8390P9#p%{ErvG+ p_`rb jP 26_B2tx.@($r ) <  /W/0[!3€ Q 4وhRkڒ#ja3i٨يڬm Ls f j4h%_ %Ov"<h9JJpr`uSs.6mpG)1 Zc$O?g&d`<Sb1 U\+^ 0S/Y!r5 `CàTI :~pdAIҐ)%8SDnA(-dGf|6\ ~@(vI_`- ,n\ ,XƁS2 v# ~Ui6^b5Vg UtIM!KU (a8 B\j*W6``w$b`g5\ɶl'@ezM,M 'M]AMǓt k3'M3.C|Eeu"kI+yz AUQ/aB/֙$c! !P#~!c! ZZ7z#d!M9jfhv!1p|t g nf<@t_ K>)(ȴ2+q)ɺT .v 줋 kB& krIIqP}@,+  sAU0WA;dIUat!lN^ehAQِC1O8K [#^Zeh t j_B]cp`*twI^̺8_fqv';u$g޻&t+9Rm1__Z,ky CaBQAJc5VP,R97@bATga@ zr  g3Uca⅙DVrM th2r&v<5q&.^y@qn\mAP}^k"B]Z u*pǁd!~N-/i%tt=aS{Hra@ h|YǻY%ی3fG(~<:|Kxe< V),b=d B(lyQ*[|۹ݐ\Rn]Mvє^j+^1N0 v c4v`@Qa  ay1h?΁Uġ:]QACqN5Ot)wiVنwu]yQ0ȀȠ @]9%Q(\=_P ";n^KA& p%)t,$aZUrt48fFyßgBA'502)Le _؞EzyeWU'Vo c0t!VaUy:9Pvxvb4@udBA "P@Wn;9yN9p~uV[b,O^!%LXGL0d֬:i3Xf•k׮\vݚ% +RY:ɚ3ZLءŒ*1Ì\<0a?lpB9jԘqAŌ;~ 9dP335'̑!jq%O~ ;ٯyqH>x ңNj=?HpANwx{ =b :r#:pdСDDbx8P8s7 CXTL0$xN` s ^l,R -,bGUPB,.ܒˌ҉W^Hܵ 0]M`A@APJ@]I9ņg`2lmN!_Xo&~Ƀ pDE]p0Du qv o 2` fJ@"<\j\E%`DC|M.yE0-(Q!ytLxAˇLcK- Njbb;&f5 -" .+ %s ,\x`MVC8x5p8% Y$n B%(6 )|5|_Xr/]|)( < D 5XJЈʍD Xfzțu>$0  @5daI(Ƈ'xF!<>8 וs dfL ` E΢|w yIydIä0@C=4 ä!ww'jw 4 vm6|DArB\(x D /X 6˼4R /C-xW+ -2K.&D\4.vb(( I sȐ l@5`f K\tb32@ H@f|0c Lps" 0D`pp86t! J }Dk?Zb|qRDu5>RЇ!Nu e|i0Q#eaJq=CzfA%A Dj~B6 TX$) kC!ɯUn r0`.0 BPDxT854 lf6Rp@% (~Gx !JxCAG ȝ݋> ]8EasCŘWH vA [bRM`qq c.7+]?Sj! 얻$T@@ l9 ` .` d@a41@HʸBV ؀ !GaǷ2a :Řê8BfHY״a p2T`7*d6`x0, +TÎ|U0@L! U} m|8l!Vǜu'i [sKnDW)tئ4olwH 2X x n|t XD xsx7A~cD "$pDs_YV.l!.]h(C.5Q݋d pA 10(XypQ2̡]b  @ JyRa \@bM̆!R x&4}^8 qX5$ L0OPT&7*WˇJY1scza~@2P0>n''ѡ(TBiXMgfgL d:I63p첝 m fЭʍέ]|ӄډ`NN99@=!wroD~c؅s ] $Q/P?>C / P&NH.,dCppJ'\ ]Ȱ@ 0J@Bt`rف@Dmd&iLu3W6q AIHfd83]*PS 1,߼ͰI1B6l'P1]o3|ph'K?q[E>>2LcLh@gPM AUW|5  9ҹ| \ Q鼀0Ж80s8M)^cCD~(w2XJ1I}L4 E.b +.p]_+pdlcE' 86"d `/BP@pK5&3@W8YOr5&P dq6ua0UyHDf3y0h5(4d}PYqTqn (p%WYg&pwDvEYvi VWXS%y3%!;= (a:D!;ձ\@5qNMd""! ̧@nc hO GO f 4?  Q: P8r#B.;!+dq0"B /2Cb@\0Mpr6pSA0.c9py8P@tA/ NFt7^dC 0Pt0' HppQZ}X dG$@ ~vgxWF|C vPE'VĆh:x DKC @+RQJ K j{$H \0‡=0lfu\;G[\;{5~im֖@ `_<̳pm0 ,r`~4? V"ES1.`9b/Oa"s`a2"`?/ / P:p(4P~:@? #B38(SNn 4e9(p86s n.2"Xg ] M,Þ64\38f :='zpSG4S6ɰv|oy•-ud pvI)KWi #ivٞY!Qd)1%ӑz=1)L?`&*{&  pOP^S `0nYo^qa` p]0o00 -RQ,#~p P#2aa"=1›0Qt ?A?L7P(T$ErE03ʫ1zzx0z:;Dđkr%kO0&%ƗQ qr <@OO(. A  @ P P ?R; \1 טa11/4\ \ J< BeAs: @jrPA,-p*CKE qNQQz(&D`9U6?g|!<, + n N  pp0/9n P 0oz QݐpS s"YaX"_:12r20R b\@8Ap$70Pb4:г;EBfɫ;P{\F:<ށ1?`j%a $N0N!h !n ݰ|+'}!b>=T|A C> W `?°`#/x!9!.9PaM0?@7@[@/pXzQ:`?М1c 4@MOO{/1WLa*E6zʵAPAL`ؚ &| `{ p+` OyN 2    fnLQ,; ` ~ v ~/;(\-a_4@ Bst LALq6[b3 ѬkLہ\몄12)9*My*o|NMۺp|] %}߀Cݳ|׳N5,An0z< x+ 6Qo)p π Wa"R.`0/B Msd/М@#*B`̵6%{6 B@4 Q-c:DLK1 1=DpBlM9G)pޤmϹWp  {ۮ +^sn6˜ɷ +^yߠ`Oƨ&P+!|ʡ@0}QWr c )3pMM< <q[/@8S0-{ջ!>G9KMW+MNM\{L$\@ON@+ؓ=bPo{kKπ;-~#dQ-;@ B5p608 ?%r6 {+ԡAAMP1SClCl?.Z"<0EN[biۥ흥8Mȗ&@M %^2,NHnO5, P   2,ڸ0 ! @} 'Qq#-C )E%0&pScSd*jkA^Oμeճz=A? 5lY8 p]?ummL~{<! n<_ ( RQ@~ * | @Qo "Y0.Ѱ#/v>x ;"AP0PA ]X%YbB1%O KJ[8g!C` bE|]|6m]{!@|IO0% U||e_ɘ <,0 ͧ0Wn _P 1|ҰO,  *:b/2.2@ QP\  8hT1sՄK7@70W(G[36Ĵ[=lqӴMFJ%Mn` @ -,߼ -\rp9~/-Xx[H"\)׬]ݞ= \p% [@sq-^/aѢ5Kd! 3ʸѕ 4|= : W]y_&\aĉx #ȐAr"t񂈓#E`4 :8%:pH LPbKq-\/x.H-gu{<~޽_X)?xx.[ڥ]٥(Yv]r!P[` aXfyiJjE2 jadpAxAfd #R+^p$PH$TrI&t0dAzx`!~\:\"& iD`9R% /0A2L xBhx ƕ ("z I|w_Ō~цȬA!Faab,Jxr@&b`tc :^ .8+<%:Z.ocȟnş\9&p\[ ]jKXeo` \tU]=]\}bېCX񈺅Z@ "& ^f݉it+hJ& xtK ^82H\3.oȧz@L"^:8NPU.P88@1`{YǤpF_ 08qZugnx"E< ≤ dCo AMfxpwsep<#S,;9! < Jh4aVw#~ZMr18: ]ډl;ϸ_.n%jM9|B+\XJJ~7+ %E1h@jwq͂G?eZV)ª<"-f|CN$.Epg8^ <p YxaE(p1 q8A '@0v0"_3p_$!P]>;`p` 4# 4G" hē!u1'c.s]<<9YTgEQ dF] @3/ Jg$ `ÐS"B Hp8_4$ư˼vKqbcЄ-E@| `d}VO O ؤbE-hV.AOp 8=,WB'bVJ x*/ZI5u ( P`SX Hv9@ <fJC!;4B(L3\.:t{Ph4N'ҵ<wVF<^ }xG2 8Pis G>Qgؽ Ր"q❧CJ1`$ 8qU`= ?q# PBGӟF#“Zg}X1/-CkcTb>8B2h1u\e Kȓ(g1Xp؅1yuꀅ.+]0u zȐYg09g*/Ґ, 0f k( ! C ,!"x ,,1&  3<} Çú#5 Cv@г(#ePc365"c-Z0vCe@T H'>v d@; 3DF-3̄}p*VYC}|'ɇrd6Z^2ʾ!>9) A.ݰ60_^08Y]X(Hp z[إH/9ۉjP21p$NNN0:a p  y"P C "@|88x5}lsyhL: `5|g,84XE}0}Kx!P.OEh"z'YS36,PD_8,pͻCx 4ͼ˺l(M+MP=\kѪ˻,K>`'r5>8J8'aitF (i̾p! hs sD` @}YX…n؉XVY xXZ i1/"\Ȍ T 2Px.+x R1؁ 聪p"Ț9 &m%@"x9RW:S+xHD<M`K"(w`ͺMw:}KdM7 DL6t{x<Ǭ lɤLċt$E|MѼ Bc[TvG%''X;̫)uKXkN+Y!("($ ؀0X;) +9iV=@rPN1hbXoY.X`x_(uP J؈/029 Nظ8A )p00`N.(2H/\r+« @Ȁ P& #"UXMVӇ> N4xìˇe@uVǓKD%9ML+JFE4>݋ Ż"}E=]ãmSpV|S߳DMe[ćxhBRK+[K]Z{2'3 N dC! h) G8y$Gy<;:@\H@.G<1+J_v8.iЎ@<1n01N{1N8]ĉи]0XcC\Xޘ 0 R"@ `q9$S Pe(N Nx{'Bxk0ZE}HWJX}(N]N5q^x;s(uq0JD4xP61tpy 6sRK(K}>LG| ^@C23Dzű,>hO"U;0գUpĤ'9XewN1ɐ*<`?u 4=a9I` hezGݥ[h O+PHiPx!$斐}-\A +`H(^y/2Ieq$.NKxʁ$@y ȁ V BH,ZF}E@JyxR?XK8+ІtmT3Ňf@Cb|PL}ADں~{3A|0 T+3cEN4+-dXP`a[ \Ch|8Cֺ5L' C ldZ]2rdHI;B?S@ ׅV kU b% 0> ] zn/w?HxĐ+ 9/P 널{pD`z (ŀg؁x'A2X5a a+Ғ"yo.}j\E&6>!@ `l u}(#1& " &8!- (+D#":*G.P ȅ#{ !.HϑkPZ YW 68# '1;,z(@h }6t!xρƗf4Ug}9gx (y7`k$p Г(Ht<րdqvװChg? '-,6I,\8/ W[x i hhS>Xf J  c쑓NN?d 00n F(Y}t2J!q"( h t ؀8.H$H #0ְ#ލM+ beqYN r xK V0@ b(u& J%n 0:u+Ypu. YB1:DH%J !AN98-`9pՃ9֏߂{W>FBa<+ 78 AXL)f4pTi&ܘ`6D nZ`Vl2 kd\4p(h1  ;g(Z1@MG Za`,va}yF |Sdf )H\K*zۊfQ42%tW]` y5 @m :Rc2 x`K =0U *\=g<\&c{lt;ǥ>A i;0Mx@G@0$Pa~ـ[9D@pL#7'7B2zX[,8&zԫYډN=PfNs 8$`kVC I!dYjajP~0ɻF"@iZ"D@ ]8F=0@ 8:]qlHjc:7Tz)czv  h]H/-y]0 A ֆ Љ@%B(PtB( ^I(AOw_h(jcȡZµ=qNH@kh@ DνH!E!l dnB%^p_Lc@1-YrVLo\F uA|X@s]LYh^ >ݖD\hUζq ,܂ˀAHpL @ n!}M qPMqL ,]V eajb}EUr$AAЀdEKDaE-_]CL>EE D  l-a]TIlp_Pz!M$@ m1U @V9S]LD @<=>لcBXKPE@b   ;1dpqPMJ$N{d [ M0]`d! |@>$`U62| x;C3̡T;= $,( ]2 @_[ h[B@#A#:C9*E:A;T<B ][Le^ZCf@A)h>(A (e h50V@#dCѥP%>#  \>#h>D!6Cq@i#[Cd%;, oe4w8. $/"ɼ%$!V]I)jL`zU $N,",pGN wG+r 0p<\興 t@P@ 4Ab\ F>9U%H9pg3C2@#\1Ȃ;\3C3(P)8e& |:0@Bs!8!'C/$"4ҥ> 8fE:i[A\C<"'A840)|CpѝC xX=#o'C:f4H_X<`8s%2'1t)[$_%H*C9@X<X:h7_kd@ Aib) 8> "ZTcTV@6kڲ9*m*@Bnkv-zV.".>(҅ @8ƀ/|d-`=/A_B1Ak[$Eܺ<(ncC(>B DZ0[nr% B>tfѩ e+&E 1b Xp=\@DZAgWt2 p@H >PoY d0$],މܡPp (@ lO7qAplveqzW.LrJLv̦hC_phGNleT`SzH;Zx+3@F!70E:A8F2.E{[\4p'qjZ$ qAtB@(ttl _7k[ lWv2:­@^k@X> z0,[NDXa13mv!/-ؤFo9SZ37=$hr͝Gh0DDzo;y6XL}RRz^ Ԣb 2BW70GfQ)29@[Z NcT-f>cL6 [t{'C4BN!qFCOg~4vv/8fQ37[L2"U@V1L@ %Ծ@ɕ4@` pAx@t$ܙx>b̛roo J/ 3UlN+Gzlʹ#m3(6/ 9Sfd8$i;Gm09> Pi@ A RW8e n_:9)̃: ;熮 8A6 f3S" 7yAE_P8h*'Bf '|C/CD=@W9|:Hp'Om0@gZ!fHC<3,s2tB7XzA| _t[Xg|[ x.-`Dl!kgA2֐o a޽eHԞ_cS٭݈d,ih(ybA80/y!@ oGȃk1,Ap(@֦C,[b+L< `$Bf%SЩ> B `Bl>be$(Cx8 nvVW< peu<\%>hsw'x1,|,t۱ӽ=#ػ1xMBЕ{Z]lW1@0Rx@"fU)P etp ].v"cFFC`dH %+ D 4`!F\#Ɖ>@Pp@,DXy`.P@ $ 4 ?t#FVzkV[sckذ}Dag;kٶgQ;sֵvH&G1d N|0P =hA.\,,NK(oh3  mB 6N} 4 s.T@D^H\$Ñ  8D4$mHAj0C D\0P&$0y 6Р| d"(("*|Y B m:z4Q,"A`<0< `< PHb ,>、r ΀o tKMŒ>Pr#8 ).ɁS`'F* J#`jڨěQB(Hˍ4D2<L I:"0@`$r! jx,BB:ƍMd nnU_֪#( ^Sjn'u88|3]c$i4w+`nKMt /QxӢKO=G!t{.C̊Np "B`ذ'袍>Kp%<slq$,8 Xk1ZqN" M Rv&3Z@ݜBp#ȀLM:xPN΃T!MC( >tTRx/B -B 2ր ax`?䏧&8z$ A$%llrx, 6R6>׃'u#tN7{#b((A4 Al<\H(GQ;}R.Xe7a"A`AРX)AiXN 12kEHA P9r6ǨL; h`=ANҠ5N7cIJq#ʈ4-ʌ 2vX@{X!@HLt; Np~HD[@D^jUkR8||FBA.Z3XL^Y'y[țn腧Լq @ FO4aHF9b&)0*Q{BIɰ5 S n2 HL G@\) LAZн|[˴ Ik!iw>t='6a#(Mq4ǝ)pTbSNY"38mzF>M=WLPLd LL'PCJ9Y1}X (``GU T+L<+7 V{hvc6“s7gP@:,SilC\]sЙGeC* f.!" 4 ` %( MA)L#/.x"m L/p ]XBi&9f6Ut&4R|;D@K]D4[@Z;&Knp{,8F&(٧H:Gt*;!X\Gq(6 U@ B A/=B|WЁ%>q3"KLwO0rA VBZ@.H]*A74-d6iN MٍF2+ds X2`O6@qJV"$6-vЍd=o%9]'!$ɾ$_ v \=@nwM UOh \6݂ˀk4n O1!Vc$/ٍtk}}) aiðx`Fm4:G'fz_$pr@Ԕ;[Q:YoYֹua^vc:>p ]7"Dt4bmzwA"-HCb]+lwѪ4@P)c`@ {CSpA$A>х^-8(ԋxC:wcQDݫ2^lVI XAaX/6^VʢrX3 Vuo&H:̐ WI>I`CA,o Z@ @ \/ JС DY")`Fa R < T!֡P`D\V > AA"A >*hqPb a̡ Q@ DPoRb@āOA @AaW@ F BA@ O|HO`a[% 3Dʠ >,ox&0L nr+.Q* -*V\ 3*/  Qx pҏV@#* Q&U }E@ J,jR*ONrAZaЀBT"r*0!$n(2 2%2&,Pq,I*%q- oWP"q/=N*r&7`!&'Ca%a2(mE0A/* *a23Cs4+Q+ CL&U 2W R#a3s(,Y*8/-10!5!91S2)gA/VB1oP+ s,S9+  @SJGQN .NAF!5ˀA!@9eH3: 25Qݳ0#!;Q`qUK;WPA` A2 ՠ'(Et@`A3M˳6N*ʡ 94-"A ^$߀Q^=/7/^*!H@,PA #5>U ^b*!K`ɐcd/+o3uQEX.dgfNfkgsVgwg{ghVhhhiViiijVjjjkVkkkluf!l*,sC\OpI0gs+-V%L6+a @ <+%Bqr!.,TVnْneR-Dt+&2S*!ѳ`S+!]g1(&"X#$"pmnsXaA7,nAp'D+’wC`wE{'xex @ sa 1y aK0  %p܀P3iA @!}<Q M xs Maư-:#eׁO,!2! avy䱞KapX  'u 㡜1Rvpegoz- ]vTD/P aXM .~cg̠Xsz|Z BD !!4X4a PFJV ,y*A/pހ 2P9e`+/"%*QFr* 2"Tŏ؎ -2!@SFq?PLJtzº١*{=R"). "*Ktq@zbij‡R F{ obSq" UAA[ \AR!k˱ 7]PC7D5D/aZ1ٮ *r#f@OAuq#sJ.ud!`@R7{Usa"/'r*P3\F`NCMS-X@ cXj,}]^NA U H` / EC"4('*&2FU F DaEr 'uW `ĽՀ[*!Ai D@ @ NcOAnQ ,T-D1RTs7U 4 ^!1AQ@CyJP(թ6rw- ޔ۝P١1t=>*RA B<z 7W 4Y+`8_44u:;~ %/6bO "Gq4`2 ߙKЙdO_| gF>DOT@-/Y˃1VE>#)'SqJ_M-S ,W+UgJdCAt9 GW|"F'ɻC`T5R(Xthɏ#g%8ۍ !+}}>*J+,vEY(mpKk‹U g<=3.;ʖ{F}-;_+KLIpn|`lU ;TVDc\|>$ WE`Ca3fg#B';} 'DR`AX&E)=O|FYXCO/8(AU !B%4$BEhnؓ$NÏ2+dNHEUP8#Ӆ5%ĆC];9&]Z0;8  Q ;! dH#΢ޣG!Xl=}FCpYϗ"v[n}dSD$MqM<@Ϗ!(CH(YRycm%C44dC LGl,O<D5Ǹ!6=ƔC*4R(0ra!U 6 %SjB&D X|QKBT$!c"pel y+ `A t1PU'E AMRY1>t|A,!,q>`!'D!3mz E˛b01,]OQBvw?Х1rVodqu_#"%br5}~zFOA"PB9[Lkѷ Dj[c];DmQf;d@) IBL"F:򑐌$'IJZ̤&7Nz (GIRL*WV򕰌,gIZ$^VD@G'ƈ?<G>¦.!(A#ݕ {89)t=U&|Ec-+AᅣUB( vfUtOĻzU&,Xdօ Ii=% Ph'Zu+i777ö@cE:@jBhunhDrR0qH_uAmH\3oV;mK򰘚!hY Q8%Ƃ5L&6y*@El p))eY Q7"eL%8bQx,$:ԡKc)-b"bTDK&Lex\wDP` JqP}b(C`  mr?IohFA2L HbQ'- :|E,YEfA޸Bh3+L@UG![I 4cw-x3QU^PfR#X9/a`𘇝 C|E*9R(+B,,Sg@懰ڜE88chSmLB`S|X+FNu+cHyd*RD`T6dvB8|)KT L43H {8RKC&Le1Ѕ/2b RFR^q"NzHbt5O@j8cY ʓnSmr;/M1GO1RM-' zj'ظ2LrAB̝Ur SӤj}à6cY{i`Dp'H|OPF<\ F0. :1఻^IL2Z2~Q"HWC!4ʽ^m- .i\pV>Wᔓ5H FpQc C'p'fգO ` @1Ba,rjdkr00"-8 s"&Q|C *$L`ay'fpi`0)}9U0 ?lp 0cE|hz/bTb%tD($Wp+xfd|b9f p =@q#rdLIΰ@ta##022%))˜qWSR%W"a e3`yl8Q{E^{|qڣ: :Ɋ=TApc6/73)m0A4܀|cOkA[M_܃Yph%UwwB99cB6K`:KvMRTDǤRBETPKT"@.EHb X)Gz58K(|#Zd[{۱ ";$[&{(*,۲.02;4[6{8:^ĶLu&\2T6ziB04vc4]1&B!ESs,&WNi5:pu`ނyS,yӃk$;}Xb}Sv 57f-0SΈ{'DTYMqGT(7iGR'a .{BL*Ÿu0Rg~ǃ9fhxa0GFJZYWXס5P p!Q}Tqx櫁$@>qt,Pɧ{?qhKzy$ @9u 04a"]4)8P'X]M|G>Kcq94e<#w3p7"?~< ` .!Հx>H$ۈS7#XP3\sč2 h %P X!c0鐆Q! Io1$XqP!hw8|imr`(H 2(`qC#(xQH4X+Z>!ʷ,,!/q0!dCzΙs0R1E36!UYk> \`\@\™t>+ΎNRANʩ1D?)gMQ9dwuu*1&@y,c psmf1FQ0~@qNd XQ)3!6CIP'TƓ2>Ev(PL$hu<Á/pk8 뷉} gAlN$ B ሄش0uqW|q WgOt*)P /~Kp*jX 2?B'##'^ K@~,07Abn' i Ǣl`2ߗ><#'UO) b*2|`-%1)qauy Qr+N7 6|w>||8׋T>C#HeD1*0J- Q3B}TYC ):gN)}LѦϢv *]V>>YtBM}XDrΏW o#&k'd9 fK$Փgf8~hY.YecK.^=ݛw͹哙Y蝾{ˤ;#^ʇ/XPXO<5%&>A(Roq'dr9, /P "R-mJ]/{--v^j6 YePhe_*[ꭩvؘM1`@2א5T@_w8qФy6Wh,_^^ O__bfP PlyISA ΖzJٵ&qCi9'^9O#K ^ pI82J+{^ZA"Iki@-=H_WyIfZ9&SRQs& -c w$2,@ >G CFAԱ-?‹s / uP# U> }Ѓ7|.ף^3N E%"E:A:"j@P  P|aQ! ]؏t>ʘ"08na}EeXc⃘G|rRr DQ q0-@ B7HoIQE je؄KHx›D R5`@zHDq&=rL"hG^ !x- 4% 7wx;tJ*$`)/BB@.D%.# G2%E* FG'6 X+`TxVX)XiwP41X@?lS pjA޸KS aqDlp=1HY]%veJ`>x gGmJzóW!sI݂"B1Y"c B֊|"th`M:pVɀ` ika 9d-k,DNzFDv:li9s}XAr(h`B(y|XoN|!NԙӲ#" dr> +;uƓ,%V F|:9.^խݮICdR4 ?k~8%1y\@4Bg;QHBc 'Hg؄2%TC@!hF \Pv*!tr4ymY'N:d, B"ͦ|]EG`!!Њ朗.uH9@Y F`fD=. ٬d— $C@ P6܁~+> p,Y:]q׭Aμ&W{58"<#X-xw#`(IU0%+E( Ik>S>L>4CvfjrIW C: A=? 7;)vȯw99H` @;::@2@2Ղ  y7{8>5C%(V Rs,[+HÒʰ~[-&>8>sBwج%t5:Ї lvxBkx> Ri2MЌ:YcX:gLC9S 8 xg9Fxl01}P1чYrOK['}@hu`XF9U衞ztUZq{05iIJ 'T @E[𻱁 g:4,X 6Ȃkٳa);w58xd=>ЂDodiI=̰%qB\" T$r­k $3$p0,e(Q9ǰcQ18HoCCIꢉt`Q. xh"*A2ȣ.?)y4BQA!dSEcԙk+ I i x fXc2HP$~93#%!3J8P5IUAAHꁔAJ V'*7._$\2aHLL I=я!2+=?7(",<8ۜJp 0}޹.FhS꣈Q H Mќ)Ph7u͇WA,̆);Z*oЏ䘇8qzҹ%ihG٥]S'Sb]4R1pLaX1=;]'k1{8 1vR=/| ْ!Bp}b>5"3%撡CtQEC`I~NȦi ;)5j3[& >|2Hpr5,1fP+$c kP4QV'WU!V'(&s4BV,)3BBʯK9;nwhٲklÏƛ6패t6/ߘ|XJSdN4?k50C&{UW2'k<rN:HkQ}( XWۥ|4 ={7y:Ԋv 7y y蔰=S45/(N:V.cPCX`-Az6Ф6d>uI7Fp2oMcU(qfXc 51vI-aȢ[D~ ==֠]7 6Y:`zxF`H C$ݡExHy;ŋI Hʥdw0 ʇB^Pb&ȯg0(^,vy@w x26Hp PAH cȪJ$'.Z|pH2}d0lhRqA`C@<0,rL~?L[s0/w[mtU!6n*BI H>4 Fc+KF%L|T#PlaTĜA,5{ce xd!G8U0|F\SmIcD( cEHc#AO Z0׳S-̆(B%TR/DBQ}8$ G0rP2 Pڼ eЇB D PL^#=xI%4, ElE%IeDO Upsc-L|PFL1n5s4rܖ)x`51ԣp@?Z,:e ?`1Ǟ\{ DoSCc0KL9!%a/r"% ]CNl{l9Qr BPO"(<mRlXHus_>OCHNr` x XG3P/j~9Tp|HR\VqG#RHf I7hm_>6BE+ r3-Ai0]|PånjoF&qbJbpE&K>D  qܡhB^ƬilDYha1604AA,QexD`\!I[A<\:X:x?@H*?Ӈ,\~0zC8UpF_c,ȇ ³8Q,}ѧ8)vLGz>0"`+BmvD>nb!/ El$1Ϝ#xǩ8r͌ Q=vȯT#+0CƖJU9`g(> {l^_tIˁ G0"쌩) .őU@$f 2Zv e\A #Щ~jYD,^I ҁ4qd `Gsm3Kj >('D{ $v7#22 Ķ-ԓT+}SH,ډ'J8;(/\@o2*PCA* qj;Ҳ OI!5c}CS3iTk 56bKI$qJ+jj[Jd~$-+_dl)edDAzh0ع|0%G`5È"\}z PT|]8vwO0%"X>QJ1H nFsM9N FoighAҥD. {B\/%u!`Bx&6M; ew=U3#}Q >PKz$3w} # VoYNT`\2AꍉvʇBT嵁sgLrMYn]P=52,dQ;U_?_q_ D"3Z.*G2ABttFkh# <~Qˁ87(p!65τ|t!؈9;_t@HJݢv6YHz-霃u Z:j97] _/P~C+X?5LT| ot8.֐ x\ ^.] .#$ fsL U8:o$az\:YU(\cQXAJRqnSڮ(",LʉEB97)n8LD3 ӡ% H:0䅄aKEP>A%t[F[G:I==LR<=K<5ăY40@%--_x1@#9`ՒA\\94(W?B<  H\`x xS\`5C>_2-S3Q\WTQŜR8J]->C-eHCQ> EE:t!6C8?d LJB1DCJCC :tRj C Vқ<=0C!'C1;*  =a+A$==`,/LxBP`"2tȒ@DLD= K1$R(P7!  <D R PDAE͒}a59>M \`@mB|I2xA .#WgZ$jLPI$#S_N AX>aY* e> p(Xn[CKXTO#HKXCdP!sTLG]h!RT4fT:&4U5DWkE`Um%ǑZs\u.sUgvVŅJ $&GWUr'tq{§(&.(6>(FN(V^(fn(v~((((E{h(TmfE/0<'&pؓRǑ ảxn8TlE!X*X)qez }NFZKaJ@(/tA)$ƨ v J> \\U (A %Cb)=ᆕVJf/T e55P$jv)}ƛ Ǯ*ܕoCOP|AQ.ȋ2:=NJdGxGꬑt Z>6Mv1]X% -Hz' lkꊬ^0 ui% M#ebAC@(<`@DaNF­DC@Xj+uP4TMQ#^՝b^f4_Bm(XB=En;1۔l:U8 MqR@;-tPH[h2 B E`mAT =4 8 _M8%TL(Q=:3 ETR"\CrL#(/@Q %eY:C?4` X=Û=>CŃ/ >A(mH)C 4:ExB=  Pɏ(9A'=(,C>.:0|p6lnخ'~CA/TR5 R!5IQ/.-O(BТ'ׄI%A\H]SU`(֡46@!|ܼ ժ1O0 +8VTHBjEOB tEW] ¼ O (":ދؾM"WL=\N;XA^Q>mNA(OTRl2H>eR%]T"Qƨ*?W\ ")@ ]D{p sʡY(.!M"ٱ3ܔvEaŠYt%uh R3kFԏ/P-xe4CxΥ5XPBZ4PLCd 4Ҝlp8԰J)>4Z=ʎ̅ReF:LE6Ӕ=1(Dgy}֌[Y^6W)\f1UTkZ?"gyG' C3,$( `$)lp D{Q_0Ѡaٖ2~w<7Aغ2}YI܄'d[<3OA`!wD){OjpS4ysШVs 66{WsqpG wx1j6!EhKeϘQQ4JP>w=Ʊx& (<܃U^ciPm YCMCA j* ؐD #a+!4h g&{2ҞT9Gӊ}_O8Quy ZŴ;aDwvIL&1L?\Ș_93C4 dK>}zȸ\G?:P # >oO:bCGJك:i3,Md`NnM ^_Q/@*Ń;dzM+\M x+$X>Hzp2α 1%/b3P:nj >a8Pѕل 8瞗#@4ऻ$(, K̑!;D J@%T?u;g0$ԃ1,ADE$C5"3AzC] [+D{ ! 1Yh6"1x2X e4Ė(.\BeA|Ⱦ~p> +Ԝvf\V.E=Aeq,A mk fk~A(&y.ų'O}%I$=N0NNL(/\ig |'\ @V>}hwl/7&eG1RēRԕřTʭ8ϜX>Ϙ ,]h0Iw\GsE* XP_F3i*1 Rp+>}Pxo %hM(O #T3'b:7%x2sՄte"-!єV-zͪϢv =}xP۷qֽwo߿>xqcQ 3$M;:'>)hQ!!@Uϟai p:BqmCGӈJ CyahbSd@"hVj^ R-=Qf[b!*QB7bB`y<ir> T+F`AgExdc '09T7 XLa bOj`<.xlмbX%RŻD d,  UUUB^ xՅQ\4`B Lz>Џ&9k.04PCS$T"48Op>},yB`y+%ml5܍#Ki9 3J@tvr*~K5ܟ^$'iL\D%)_ !H]<` i V’^ ?5wRd4<_/7D$Z%sD'ʹnXQP+띄4豘L"wŻ {J,3T L| N`V_f;jHP! 90rq-I*jc!]¸[hY#0MV@"ONf=3ظi> u*^ d@бI"U*L=Py!XٜO8li\Lwuzu[cՎCY/Q܊ۦwp@'nGv:6CWe,Wsb*ebd,҄EyԽ2nlÎ)mtN>BM_6H;w_߫=$nJHWAHg6h,/ކ75T+=e `\"-\<9;5M 0eJqwSZDgqeĊAw2T2Ge*%7}r|V@X [<@Ktf&az b`b񧈸+b,(bHK  R@́bŢ B"&a8L K%hkZ' lEVl'dA D @!"R"-@Z!)/f@@ ( $bm!"&M[p&T@9|&? Pz#}-BAVxMDj a e?` @W*$`0ހV>$ (""H)n' >zn2P9ڬ&ndA$(.2R&Zr,'`45\B#-4&w:@$R<H@ EP㺠uT)|\Qu%݂8"7I7:8sAh%8v8P%S. eJt:C<\AJCg\[.IS$;+-Pd=9q F?=3ASAAA!4B%tB)B-B14C5tC9C=CA4DEtDIDMDQ4EUtEYE]EatFPD4&3*n#VcrC3G-&亂c3N@P Tx6f8 At;bm(kO7OBmTT\84A 03AT;L{NP74K⾾HjSMD!g ep3CB tAbR~en> be+!D3gBr =v"&%A .!+Q3aS $O#`rYJ`[.P hf(" ju²_@2Xi F\'P<*nM ~,5VWU(ʁo-,F"p(Ы,, XC\_a&"\2U>^C%~XA$.n d1,Lu%u/a5'a $,a20B B Z!D Hs`_Xv/>\TAA/5 hHr(B!RVHQHn r @P)Qnˈ Hn!hzf hzA=dl6lIBLwa˺6jha Bn>"LANr DOoan:& h+dž9 FVb)Vًʼ^٢ h+NI)B$c3Z0*^g j4 .îzѽ H@Pޑb0+"ʯtj*jtLThJ3kc\%O \x l);ZNa^-ǛԀ FqP lm  7BYZ)G'z=z(]Oc+;dȠ`::<2nYRd9 y2:6 [d%Z"2ۢ+`󤵷vg B6 <QӃZȳA#=~f;N-ѦT,R>"YRcUUOY.tx/sc,+.;+-1+b񲯱U $<7{.؞o%1<aeP@&⦂{L bllyŢCe7$|1NlK!ֈL7 ̩6%Y_; mao!z`Q $A=b ďi-% Pw[Hبt]XNr#a \!&2? gm)O@ s.&[T~rA5953Amva}H  6܀)^Aʁ݀"+Umcb1g򰢽)'$]UP *Rg#}ȋ3t&P@vBQ^npn't~\`?O/#-G.B\V R!0(NuWz]@'6J dA{Ov:#Gs(!oEF<(dGGI \lDFRSw$m'v FB <0„ªP[1ĉ pE1ƍ;z0ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=d@!,      #& )7 9&%* #< (7 3: '$#<+<(84:4(((&4+&84)333;33;;;65:,1-#H75Y67F6)h86w=6H8D)F 6G 7T $C+D,K+D,J%G3C3K3K8G,R7U+R +H"5J$8V%5O/;cEXJMoR IeFW&IF:QM0{H6oS5Kg,si%66H66X79h6hQpuyNuU_=t(e#\v+  aany;[˚/6D~-[Ė1hvVxUZvq粅NL]ExDkPvy<@o5oYϿx~< \~ CA[6{>T@+c|7wU(bDAGtl@@T,axh1 L6yib}͈\'U6 iZ+X|pE5)5YeX|O<#ڗ eq'16e.d>-".iڏb*"RL)z9k:}S}YfwZkM閚@/!&l"w Shz`nOiV 8݈27d@r7ĵ;cGe"P>mmI+ \,ʚO!j_lMy+i@upKu O,KluV)nAE}XH֊s4lƬ}wn暕T^瑗n:E[g3Ԋ}UBnatֳ =.w2+ \"86čͥw/kf 8m{,A'Чl}^a[&>J<fdZXweYnГ9  8d|yۇ-bSA#D >QSy@:{@yD[ ޴ =@n`.x}.E.f\䢃7!YxE&4g36(|Kj^~Qu!^!=epp7}Ã`+6U!2 x$ D CK)l qj+*~i\H.J+G.[ؑ!H?p7C @n҄ 8IrL:v~ @JЂMBІ:D'JъZͨF7юz HGJҒ(MJWҖ$x cJqc`G(b& 4H5Q!`4 Ѐh ՞fu4b@@@\V/ 1p&fz`x \@܀f0 H j(p \@ , 7`k\`W ؠ(^ D4-\աifkԾ6_m: ŀmس`1 €,@^<#;:H"53 -@q$q@csЄ9@9|#qD 8Q$(aZ D䡆]C>@q&Pp&h* X@ $pr os@VzU7@?*՞F W) 6-mi{[8i8\xxAhx0.rTe7 a~`K@ 4U!&oM op '|> K`֐h pֆf`mQL@c L Qk:~@` QP p@U@  vPV}AoWf~1`mp>bV WEAswqw5qǕF`>TP?&˥g{0T1@YE&i"h"E re5g=\WT dcvEW`$V7 kv[Ez&3"hGt Z`œ3}e+xc_@bK {` ޸pȘ3$ϨL0 p !m `_ 7 Q{`Kp_Ia{nkSA T$P  f~Pa` l0a &w9 aW qgD@glXȐu]:f\ PG`4V[ iZe}d,7P[8IVeE^F.yge%V*TtS:.[HV%b.P% *HY4]3u|qi 3[&an*} _q 0nH 0hmŵ7XV0_3aPcr۫o&p}jXf`@a~1 %$SQKPVD`>@ tDlY0uHF07p \t"xX.\qn : ]W{`VT ] pZ\ Wm%AWTZYH+3hmG7=9пe%5yf5WV`'aƢe]Ta=`9:g2`qH qP 1p 1hk |񊬠j j@ '8`p Lf _@(ЈL@ QPgpC`*\ `˸МfQ\`lV)=FguiVAРWUFHr{,@\fW<q&'}W$x}PSh(p`sV$sJ1p1pIT` qPc7 uP40t+0&@5,@{e+2Uu;PZ>p]WOZ;p}dUEEV8ia~~^GWtVeYEtؐ3o6(!a ]P)= ^) 0m§i3$   %mp @1 KL}G [ra"Qs)(@ 5,E`BqlSy~5e8#g&W$xdc[\>YKT`uW/I\y4[   [603hTKf<2p\;Wu]2OY31Ѕwi%r2]XzFq<8jkb}m1]XKPP ~ A$` "-ډ NL :U_^=_[܇ aN~ڏk  rP\ˠ ]޵{7 $܎ٷSLOp_HPae-f$GvaHV :a՞{CйA7FYqk>c['(V4:e[67< + ] @ ] >0 Q.>040F 3fDNу:8DX7;!J0bw4F$L8u Ewo܊DvPCwx_q/Hʦ<#`\ۇ,6oJo(אέ{4q3׬WSi La 5n@F^4hxa^ /l!r`cŅ )# b@#B@" &@ &>:> 4 $ 4 *(hqγp8nh ^"p-Gp!Goyp*8ywri.utpiƴfPza$,Xx D f!$0Ӆ^>v" 0$Б%R)zN=}MA RS/ W&J/wJ2O&UI!W"*3JAU\ t&3j5\"<`77p!ARvW7aaJ ߸N8,igV/iǜD6ᄛR .`"[Xic#|!i P/ < 5ȠÎk03(hDDd-wfA, "xEh!r~'[`~gxxZu b2-!8y聇 ep!T$Du$1XV܀OuO~ӟTJtُ:6K12hXΗ8 B4`~&M0@E@`E&"Mz@ p5ȁ*sB],uc%8 rЛQ禤֌\ u0<z|(9= :Ήsi4Y`n@S|%ElbXVjpRL.9H7XF# ÕQ( '!BFhA 5'崡H)Y0Rxp39aLg㩄;^F8ۅ4[̢dh` ,fMh q-8h` h "z2$! 0Z02.J2Q݌5!;) 瓀K0S44mJ!.&̛PDY+70 F rƱQ2CΤt 3b +]NZpw˅P\x;r0HR9٘Q<=9𡃈 / *hpL@)xТ0N}0.", ywgPnePX$W*l{UH|L c u! y8VhAcYUDe -0Y-yɌeMQ7hR b4X2aq-ǔ?aLۓ) 0Zx`Zw6J}HQ BuN /Cq̇ ?hJX>Xk59ؕȄume4 <9ژ -̊Hy糈 \=A$)i{ : 聕\( N+xrj|sԅb`;p؅NWZ@ܯWl2B<).97j%jmәF.*%2&CutxQ dxE(A .`WVPOwsއygo4p0# hф=c sxvҨ`H٢P 01 SքY M SP0D01} & hV]_V"%P8{D gp4g5:}?I5dR])ώ<SnpP~Abzk@Ǐh F쀎zXMܷuA1O柂@w,JD>sSئ3s*iN,4˙PPy,>d%H|k2U8`hϢF 7ZXq D@cH`dp e@X.İC 4 0w 4H.X D.P 6.ܐ7=8la 8/. 61@1Xd@9Q6ؓ#S2 H < =C /|(C`0(ˠf]-$PdBМJ:,l!Ţ .Ht -%P cDͣN.:~$W8&QC>'py?A&q(:CA'vOKb#L"؛Nu\C\Qвd/XOK` 6X @HF9fK Bl)'  /lEnxb8"@  xt;uFpIo<1p8|]D.\A6AMlB .ȲY`] + h4 ~i v ٠y6q@$DySx>,H(TB8#(51-%p"%L@|" _'Qt{Q1#Q~$VȳB`p@!3Nc %T "n՛Ụbv2GmcB~ K(@⿖D4 O!% "@ةU$r 2+$NTLnIh`;=؁ xp -4 ,b.0d8zT ]Z 9q-/:ɇ.vQ]`ya,Ѕ-̒uP/ga 1%y.r'[؁D`;XhS20 FG,N +.@q*P栉xCFz@ =s'ک@bɅ, E0.Qs!{B3C{AP"cb`CaH<kӟ$;hђrOT(ǩeGoާ>lp(`֐c&Z5(;Ѥ&4#9Ɨo14x8yFMQ(#,><067F )}G 9Z}C׍qz7$8x]C`. F$2Mx6_W$. NF-p hƒP 憁y)$ډTɗ4PFuS$-b> .!H=S?<0b$݇2N }fr;B<G $p-J|]6CP $d'TdĂHā/}  M$#d@Ox *c 8#q` $;P1b3S] %r옡8N@??[ Al$#H . ``vN %4.ҶSAYlVƏtA \HG7 W/cxXp`CH/Ѕ1 ¶C2`#t8J'Z h7pP[p j kJi*@Z8Za8 t  :yx@XAx >.1gX<'<q@Ph` ` *PXF!|e8D Ld  H|M , #bU`@%2G@P"LZ HшF@A0J$4@peqÿ/ā0d-D"(1 "A,xPxAt@45Fl8#-8䬟dƂB-\(z @|caĀ`G!Q|dE֦m&nnnZdKX) Ea^   ^1"OȌJOQ{! 8SJ\ u8F-<.ܥ-h.7"(/ ,(B]AYj(@@`@tT6 WђpA,]]_:ZWt L@uHN@{]! %fD{9J` |&&.)6)QҌH@tWZ@@5Z~`{ M<@@zY?f3j-@,ā+2 BX*]A ajD(bP#,h@PAtp 9ri$؟PHHeE{@z9ʈ@X@dn+v~P `g\Jc^h d6ĄXa ~P)4QO\K|DaHaaw5e5N&&@8VgVA@.*2B0eA(A*T@xA4fjTdtly(ۚ'<[:ނ-lAxAD@T 8@ O}Hlʀ7mDOTg^)ƭ-ݎӅ_c\ {v \@&@?2 _A(|6@ M@hD`Ee`?l.t,,Bm | B0lA(^* A*3f 0PhAl@v@3R-ec.[ e@.kD _5Rێdv Hz"w9d~D;-z)!5͌ *ӄbzP),m2A(]. ( "!A2@ A$A X(@x(0m1[ujL &ق.hA0@,ۦ֚߁{YHHtkf8^]0!!R9 lN1 ̶be_ x sfĥYvPȃ`xb>`<_l{ غ @8 zQrb25{x.D)u܀7@.\QcU8" 6,8P!c b֍VbtyխX߼šVEӆg!Bڼ!J(Q2H$H@2u-EhѢYÌRDFxVOƼjeˎDH &L@ +&Xb1ƃ/VӼsgϜ04i&6#+ÇJh3:54SӤDKTlEi"<6B=:áraTpA@r[v!# r!.l / Dw- `x hl "*QvoхWhenхq|q%Yh<ɍxɨ7PJ~: # .  2ƨ # -" ‹QŠtꀥWf/z!h}3 "0_ :HG2`mH&i%Ԟx8R& Ru,FL4qgn)&f']͈qf_Bfk| ?0@R6#1 m|eD) @` @edI , #~ĹxA!,3FG饗 w8.cPD.%HXBe7zl!0X| Ƞ/-Ƕ !"a"hU VXK$h"Zqq8a  ]zi&]vyd8#@1D>8O0jB}jJz%VC8c 1+/آ /J h%W\Ëj.`!  & 2!dW0ņf6GQfi  :`Τ8<@  ( C 3 Rz 9``@B6Q{m8 8F(:OjzB]"-LЉ]t"4k-429bɁ +aaf1/X#9m1d0# Bd 7 DX3v@#2HA\002M.vA^4/І<x@D"'5PE1JngA*0A Vd/z )5OyJ-(O`'^ Xt=j@l |q3~ A; y`hek!j#3|#g4jf( a :" p># | BF@#@֌ 0?A#hqMlm݇L;1d8sN|5 cB,Vtd\ 0!s TPFFPgLVT_W?! v'm3[p$aJpA `u݅+Ʌ6)w qNӜaw)(JQ 0[@g;QY zC4e=1w ֋bNx$KG@" A w(/`ÿv&4`g|1$ ؃^& yx밇m,AD' $,>1cCp1x(dC.6fw k4֨c{HE?4C38Fc U`LPGޕ5=(z mA )ꆌ29Lcb!Y`~AX@C¨ |_?˴͔Pb J܀=-BL)|lG b/\S%j*7Ẑo" a R@YsPLC }!F Zj#D}3G3/P=4(P7S>XBwQ!A@?Ah0̚+*yH+ L{ H,1`L(kL< jPʇYnŠIq}:xv Aa g. &! {-`! 9K-ܢ*8``lpĐc"`,r fi"b#\ĐVX:@ \@ \# ,^ R`h3^l!F#,>6\B$.Z%aC<Ȯl~ d(^J ҡ h Ȁ ʥN? oN $6LA B ݰn !Tʀ Y5QkbkZ@ r d`v/& Hcb|`0/VW.3l%*WbYW0n N&B* hZ~ ʄƁ`P@K BH J` @``I. F0 ,T p k Z!f^ D`x&r Y (hL`/! a9h3XN9V8,a4C)YȖA<<`@J3a ̰&k@` J3. ҭ,(ݬA @6B J3 >8̋*rC~ Z@Hc(S'`V`E\. W`$1` 5#`nÂ$ntO#J mJi.@"#E@25} -@~!a;dOAO-q)z`<]jd0pjix6a R"[A ` fa v W.4 A0־ftWYR786~?Ƞv@>:cBtHJ@R3 DC%Ʈ8aI(d r$^$2jnADf TƃBh3 xL3d!<%FbK{0:o2)SZZ p>3(PErŠ"n g/^U?9+b `5EPo^B3pb||V ^ Rԡ@£NP  HA|6܊ @ zs`X nXP32;:@*\a!APaa CΠ F A%^dn,Hʞ9`< \eZq\k0DL 3EdZptXpq@R#W>R#W&#Gn5?b'"*,j6@`MD_Z*|!a|,= !]tB8#n1\Q!<@D6Bq5$ZE\;O2;0pYS5-Wʚ rEs) YRubp".VG@ @ LA&~+~+^kO~@i}8[Ouwydfp9@0]!5  2@#y P!+ܢRr 44Xs#0O",`%5S0lld؁>~艾rp@!f`e dqX~Zp8I$of1V[Ӣ"oT2 x``D`r"a٦xg@|(zBTɀ +)UH~^ 2\ ` ^z E W#0$γnR8 }?;ä~jPi0%>(ٸ 2q/W$E 0P^90BroظF F XلtIE ρM!iň.^z٢:\ŢkW+j ,YftgVaႵWhBFO%Xafq 1dA!C 4P`Aa A! LЁF ʚ=6ڵlۺ} 7ܹtڽ7-`Ȱa#ǐ6vXX ,j#-rPF 6z$acŋ,&DPnpڴ /JSX#75(@-tq7nΝSNpԣ^8|i -=b2"ƎzIZ"gz=bFwRH4"+1F%'@n1`RJUaV,C +0FS`W@Xzc2Hc6a <@0+ & 9A?df-$dD@D0 BTEZh6iB" > bDB 7`.XTV7Kn枋\"ɢ`a ' GpRfY :D8HFU 8pH@Р A|M ЅSL8S7g'gN<8qGx+{8$yG,KR*'uD"r`ԳdOcRIcԡ ~ 8NR+@-i,\ bܖS x [Nfd5_@ٓY6UVeRk /: Bja+XFDPt u8OÍ/3{.+ LGu 8-u'Q .ճ2Mk *.uC7|%V2@`  o꛸Jp/z%9q_D1@_~LbaT~ 9 r7ՠ#4\>T YAxpcX7S(r8RuΣwX b;"PɫlV+m% ["h'B=" dhc* MU tm7 jУ`~ hM,)O9*IanT%75L'UMe$Mo؁i›Fق5"l! r!)qɼj  .=[CXea^Hǐ"VTLj+X EDB|@)%7 V˵`A?IlilK_z0Mn@0jdK%t`[j@"T>Y h87Wvps -`acq L%pb>"%+p @~f)[b>h @*O_& o2/XA  u^b)LoevNio6$,F)_w%[`_"i(; Q% RP@.!pJh/7QV9tC-A j):܅Kh\ W]3lY 2T? 08@p0 J f0`+ $@].~vzc9 wrdnJzCZrs2fy$hD*xкk6=0,r!s(s(s#;%TÍbf(.dqFRɂpa\h&=[R[aT")F !& '""8`l0Dx f0piآHn<֐ C8!.@rY#0 1m!f<p6ۍs`yADQ`/=UOYA

RNXZ5%uhHna ( \"!D.8@K6. ֐F>򱆃{fa5 9hKm(|() *|p&u[-Z1I.hrzANi9yYʱ};!(8N 6wdDjab54e D?OCpI99CCxacO2$=d&6TBhV"/^L6# P_UuRTVPV'$h hb [`b`0jTaiT5` a G ] A5c5Ua`;0bals6PRPS6/Q7Z1zz@hp`MP O |0 %0{" z7{ p`pt@hmykaG w 'Pp(z" ަ (@ F RPnpMp p@~Q@k~ea GfP Vj \2T8@%aB>\FAdB&\RKHaWVeU"P !ܰ 6E6E6܀:HNP P _7S Wvb (!>R]pG&ci!^P 055 c*zGH ^q.0Dib:!yU-#>:t1/b\$K@ hP ކf@zWp! Q %Rp \0{@}P i @}peQL b}HpLpde! `pPi&{Y0p!P0ps lθp G@VPh M 7p\$D5;=@%GeJD`B/L8$ĥĵEeP" KK zP ‘6H2'D Y F)$+!4Q32 P bJ*a5? cCeDP7p`R@"x7$~Q$7L4Pp"<' k` Ͱ '@zh `H Vp (@} `o& T WpypN nx %ohq Ԙ }'sJ P S j  L |q~7 pphQ7pUP{k De/|!V#(cV97.BS&%gK! U_PViu_Ip2\T tt`(!ae* @Di -)a`tc !+ 5 3Hvxc-dQ&L@Ecc 0012 $PzE0zw R \ 0XpК0{of1 Ѹdŷ@HP H6Кf(pv!l 'zZ@oVXW Gp{ f}s@@𑂂2p jZ mȧ 9mr*IIDS>-B9#B e#\88yRKKЯUX@ j2$< E ЃE u @ C4z0 >uWfBaF[d 51a 3&vB)a0P&c*c0C 4p]tlbL #V k{i gz/u@ |xp$ k1 Rp%pgen`°fZmF P t@Ќie!!0 Ժr!DrJ,0cJ&s$A9Cp"pB\+JQ$8lv?.*E@/cQ0u py7srŀ&1 857s Ea YiE :Y.=1+nwY ղc=#-_ÄU@13\#; P H6YLPn𶈠g_V~e{f{n`r|;[ GOpizf᷎o\(ԐԘp$l@Fם) 51;dB!:Ps\B\\=a%MBT*3P/KPUډ!0IEV'h26ԱY8i+z *][u4X::]:)@6&C6d7]e )}8R0VР[piK i 0 G'V WӁʶ7p` iʇ@i,O KLJso@ EX`n`` ݠhg: Dk0v`Ҫɾw!& y89A;B,GuّqAf)KCB17p>JpWŌ  $c2-;#<́(e; 02kN@a DOa=p3, u0P&!+1L(d[ F' 5G!Gh^v`4 l1D&D,"#Xw'ʀi & %`K #(g 30d |%^P fL{%ЖdjjVzOPuqmА}H 0eA $`$^o\ PW.a{zpj ꐻVn w5$*9!c>rBһeĎ)&RR<8(mHE }KŬ 0uh Y P `> Pzj@7?1X4nСԾyHCrj9.{bM<6Plե&DYD 5V)0dԪ/hʢAaE:Vȑ-r#m8pHV?a#ƅ%Dla#6X"!(;\]ƅ\xFby8n.\>w+8,Wz\kೞ˖qX_5O.&L-Zt%LVzbS-a޿ڲHV,x h`!j x V`«*h52iPu0I@B(ee#& (*#&\bM"K9C>Q*Aa*X"p13>:ȜV9i j>g(|hEƃi" [ j(u9%DJu"(-X᫳X` Xajj`kk VPAtXeA &cl#{lDaX&qtҼӼnDn™zsхV !]f]Z]\E]eY`[`iYZi. C:820":\ ^$.nd` X!K-'C}H!!eN$ WgB) aG$)B a~.#4D1"bJ`yBǢ|dA, Jlh|9AL4edNhl#&'0?ȗ\h% &H酋G+E:*!'8BSob&40I"̚OBԳКpBs0V۪A¡{d&!37@`Xb6oiq\E8qnpbL2lM7t _b݈P0nhurQZ"+Z11h! ^C1kX@2ȇ rW.1A@@x]eiTYZ(" 0>Q*0hЈD̑}2Ccqc4 հ:Đ`la _E &WJ=H 3J҄~ `CG3(ɐC9/|OE0 [U;et$xdhX2Ԡ-j j5S҃14#|n(e}tC7ntj t4=⡮u#,P.W7.]4',h 3nhЇby0Ġ2-b _p xS3"Fg+> @$A7T!+H|ьeR]+KZEhGW@6G,|lbqЂ!(IU`ӊ/?P zxƓ ^  83 @YB8ď M]|ZgR{LTrk8`Zp!MabQXCE%h+/h!O0:‡BȺ@1qJK \X@? xMgo%:SPX3qP[cX8`E! z ؀0DPK I6h5T@  6"7Anlp(7]oc:7|Zldv_r# 7Q9Xb,t gIN-CVpdbC`ć'aЅ$a0AxF.@n47kwt qlhG[KXЪ+$XɃϲÄU\h`m+ ^.6  w*Pap7p4  hAߘ L[c'{^!JAr=Y0j90Yj0X`|v P@^6P?:F@#"8n = .FsteVP zC7.]q|GpJby]f܆5z= Su*6;$]โ5ڠ* kb>HBV Pg*.| B`;X'k1 ?t$ `3I ň }ЅJn~x=l=oiS)z킇nXK{":jxXo.\}1჎х2ЯN[*娪X 곅Jx52xH +q!?P#QX? \p}j$[ WOKBWYpWN( HCkܧGxڢ CxG$s`T˪н46'  M3 ȷXR)D})=TFpp—8oWp@gu0[n`X]ӆK)hN5KKK=V(*!тe^TP5艁1x@еw4׊1)y)0}@30H8A/&0OyJW% Rb`b Y&$j)d V,IK⍐oRHC7̋r2 Q$X8K4y$,Ȃ,  ~E BF+ӝz6 |ЮYhw`JNNy8~V!J`n̩[\0%xxXbZ0@ /H]2 Q{JC300'`D N~g+[4~_('x8%,+އaqLX}8(pq VPB'(ЈƠ+`ò|N5&g΃H&RR&Ɋ#xHx- ` z  .0X.D^1 Rg\R)q8= Rh~"] Bߝ[]oXZxhm>h\ء%$0~x(҃` >N@9~RThe@30 ?XJVht@n,P~Fh}P_2]u2^x+vQixUڈ%`p@iU3?pH&@pv8^fRnxb.nXn,?A(c%-*H ?АB4{jxzGvZh? ÷ @ (aQ #.Ȃ@kX.f }Ғk\nܐ߂Iӎw:kY@9XsUjdS]9[hhƅJ ,n00ye9 7:+xX,)L@ͧak^ Te@+h(* %a1aQPdGvagB`I0ۈouRe`~^@B_A}H3@op?H@ }*` %8+7PX-x !?jF{x>3]J%zS ( /pqhf|ƖR:s׉L<=Z\"O -t1K[xl!! *1~ݎe(`vlHL#Waxh)9؂G7h 5a(Rn1| ' 6jpjPCo8V@Ph`"-*)N@~gpZy0Fxd|wO|x֙{wg~:nxL^ Qi 0@-H؀@^U..-(A !<0Çp篛.hõnwzk̘W5ܮ.ޠ F\u&_3]l%۹v˦7Xp=mWWlj +\DKVYhieZ$Qˆ#( ,8A (`Ĉ #cʖ/cAD|esO%"1*^x)GҙyD2nН r>B$D;y(To=MvF]>o0'.9#}"'9Z]0=6|̙VY>nNXf %6p4C 1w!DC8&-bI =@`@ ,PX $lPRlZ#N.G4ÍPK,N<8#:M9.T袋M>uc,t[@MVUVXBFYT ъhF`$ @P$@` F+pIAAD@ 6|X>Dr?q ?~340cHYNl ;f)ۇ㴳8t 74="< P;ǜM3NKDC2%@r>pۈcmV=۞m>ʈ+ ]LqK.Уi@|?̑ɷ!?+' ? = $A uW\pJe%p x0J372Ft#N /`2TE:TS7j+K.K3˙uR`.iV 'NKTTI,]#@ D` 7L0 3Ь D ZucfXM<qQ pyb^I h@&`;x@V h W@#P  !1BC\!0rtm1F-AlcC|`ʥyAa |Al`4)P WpZ?L1Hk|LgXƄƙC b8U+&0i>(fa -B@m5Q~He8 %?V`HCZBDI 8(aZxE?"t0].,%M8 -Ȣ?tq(4"=8=|J3=NV*bDxIT"ύ-`miU1Al"h .яt*()J\q6% CZZ 81C^ pGjxCB1C@zѳ} tQhxG!}b=`D; Iv<;@l1qR,FxHjnЈR RT1 P q[6mnse""4h4` ԙK"2pXj`HZ94Q !ju)a`V肹/ GAcsTNj]MBEj 9Q#wW _* 'VhZ/NޤBfx#5 ^rX~A%p y rpC,P$D&lKl=IU80l Jʺ -ZԾ#.j=X_[db}G+\D>,9tp>y?Eo :UQӈW%U߆؂&-] I $ @A `@_H L P1'e%TÒC.C0U"ه  2e [>dM\5\$Cj0A 9&PO G ! C< Bq0$JE@T&%Z~48x5:%t8u GwA 8B1e3L}͊R  T X *R4 glCjh@@/HWZ\8WhtaE0xB]-I+,N4-nSuW6-NHpLO @'l#'abHG>Rƍ@t@ !P&@`@l 'ܬ+њ) ilz,A48,J+D,OP.ps 448o-diBdB%,ddS`-,a& @|g]  @Ȁ~N@@ KJ oZolFVc=*!-@<0@4I@4-Vd-mm&Mk ѲoI@!+8Il',XW@.m4B%|\pp@$@! /X;e.nߍA,pS|*F-. l@$I$oo*ﬔjyHrZКHA.IOH.BW8N,%,Ҭ!WTT` 6¸\ETIphH>''E\̧<6@ d ԣ n@f L BV5cs6ksMdHxhh 3 lV+U@@n^-oƱ/dy0ӳu @? YTxW<@aAӵJ.-B+,XWTЅ1.|]XԀLX@ n@nsW{Wu-XC̀8 @<0;3h@ V+$@/jV*\A3(&m*f %UB3,7B,Eyi 1m@^bּm@+>Aϛl@f!g/pEMk\z1T;< $ XsXwyw HJ < || A ԵvM+3/ jn**lm/)Z\̗W.8^H,k@l[ Ԫd' I HsSkndhmc _@$ y5Eq =$t@ 3iіw1xR[vfAWP<Hp8BFdE%8p.$oB(]@ 6Lw,dApB&y@rWBTA޼35|Jw덩_ $ bd{H'w?@+HNp;g;A6Bv3oj'uo *mRĈ[VX( !r'knRXg&@ޙJ- %zUMt+ޤn@h T^ Ȯ @ 7q {؋}ػ|@3T@0@ Touy(ӿxt@{ԦjfrxnZ==@xӰ׹^E3J-l쪱ګkLv'I{m&l>UB,h,AB.{hmH+,/ݬګƪ2d@|Hd`4ƀ2V?؋ew@A5@25̿BD>0XC * \aĈ :pB#$ @Afpfk.X |)8Pi@Z*YKKX69`@ڴP =(FEQ谱!6|2 ^ԖWHd,dn0.ڠ @’Ȃ1Ђ 20i=-@ {IF+(W"j@20p! "#k%,U4W^҉C͈a׈_|-'5$G3dƳ`7t0|G~'7ˇRŝ+cxdM2uA4XRSLBL( Ro 08:*98ky=[8J8yx%jTTV ;5A DJ¨*,ULdV#i}2JDPh j(p([$}\(͙}̉3,70aXt= v:3M9`τ^1 64D`~}ǏyG'oBr8dn< 5Ʊ= !U63DC3`Dˤ:d$n*pD (ь@%`l)Tj 8lkY yƀ-#[\'6 2$ `z)dTnPve.HyWiA*l#Rֲv¬^(Z$2RaAZ0 L r0&|2w:!b@:4c] E;5 x8TKnt#C52c3tF4-psЄf"x D3tLD.ޑ6HbgkAڈP7A~ h`P 8mb >@`=$hEC, O%°- DCS}T\wxġe.iQӰ,Dq 昵'; IP@2 HUo @ \ DpЃ/A Y@!>0/+0/@# @#&dcKPƩz<4˜gܐ#d,}`C#OxXF95yLAƈy C2A`+c()>-w&u@$m$ŖDh%Ѐ`"0HLd؅,P "# ÛJHܯfPœBY8rM0) Hpa`g63FMԀF0g;j3EMKXMń/ x8fEТ@(pkuHuš5}DҢ9(H.@ 0I ) Ae[`+RkgRVHп-bff_gсG8Z3`#ޱy@ؚΌ0@nhD79mIx8 oB 4F3 t,N /aDm;Ыc8nA-x% N`ۙI_*9$8 9z8`dH`# h'ҎH lYKߤ `C6 3{F Z '@+P%4'f4:R (#$փ8 !4 n钠> dpcڌXI a Xfwen 2#`:H ؋x` 0HaLFӆa3-3N<` aƋ8`6C@*pop a|IttAAb+  :zAe|g z5LD𓾤(fCL ";Z 4t& 8k#8Q*(VدZDo 1-OШsRF-F e03 uE P$"GV(oq:B[h*dLf't@͂Jl|!D` &|' )! ;cQL ! r 3p C2(-R {(~6N`+W I !z[f)(~,! jAh!ޠ'm c @9\Ńj  "M$(Mk2Nl!~QzN"#~F$\E &2'<@ZbL-DPeT3 U,MM+BA(&uQ*|dM(IwD@6c9w쐡a9?4c~# d :T9fRā>#h2La-w H@n24I + Ha3mA 6FoLNDb$b &` 6($b+6;N7>sZgy]^ a +u Ύ!`@Ua(Hb}62VPaLB(>=@GTG -aJ(m6hG~%R3G\Kt S3I&g, @;RqĠX H@8L#[lv;#J*L>"UԨ(Q-3$2s3fN)eeuT>N)&< 4``dG%5N^ m '6c2A4l$$3k 7H (!E)%[Y2k4 Ҡ ak -3Y(1 F  wкIV` 0z`@  uL` 9`֏(gun:Fq4~#zN/٣dezCdՈ?:)x4焗|dj* FP7fM\Q!,T: i9}a 2-4@< (v! ad'%8X4NA4Pa $d򁗮) 3vAMBgDip! [# n6 5$h! L Rc; D.RqFk|j[T`(oJ+d\=~pF@* L{B$".0dCBS:S-8d(LbUt[(W\`v@2Iv 6!i3yi4 n'y`:4 8`S AB? BECNS@D'i'(@ O H` d!3«[~`f4WߤF4@&h`9n uݵ@qhPg `: kЧP:/P~- y:< 0X-2SL>X)RVM1={lbUD  26|T`/ḯVJ '5a9#$\K0443RI8:M#ȃ &bh[gvFl:.FF,A xk&vqZ(0z0w I 9`"Zit dpl|Gkfx}j.L=5)F #*&]?ccMD[t8B(փTGA1(@ALj>a@F@ͤ^g+GHۑs"N O־g eT(x8UJWlrȁFlĦ=qܽ?Z$3$tJz/+ l0@ B:ȡD 2jȱǏ CIɓ(S\ɲC~$2EH0 @B%8p0 $Ĉ&j`0 *$ʠ@X e`H@m\ (L -;w `@ Ӛ[9`t`^՞S%ܸ* @Z<a \C"?(Iåسkν;1e@@,QFSHJ0`CVdQvr[YYUdEXs[ EWVEN8Td f[lf^ٵgyUk#kq% `@" oZhT$?Pp@8x'di&ՄeL@tГ0t^`$UMŁO{%4mWB5PppXV׆Z]Z|e䆟)`V P"$aV#4 |UgifZ\z)I#j]l9:  `jovkE|`ca1R &@D9:0" CAt`Z#PZXqOqGpQEM`\ fj0_.@)!\^t6bdgpd, q:Vl(,f-zF:.З,b,]p #{}N<$AD=ԠC «lR> L:4P0-왠.8%aDEla0TE0ƏYa ?D*PYWjyylPsaH[ 7;k WH㍯ [yuٌ_yƨ[>଩s}p T =`9Ao5% 8hU C x_Q[' HSL@8-N >Pb($2qF MsѵE N sUG *c; }W< OW<]t;e+Q @ ArT4p `*~]H~f!+ˌW 7`b!1Ga|48ZC#3D"5,)1t # eA@F:΀  {H2ɘB)Fz= \Tc#(5^p4 V?DBlL2~4U#S/l(x',@,2(F1hH!AqE$84C@f,d( BPx*83L"̦x)AG(@53bRjDH"@ #LU%ꡑ!՟4;x(5L::#D)622yE3&v#`$:C H0sH Ѝ2DZvcM P1R"#}'QZ#FR3b(h8)ց~#lFQzsMKB_CNІ׈(p`jdAHC` 6< GCM! #K L@JT3v4qRa8`3 b#XdGad !GOZt4ÍTɁU$f Mjs +N@Fpy% fI\ Z#؄;b<bT#(l:`4'XH &} eЄ>nt͸f%`p{5 A@"> hhF7zI0ȍ8ˍ<;?DRO0lan$sh;~gD7֡&xǪ+ a@dH@x0PL g0 @J&enDFy(aSp S0sw 0foy`o4p` Vpqd0JҀ ' vXYҐp@Z0%?h` kt s dv n0MS`' Pf5~Pvv8Exp'XVP Y@ `R \ ٖ O/j$M4 wTG%I0qaaaFpKE0RSt|f f kTGv| q`` @SP opo ctR)u\t gH~i8 nxnqxHRp H@ cb0PlVgqP @FTaJVHcFRGp8i!0 LЍĦ Rք 7j b y`t$L3cuqrf btqv0j0MLQ6P @Un㖌iXxLs ʸF r p Y5ApO j0 TH tGpY@cEPGM|pFx[8e p q tO PW1fR ʀj&!m8L gQ!pdfٝh@אJrZ` eV^c T hIc! P4mAa{%`(G[F0oL9 FK` raqo0UFc` P/UgǝaOafve@h19o脭pn0Ґt pPdKP  8m Pje$%"p ƀLV |;)&`Ϡh`0Sp -HJI|0@SR_ ciXXpYP' zk騣coL@ LGҺn젓^s|$0K` d iҸgP4:C[q[@0WI^P4*esip` hXr W~W~a@ d)b !PZS̹TK@ :Xp` :D w 1Q-A P ۠EV 0HN6` E{hjl۶npr;t[v{xz|۷~;[{۸vPmK_e˶n';&P4j"s H S`k`zmRzW @ z.y 0)I~v IKřG%pAX\` do@.a[Z>֡o/O&_*P\epp x7v$`RvVP PaZkgԴJih)MψYƤE_SKc@~ >  PD Պ^3x)x5'К0{nj m9ahоq`F6lMIh|xeطȄNA Ť ai95Cd 9iuv Jp0s m4UCVp G y@@!1U!P_ 8$࠙oc d USYQ%FV\W ʦfP ( @\Z ` O {qm W } o%5 0ѫ4Ky` ; G UY@ "d/hL`Qd,L(hP!@ $OA\ j  d lԃݵ%QM $ u{KVt \XP-g_@G ~ Yp `DbF` @`bb1KRKw %c0%p .S dXVVL0-![h3g[`V. (} LKj&` k^0y#& ۔  Eꀒ n{PP\d$y0ip!$|IZ_myOI%\THueKh~PxBx: @r 0r@ 谔ZS 4M @0|ڰuXWDF dĖb+a@U$ @~4j!0 &ZkpXEĆ}ǭtWe ~P4PѠ \ u`ЩVJщxaaJwh8%hs` n ~Y qtj)`"[YQЍQv `i@ j\dۗ,f  Q*€Sm\`N q@K™ QbTH ~0݊prRHR(`F  @pG!0 k kst@ yp S܋Rs; >' $eWtEzaxp'k   :kP JpM vLq. Ĭ8M8UdޚQ0TP @ `ZlE p s Qv"vLsOs>7 ف'N$uf(e߆ﳏyT[55 ֍̐N tǿ+1j`}@ꯕMT\+@ Z~JZ h_`Ծ\LlS05Mt$ R }~alL޾ytPRzG%K;c*iJܢj!@ b*̄RGy<9oh:YEi){gewQT}JxTM$}ǞHKvh>| -o{ύSCTv$KbUIzsͪ93sjZ;s id S{;d>}EƏo@&}Hdq_P"- ށ-|rGJv+Òg&j:ɺ0* vQs *H F +ܡ1$:|jOB`nY@?騷qFpft蠈 <BJ>S 3#zڰk4(% 3/G&ÒpFoZ$I&G S1j)LY/ށCPIt}Q؈$cFYcCS g1B0Hb2H1G3}ԡDy T5eFMF1*(3 4+S+)(i5ySE=Q<'_}M򏭒2KqCȤ$,[~15NnbKe rK {[PW\L\\瑃Z$uѥqx3&oi_vc-#LQj3t6U%1L#J_DۂIA0.Qf^?mV1Qƛ<aȆ1J t r5LNY3N!ҮZyCJDQ&$ypIފG<^ zˌܒ rqE<x@#Y \y`Ѓ PFj#0Җ8L'V$?U#d;nP$J{ЇPIR Zԁ2I[vQ:8pbȃcH&w-&lk^#(t -li!&-a `1J@9eCpxTJ 0D0a8h4npn1 ]C }3#ncÓg2-R'ra,zAłmrXzH,`#IxT0(xTN{|(VD8_KAhQ eYX#;q9 0%qpa.lBKBLv P: [0g4P$02ޔ V CJ0_;FZ=G/@ :d!A#DI1Eq@)1`BǂA f#ه G4h̓ *G"r".8iIOxRYPAdzOfYUSc[V1^pO1z9e&"x.ޠEz(AI 3:2m#`mi ~0J484 + C? d@zqJ h42ba $7tN"pp9Zm @qaH" )1>&|"*2.dON@05.p%(QDsVFxSXI @<,kVy ɳ[(q,Qo!_Ӵ;`*$BLqm5!^ H(00+{FyHbfֳ-DQh:1 72C|h6TfDާC&7Af(q+TC %ƅ-|PG8 pS H>롡%Y0.0~?@A$B4CDDTEdFtGHIJKLMNOPQ$R4SDTTUdVtE>0DD-|ZDEoyṄq='òҙ.(!ɭ<5dc+84939* ux:D0Xހ"1T(z(zX/0s Kh~ GhFP] Zp8h=$_08Tr‡;*lAFFkBYBXHb)C? 9} ,pI,!AaӾ$*ӡ@pIY*pɞ0J,hH)+@H14jY3d@;RFp,3'H4H{ 0{y Ua$$K8C譊A L,Y48НaٽJؒ|6nh3DA C4&0#pL8[)HJS=p!Bp! _#I:Ђxh(9j@2pdՙ|`&(通|Xu8s*qM xy䦀||QD: }y808@LMl h4" `> lE %)p+8W/@?=Q4ؕ" CjȂT=wF 4PY$@J`414l"ȂGȠmFx0ŘP m4ڇz0?{Uckd1 9}ٗ!}|ULCY)?6sSsh1H)/Bu C&H0$ ) ")`7x@?H:9`|| qY./AD'b@QB`)1 T # ʇĺ/P]<*9l)% BMTPx[e(j'rAh7H``--L (\Ѕg,1:'R逈IR?QI mMV\+ q+#FT@.@j,(u_@ap8P`>݇ #C'dLxK,DH/Hw0#w8+#ى[© 8J050sfPBӏP @A82¼dZm?q բ``xjAxw(5g۱%+hϤcQ4d`Д:H/PTu-p{,A$S܅\X:k^Aa-hiqC Ue W}g__xHip :8e$ bl7 -(ax7Xhtb02p|5Pa&꒐59C+.-鉐jvB08{`Å?, @ b)*Q8K30I&Ȇ%ds@3B:J(\b~$%=*(Ę1#p̙6"pdP]2YgUi 3ѡ])'@qlk?]"^i-Æ3hk8{ D ł#O:l&"jXhͺ]gt(*nclݎD@>4yHY+EF\,rߖx I%x(ȆxmXRp)+c$7X2huxwQ1_s" T߽Ab(P(M z?b$縇]>:vBU& q8Qxm{3By>!Dr DF1^zq@Ctt$.).IMpyMHX+zepF, *ATPQ&Sw@ά"}m!FɄ)F2(ӗLq!KŒ:bf}L0f&|k0K'}myZz(q&.8oWC LR"-Q}Ǿ\S=ET +Q=c{:wU\l2Az%; K`!Ѩt(N &4F:qb𪄀V#s<,,)C!_SaOH=Ͳ1$M+!D b^9`\zԻ,',a;d %"Dsu֐eDq9hW $dLH2G0LT qIe>H&s0* bNcL%<"EGERH$d%?1E&5VHG%<Ҏ$ 1O!, [hbm01[hERjD$MtvŨ%3g4=?f8pP!A:[5z:!8EdDxN~5O0pJS3&+'\fL->'_sJQ{:t|'3G!xR\D:b A*3S ď/BB!BYiQ$$XNBL^A AXdA&o|<&EEq] $P 4]3 bHE)~/'&f~(|M !@ԗpv l5Ac>M>1vRR̖zzD.Us8!\ YW!{kd_Pc>RVnN |~&_"&x`Et;1Gp%NIk:3X_⑿AD/x#*GUtB MD ]#gD7\5")}M K$I$zT 4)"roD>iA(HX<5x`J\-|g`jVhdKC A%AV1qK˘4c=($QД!C@I}GbȇJ2lb|!'H(a#}$yHzri8|.|@,Ęq0Jd0 ώEf?3A{seҊ#a6):v0y5.a$eE+"CIl^"9  n lՉv@ YFNy>6c9ΰ%6I+ =PFe<&}]2~ba2]lc/` ,Vn 56]%0:q8s1 rtI"AA(0GQH`ޞ$6+d{2%)xsi(x<|ΡFdGLI,k/C&b Km,qd$=8#2uqb)ROd0 >3#HJ" :Ԑٝ`Bt聐 T \`hFlîh0LBMMCN}18;(dB[/X "TA@)D9̜X̉L ڡ⑈e;0i>bR 21\> `#]"p0N;d,5T,,'-i5:L_G;]h4C8?gX9|?Ѓ>j )b5[1G^krA;yVțB=5CEMbZm@EFaC/^fb1<3 2l!qٴ 40AddITadmDbCÅC (*T4PydX6"#.d_xlV,g BCCF0U8CW⻡TpY-F'9uyB-@J.(G'B3 ^8QX9X,%4CSXN%HC}LDY0*AW&0:Ch%!B eCFMNUh);p 0d6O1044Ø&c (XpIF H$l0_%O!xАيʦQ"4,:^?ܔ-;7U<&cD@<́$㻕R|!}# +X>|ߒ3(†PB Hױ:O'mNLᜄI-U%1@`D+t!ekd5Nk"4"n"#1H'*0Y*|C p=@'h4;$Á(~1ճj.-}+,-I"k%+2)lԱM,AxMpmVI%=|_ :+'@@ӅramؔmNB)C-܃KH=C1(9Pb C,1qN0|BF$D#y00Ÿ+IeF$34L*D/*A\'w;lEZhg7UBNUoR0!||ƗXl2(4C۰rnwG-dof2SD d ==p4tey`5m$_05l@HACB< PsD{?Vb"uˤ 1(V2jl)BM;'efX8a Cz#GDeveĵX (4!nV!p(@d:X- ]rsX^/ 40kW/zQ=8A*AD"IT_B͎J<(Ts%guD! \yE1 HoWOy[FPÝRp 1uOZv7>8uT\6AH04Bt~:B1 5*F3ȁzLhSzƦ+i$Ms:J`P7<3͝ؼv!$D$`m=K}Ux(ĕHDc>2e748 nU#&7XjCT,#07@,+/B7fM oB;̃7|a =t7,C0]rHcD(*C>#`Ft2;$2p͚me% n/*8<~\::pCo<5_MK=dXB7,:{B!D}W# x2?JY$GAPC. p#,{<_ǐ|ēe#=|t%Nßܮ ]}XAa9L#4>"ծJ;$Nֵ}ɦDykG拗8QDm(r{!:8M'33`9ǏHNgP 0J 2$}Bg|G' 񬊞#-DgnviE # ?<a:8 4+5@)ƌQJgj"P!ct}@GŘpvTl N~@G4B9QY9mL6@K3䒑J FK1& FO'=hM* B%hh(L;/&K$8h5DO*A U GFGYxauh`$6 ,>u[,rmP< ~2/>QLؑ}M @tzނv%MGR3!/8т⋹)FPb$8`bFvcV),AGi9Xb VInjWM5$監^FL mW3s.CJlŖq>$w!zx}G8BX2'1 Ջ`1* 3[!ȴ@q5ԋ_qVRif)d f,. r#0@?,ǏL̶ Rx]Dg/9]`𖣥NvߧG{hp@cՠ@飍8eAFޡ,"y1>C,D0BhWJ#C,i pC(r@(@(Q BRF^n&5"0B-& !6x ?u0+ oXHa%PS _bjcF 80&^dMxaB IGvi2P78~cp5Lԏ#P YBhBK0:L@e1 x\6UZk/Sh /r'7$!Ĝ$ $|a E0J` tеA{M+^& 4|):Bn`8B<=P }G0@($@r yF0pe!e}9C&B."޸XP~kY>'Ashbr$\PmjpsLFXg`ϴT!$8iSp V5,PY ? G?̣ v:QgDpH ^(F5 {p o8fq0A8"чx c8> }L00CG8U-P7 4?|DS* 38#"X )$ˑmd42+؃Fao<@M~x i05# ;iU،8 Ic $A 6bVuTo$Q4X5 &a<[]E6hO0jxBsLo XǴt[?_ ôBa??@H / O< ԁv@LBND\ o4Bҏ\EAL,! v7]%A-n,H@ @J MT I~T1~&!EgGc HРOꔎ 9J2r8Nj4nJO*|aL B0, %d ]MnqhkbP,-D)Y0ޢe=3B(/:@t t *p2C…eE}A|A !Xfm HCXH.h!E:O#_2 ~"a[JA)B@{A lσ "-ayhJ#avxJAAL:-ҏ.x RbAAC!HSrJJ2p 8b8qN@$168 A +* a_X-2Z"h>g0&ށ ҦN'3a0a 40M `ke#D:+4Il2>`2M:8 _L [h a '7%7-HLPA.̡ <Ӫo0ހ HaU0Baf fm,bi/0mXCLh<%! ȃX^U Ф!GA>H!T8 dJ aier L0ƁnRAe@J"ձ |CF  Na\Jah6 N 6 vPX ©~rtadn Ȁ !j HaDPpM *1u !j 8bA l`ks@ D)aB^!`X A-!]r$J` !*I2lnwK!O 1dP@AaTQlyQ (@0e&aCNsc1%((PH&._֡4mt aK&_86PJt  &d @ 73F? 6 H!UQ)SΈ5x4l bD€ `6laP! B(`WsBnnʕ= .@BtG@s/8h8g@*a -",2Ba!' 㙹< [p*0Y'"a$|FeG*.s !b0 Nngu/@N)b &#k"庮:z;{ ;{!;%{)-1;5{9 ڬ;>$ԡXA"4t#p$ =L!dP&cJ`cj &P11$8 FD }aJ vl !,(GQ]31! *-K @;ja!F./,M v2oX"] VȎT<`bAYXHֵA[L*[aU! #1zĖ " }:H!,5$i芲^%\1v@1/L!H |!J_ +VUAn)X35pX}#1:݉!Ib}t`DW!r/>~N[>xaھ|S)>u/`ƌ)qj<4Р;>0 |l(KHTo߼5<˚-е@-\ 'QlA5Вhbׄ*|x<5O׏!]hv?~@O dO{2-"=_ZB le(NE$&%Z0(ڼV%h8h:3fC8T>>߻/YcM}nUՙ!&֎EN'B""˖UhȖcn,1M"!t#2XzQ_TrOsLIP "PPs\or$E - 2Z>s\QqrB)-~0=eAXP"w |%wkx xG^^L3LAf`L3L,hK8>>6?Af~9 CDBb:HEW Y' [Pk#DUVP#T0ҜdP`D圀JD62#CZ0[rls=[a[~HqTF+uƤhu0AE] Q&*{1m˵:ZLJ<2\T+ʃOlPA(U摦@QcWAFg5T0Tሖ@HZ!%L/^BztGg(>'I6YKT  [,'aE r73xF'BJD|1$xm9\X'T#/qT$>8N>o=1K%ida,fAq#|t8&*ȡt.513yxh*X^dV#* ʓ12w^%iR,|hB(dS#Vx:7& a: 3 54P•PN78%GqHU-nD2PP+WmYnSjG !FPDb&0%PD M X"2nRX3Fɍp P p J:`?8 L,|6,*R!aa5#diZB0Iy3&|3 A`ad!ƄeLF$KF$ O4{p9ѐP| AJ$b{IeB=_s(&iEi3L|";6E{S:>i-NrQR]v҉9RH:9rb~%ua HE1!BQxDc1($²Mh.|1(B(heD $ [X)Yevm!PhOieUЃz =TƲb#Bu%H:L(S!:O"V_zL0v@A!We5f8"= xC&؁F3C^!ORv Y~6AuZckEd'fB1*%VlU(8Uh\E[*%Ԇn `H@Ρq@Pk{D4b[@*[(aHcB,tNhXL"P ,' RKʶ#G;YgЬ[0/B:)`ThȧC%r r:mp\q"<q!V8û/T^Eۣ^LN|ʤϢq>QIx)U F+2Z!ࡄ (916d4X7cG)Cz.Ƿl~{ }Ta\@<4",ƀ~Q2=Da3Hh9Z_IpB,-Ge2eâr4$.%l^Uh#UZ耹1G3V4 !/WNy]2+!~`T] !4@Na s!r Np R-Pnror<^lM!eqlxi!I %PvŠ K@^@}H@a%[׆BA.r34f`1'֣{6Er!-grV ,n4PN  # U/ 3U pqqU@ =c``] /~iװJ>u?g`]K 3Ace bGq dd`0f\{/F-O 0 "`VHVMp  |F*WZnG 0 j2}u FՀjЅ$> KPi8t H>KmHlC H&"RA ΂ (  $P_@p _P ̗V.aq!6yLPD Ud"uw[Gl$!P[e+KAuq  b V@ =pq +2UqC1S@r pz ѐ PBxtM.\`1|_C[ YZ|dF`= R, yb`4S'013y<wg,IX槖Vdu%^R 6%1AQqJ:dB1˶iY(`Yl.6)C-/ 1%,*5j79;ʣ=? A*CJEjGIKʤMO Q*SJUjWY[ʥ]_ a*cJejgikʦmo q64*tjvC ?J.*yɠ'*CHTųN >BT󇹶sIC!DJ} 2uR^F }UM@g v$0 )% DYdoF%e , 0p Bo`F i8/Z *eA:$r@A rl17/lyP :@*6:@^Y8V&0 `B } j!WDj9M %>Єap_/%E ?ܵ46QK_\ P 8,C9[+ (+0 0Ƴ o` *G$O%ۀ; P AP ^B~P  JէKa R@ M/ V ,HRt n$ ރk 밽:+ @A.% P  ԰L6CdPuP e0%ZмPJ `$0QAp4 'pXɱ‘D.6  ^f|R3oEYX a ېHT̼ẉP@hc≲uXfC鳊SqJ+*u bqbRhI6UR x"kM)J100ٔD0 @E 2; 'F21CpC<*g2]cZ_ :gjkܥLG%X @qn >t? \p  gO}{@>Л ]<@< Nǒ~ᾷI/*CoHKb` a ${ ʞ(q6 ”| p`pYj10 mLX3Z~0 peIwKepJU##I,}3 M  cE`Հk(Yha wMnl!‰EC!İ<P @ r" {Mo_>?`oM(mHh 3ݓ'h5Y(O*};b&9EݙN|BÒ}Pt:}iB̩ʦ6 v.DA`1!SPu*d2Qb CgD/h&9&|aSaJXe/Tp,`lj*NKtҠZsZ&BP̙THO)đЎ.CU⇘Kޙh!Nn|1P9_`# ԏ&~܀a3ie^|0:l6$'!y0 Lh7gv>&3Hry>FB YXe)BHD%o4~hؘ#6'Oz. B*i : Qɦ52Z1C5FĴ@_;̐|r2Q BE4[X;-TA{MlS&}j84A a˼Q?!rbLPQs4B !7"(}NBf) yU6|љ̣jPB:v4@kH$d$PE9 ( grQE,sهz?& st`WvF D5D .)]q9mXX" 1tbq006.0G|0G.uqG D'0-X~N #ZR9194OXpԔBȟGA0F5d_@2ĩE.= ;@jBrhab#21'ЛVb'Lܐ(8p ԐMNQN#BCbcAD@9S"y|"l8Щ8L"2D[DZoaFu _y#r\%+hOq|E.r 6#!ru(!@xYT|̡ Z 'r*6%B Y\Br7@ų)9 F0V 6,a 0T``+lAq|#lh=EVxGt(/>z!|~s&`"kF׸Y̋|Z@)W@Oꡱqȅޠ}o Ëq /ȩ_x C@9 ĸ7H9 A*$S+Әu0J(3Dp蜩l S08XarHMHK_ ~ iH}"4A f;4d&Aekx$` *2348p t]#_-00#gKI0 (*- BpPs8CxJ8dj K#(Drʒpȏ:<(+ȏa%a-aX!-Ђ.E 0|`ppu:?h8-GఐmPRP5TŞU`5킗F}hJA!94O8-\zr(G,)B{|"W|6 0| b(Rȷj/0/}3;Ø== P<D'XhEjch@%PA*$nML@F@V|xڪ%7kE\H"áŸ;Z5RQ8'AB#]-@Pq+XHFP [J ںD x\K%5 aу{;awRDu8_ @p1SX9I~bX718Qp#W@If8¿xED0-2*kjJ@[ Ȃ/WQ(Te ̉d@zZ_:Z [_ѠCVu t@jJ 7LbuXKȃ/@8 cj}އ 1U':T X_* /*0w `ڻ X FP'14}Ӝ z͏Q[&@u8@3UwxEk\HMpJbkRSȿ4Jъ@ POZ9B-6I>#Y^X')X"?M.SO9)9y} ѡJxQߡྥܥH0mXTxFS!fc>Gъ}}_9CR}o˭pzDmk8@Hb@4'87Zhj։ |mMaNN-Cqac+ImP͸=nZ!|8tP]#چ4P;u(eBҾp'iM=TMPm8S6)+ bh\?XN0-#8/(JqDWF2[>*` 9_'VJXOhC 1Ǧ$h?-Hc֣gXx4 $)+xSinCcZ\ `_`5bx j`ۡ(awЪ "F? Ё%hTu#x)M9@OCpw.ql))^&fw} 0/d0@XPOx&W5pntJy6PGЅ7\YX2tb2JXR @5PoҼG/i=6nvTe| (--- 0G T_@  PX#4/8 7(IDx9H\eZva)FEDWR,%d;ў A.؂ )ª` +^pX^+aX2fa4`u#?l3@#h{ G2B9-З@1i`k'P}^8+7K)s@h#`0"Ha@Y[K'HSz]B>-`riB22 :( VP"D8 ʵ`$Jg }XrGؔk} btfTL''?"cÈ]:5hԮPv bm?~Dž#I>C2=ץvtj1,yTBygP1uzP80d_nz {g!Y 5VMGĄŸ-+a6r:$ y<@Q?pP!נBaVs2i W%mLQTcE ]%Y|0&FK>ɜ#LLZGM QCbBx Fʣg)$";UEBE R&BWhctD0y:pg"xP% r>0& s ;h(cmf0x8d Y~4]<+!Q _T_BQAx2"B~|}n‡!Etz/JH0BI?kh&y+*pVL = g!_:딜+rVh17㜳;ܳ?w1C]G#K3ݴOCSS]Wc[sݵ_c]gkݶos]w㝷{ݷ^#3޸CS^cs޹矃裓^駣ꫳ޺^㞻޻_#3߼CS_cs߽߃_磟߾_㟿߿0  h"0 L_@!,     $/)7 9&%* #< (7 3: '$#<+<(84:4(.)(&4+&84)333<3333;>>=97:,1- !%H65Z56F6)j74r93x=6U-D)F 6G 7T $C+D,K+D,J%G3C3K3K8G,R7U+R +H"5J$8V%4O-;cEXJMoQ IeFW&YG8LL0xG8oS:Kg,ri$76I74Y&4G58h4>y([F3RI8YM5Ll=JJt}d3P j0%1u!>@ Y܊{Zw [42pܳt:0J|4oYaqV0]pp G(h:P2p _jA!nv)ɳ(0+rk[ײ~y@&esxŭ>栠Y^pX' d!*J5#–S+i@TIf<'اry/{ngM G?&/ua <ИGdcZ, IHYe(|'[!p #> /_)&D S@AD8Cp@G vH("xчEp )pU%ȗ>a3 sT0u {#xʴ:'uQ }d-9 $#H@zQINs.S mCFD3xVH >a5)|B TT miJ;@|[z,C"&T]f[wT F-Ⓜd<|" [wHx :8TZfҋ/PK!@V bhoXsJs~ I7%P>- لdG+$fsȇ,M0d6a7 Nu: d:K lvy#Jx |tTHGJSa -LX0MG (q 31q\grT#z'ta_+jMdG1 VƳeZs |K xvLs;L1܀e5x&܆&n$@Ba>&{a1^i$LH<zN)%nItN|'GSU`S/9B]4-ݥK( RA_ه:TpE&kP[O)JO]owUz0P98긽Hƈ%[ (hVF@QX*.. pD;rVzkiAILCahdAuM F;M'<2( +x`^QP5TIDM/K-,?i2\9NKKRb\U=F![5< ^fĭ?YD7 Ԩ=B7F АufT*z(!2,CjTXZ ~Kϱnm)7DIX։ِ(ȒRܴ۠.h(& !Ҳ5Q:#yq 0nu'Q y{?BvC@ ++43izz&s8`j T^+qaGo2!k-JR% 'f@\ MGRǞBrۂF ! nSۻp7 R=M!Zq# 0`+ 8!mW?`H\>3t4p UsA( / u0 xA1ZW|JpSKU?aV@msVJ"$A{[7,udW0H#!Ugv%h".TL!8(0*؂.W/84h6X:q<@B8DXFxHJL؄NPR8TXVxXZ\؅^`b8dXfxhjl؆npr8tXvxxz|؇~8Xx+^1 x P `p p 0Њ930=`C`F h``3Јh>>p-p0 7`6P#P5`h`3p541F90p`1`9`0莴`h((6 8=0FBhX<  !APؔLxh؊Myɘ=8`6>АM h9xM((8بX2H8P38.)9p`3`1h؋>P!`l+؊6C9(2P@ mH MɊxIS +X׈1`8m$H.1r80>  @2 ii.x2H2@  Д  Y؟>P0/ C2 i@  R &P0'rpxP:4 J0ND A S h!i `C3x}dZ; c)'؋-JK҈"? 83XX$C隱/.Cp(6@08(ٟ`9C(3:910y-p8ꑎ !x30ٓ)9 /p=YXxqNG AfJ03 &` @Mb  Ҁ)`p{P q V :86`C`Hh >pJড় I6p;p70 8`p8 /9.4>=9P691|2} `SRZpM ۺbFW0 GPpPM~xh@ {PPX Il\*p al"M zS!fG:0IP0dq k# @d9{.kJBo4}MP Rk:oq`)iHЏ xɏ('](@mII; 'XY5Pl3ˡZь+H(9 0+.9>0͘+-܌<9ٌY BI8-hy 4P0H$M|y -1 Sr q0Ja {k @ %5e BTh`PqZ@ :r0iW I2ɻqhjTZ|`6HM JY 7Ag` (c9NP$ @`&-0lP܏H9|2PJH;Ryة՛Iٖ,9,09۫ɷ(ܸ0|}= m30% 49ܝCh1yɍ47p1; %[y1ԁT('+F+P z r+~O(t'~w/DKry 1>S  b0AejǙ  HȔ̹G0L`BɉFΐ؏'`ΘcGȎ `1k = =(`@8#C8@>`h?ڗ5=018 ɬ iiɌ)9781S K~!%P Kː$Pe| "k3o(F0)`OPnv[@xA \%`Gò\pP9b7P=Y I[\TP$ Hm¯ ^@:{F},ª| H8bYf GpRŘ)[mϔٚz˜ܖ2kIҸ@ y.0F@38*M͓0U@؋6>Yx1,(8  |c|&L^8_ ]M`qrd\P\` ri 1b1*>ЄkMio^'rMFm0rGv%96pG-FDW>e(*QwfԾe&\,Q"'[>5!;rA2dH!90|"GYCZCf5bׯ0bZ .ZDh" t1Lu,]c0A‰^@a A Fhp@rQ= $-nhB9tуƌ18pB1,pJ1Æ 0`QFz fTn!q c܃A*m*as'F) L2JjlR**y$404HGpBfLh |XE2Ȣp$ vByֈ #zQ0Ҩ&G!{*2È1|pyV4)I:O\ B!Nʆ`Ϯe @0òr!|p] &3+J++aӊ T.\`#qđXhF``"07Az ܓ 8c 0F!@4.QAA'X"$ 8_Ƞ\z<ERc3|%<ă,dóūf60r6R*0. lpP\Ѕ>ⱏxR2jVˈlJ֤#? &µpukj,D`}ISx_BET(>X/rogׁo5(@k(q&9 u d> t+`hxCw8:(s82utPak+Ԁj |`{AL@Azdw%,׀tMp8zˉm \cA:S3zC6wx-zp#^;Prt' n疙N5?\s<¡2c/h?:`Z13}6BH=m0MO 8Y,~oԕ|7-O;8${i2`mq։ߐ7@ P[QW5p6N<ǀ'<_Ogg~G?s+0@jx{ȼ4384 pxປ~Ϋ8re oQ1"FQ'c/B9xq(X$Ys'(L P(i1L+30J([a ´ ,j "&u,,C4 5chX24z4s< Gr6c5Ć.ѫk p uѮ; ;B !XVQ;{b4c(pe #X*+Ȳx@50 (˔9E@Ӂ%oȅa|}˼H4 ADK3r@Ȏ3e!jȁ0)*~B4Exs"+rİ|qw)[,dɞIbP p8r 2L?Kp@ u.T?{AЁ e{G39kDsHo@ @I\ ><o@Aj2(uEPqAIr j@?rH~ׄؼ% (wl82Q08ċX@CAp2x'0 .2C8~ x AĄ5{HO@k3os8ePo80xڕTs)Δ,w x'h$5Q = bs) ŽRF҈>p h C&z`8@8h-{@ <6ĊӼo>Ko@L4eiL7xXo.Ȯ;d/ -F`*u’rL'!"cZǜSv텯h2YCݘ@ݓЁZ=㠏"sT pܦ2ȗP'`Κ-)` ސ>ہ8'>.9'xRIAlC_8{@;c_^ZmhvO:Ԡؠ,S ԲQ Z0@ް ( i0 *X'sBD ,+> p 0pOϻp $e5Oc8\cŅ#a8Z"uX]DsbE;+\M)!xi ,QcTcUcU͎X n/x .~-K_֪R_ `IRbG/ ؀ 1rX4E8z@k5^ q4D~:A9Za#%^[d]@\Ѕ[2@J-kYRAkn\Gi /y"P5Y(` |p bkؒy%R>q‘!K-R gDy'5I;\ r60#[' 5@=p#( PDޥ᠖Hk ><e\^^Zc>fjQZOx(D. B}-= }0t8,qx. 3:0 uȅwHip$ɑB9qi˥] Ze%o8joo[Y9jcօ\8#Z0k0_ `ot@2r)e`uqck(p#V3Lt(ΎM X .A B?q;~! ] pծ:=$87${8SnTq85rqxޫYYЃ<==_>_Zjһ: .@1Z8.dJP5xr]x)2hYC#@"HXIpdVGK&ч`P#l0aWc(@4$Vh5'!A8Fr J!R7pUxxh)R!|6 `(FЈ,1X.VbaPq/5  :'Ȳ>1 \J )X(4W(E/Nr$bK؋(*L ݱ4OʳeM^2/cvvee_9s[<0אַZ[`faj`ha]IL|1ܸ~mBSeH$o?&{H !>z(JcP{PJx9:v5k觀GXs0&{@iH:*~x*(oGV8u8{v75uP$PKd'/:Axjx8D(1&e(JK$b%tۧOlea Rp#Ȑ"GAC*[Lha#*sXArLhЀ 0 *Hh !ƌ=bؐ9p̠#[qИ  A Q8rw9pgp}&Lطcr8~z}u 8Gm@RH@6HƓ (\l!էGXa>$J*yy:XR /pCX.@M8dMEP`pN`>Uv7 1VC6zC ep 71T\l87N?[X< ;Ncr dǜ8xӋ7˷zfj"Ga-͢,K mK.2@,1B 0n C60U0_*8@ Sx>ʘ`!=H|~4O P"_, ˙y)1;A_.&gD ш; *8cH1DH#!~~xB \6/~4 rH4$WQsQ'JcE5,D X&@Tф+E=gǢ)v-P Թ A^_k_06X \pu_UAՎ]tPCZ$Us lcDbOv9Iv 01@+L7Z, ֤ P=&^ 7C _PC `1 n%4A v*V8NS$#2MH͈#QmI= …́"k1JPHv:tjІ6}Q$_IpȚC>DmoY I:,lc@3\$45"W`:(CPZt0qm էD2]tBJExpbO:6r|E9RX` J *VPf @80fo`+7$c4/<3!dc{Pc@pIq.= b0T\(@Zܦ.h _؅/>02h@t6U4Ea! -FSO.yOb<}ەPDeI$4KR&'SIJP4)$'1a2(kiP$<5?!T# U#zTH(*HE|z8-RT؃%FACOCBոF>OM˃<21ȡp6u'R:*fW*VS>r P>AW~p{n 6d:ɘlX bsq/232|,ҕ=x!5h  ltQ["/BQ=0 ł5qvȠ7AhX-$`ĒDf.q %t @ &sI?H*l#:IcgD1j%h r9>%t$ 0`#Pb(US#Ӱ鸌' BADE׌Nx$Gx,&U҃(HLl p ҃HCp~ЀZ8` n}13n8x>pFR/ B^$,蠇մ]nW-hQՈ7à' *:5p $KȀ܈q`, 0ID("'q( -sRQ 7AL0/y^>p ANdRA0y"pd~< B(\jYKx::ul*AM0l5Kv[zKpPo2[ G"q>aӟE;2AF za fwK,BD't\uk D UOPTs P @-] H(<} >AS &V`HE G p  EGAL NSHL`Ea  58mF<PT/C8d""+`z'G@ `L@ T@1L9dWQ`@86zH^<[^HQG\ @ 8\Z=YM8@C2.:A(QB8C8/|F/.xA.$K>!܁!p ؁$xIr@'Jg@l`P@)"wAAoF|B,U@Ű d^  [OԣD̅Z.(6h!q0@RHc VNg.O TDJRJ\hQ0TЀ92&$.U C?eD0Ȃxqh$-,3 Bq!$g8a)Q$Pvz HgAAA-@9bHLwS R<iN8~**bS`  p(/b`̌". qzJ0>!X% XL` ̦`XLڂ?ö0zt@/."8p'!(M2r" d ``l xAi%rA[ T'P,o0, A8 @ńJYhH*Ƭ̆juqȅKJYv X Ȗ1!dp#H]Q(R0@XLL܊ TLrG U`T?| .h/4_;9 "0$B x)0*A["$I@$@eWl\t@@AzBmr A0dp .[ c472ąV`̎@% W*@NN-ݎ Ȅ3ގ\`$ĄX!Wn<þdd0.<0, (05$xA  @_)"A *מr-'B/pPht~@@@,JUT%8X%FOqb@hyE,O)Հ[X0rEr,N:#q.ag5N,p<X5û0g;1W1"܁0A,z,0Lp r@BuA@ԫ.x ~'̢B. HmDEx`~`bP188U |`Bu$llnE<8MrfRސ.c  ;eT)clC7 wlN4gI+=6BE DL5/р t4 @P0*0/蹫J[\u,y>BKv[hBORw4@i% PL@0bE-u,lƴu8?ζ($22lM*pB On&5AF(0.|耥#'t⬪Am  HEN=Sd_m[܀ϮF }6H1hO<87EA !|2#fBi/P˪iz$"M:ȴ*2A-0v/)%x?)ATBԁI L1M̅`*41fϹJ Ľ}b^4YC:$pBy#G>bh1 0 ,4҂4>ӧQV}_HL+jumȔxdvo}KmLɈ&ĨoRrnk2K{O3`W^:jCƌ \h~aP faf "rAd!>` ":A&" o^e&a_g=lE9 `J.pRJ""ˆ# c0>CYlE0*K1 .Ү4Ӥ[h%//n |!01 ..àq.`?֫5ؖAa|2ǍF'4bJ&8:m;4褛jĉR l=5y)b= >!%l@h`". fhP"!rTt`"(~a<r,d%|^X_G ;;)$%L ' "d& YĐŖ*dr!Jr`b30cV /MbHa˖rO C^hOp!7pAdB5x \0 X @jpxP-l\>d3M0'TX%PX@,J1pb\afN5L`_#?@AIGJ0JdC |# N*y tD`8 ؜ŭFipD 8x8Y =IH#{8 "(A$dն-v>Ѐ /7k?4c\%BDЂXK`FZ7v!HS2h pe@ZAF Ƒh*L2pf _M~c|EL`E"A>&a+Pڗ"x|vEz 2AicDT1!E-D4}C "0\kP)Z .`&DkZxaZA`uM(aS ;2 CA8<"X+q Gj&id_l#x5)}#N> šCj&mglc "W#-@Cp:4.P@}8G6!Fۺs tvdW-hA {! a`A3Edd35AJV4MQ и -;X=/a(3a;vH"젆24)+U;A}RR=C J?/ah'M'DY g-t<DB ?B! IDD3&MhW/{ZP|ﺀv5R9-;kUd\izc YI`Td2Bq|8aAIF }j* dAraptAf!V O`jĀd!bnDhnA |@ 0RPuT_e`K6|m̮ .N#$nB/ n6 &-5b/W O*`hL \oގWfTA l Lj4 BAb4pa Cox`K%\˘@0.@RZ­T ZX0 >`:$`zjpza!!؀*NI"` |f/nE0xj&蠥,DԂN`/|lR8bPB"2ȌYڀ`caLcT!dWAfhPc! mak 4AVj4QVPq6r`PԌm` @7xJ0Os0nD৊xpʀ*4`kZə01d@[>6J222gr@lb!a!zs§(F,  }Ll@ Nf|h!;_p6a0M,fRh` |a xp@FoPu.%BBEtM2-K!J .Ӹ05@Ma 2!K4ҡ V! &D _P :k <AӪ24HAQ`K!+lnv .QW+ g!!5i0y\Rqt@c0n2Q,(p %%o@ĉ"RI[NG| 8@,S!7aƁp!|*ΡH}9/n`FtnFfauYr.ZjZiJ!u  3$J`2`G1uI[)%PCunSh pFv7,q@ >4BTh*NE( 9n%>؈pj/Gpk# >@C :MΈb@Pa.E 5A(%bcDA @ x @Ln`͐FNMxS?PEJ֕nJ1bq@FU. #cl3Dk1 :6@D ( `bzA3W7{UYU( Wq1^ RZeAd/YLfRW;3/A@z` | .2 ZZRl#`@a6VB1%v,`7{%qM gmr7N?3&pg>~W2@`sAt!rbAN 0.@Y*h'uilYrYd^YBY!BvLpȠ^33Z\"\f@R & tg%xHSGCD{\#B@^@Oz)Op9&Q1&%k|84`6\BH7ϡGUρa0@X@`$M@i(˄8 YY:vKPff-Ld 5!~#!Q!@n)o[pgIR 02d%.@mOh\&!~\.B Z`z^@ l~֙ '53#[D@xt`_h-^6 nFZxFUn(TfL b.@sbnL//n Z ZY5_FfK T QlQ֑G?1@$`(;|t!v@ cϱeC HW-12P$ f`1x1/?n Ta]:j{/W! dG |؇ ~YrF0Rn!;sZzx[]*Tp.L.h!ec_1* ZAĥu5a еMw2@-sO_Ω£$)ۘP1ZQI50{`{m/~Wz}+wr!āT&&j!N& `M KsG0iWٝiYUzLgUX@ #%s #1r1\r N'B=~#Dv!$h"ݪq!QnƢͱ5;Hykv2Dd4ڥ.4Z4>$m+϶}OӖ,ΑKDl^h'Zt@1 }Z qrGa^'¢A ga.fLfAi@!kuuag|L;$}au;iOxXs mQr l||E(3HPc1* =^>…/б/\(ō8±,!*'mɸQ:Y ޸Zj#{hv^ x T̎2#?mp `kn.I0<8A˺9U?Φ^XhY800! m"xښEx H,n X'.јDƙS`eAH551hCYK c'?Db P6orG۞!pPe# PSl!*IE2sʠ48Op`#`mB`p.`X`ٻ؍vqbֲL(,M} $1a0\SeZ+-bŸ oIH'yd/8s0W \@l@I2XUN+ 0` (q(lټ N/dch@l9 8| Hl: 'T<ЄϪ#%ޡC'xB3BPƵq<Ŭfy#x Ұf#A@́N'ddt`}ohAMv0&<WF*m#iġ#َ"%۪;> xM8"AР< $>u6S6  @gos`in1iy ? Lh(8 $c38`P @u 6$b@08: t5l-p* l`88WOdteuȖPvpbN `bc e XPN p4V ˀ7 GcY@P׀YMw0vUm`'c̐ɐX p f ZːȊPZ }Q)ݣ'D@5CPn[FrtG53o_HQ@#p\wlpw ,PO?,R_!@"X t@5&/`0 ! cin! T Y` U @F_0 8E8  .Q90=t=P50t] ͐pmm`pX`) & X8{_pܐXP] eXX0}ڦY ׶N`|7`( ~n)'G %`2(P2 3AJV Q!y0Z aKT3C#XM  7""`bIO!@" w6 rАK,oh Tn1 t@K"d@ "K6 83`@T$B`H`$0`3Ncؑ4ԔfPVD'Tb`bwmiX"UbWMɕZN P|WMbg (XՖcyJl{F% 8Xe%}i 'Z[J 15-0WQQ5225 eރo:ԁqN#w k@0@]"@0fPAE!!˲Rw]" #&Lp8:"/KRbpc0Hd-r0@9t#i1KE2PD30;C}lx1 EflvP)pː& fVX pY7 & {YcY( m _} niPX6{%iu &R(@s=>&n"Ce?7`LrHIR"Jf$ 0KXL]* Rh@T@@ " 8!^r` y 0CBBcT7cpop  =XF=@̃3@NPT(48 ޔ!%Pp@Tb JJzImSX۔L݀6ɐf 'c[1aoY6o6EHͩ$@J B @ @% L, : )t1/Hj090j"/H\ MzBr r- c@6F3qf4 #)+35M#oX90 bk)o)q *0 Ziy[x 'ۤl: dP WP\`G@ (@ u %@ 8Y@vM r>a>=tqq4Xf3`A3DCڤi +~n(۫RAf$[QkjbNI8]Rضs ׶  u!;<@,@,SA@0]+S$ }& P@P aS Ya 0 L-/KUE9UakT.zH/ij"3@C= -GhK:HpWFf0qeaۆbo[.Zed2),s(>l$@l֜ѽ P,2u hCFNJ+h~Нl dS ]L@ް;.vU 8b0gQ3Ct (4D !.F|pGծN W2EP[RBZpBnBw[I`f'媺 L+]\.C BB4P` yK !X!!24҂߇ #3]/h?/N6K@3@QrȜ>WO)&=43o?<)@:qn/a(5Hq"0P $``k%EO7 Ii!] + ǐ ) , a# (JZ S2#K,aȡ%+0c̚EK'2d>q3:x 5t!Ĉ4t#?f#tOA%ZQI.e%;^hbH-Z)2dU!?dx↋;tx1d3,q  4!ъb@\K5F0~p!䀛d'=Fs D AADB\40#IbD`L ,30cM<FM2R1#~X#?1Era.ib/Ѧ4pw4|XC连`h}`X$ `@ ( X9 0 i ~r*Ћ(#HZ#Q 0*0*:NJ40a9 Ȧ19Cau#8項_~ 5߈\X\j5ʵ^0* 9_"x Q) QсN8ER fmA'Xşz @TyU sh@}H8H9 4\2D x껟ಒ Y z{sAHP(H.ePA (^915a[ۗ2'4Zp[x(K8KH7801K -[aj% 1Aj9iɁ!0  |pM@̄P*Ŧ33HF\ enfE8ER; `k4`)0`D*#3:+$H8Ƽ*92'-Y~Cq5~815_7Y0_肄uX?9W߱ pqp]٬@Q8l1_Oh̾/:YhN^ &:@ɁB8$x |ehy/#,t(|@9(Ȃm @B0GHTP}x%' FA&}P.hP8@baeWh #O8@J=@@ { A{Љt^,@@.&(%݉tH*-.8&8(888(@d0p-Շ$, APUQ$ bdqW((NМ#G/s   ,] /`"q^`^ؘp5(05 WG{Z_0];Y,j:iK _2H P{Š  @d X* ȁy8Hxu0K|,ȆxFh4~8hȇ̈́#BuH3%'xzHL؇<*0x*}8&\(xH$0Sb(Fy@BvH'Й=P`8-hgxvʝ0E}@3j<4/ Y5ӝ`/M'|0 5[YuՇbxl )S<<ƝWaE݀A\\ )GPI.)Gϕh11d};>j=!x~T:.ʓhجuTEIZ?,7:$_k2Y?]rq 8? H3h FWȁ a 3+udW8yHMpK@xEL8@yHV5@DU@I@PPbZ8;a4aa}J4@M ^ap#>)Q,I?}H8E)[,*ƝY(n@$=0)y;]{9ց` x*AI]ȣjr$ hd<1xޛƒ0H 0*_X44҅N֬bZJ@٬/2,?"d?NKx_[ &pQCFUbFYjևBAYZb}@JoXJ(v-Fo۶ej|Ꝡv[c Z ޤkS=k:00GȀH DITZ P~#!x<|ɗ T΍Ѐv&0j.hh}^,0/e1,^@.@00`%]:]aB8fhn:?鮷 0$X H`h4PcY y@e˒VhhՇoFqa|XFX4y@y(5^ҝphNώ}v ?oۦqog]lH0˰0qL[ɚ̷$LM&t7a G>f\^2cKɅOC؜lloC0HB6Rt0ѮNCi"=ϪҖ.mXmr$>l21Ѕ/HYZ ȠX A=QH~['pd{(KX}0և6lf0Pq5R{Pu8`Ȇ|Ha6-Iȇ@ M;hǷ;mGRigy w*Y̏`^l[ j sHIptEJX~~9-R q=<I]dq.T:pTz ph/@HfY ~e'.Uh8qǥ>󧋖0cD.W\4iŋ:r-W-^lњ\d 'Zl]#_I H 4hƍ8b0bdBh#^4!Nx1cŁbS!>6DN) *iP Tyw\6ʮCL*g.y}Ȓ\bW`bȘ_1Wsa6<? 5|b# b` P@#Pp p! t[ K.|`AeT/F A-cEB4T-_tAx,\x@9N䔨.$FUDH0P50\r,tT\ $hZ @ C .^3\` 9 C 7p-!t>nbrrX?@ 2Bp(@,A ;.i(eKg0BU#S@TtL/4t&(/i8sM)R/\2l-K4IM"a|r.tTK.@mSS?TWPRժbc| b0f寏A 1> ; 70.CX>cF'>gjz"n ,KQoAlx0 (LAYS̽$[S'@\\E@W\%5y/tdK/)͘B@4~r $-`l\/.bծ5BUхD=4 X p 0\rrŸnX;A&q < CtJ\01Rd":"E@ P@!)`8 @avђ /,~zH@5Y"x#@Gt XdF/pq H0Uzzd  YP#P ׮72@,  #NxidpBAZ4X~0s3\gr+֔ xu| G82`$+ H˘A` C r .‹~J C$ TT\On`H QM B6 jQ[|2(0O`R XX`hj@N.qte +_( AL@tgv@`C@ظИŒ7\ϑ"@ <$9ObSA1FJ` &\!4SItIJ&dT2c5'BcP J=qa ?Xt1}{Tձ< z%TXWh@f@w+ lg(A% E`dAM`@2F$xp# $#7^Hя|`aHB~cJx508YGq 2pzbc!ӕ/zB TV"*`I.. R*IJA RSh4e-lAJ/.u 74әӭ^4j9?@hGBHXO@HQC= vXX<A:j ,` HfKPrH%8xa{F'>8ً Kq@jo7- X^آ $H{r]#a.>aO fow0'taF@`Xhx@ C   AH @ K L?<%QtÐV%ةy@X9 @5B̒,B/J. ]HA R 1|/|8x-iT`Au} qIh X|@| =,vLY@9. @+"U@yHh9@0@/KDV  @uF- ] ìP dq$ȈA܏Np1A)!iߜ֚ @HxmЊ p$!hR(H YPTK@xZ @.€bL^5@ _@@d$d=T!TNIN)@^%V T@1Rx|,MĘtcq} =ǐ(%@$,ARѝF9) rތޤN D#WА  4Lfk2AlNH@fqA t@@tpe00FV.@JTߎL ]Wn@L %#U !Z q QUHcF j`x]Jgڹ AIXF=cCB@ zR*#Ƒp@K(kzj Ā N= H)Q   T tLTg)_ |eFVl@DGDYUԂ,@`)ǀ@X |U#9>d(C} 6k]ȸ@A\ N @9 *j< @1F1PA7B#`C:CDu(Q"x)(F"|+ 9A9%l~>dlb6.l^_M#\ C=uA,4' dx휊6IpF>Vu:!V>R [fUʂ.B2 SpjXzʗ0DM@3@ĥZWu{cFUZYl5$=8.JNj e@t@Bok&PʪC.Ƹ/U8B=N\=Ae*LteVεd( %7Ȑ@0v2j9 ktQp%/er y /y GUYPzqhvɘBforTEeX՚؀`@*ʅK:(Lb@5}lpd´$3(fd@F$Cd$F0d<3{B% >x3<.|3$sCH*h|A6@;-"5>1 8)Cw|D<CL4g4 C0>p3nN@7,lY`0Q =u[Ͽ0th1f5 i@h3AHzNzJa:$n2kSp$m( 2%=K=3&C 4<$!P)C0P5(>=B>p4b64n68pF1@~XB6`A6x@%9$&rud!FB1!:|P3:( F9CK600i<$Ch,1@P8uq)3@C>$`?~A4!40C hA6!t(0A#3,SHN@I eY_ @ @u i\)e HȐ0ɕ$#S& Јzvp>6]Z9#jr#P"pX 0`QR@@5m <1+F=2Ŷ"A$t<)0F:27Hl1>3w&$A!|>|,tt\>CnuD9D:5+ @;BCC #FH= DB>85~hpt>(Cl._{ctS3rNы, @ Z/_R΅qsmeUR/Vj: k Nɬ,ˆ]qZfLFTn:aX1R#?^'GexL(ިmb#Txȉх:*@pg= ~@T4$b {G#H1}>ԺLwB@* * K{"D;)$%Ѓ>$vB߷ hl:A\sd@|%~h޷:wP> : $1 /Įl4 b@l(*@/t , pOY/W F^IIt$E<=ښ"ĀP ``"(1a 0`A PXٱ 6(F/x2d }K6ui$r\ TKɔoT&̡P)*TO_ٯL۾u QwjFݪmy\m(Jb⬒gT?PDK䄛2fM4Yj۔kKUwg7S^}8eOJ!{)?b |x bRE;~ (  aA}]nvQrN@8o6@L p&)B $AC࣏R" (8Hp)F\B, "B!!HlDGz lNE f::`%tLx؁(!RJ8ɖZ >hg)Df~3$t̰xSѦ,V&),=!s>, v)Ut`EeLh%P'9)@2#wNeL@O(t)bFaE,<6InX"ra2 `@#8„8!^pA9$Ja7D+TBfcQ\1(Sqk(F%;2$ ( l9\G\B!HD4>KL"ZZ)*;2LΔ؁͡ WKF+tYJe?5ty)D [P23&p C-q\MPHLC >pYGpBLfGCB)N~1<<`$`0ǁ*Mt ]8/c,:IfK:h+%# !I8( @%@(2@ SbhH>HFl&2 i4, %&KI Dx@XB 2ARN>QTZUN5+B9 0  0@ >@u-ʀ:p p L` m|ZҐ 8PѕtJ.r20 u I@{r~p@ x!#W1A$"D G@h):BFdU@A4vT *VR=4(@-Zr1ur c@>@ v\ )\d#_5djW | f_z G@ HP(`Ϻ$ 1hYL@ %Bs" #H-YȑB,L5: #4!rnkF[2 b =i]k[OV B%(@pu}` ‚ܪ ) 0/?-h (II;6B0 H6#9)E"R )0 @BaiWѨHRl8"%Ċ/q:EF .j,\DJRvk)=Yr H20JЅy( a D, cV@IZb[V)I#^D D+bq#!@YHEbn>]ig )dA U%FYj<`A[&Y呗kլ Vټc >xHcihVpl@"AXB%.+hGxf#*JZN+0⣢rϙF $ I_8QĮ(4@UAu&0pC m(hL`]  E@$fKg>BP E(HM$X|Hhc%DDDb `8`LPIT&"fD "PLB& +G thb8, v|}O ǐ =i l"$L 2`J h^N P  & o 6>B"& p$kh" @>d"j` d \i'`l (fgnH_E ƼQL,$N!:˶L¡hN`JD$\%cLE8"DhF`C JRrl6n$#&"X8h; cKhHnN+#6gO$;-H S N B-R,P ~ Mߔ KN6NOTOOOTOV(Z)SfȴּP#URMNPa}4aaD`ƒ5QkgRWUPWCNC5 4! p&) l! 5` ^ F@Ufo* !` FW @! BJ`YI%/N#{>ufm`Qt,NNA!G, V`H!/Lpaop!Pea !20,!!z ȁDR L0@!jgkf_54 # sVVi?).=XkQ$wx)#5uC \Rz VO P W/BV+Q"4cU i)a["~SWtw{7;lWs2CXWP[+<B >.)N#"2e; C"i P wK1^,x! h%/A@a0.ek}QWON !3!J@ "e/"p 5zu"vX%52OPVjNeW/Vg7D69>%,LVbX. % ;Er I*7,r/o@{"6Do:ŋQX u_O6wawxI[OZXޘ[U$! C)! SPM E b."0Xu|CY>WXAZ#U#S1 2O a|V;mv!ŗir `VmkBYHvvw@aQBPc܀ +k9Y"&qAax>IYNLY VvPz{Wi|؟N ()sn 5 Vqɏv;VAV6$v"][6fi]5Cy) t< wa> *+bu n!fO,A'L`ﵯAC [:dAZw{۷[۸[۹[ۺ[ۻ[ǛۼӛAm۽}h.6)"!WWe:bS/PaA: ( J/*U @50&&[`d950v!sP*@alCvoˢ >NsCס&H,pҠDW!DamLV^!]?5s!Py!zT hUv]6.NvHO_qTO4[Il5}L#GI5)HgɶM#tZeV@K$>b%dR_ɔMShݙ,ԾAFRY1N+~d;7;&RGԞؔ#ltx\N+ Z7L${ *[XCS biINejU}pDs9Mw x :tw+5*e**2n?uO}@w^G-zhWlSH R>td $Mc+1BuUFVgZ9v$w+4`UA|]IRui7=9m \H̃F),1Th$!4ckX9ft]% j)Cdž[UUqs"H %٬eUm$O#eV#MP 29[ cϺE 0yh&VI0^ -Nz6T >9o"XUgLhv~6)$cE}#A DC+9*ш8Hp꓌\nUc;mRgvWD ԳvbD3I#5z"`Ƭs';'jN?Hm6W8D ˮviH@jaUo_>[%`ʉU枙nڄB.w g, d$98`F'\$g910}hĉn3ofb` W04,=!H+g:1Ԉv7h \4x6-m$וЂ|( M)TBbI;[VMNOj(,rtAd;@(M؁gx"4م#Js[3p&T'8C!8# 8CH+|j%' DAs"G1Mc!lGq~?hW $Q0-#N73Bi*MXUfgA3,hËaTJ;B KhDD4b4UGHʣbv3'n. Re4cCæ6jRT+dYr%xdǾOsQ\ v-(+),ș#<3AŊ[NǕ6}#(4 rcZD`x$cL~ rKe1hc%pJ媁t̔ <ye85nФ>ѩgAf)@7`4y(DHq:lDͻG:%2 fɅxhc+~PE#X9C 2}ZM6 S#EC$a =lv]WyJ|IH60&lУW~xx*0NҁnccyôaV!{45Fɦelq,%븪[P' 9*J i T_y` BBA hH/uP RL@(#%Kqs耐Z |MWF>R5 L{ Hĕ#%6K,+P,)"-yf=ppA#e 8pn#8TbI/ }Kֵ0$ ,eA.88ޯf5p .x8 rZ2!3e#]t!(pw%Z3r%KcLX DXKб٥ .omo/A5#Jۜ]3 $Թ I}BOz 80R]s!iKGΨBw[Q.bO[I@ڏP>s;(mk=7 8d.+< ,kWF) h@_>*Gܜ͂^F| kZOI:wr3OO;ЏO[Ͼ{OOO?}+StvP"0fU"E'+7[*DuW$>bwkChv|r Hs cb%xGŀ UwG"[7')v``J%Q'rHAsDŽ"-ag9hs*(6Z7vyG>r88>TA#,C5uw$vhr: D8>w-vw7a*LǧS8`kM@!ɠ#zpF PpQ: 6km%ISE)`6#p # z7qhw v,j7G0(rs? pPO0F>"u0?WV6b7iXP-;QAiGS: }khup=EB/'`-sTX,# ZA 6#8p"`-6#"-UQX Uk8opà qZuwyM@d1@h- M]A Y & w,v#CIe'g*C5(B?!!Ǡظ >QW%Q@Ai̠AE3_V'!.M0 ڰq9b AT@iːT$)Ұ"\I Ǡ_(\[D̐R( ky[qɑcMggbk`#=HxFUC=A Zx"M )6] I *X@F0Zbە(@!d5if!Yq92НbzYqQ&|xy ס$F4T8EC&-1x P"k@%z!#!u60h'++N08E_…Sgs;,2RTAE_UԢl2'R"UTXB6:%ٱ'QB%x_`X>ѓ8Ber @R,)R:0R"4ǦQ7ms3(KZ'RgEr$R b%XB8C) rJ9' AjG&C4!$"3% /1;+5 9D"@ @Kj k&A4Q6rraIdH/۸1HTCpwQuHS0T9*1-e'éwzF%hV9LDնfQQ;(S$0DZ%@#Rfi(8Ϣ<'⯘ !W1BVPdS=saED\APw z NQB%y b=Z"P qZF̴(|@P Y6*GbwXB PP L-DVS%OU6אg# z¨P1F#W| MՕ бE UTaJaYU"0e{4ݱ{9pwdyt3m bS]e$paqVN/aqFq軅Wtm 1`4gTV-&Yo*HZqph*!l,(qTkd2xRvmmxlA(tYG-`ɵGWxzڴM~П*qhZۥtڼpN ʽ=]}؝ڽ=]}={n9B(qKn/w'a%,{TXsXkVC6_ ̚%jr=8s#76ם"+W6ְ. &u `x ^ %pqp+'R.XJƤs\ A^:F.w߰'v T>]-B 7( /:Nk&` Pdy}:!ْ#'Bg--pMô7G-`r x$s+ y~8 a%#x"9/W: IHJ c! ق@gi yFAvܷ іr D>Q "1qv"C ǃQ d%'h <f?1 !0Wj婋,۟dIB(@h bs~}H -ذ5%#!Zz#R9D (x7f&b*Q p7^u~Qyh@WD+}d6.NUY;LDS!Ol ٖ+܄N5( ;z#&<2CѶ`v IJ &{PRӕtfX*ld[V5q$EDף+X =<1 n^nFm.٣+3jĦ~o SWfu=fVrPGmAJsPP1<sR PBJj^GX2NJ܃:}A HaEwR2 =p{>6@"gFfԧ*+!9@눪 0-6zc='L\41ƄGQ&BSDCENԫd(YpN 3@C̢2lH@)' <K/1AD1܉Myh2$ Iu#kÃ>Ebh.)=ZS{{.m!&AG' uԦ1;azW5NC@BWQ=MY{v $ l!M zQ‰P`L o='=HG2ט:WY\/M1 (чaJAqK2Gw= _t'ѣ4#uh•dJLlcmBi\H|pBx{GڵL.Y PCBFSJ Vm>FU=LHI#eɏnٖh34QLNcлS;֚25Yo)=Z÷B}!Yݷg䪀uƩ䉝yQǤ_.SR . d-2S!L0 QO)[%_PWv*!kq4 GvhX<#!nWZ Ӗ"[ID#TbbɯX!D kJ"`RsBL1*K X$~:,%I89uoUWư=*ſ%z1" 9jk]> . sӒLIG>1%}v a2g]|I̪Z̤Hd0 bX8~AJ}H(qȇ$P:MP\ #3D%0= ! BVPV.?IJ0~PH?!0j1$YF<5q'd (s/G3̠ZRiV"--E~͈pG2a"GFIq4:UL@=tādB6|&J$W gN zҡI}RO~|i5KFcouN TԱTa>х4 =PT+PlKN} -zyG1/ G0Ёyq*q Gڠ+U0pGxp7x%>qWx5qw\n+Dc j9-, rRL+98-=`[%'$tƜ1crD7) I/"DQLczĒ5ᱏq|쏢K[ >Q ?"a0̀KCwQa5ml%ˇ'_=A=g-Tܽ[/%θ^)t!x Μ |[; ;{|A4b~: OL$61p %,gVb_)#/YA)8jaH/).69[.,;dP&+ԂKi؊@`8ÇY3ȌYk@$Q R3I? \H'XA?8+.%@t6-0爄|%TDЂu HR:x}k%:$ D 1,ZuH@\Ḅ>Az H8(pxxp?X#Y8 |HE0Ӎk+0UoM+%Ʌ Sdc "ɥ  c@&*Aۋ3Yp X"{H,kCF ױKhE3Zd R3xiDŽ+v`9ɬ|3eHć5 d/у5!$Mq̏ Ȍ@|?vXD , ̏PkѨ r4ЋXr ١Nɲ(h $jF D-:Pj_ˇA@ ЂZ,<dj98x4Ң\ٕFQyi.yqKuI F zs kiԙ!(DR`1k)m)z8*!# _Iҏ}sw7 ,(CAqS"m0LB'pia4@< Y $U@q"ފ@*"5(q E]ІKyU؇?Jr5a:GÂ+>=Hx"ɟ`\ .Ep(8ƈrQJfPak )W2E,8#]9&ECM؇\ [bUUI ̸4:Pbx(4jI(R헁н1!Cc;(Ï(樑l @(FؕM]YW)ސׄ( v,5YE}`(ܭ"r5 !=)՘C${ȻuYIY"TB[ׁܱ_Y ۝U tPIӰ[ Uؼ\ ܈X۳Wլٖڍ}JQYYһiت zHh]%*B)12ܡ}l̤GܥV X4k(ODHr@+C0Z@]cAV Y(@9}x t@Ѹyq r` xR,0y FxnH4xÜ(x])J ~`3ЧdMzXXB#Ë~u` 9zq"^={ C+J'*ؔUҀ] `Ps+:/<*`0,h@9) #)* @4^cX!: :T )K=TX(I(Yu\(L%l\}Z+R.昍L_ @' ,ҨU 1jZA<A PP0&@d2 r|٘$2Tv1:_α0h!$/xI[XX6h>23MA; M;y17]tXD纄`0+ÚU Ědn=ׂ>.@S5Ȍ 6+) }6p0Nm~œ!Fb#B%JSxK>WiZيS.P}&cpAV88!@j&6FVfv뷆븖빦뺶&lkdS&unR йFDI:`H%ɦV=F=F٥4BTHLmp1n\ZZ+庆M(-0;=; r-Qn e^>\c~ @ve1%3z( :>!.,|HT=ȏp.za%\:ÄCABfQQ$iR' YHIX09-NHt{h+)+8sJ hx%஀rV߀eà4:.8t`zx7A/C<sOP -.i-԰]8yU!PUp" 7H(W $9)%5ܺBd? ŐMkm_P2`oN1(; ؇d@v SaːuA0bJ~Ȋ|J 5*'drƠu&h3xȽ&xqʔc` P pOtۻiG8pd[D{ ldEWLHhHK~jȇqwJ={8o`y<FlP8@N) 8X =ыwx]Ⴊ7 }HjHEp0Byʇ䆠EŜ}lӷ E%j8)!ĈMOw5VM Į#VbteF哨LUqqM坉TfG9 )}hOLd%V>?QRntRvRt"Edߚۇp+fItl9ZDé}!&CDW7B MBTTH JcYA{F&A&7Yvf1JDTS:*i'SXcMyae-ŝ>ŔM)Q0%h1M`f TSihb(L#M4!hi$WFaEA .(.= y:exp u 0 #cCcaa :{VAD+ZMb׳ ԳUWUXC 6' !-} Q".C.V5KMIT[j%%P>}8! <2?Ax*d-Q+g!%>z5M\R6?3!eZȎ\F'عV#|hm"sGB(}OSg_N>%Hxr%r•`Jƙ% jIB{S8A%%h@Kb"W (=a5ґKCxH f!4h1_@TR>quyd+@8`H" xI`.y d%s2` *`HA8"\2ƅ*`G;y Se (D8I/MF8Q'5JW’vs# qzr2AuNaSK 7gt Zua(:)D4A.;E9T`{(Ih!h HbI8Vͣ|F "xcDAjns鈆H3>*J0Cp"҆vXSnK_-dDE]Bf5ꈃ)ij=ZPO0mQ&|\ fXZ4wAϊ`7 @Rأ\ 2 %TXIxI   Kn3@`Ъ@$lBUX 1W!HFGPٌ_f6H # @#f'9Tje8cT'}E3ѵ#-ISҖ4}[ b`t~ni*~ц<`2ZXDZYӺֶ5sICJ#zI6fݤyB)*}X"־6L mB2 f(P󤕁sӻ7aCz7.?838#.S83s8C.򑓼&?9S򕳼.9c.Ӽ%'ul¶9ЃmyF0i Hj&]qF/^gHhEL֬b n'/(M# =ҔqfV&&"m+f`pvPÇ!v;CwP iy C 2AjA4üB9>Zmeh Kfπ~9Ȋ ()LɰfZz~Fy 劜݄ݬ[Lz1ZBLU߮Q2T ^1j HdDAEIf40T>IJ_DXJ !P=Q\H>D1'CH(i>́IF <4P!AB 7  N B><tԡT@x@لt(LK}i9t)YHvPda0ph DU:W|J"r%1xJ`vA"~)U(;fP0h@4f$>#8kJ%$lLNp"3EqaIʰlH(bH(MG2|! >AT2WśTELHN4 9B=R!գ FDY@aɫO < 4C0dL6HXW `A6 8AOC](ޘ0e<5ʶ:QV`& `A FQ+_h>4UX,,R` vm{ Q:&$$N+Ģ=kfLMlHN6TT~B>lUmO!H J=(++5%=ɧ^dU0|DT=C?Zb=Of `XFQBDԣ> mIdЅthh<ԇD1 AD!J[,Chū5k<FtDB#AT%tKHT2G%k@.N\-mȌ~`f2e? qD&AH1|X̐`!Y2 'e3iD:C;J"x$R< /G:YS|8y* Ho;\܆ Byepi42L`Coij24k=$yCAC2L|Lf52hIL$;\xٲIQh;FTZ-(DK4LZ6XG6p%#`)"ƙDd`]"D2~?MIwa%V 9}n)LzqaFc ZBJ 7݃e)EV>xqO:.v;CDLhᐂ}@sr͜&q(tAV`4A(&lGCkOLV4pw}6i}qaa<<5\10tI1k!vpAHDsVFQ8uC#$rD̖5m hW14r1MxνZ"88Ǹ8׸8縎8899'/97?9;F9{P*Z|UPDHhۅ']O ZZȵDNAS[WćZد1Ty6\EqRO=1d d+V )P[eO!|Dv V~0:аy<1/D &z9lǞEn(0AkNƈ:;tMM4:113YgI3´LqQ?m۪K]ľȨRZ+&C)hկDUL.{:= RD䭣q;') pNc4R ]\0(7) Q jG_><֝3d/NH E? e("0#rC@v0+CÁԭTb 9p!WmOmeP }Q-J84@B:Xm:#{-HoGkP"yRӆmq@E#XA*J7007g mTѧ]ʌ‡1\~#uZƿVkCr)aB%0YCF$fH0I+$:dO7NMdO39xGw>)@;3iݸ5KJ_C}Ѐ$V ")} "7H*}XZw`r(Hg6 ŪI}>Hz1js x\I%x.Ca3i'ͨdiɞMD}SiUvnɒm^GjR]>tgeKf;}ĦXKWCb[:DWfM73vڹ8Q #&/MzK%tS$NBsf q!qNSĜgȉMsr#ԤGXDA{ݜׇDpt!DL=7( ;2ag#,w BJȡv#V2}I!|qxɆQlH(AJ)A!0G<})'f.\o4fC* w)vAaF* AC0+Q@CN,!ZCk+Q(&?@C |P>2!7<nѧ!!cTQeJ'(MBOHŴ jr2:2<+-øN:cF|(y H2)CQAJiCP֧9 $<%oC<,ކ?'8t` @Z?pҰA%KfA>0GЄK(d':/helҐt"ĠBԊ=hdRCБQT:AT֣?` \0VDq,@יцD}OiVΥ# GX%?mW|qn,_fHs${S㤖->GX :)JUP3F4gƐ T}2{s|CF *Ax}mˣ;:! %DG>Q/SmP=Ҡ& #(6 IFD`:do:f(DZGpEM+3璸)G(" T+ 1" ErV<_=x2$[jHHk83T u!:>o65 aQCrSf35KW'Uj 3kTd22=P j9zt8"mTVdۆ,r9g}*:Ub8R_rx,!} JݤQ/f';uOԛ 38E1 "PCd:` j|c"΢BS#[ . J0[q YjA̅D_Y$)(N3@,_[R!"}$#5{VR7ѲCqu&ۘ0RWA:q/[eD z H2uӒ&QtAyFSE˞˰iI({`b+{$wBLxeH臈SlK;:E>a(67Lۛ`> qmC61ƾj(pD=ƈm#!Bz՚- [PE;Ԏ.5'2zh`eFA$`+zz_r@ha˄Ζ7q 5v@`X +!zf< &dаX-{e-dҡ܃WJ`:-Olc2# F  (< ) ] #` $&' EF]@a1~%/^D> )R06*jE<@ r .-"\",913 !5VC**&)ؑ, *° ZP5PmX .RO$C]R;B4Hc2CK a# h<B&G_LK &0cGgE+,!ǰ*%ar("A LDBnİ+P3@?kDv!HHx&H#vj((6NJ֡@ܡ5MB!3E!C8L8H#P.@)4[ *`L`1Tb G0D3C;Q>1M2bbFH'R@WʖF({l)YTeZ|iBM,.? 4E"%d@P΀lHLR`F< Fua b(Halb24WF s8Hx' 8XP2C N|@I]씳 Cب%2hQ$ AKKU2-@DMAHPdEލIG5 Xm'hB f2 k !ĎPrJ ȐKh[Fb&Eb !T&mB%`l\C wz>n"$f[)DM `w.$ĐD(h 'E){@[&z5' @Rg=}Qyae jig%Z!5u*Y`)A!Z_k"Nv֝ >z\fZ6̪jն Z&_/CHdK6ʵJn_U"#(C?T ^MqVNJV8@tBkBn .)+Ч'Dz 6jc9wU?ig6 re2i'7k,Di^HllؒYtj BN$ҀlPFAkg > ~~R/rjwmgrIw"D`X71$TuA'n:&Knvx7' ꤐ/OJXgf +4o5lji Z|Ac41Y淬 5U1I)rwF@ µ跦aj"AظDD&FD𸍣w+b2v^G*pf>PL!"7؊ e.4 Ā5&1&F`bbcʌA T"d9#ZA!7EaaN$8ݘ,f>L -&cb |[dTSn>8c1 “h.A,2H>k_<䮸R1aK-&Xܘou-Y 4Ԛ){ FݱRKΘF&*㮇nX@V QV.h/-4;oWj*nYB A­ F`vdPRG*a {.e/7;{;{ɻ;{ٻ;{黾;{;p۽O:xW7uNCbP5d2vW펋Nv穞~ T\Z/#nxbnc{ 5HA6 K 5DPT=KsOCJ.0E^<JSȵfT~7GIV%.cQ1{D(@{D64r/̀T(ZH*hއ4 8+a% FC2Bni!.%G';Mqƫݢ=/lZZ >!BL!$?Y T=3deyȱBb(e*= A g *+`O<z2Ws RTSnyA#/~CWA>"BDJH cX~u!ZE+W!B<a˺-#b:$Á{;ZgCG08NR Z}LP;(@ 48d"*"J  YC"CK<6ozZ| 3̙4C]> )_DkMJ5hx*Z42\+3j$Aȉ6xR&K]kr)RTWV%~4!O /PD4e˛ؗPj)̦|<%/z ˦Aeg<4EydI[DDM4X~=M6|iUZ+TYĔJLDю>iV]-֒Y 0ؒzQU$75Hc}4 TD%QqMB!N(.+#UX T8:x|nFg1[}0X^xqaAy<\"P-՗M\MK&&Ij!bj!heV~(%TVNv*QY:),>|P 4%i|$h娠 3_Ӆ6`e M4aI #(=tq䃨dq-D~z:E& Ut`f2| Mx$LN"Dp ۖ@ŐEiP*)g-Llj0A)%Zթ1%"OnMqc\iXʵL`ʠP 5Xjɢm#;|.%L7Xi'/n1Lrf5) \T4fä&LROf)>ktH$[=٢R'/]5=L Y Z#218,]K0%>~&ؐr6l IUH.2>XWaYf6OEutQ- jKRLҁnB(F"6yFtJmj.uQ=|%O`BnlH·]eiNK0DGBE'NH" Y/jۜSo&"8,.B> c 1Ft! G"Ab ~c'6Yڇ!zKj3… GJFqEG>ȩ#,} ŴWT0 w/CiFd`-{#و4?iٍ, PfDl# D/%AT]T"!T.p H:P|A __( 'Close' ), ), array( 'label' => __( 'Learn more', 'polylang' ), 'link' => admin_url( 'admin.php?page=mlang&tab=lingotek' ), ), ); if ( $link = $this->get_activate_link() ) { $content .= ' ' . __( 'Click on Activate Lingotek to start translating.', 'polylang' ); $buttons[] = array( 'label' => __( 'Activate Lingotek', 'polylang' ), 'link' => str_replace( '&', '&', $link ), // wp_nonce_url escapes the url for html display. Here we want it for js ); } $args = array( 'pointer' => 'pll_lgt', 'id' => empty( $options['previous_version'] ) ? 'nav-tab-lingotek' : 'wp-admin-bar-languages', 'position' => array( 'edge' => 'top', 'align' => 'left', ), 'width' => 400, 'title' => __( 'Congratulations!', 'polylang' ), 'content' => $content, 'buttons' => $buttons, ); new PLL_Pointer( $args ); } /** * Adds the Lingotek tab in Polylang settings * * @since 1.7.7 * * @param array $tabs list of tabs * @return array modified liste of tabs */ public function add_tab( $tabs ) { $tabs['lingotek'] = 'Lingotek'; return $tabs; } /** * Displays the content in the Lingotek tab * * @since 1.7.7 */ public function display_tab() { $activate_link = $this->get_activate_link(); $links = array( 'activate' => array( 'label' => is_plugin_active( self::LINGOTEK ) ? __( 'Activated', 'polylang' ) : __( 'Activate', 'polylang' ), 'link' => $activate_link, 'classes' => 'button button-primary' . ( $activate_link ? '' : ' disabled' ), ), 'translation' => array( 'label' => __( 'Request Translation', 'polylang' ), 'link' => 'http://www.lingotek.com/wordpress/translation_bid', 'new_tab' => true, 'classes' => 'button button-primary', ), 'services' => array( 'label' => __( 'Request Services', 'polylang' ), 'link' => 'http://www.lingotek.com/wordpress/extra_services', 'new_tab' => true, 'classes' => 'button button-primary', ), ); printf( '

%s

', esc_html__( 'Polylang is now fully integrated with Lingotek, a professional translation management system!', 'polylang' ) ); $this->box( __( 'Automatically Translate My Site', 'polylang' ), __( 'Polylang is now fully integrated with Lingotek!', 'polylang' ), array( __( 'Access free machine translation for your site for up to 100,000 characters.', 'polylang' ), __( 'Machine translation is an excellent option if you\'re on a tight budget, looking for near-instant results, and are okay with less-than-perfect quality.', 'polylang' ), ), array_intersect_key( $links, array_flip( array( 'activate' ) ) ), 'image01.gif' ); $this->box( __( 'Translation Management System', 'polylang' ), __( 'Do you need to connect to a professional translation management system?', 'polylang' ), array( __( 'Access free machine translation for your site for up to 100,000 characters.', 'polylang' ), __( 'Access an online translator workbench.', 'polylang' ), __( 'Have linguists compare side-by-side versions of original and translated text.', 'polylang' ), __( 'Save and re-use previously translated material (leverage translation memory (TM)).', 'polylang' ), ), array_intersect_key( $links, array_flip( array( 'activate' ) ) ), 'image02.png' ); $this->box( __( 'Professionally Translate My Site', 'polylang' ), __( 'Do you need to professionally translate your site?', 'polylang' ), array( __( 'Start the process of getting a professional translation bid.', 'polylang' ), __( 'Activate account so Lingotek can get an accurate count of how many words you have on your site and which languages you wish to translate into.', 'polylang' ), __( 'Once activated click on the request translation bid and a certified translation project manager will contact you to give a no obligations translation bid.', 'polylang' ), ), array_intersect_key( $links, array_flip( array( 'activate', 'translation' ) ) ), 'image03.png' ); $this->box( __( 'Need Extra Services?', 'polylang' ), __( 'Do you need help translating your site?', 'polylang' ), array( __( 'Start the process of getting extra services.', 'polylang' ), __( 'Do you need someone to run your localization project?', 'polylang' ), __( 'Do you need customized workflows?', 'polylang' ), __( 'Do you have existing Translation Memories you would like to use?', 'polylang' ), __( 'Do you need help creating glossaries and terminologies?', 'polylang' ), ), array_intersect_key( $links, array_flip( array( 'activate', 'services' ) ) ), 'image04.png' ); } /** * Styles the content of the Lingotek tab * * @since 1.7.7 */ public function print_css() { ?>

%s ', esc_attr( $link_details['classes'] ), esc_url( $link_details['link'] ), empty( $link_details['new_tab'] ) ? '' : ' target = "_blank"', esc_html( $link_details['label'] ) ); } ?>
    %s', esc_html( $item ) ); } ?>
TJ}y"G} @cO$=i X f TR/ßd?UMBE~1@E SAe z/o ߿/@h@qfOOV9h:d0ؿؿ L/^ ./g_XI&&!>6bz$Uj?σO/$1*=!9HXωU +:I6F- jK Fd @#$8!\  hGIENDB`flags/ve.png000066600000001020152100561460006755 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxba &!@# e æE^ y af/6 ? *(  ߌ@e !/P7P@1vv# JJ ? >PHUm>mެT A@e@ _/R=mګ_UV7!&3uvVo5?@SA$+$Rz X1e=!Cp?`@,@k~aEd0@H :+4f&Zt8IENDB`flags/et.png000066600000001120152100561460006754 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdTda/_0_`ap0 çwթm ydޔ; X~1f| տE_/@VDh.@0(H?3139_~x@Hs321v̄> 2x:` ٿ@>1 ZϿNK|#@4!(#ӏB%scHNp 51jQ T"?f(W]su m`Xj9_j/9$ؘ ~342`T @_QPhR@`! =ڮIENDB`flags/af.png000066600000001134152100561460006737 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbXY  V2LL``qݻwMMM@ 7㟿̿~(_?\<{1@PW~{%>CKh @߿@@ /1?P~'a(w#@шU;MlAƭG\Mˏo4{qr13c~$b9@?˿2KsojH/bat?~@]?Dv:\37P@@zn: _p @ @uBO3'_?2 >qE^~ibd@a c8ƒ:8.EiS^wIENDB`flags/hu.png000066600000000660152100561460006770 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<BIDATxb<ˀ0B@bp 'VBBء,irN<6'O 2$P)d*+  XfGV  V V @10>}@'AUX#@@123ddw?~ D  UR:[p X~H_~AUH?  t@0b$$0Pf P/H@12X3 g@"m~gIENDB`flags/es.png000066600000000725152100561460006765 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<gIDATxbπPX@_upɒ2ҒKF6hU wg@ տCH($ f@, 3}^_/03f`@1 T?'00t|}/jb@v_1bØUzW[Fz@L`EO?Zf]#l 7P@11Ęw/q?̆@7  200w,0Ɵ 2x XfARC!@T @_Q#OC@ ZGIENDB`flags/hr.png000066600000001014152100561460006757 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbπPX@$?߿~eJk`S(ZG;(\~ee6pտZqܔ~ R   ߿}/Gǟg03ӷo߾~ sj)/'N|@O>  65{jU@Ǐ!p{?}~|c:}$5" YL5*e 0q az@$ bȿ`$X@12dU@ Df08v%3%&IENDB`flags/fm.png000066600000001050152100561460006750 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATx4 g4Z >㤭YL0"5bT_?s' *!@ͽn202 TMbar H1cd`Xy1Ph HHP@_CW~xPP?ДSނg m! tɏ/nV7/π2$bL^ @P6в@`IEt|rIENDB`flags/ao.png000066600000000654152100561460006756 0ustar00PNG  IHDR ntEXtSoftwareAdobe ImageReadyqe<NIDATx\QJA=/wp\qH! |~e`..;n82y3N~NH)DB!HI K!ELp((p0&/`ol(D\"M5d|о' ӱ[-4a-bݺğu`f#bo 5Će3X#:y\YUAkWe[+|u({^Q&aQ=GgčSPej7``y"o)7cvfR\^+)m@U;;qX'O<~<-IIw?}[n޼ T @WOTտ%K%&Ȧg7P],}|߿?tܭ;P,9@07Bϔ8b۪dljuyd9#/5؇9FxAZK$3 (N;5,bG/ʟ# ƫ+)C>x0yӟ?$@b /gaf9pd%@1ylJm 3"+)ʈП8~D6!?~?P?bbdgR ~$a0[b=+ `iIENDB`flags/li.png000066600000001031152100561470006752 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd]00 1J_0brB9Pso?H3Vl 6`Zo߿ T7X86H ;r}cgAAJ dm?=7uw_SZ/oo_~e~ X4?P'#?@N7 b\fˁy1|_$f&(򍁁Z?$7  ? AJ!M5l P߿LA@,$~oƿ L`0Ͽ ` x`$* @}a0IENDB`flags/lr.png000066600000000722152100561470006771 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<dIDATxbd`f@(?`BP6z߿ڼrk D߿?~|bcc@߿Y$$/L@ {ܴQڸ?%Zzf)'w^g A 4Ͽ߿X%eNZ@߾f?n b$,*3y w]r1l0h/Ʌ뗬`ōkrIT\'`c r4@_v9c7ODaH_ @,$FԨEf@ng ’IENDB`flags/as.png000066600000001207152100561470006756 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbTT`@Ʋr4l 1+! %12: =7l6P .ZemKݽH?8D X7.Ek9ٝs˞_>"$|lu{؟r2rqOڕ L |~}"# @1!;&  ; !6[1D# 0/JN&rH 鿿~ z:|5s6y,l\1YY21= ?X~`'0A?z11`?|MZyˋ` d.$1310H10 !IENDB`flags/bm.png000066600000001143152100561470006750 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb<^IzzK,L /eeDI}X:?0F@13kX:ɧƲeοu ׵8c,0Z]_/߿deV4U-7}(Ω([~]ʕ χ))@W3_< 31ۓ_?kM'I@ 1try!H kJe[\MMJyů}y_9t/? aT/ O/cֲsqp X@! 8P Q %Y rꟿ@4UR<߿_ ĸ,"X-$@5K]IENDB`flags/ky.png000066600000001203152100561470006772 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbZXOxޕr[L D M> ?01'3sW   jE} p116(Ŝ5 1 ("$!! ,*WY"12: rz1$ "V'ԙںe'nu ßߌ~ɯ_<c@`UѲ h@00]ןʯgmXNy6P.@_o@5+ ([ @P矿 ح+~0@P? ~8 ~~b %bd`Ѕ(2  %WIENDB`flags/bj.png000066600000000746152100561470006755 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<xIDATxbd 10Æ Ck5H@ 3&J~ XX|}߿2cG"Fe Ȯ@7#єBH@ 2/P?HP4 yma^Ӏ"yf3up& z/Xc/$o`(HȨz~@ @9@A4@TC4j/HrK񗅉ߟ<@#߿t@1220|G/021T4$k<@+IENDB`flags/lu.png000066600000000741152100561470006775 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<sIDATxbo??_ÿ  X>al 2/ӟ!0KS'@0ׯe? U"Aߌ@/俒*HP'O^ ߾}+((r ` 022~ X ޅX##0T@@ ; 9s cC pA;eO>_p0@A.:47ß@i=~c00b/`_`LA $@yk ߿IENDB`flags/at.png000066600000000623152100561470006760 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<%IDATxbπPX@_upɒ2ҒKF6hU wg@ տCH($ f@, 5DŁVY?~&.ovb|򥨨(ؖ `J!$77۷o$*8; BV?bXXk$_oeߴ˿4Xa%!?at@CIIPEr0@HT @_Q#OC@|WZ^IENDB`flags/ug.png000066600000001023152100561470006762 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb` #wt?0֟ V U?A 0fd}i;@c`J1 X_ ƿ_ 3f;@,L eo |;Q 12߿d ?? t@25{VQQQwg߿BS@,@ϟ_=ocbbbV1GM_pЀl ߟ1#C)P(j$a0e#WIENDB`flags/hn.png000066600000001031152100561470006753 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd_ݯ.[ ? T"ПW. _~ϿAa/?'+ X'x:J| A@V@1<Wϟ~Ǐ7_/_Ǐķ!YXŪ// N6F?>(_} d96{Ue;UM.w~S_([gIYit ;?1BP" 1 ̷R=<.Ϻ.IÝw4LUg#,\4_ r[fέ F>?\?L[8)~QoD פO"͇x?K1-h@L tc <_zl @@ɯ9{2ߘ  @e2_5-k߿ /ba&n% 70(FͻßpcȐh!(. `DOaIENDB`flags/nc.png000066600000001117152100561470006753 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd>1@B!C O.3~.ϿFg  e'|0l@Ҧ`YEa3?-}߶Q ܻwR &1|((12AP60 7,<ԃ lME"#VJQB]@,`8Ot̯߿vNL{h?`@$# l{?{'ٱPϟRR~7[ h?~eѿgO1 ЂB\p!xh֛Z|Lg_*! zH ̀AǏ$IENDB`flags/gp.png000066600000000750152100561470006763 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<zIDATxb} c 1PQV8GUګBcƪp"R٤)1O1~KK ##??&>47t 7 QBÔ C_aK!H(@L _-X gcb 2A  :f @,L_= tr17㟿 7 *p4ҌB#G =4(d| %J:`7YOEIENDB`flags/ps.png000066600000000730152100561470006775 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<jIDATxb@ ow20\L@߿a$شi@50zt߿7Po8@dHuWo FFƇ?oA)L`j* ?~ht@,?_ I`K $~d!ϯ^XU t?ݪ'xז~_e~-G=۟5Y%H? `|P0_? P 1$@T1p4qIENDB`flags/gw.png000066600000001004152100561470006763 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbπd``b?"?$\] $L2m'O30_`Qh@_F߿KAV !~5Щ- I) @l߿Ϛq@ϿdS @2'/ׯ?_aJ|c ~0T @ @@2Tj? S D _II?s /а?q @_ G <700@A aq%#aIENDB`flags/pt.png000066600000001052152100561470006774 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdd`Xn2"baPZ Reˠ?a?aM O '׿ٖ_/jFYY 6 MöXo߿ 访[e7uZ_h:@11b￿Y~' L~f)Bhh@5d9_"ro$F_GX''o|Wj`(@ ov_X5D`X X1G_@CA7 P/j /@ ~0L ?cc0Fv|IENDB`flags/tf.png000066600000001017152100561470006763 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd,g:b13 !/@,@~@ 322t2O߿?@?L@ xj |_߿JK0M0ᘷ4les {S+X~߿@bn{}!G01oҒ.pq,vGEI̬9:5\ uAs$u ٩5zSyB^$ 'tb.7gvj Z_+KM꽌4׿~ .8.2!kXvv1 uof%>X6}"JBJ)9mPjVNn{#B b9AI)+>E08{}p;FV.x}QGw_4HchN4T~:EFQIENDB`flags/gy.png000066600000001205152100561470006770 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbeӺr 1$ F1 D! $*޹1,ŋAAUr.PӞ 1<<$ I[AC  /PCYãG@QEU?0λɗ7WXCQ~/~߅ſ$D @=/{~/jK~eލ_^1a1 O{>8(aٶ#"ϟo[%'ēߚNꯟ_~3X + /oWy>?@/0XQI  /Ԙ&y 6!j IENDB`flags/ck.png000066600000001112152100561470006743 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbܝ^K/:aaWG+坟Hm 2 ?~!#b47o\]@k~#&%"³޷33r߿ -/14 eH^i?MUB K]Q Tʩɿ~jt@1=0pƹ Sg Vx_z'N~OT<n߱g^_~nݏ:ue*Z?3= ۀ^IJ;e@,⏞ ;[̤A}_mmm 謿A2H t̞%y@R^B]2 H__ /e:P@5Y 1? @1[AF@ `?`_l vHn IENDB`flags/scotland.png000066600000001211152100561470010155 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb|C[\b`b?_`ýw w?H;@1|&ߦG/H xۤ0E.fM;@̇.[21 <o{Ǜ;lm$=eX 7=\ < D8|!#b l".)ճS*=g˹; XvgwbR̛@{=-[7boV\' 7ٻ/_l~c @60ϯd k8]kd_9~N0*s3aaG_(_V`X2ñ gT~OfF#=TxδF @1ο,F(ew<[7?ϣk1g @Ƿk0r0H0|fR P+@@)KӣiIENDB`flags/th.png000066600000000704152100561470006767 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<VIDATxbπPX@ a@oHRWZ"{ <"bd3c>} FG׍9:hAϿBe[e3"}$Ͽ߿ѯ__8)/ ~q'ȑ@z~@D(,߿ h/lfI 7/;8vЌ`6IISϟ8۷o;;SI č2FJmٻ F$8bͪIENDB`flags/mt.png000066600000000644152100561470006777 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<6IDATxb#ÿ LL Hߛ7< @,@rMmm-FXX1?/6˿?ܿٳ?)g QVh@0hhh~)7P@{  oqUgj?J|$N W7P$ /߿@5Ăq 22 @A_ @ ޼yւWlAc0M[yvIENDB`flags/zw.png000066600000001076152100561470007017 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbf&`fBb1_9gno `ߟ?@_~betW307Fe?}@, ;q:&_?@Ư~ "Y_@,&U1+0띧wU7H_ d{@1=y/ϟP D+**=z XXL^:R}{Ud`~~s@,EQ_X~12 @<~ h@l*bua7p?; Y@tր?101߿s(P6v3ӿo?^ˏ3D?6o;Porr_ P&3UF?mI~&;G6032IPm.1YTRM瓋 ?6}k۷+ &ٷSw,v#37oͬ (.'###;$ЈCM_h'\: ҶNsKIENDB`flags/pf.png000066600000000762152100561470006765 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb"$6@a = )Bl9֬J )rE|@ @@A  f@_3\tc5#;!?FFƏ>?W?.:ϝ?}sb}󟷟2J^fW7 j /?z13AĂP+4Y9e@,%$w/W0Ƚa_v/(X$)7㟿@9߿ad"/q_Cb1/IENDB`flags/tt.png000066600000001151152100561470007000 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxA0ڧr%tF~QWkf1xy8 \y)))DF2N?i@17{hooqҥ[n]s.,ׯzD<6"6k,j;;/0  ռ  _%J8Y8wFw?޽h9P?  $ PP)n)]Am}a5bb0%%A~o|߿@#$@ t_ P `)!E?@A>wAIENDB`flags/gb.png000066600000001127152100561470006744 0ustar00PNG  IHDR ntEXtSoftwareAdobe ImageReadyqe<IDATxb4sC^a``ߊ+mS[_wo~Ȫr:]v'E>л?FUE!5Cn_?+ yF[L5]^gw^ +TWy'##Ż Ogwxci7;N07z*mn0|;?f`׊+7>ݷGĀ\{re7; 3%?qp׿߿Eeѐy lmY@?'`Jk<7BtΫ>0{+%_my3gCsv͋Llnqa3;/Y0ϟ@0o\d>S\3}l7s!30jJ3jJ#.氦9mY~;-m0m?2z!9[ A K~IENDB`flags/pa.png000066600000001007152100561470006751 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb#L)aa @@,@y>>> 2^ }כ6 g9qfLR|{ϟ~U3 $/×@Q&C4"b^?8 X)Xo߿6VKWϿ2I?~b:$oF11>o BY*&&?ߟ 0u '׌&LxS/0?P_w^  XN't=0d3TfMMΞPtC \]ï? _@Pp?y] z-IENDB`flags/is.png000066600000001024152100561470006763 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdПϥcfVYaï? LD`Pm l#1QBaKwi^fz ,CtԮ ? ϣG@_T_ :94_@H`@=@@% [g&/=P @ ?Hnԯp! S AM Ȇ߿n?4d#IvX*_g@V00H3ċ` P@ L0HJl$"pP1@1~EH>>  $" ={@,A|aX ߿joaϟ?U D ?x߾KWl: nC ˖aj ƿ!!?|Лџ??VV z1Gͨ{bH=#GQT-fhbj`r~d8df/^4cP 2 ,@40 ) 2ft1Q66G>|` BBP1@1~(b@I@[JăIENDB`flags/jm.png000066600000001175152100561470006765 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb '_1?0~10``c 1U;{ MA%11=D26'. k 103<4 =[p ߿?~Y٫b*do _W[_@ۄ~* & o0zwR_ 0 l_b*~K׭?~Tj  @N}zbi;UWJ| 1FB1bKMG3I:.Q$^K0FGO_w_w@_2<`tc - >sw!IENDB`flags/cy.png000066600000000654152100561470006773 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<>IDATxb#L) @,@?DN!/^ Ld@1  PUcvOw?h?P m_N7n|"gbb_?p1@ 03 ֻo^a; Xƃۗ3ݼ0xW{e95Cݻ[>>>dc,HwAb0]/uTIENDB`flags/ph.png000066600000001032152100561470006756 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb\vzp7/  aP ʊʩ!\c3dҀH/(U#@߿۶ɚ5}/eeo@L |cbZR%+?4$bH=f`tm-z??!@ X>30<\ W}n?t՟_ ?NP2gcV?[) X.ka`)?kd P-@5|e`_afY/0 K/?yA@`# $ A@_ ` mL7!U_)IENDB`flags/tz.png000066600000001202152100561470007003 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd 10@􍁁!ލ!3T @0|av)߿ȟ",,ߛ6m O>*;V)~gzP\b:h2PAD~*{_7ӯN2 @Oog/ά/ QQ--zIr]"@=t{_[_I1#E~26*|ӊbЋ^j<~@s+.aVضd/F%  CoY_Ӧٺ_bE +Yp$+_@?ߧz ¿kI|f9R_"B@" XURSppHJJBι\\/d: aqa r c!@q`u)=IENDB`flags/it.png000066600000000644152100561470006773 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<6IDATxbd10ax*RU baPZ RIJJbb e&ba`?￿@Po QVh@ TFW @` 5 B1bbzh￿%(@ f F ߿T @Wa` @JCv > @c?ܒ o BFFF8PR)#(AlY8@ 8.VwQrIENDB`flags/sv.png000066600000000765152100561470007013 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdп c?(B PZ ?˜Qw XJcx?` ? u@ORh/@1?UYׯ3ur@4٘|@edd:?HXwcR>}@,B ׿ _L \5|CuOmk͉bةĸGU9@?@@yg~Kы_08~C/$I3O IQ?7H05(b 2eG$cCbtXlMIENDB`flags/ua.png000066600000000676152100561470006771 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<PIDATxbdh1 ?(# rr1Pz(* jd!7nG3K,TCœ~KG00T??߿ !~!@lTd6H+ks X. l$P*  rJSߟ wHʖbc:@20?/WdbRz@C, HTE( @ P6  @uJDA:#B?bz@I8`@pAHnGIENDB`flags/bb.png000066600000001111152100561470006730 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd`nds1u> Pz'?L2_ f?L,c/o0 X&߿bïe%6h?@3n~ϯ?~@, wUD/ _6oC_?/ ׯ`Kj ?_mp; 6 @@ lï̿x~1} /x@J;߿@~ b4 ` tOVa`GIAa X D o7/0cad` fg{5̽IENDB`flags/be.png000066600000000701152100561470006737 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<SIDATxbd@31c'?q @,@j ? x@Ml'O~307~U3m JФ@տ ~h` @@!4Hß?B?j?6_j0N ~Y Í8 [(P_KbIII722}LeàN F} w0q0{B$p ZeIENDB`flags/lt.png000066600000000774152100561470007002 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb}D $l bb j&f2?P@ÿߟ. &Fg  BUh.@\ _@3B7`0beu@a(s˗? /_ 6? X~0i)Ii@h XϟB`~h@T @,k[t hֿ?e`/PN?.2?_J?0.?Y8z00/fKJ  $?`` #rāg%"wCݙIENDB`flags/eg.png000066600000000721152100561470006746 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<cIDATxb| pI anl%#eaw.;R! 09O2)P߿@Q 7H/ ׿_L@ԔISAT j}@LB]~~g-j0?Ĩ_XXkR_MZ]$mmmr}ZZڽ{~/00@$4EEEŋ V@)(0[b_* @NcHIENDB`flags/au.png000066600000001241152100561470006756 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<3IDATxb<^|CrǻXV*Dsg101KMy<"[M-ܣ1  =F;! 鐎>_aQY.3߲we~pkt ano!$AXx?ϯ~fV~mv_@?_[= @1 &:]'<^O䇗w Ji000>Fj?|׷b~o `1'@(@]ۯ>?z,o~ Ÿ@  @^6rgo~ϟ~1KϮ \`x տ1Mec`z<&I>mP!j&@IENDB`flags/ar.png000066600000000772152100561470006763 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb<a Ͽ?E@󏍉 X>aHU?@ÿg/\= X~a @@K@\([?b})& h6  `> $YD:?a6bZ }/2q{p f .T B?2@ f`cN93@\O 0r+T l, @,YJ^~<@C4A'yD Xcd`e_`Ȃt2@ t78N@~ ~} ?@H-(l pmA`IENDB`flags/om.png000066600000000736152100561470006774 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<pIDATxbπ d`   PÇoqYZ>oh(?BϞ= ?{ףGXA##? (,&a66%R @'#*ee?f~/ ׿_`]^?7ï_ @CH$V 4o ~3Jz @_J~_ l[mg P(r7P'PBr뿿e@JJW /P {*T@1e L&20iyx9IENDB`flags/bw.png000066600000000673152100561470006771 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<MIDATxbT=߯@H̀0,V@@$U0JN.%)s[҉z yX_0gxV$U@ b#///I@+ $Vx}b(++{ Q@R^^럿@>\DE9H߿ ſ~Rl6bb|-???~Cd~u@iQgx a!A HpcdXG X@I  0eF_ 0~G-@12l)R0@Z gu}a^eNIENDB`flags/ai.png000066600000001203152100561470006740 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATx1]hP9J+ 71, G0XaD\emlz_#n^)ryOXϿg2120| ^6R=m/]"#cjghS gުk ?1+  ?  OMwԕ' X~;ﯿJX+k?Pwbd[jÏD_#yvF?|! ~/8q}gq@~ o`1%B_u￟h_Y~  @ym8 A2@9? @#P'RD~#ܿ@7$@YH@{IENDB`flags/an.png000066600000000750152100561470006753 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<zIDATxb#A DϟH$@,@ >>>  ϟR3b*2>7!FF? j ~!k;@1yvvNut.}}  h@nϿӵ5~__o_D?tҟ_ |T$mǓ@ze`@o߾燺>zs@<:jP !W {2}RjL{D`bjX~ @AefxG/}cq@m4h}ݯ_ZU|~>}ûw޼yo/N<@, wofk ˟ -W~z+n `/_/Τ?WCrm~~Ѭׯ >~+W^|ݲe@d?[/i'7 GJJ-t΀!0eb^0#i/_2|t1_@K [.˫}feqQ?b`x?I U?(?A"?>30|`.D [0+IENDB`flags/qa.png000066600000000702152100561470006753 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<TIDATxb?(/IB~10 ظCW߿&]|-@@^T" ~I!ibBV߿FZ `_  Xh[\U2/ PA^c & -? UL P_Rr/67H@1?l/ jo`5 Iq:? H%@1~| ep '޽@yY @k}[T^YIENDB`flags/vc.png000066600000001101152100561470006754 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd`8߻  D?  Puu"Iղ/Pf?L'"~i&j~o8~-#  Vϟ`@\5ϟ xkF"Yx_ᗉ_@5@տgʻ'^2+؋_gfdt0tbHoZ~|~ qI7oйfLD~mï~RA6(X$/oTCD`a {$$؀>abd`e` #o,3e0 @ [q(h!PhEcO{Zέ IENDB`flags/er.png000066600000001215152100561470006760 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb<0GaW9_0 ;33?7_?ѿ߿ɿ~i&b3%?ʗڱY?{5~c?߲ܲ@Kd?ր?Y?ړsEI'd?1G't;9!01WJG dX 7[џa _3s0?/l^ǎa[=@1<265 %dÿͦSLj]T7;-jC+㏟ ~B1+K4 q#5 1y-~p0FX@ P8PIENDB`flags/la.png000066600000001063152100561470006747 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbˀ 8a "[36:u${6kz?XB߿￿џ%61"p#YFϿ~cǟL2\@T(AH/@1 ab|̿`@ ïcx |? ? @~ TN{' ɫuC@ @ ) տ~@LA`rjeAG @@h1ÿ0p@@1"") Bzf?IENDB`flags/km.png000066600000001101152100561470006753 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb_0Cg@@.D€e{j7%- @ &pMg>J~ Ӓbg`FF @KȢ/?4+ ZW 1Y\]OQ͞NMGK//zzHY`Xٿ=@P FF>_N^aA_EVS̠y´˿oo_ ~1LX\@P*˾Xv[^ r99I? _ qasG_ ?0__6O FPq'k1|`tI0?$* Z4K.IENDB`flags/uz.png000066600000001003152100561470007003 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd`H\LCC…Yw+5_" 0ӧi;w=wſM3ᅴ6U ޼'a!Ǐ s޽~P,?bIep/D=߿y(߿[ kb'//+О3!.xbr,#?^6@130$e5ߟ?n "@to $rm {Vן_ϟ߿ s HJ1 {_' !! 0:2,> X2|TS"'_a @譿@~0/I?x|ڴʔa@0  o7u[TbeIENDB`flags/fk.png000066600000001210152100561470006745 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb_XCrɛL~10%?hTc%e< '? ?~@ 1;3A 1Q1<5e; 1H|z"'۞?_~ 1J^I 3 7M+ m׶E"A~ן.Uf?Y__9$j ~L~~|?a'ןoA6 C~7/{)aSH?;0oϿ>gxׯm=+ _Rhʓ#kO?~ T߯@j1S__)) ﯩ="{ll! ??B0X@ d,? 3XTR"@Cux23$KK0 [+>$ڰRd"G/0   P=BeIENDB`flags/mg.png000066600000000705152100561470006760 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<WIDATxb|= O@XƁ(' $Ra_6m yP@ӧ ϟT@/ _@6,bAQ dMJHR 5 @p @e 쿿_$P?c` j y!}@`/>%ߧ~2@_?QTߟ^1InP_ b@Pz9H?/@1>~H3<G)<&I$cݛxIENDB`flags/ir.png000066600000001000152100561470006754 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd 10da / ծ @￿ϟ?o X|}_?߿Hc`b1Z     **V߿@' >}@LB e߼тObBW 11>D5s-;;3g~?A+( H ܿ>81 ()̌ @ 516F23   po濿?~g{W;$ _ϿTܐKt@(!.?_?wS1>4@120#G$A$@/Z:YIENDB`flags/mn.png000066600000000754152100561470006773 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<~IDATxbπ^20x@+?$U]`?j|?af'@>i@50/_w$E_FYY RA/C_? `AQ`bbTϟP!D !a\L?UgZRj$N PO 6 ?00H?f`j?@ : @fa"觿RL\ #I?L@J "" 3\f`@A‚N[YIENDB`flags/zm.png000066600000000764152100561470007010 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdndf2c`F@/0  X&yN>|߯_pٷ X f ߿? ,qϯ jhF D߬'WR("r@22Pk\8Gd) h6B~@dAV/oEK~Ô/ @u@ RBmi XJp,:03 WE Ȑx= | ͯwKݵIENDB`flags/np.png000066600000000673152100561470006776 0ustar00PNG  IHDR YgAMA7tEXtSoftwareAdobe ImageReadyqe<MIDATxb4<-;/p^  cc?Oÿ Y0B/!iIENDB`flags/cv.png000066600000001021152100561470006755 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdH1 cJ rNCA2Ql$o&;0m+d4Ѐz>*}bO@` @r `~Wh@4R \<nY_5*N@L@`dFnzA$zMbɆ[@eddcF#33Wu5{Pi_?g<-3ɽڵ  <e޼y@,JӘo'2puծ/TuuXPSf_@ fL\l /H..mƋ/gxj ;#W2Q 1A `B% [IENDB`flags/pg.png000066600000001121152100561470006754 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxLA ?I6IL#9.&Ө 1 "X@0eݚ6p7g*|b")Ky*͞bjxSC__7?bjh߽mWi~w?H @ϟĘ%G_~_4bi`aa̜1}Vu~_~ 8@J}K 󤈰B5E)헮iWSS ЈMff ?  % 999wܙ1cP5 !Wٟߑ2F@4GRRׯ_ S/+@1 @g4IENDB`flags/yt.png000066600000001121152100561470007002 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATx$A 0To{ֹBRR|:f tY\(c@ w&/\$vY \/镽m-̝ɜH@D\1aapq02?3?P'###b/xϜy:&jý?{4ZE]cܻ/_``3[/OOOϟ?淯_UUU8L6:0s?PVS[˗HzU##f&ʟS~g󻓙_fO22@4:_X@ק_?~I@YXX~32r$X998 * Ʒo-yׯ_Mݻwp Z t`&C WM$BIENDB`flags/dz.png000066600000001106152100561470006766 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbT ǯ_|af[(` @,o}$,*)T?"fV5@  q+Yo vY W8jlk`ס. T@/u  8IENDB`flags/sy.png000066600000000646152100561470007014 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<8IDATxbπPX@_upɒ2ҒKF6hU wg@ տCH($ f@,>~e!Fw@~{ѧ?_z@L@ 7u[u{ݏvM:fß? >T yZ4v0@1}!w F +--޽{@ ?UTT.^@`$P ( ?`0 @D20ϞJ* ҶIENDB`flags/mr.png000066600000001071152100561470006770 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd0c@?8P(60CSd5b`2Zt\=9cEoϧ^>{CABHJ*d1ba`*Sҿ@@T{@?~120)@ח_J#~ߟ<@Hat__~f_X~+JH'PH@1_ h׿8ׯ~?寵Ͻן ?5?~ei~זӿ  @@> _{wץ_U 4h.P@49@:k)@_@qc"k0 o @ _8vbi!zh]3IENDB`flags/sb.png000066600000001160152100561470006755 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdf>"UYyZ߿10Br10<h1VVnn..J;>2 c1Þ'44 w_,+tgϯ_@b;⺗ 'ɉ @,"ISXÊo~fc4fn{ϯ`[1쾾ﱱ H8UFߺ_v}zq|l*goW|￿mz/j2~bKߩp/y[ 1h߿ ivU叿f ۾ρ.b~j* X"M$(9?YeEJr?Pdb<>Ôs {10|g  +9IENDB`flags/nl.png000066600000000705152100561470006766 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<WIDATxbπPX@`U 5/w9~LO)V*<'ρJ@~$(+  XD 3T j Ə??< AT40Ved@+o>Ƞ_^kן $߿ <{;g óOzH߯@u5@H?p20 _ uœ#@?`@hc`FDB2kgIENDB`flags/cm.png000066600000001015152100561470006747 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd X3Ȁ+ÿ0B97_`fSVEWֆl]LtkFXr]h@#S TO>_ƿfP_oFFY%8c`9T'Eu&.$l4eD| Jd*P[ 0߿ ~__ _PT @_~:??@,@ I@gd} =P@4$_!k:& <zI? `@ Ʌ J D dPIENDB`flags/catalonia.png000066600000000616152100561470010311 0ustar00PNG  IHDR ntEXtSoftwareAdobe ImageReadyqe<0IDATxTMKA UUŏPԛTxAUۃ+ Kw233;KLƘj,TbU9u f(fLjW'YBHZYer$3L +Lt؂i@b`pbP? _@@lYy R\?iVo 4ᯜ0'8@iPڦ aF\(`T #X$H 2y4 6*)1 _?VIS FF0Pmb } (hBA o} 2C0%A  3jc@123E1gb0eWIENDB`flags/se.png000066600000001036152100561470006762 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdpndu ?_~a Xs=1onߟD@Ml'3{@E07/bPba/_`P3йAF2_@0o&#0oFvO{  0 A!T I AEBHH#A8, ڒ`篲Ifد_@ՠ  0D O)@a`fԿ߲B<_9H FdxD@2B s$@ܹy'IENDB`flags/ne.png000066600000001031152100561470006750 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbc`@?`/021a@0ۀWx9֖a2,-E#DudG6\!U<22 R߿EdJ͓ @u@K6 32>= Xdt89@yZ.a@j.S[3bi!/ 0 X̬@ ɩ`Ucga?@123x@ D߿UT.6] `f#' T?  ϟ@ PPƀ(c0eA IENDB`flags/cd.png000066600000001020152100561470006732 0ustar00PNG  IHDR ntEXtSoftwareAdobe ImageReadyqe<IDATxt?LAƟRL !LU8 CL?,jX]+L,4ơ$~URЄ āW^ہ{{=V;ߵP(> P ҃/]͐n9ʲ<[r-%M뇻by,Aˈ0f3tg?M^q,zZ ,|ik` +yV3> BA 7`+rԁKhu) $%{}р᫩l@Ҧ 7j `:'F3[PePP\0L"j Х#5FxL:_zL1^Q+f~x&x5^IENDB`flags/galicia.png000066600000001115152100561470007742 0ustar00PNG  IHDR A< gAMA1_SPLTEvԢxbvc`gVqF@}B/UY(.}iq,{!rBsy3xe!e-e[YIA IDATc``dbfaecg`q I)iY9y&X@][GWOH$`.&fjfnaiemck'&fvptrvqusbk fsAl\|BbR2C OjxzFfpVvNn^~9BܜIENDB`flags/tg.png000066600000001062152100561470006764 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbπ` v `da |u5' >? ~0s@5pp`05eX  ~d_@o&vV/b=qd_?/.[ X\\ W?[_ן@aݷ N|E _ "[{ 2oRpL 6{)GQF?3З~Aٕ?@,70H70&k@,Ry!- ?L<pl|/a FbO1&y qnC1IENDB`flags/sk.png000066600000001062152100561470006767 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb;?8A8 @,@Y&.. &f 2 @@>1ç//P0?`dd@1Bdm^G {}הwl1EBEjk]]vzCƔ?__L?b @t-[=Gi ? lĸA뻽KFr?\{~20 aL@7JJs"YY@ $ A@pĀE\*=MIENDB`flags/in.png000066600000000767152100561470006773 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbA0!0 rpC1*%>^092v8Y% H@` @SR,0fd@,L9X;ܑ﯑mU #?_&Fضlk9O h ( T'bb;~,͵k_?b B`}) Zd ::~|ߟ?@#/q9@0a!_`00b  EE @I0?` !h?H"` ]?mȼ߿wSzh??q}  PK<D?/ۀUt (lp C 20f H@5$) rLLb\A @$0*jDBH?p+ C IJwOI;WIENDB`flags/sl.png000066600000000664152100561470006777 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<FIDATxbd8̀103` 0@1n⨷8T۫BdeX%Nt@ O?Q￿ TR׿_44bUaWd ߿@PiEYDJ Ư_sr2- qFFG˿  e@ybbսX\,a_,_\ @\|1{߯_ a@ zp20\ `JKJBC;"0 a%"?$1Rq}IENDB`flags/gq.png000066600000001031152100561470006755 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbA10da &~Ǘo&߿_0￿7@,@]|>< HI4 Y^Yo #? AH-@1aã?~0B˗']8& ~aOh` 0 ?D3/8X٘8>}(L| bb0ā~}@, L~ h?'Pϟ@:@, _>"&OX/H5p|,210 û71 `C&5aIENDB`flags/jp.png000066600000000644152100561470006770 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<6IDATxb+Df($SHŋSط#of h @^…Ç?}?9Bb$ի/(ZpK@LG`˗YT @,@ gV h,))* &@ H :sqߵ L @@1}. e@?B޽ @ ޽{H &l争=IENDB`flags/cc.png000066600000001161152100561470006737 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdef?I_0?lsA/oZ.߿W{8ξcT6 @|d&any5l+Ǐ?}?_μa@L "9~)7boV_jl_7L@1W1 Rg7lm"27^"1 } %  ,~ﯿש I'v_ 0~'6ٯEA@,@  ϗ9~/_`@,`HPǀI6c+VP n0ڍ7~aP_ 7a@nWȯ4Guve;z ]x>PwYLB\FFg׮?0ݩ_$?`H-XP÷o{vSujc@2j'6_[7- -+1UIENDB`flags/iq.png000066600000001003152100561470006756 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbπPX@_upɒ2ҒKF6hU wg@ տCH($ f9 x[ ֠j68%dT6d`8$v"e1Ӟ$]vpOb\bB'^gabfg󥷗|HO_YIZ-e13AO(e$pP: 10 d mwZ{Ds@h7Z1(e@,/^w+G!:;!EE @ B?>~I$&/1WG Ƿ^dꬨЛo$E_h* 1sl!^P.'.TLARK@߿c￟n߾c{?_N10'/$ :*E9̎r1 nPx =N΃17 3qrɰJ x]r?'3c 30|GtwD?6ps c RIENDB`flags/nz.png000066600000001177152100561470007010 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb<\ظHKWؘ_JrP \0 X1-k]C 1*=1M $1 0$)#$0/]]#߲ZAESߏ_p2,~-@[O'@ 1( M * #ػe]|f?| '7_~~fV9 Ư@@Is(?bj_I"_`gE_< XR( xN 0ffr߿#C0_@'q:IENDB`flags/gi.png000066600000000717152100561470006757 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<aIDATxb|= B"3ϟ?@ X@m`8߿ MP1@A5@s-k޲UD(; UИݯ_jZ31!ԃm 3 00p3Z?Nv_vvS T @?EY;x D߿sͬx(/i Lׯ2o?*-@S~T=Z@_^AB@ ?Xj0R+7IENDB`flags/md.png000066600000001066152100561470006756 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdre`a`?.yAHJP_Hf?of*_9?׿DUz00Ͽ?Lu7 s>- T_0ׯ~-#@,@p}wҵ~r of[E `+8yw>_|쿙:1w/~_ld~k+W^.hɯ_~E @B\A~fgrLToN_!: X¿O"F?yW`?0y @[0 t! :ez ?=%$?#_/ ĸ!8"!E/hD?@^mI9џ\IENDB`flags/cu.png000066600000001063152100561470006762 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb긜7 0 H0DE?? ϟ"sgOϞ%%a`?`Ǐt9<}ׯ  a L22211Gvf3߳gcv0r %9n , ̿Nḑ]__@ b`@ v`?˫*ZTc b|& 00;ϟpehH`ËJ~ EzgM a߿?þ9xTt&4RS0 L ` SvepIENDB`flags/tv.png000066600000001030152100561470006776 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd@ C`X T[Rÿ2 bo%KA9s?x%@1BFFO> D'^~Ͽ@Ȁ_6N]*0-@1\Bu|t/ R 3N7 І/l?Zd!=2HOB S ~ ,pI?@t܎)'ȱt+@1ןߗV/Qt[  ,0޾} @ io0_[N뗂gw^߿u ݑ"~2E'sր#?,5&SPɽIENDB`flags/sz.png000066600000001203152100561470007003 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATx (>lк,~$ˡdöMC_,ίj ,2 0@OO߿woֿ]y3-fN6 o`@+_mu/0E3(. '1b P Fo>D$? <PKT`$aN::yIENDB`flags/mm.png000066600000000561152100561470006766 0ustar00PNG  IHDR v 9sBIT|d pHYsտttEXtSoftwarewww.inkscape.org<IDAT(J`P HD9CB&5\\];u7HW7&tҡ mP*4qI '͐ w9=ܣ)(ry{3e^vY/sO,2`{+`/Hb!+V쎍ݱoydJ@(eI41*Wm1z;d*,!{@?gf+`X3 ?|@, 1?Ŀ`/:lkJA @ ؀_!(h\HD ӽdުO=t/PF4\L@)@@J*~# % XD[9} q(s7엿L||2'?YAr J Pz-@120΋: h0= d@qeԐExt¹$@yIENDB`flags/veneto.png000066600000001160152100561470007651 0ustar00PNG  IHDR v 9sBIT|d pHYsZZ$tEXtSoftwarewww.inkscape.org<IDAT(uNQ@{g:-BK!@ (\][|]rnM% FC-ykN"F"|ŭL'Jez0cM]"|&2ti*;AUc1S=ր$@; BpnhU5{!K- <пť H%Õ*X  \ Oium; b_h ٹ4m[(  J((.m0*>@?Q}G"j @9c:0Yd=3\ﲚ$%f'MܻrƷP(g6FT)Nucͭu<~i{Z5Gwf T- UrT''XZ+xID>[ETu'_4|6l-K@Q|"E `<.Y*'Nq(v+1Kb7`,fIENDB`flags/ci.png000066600000000705152100561470006750 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<WIDATxb?cSG  Կ'āR  X00V?? {ӱM_ۿ,,*bTo4@/%~]@,@12e?P i WfK@? 4~1kIt`at̟@ @U"`˿ L@Mܒ =8^~1R@q D}PL3c vCIENDB`flags/tj.png000066600000000760152100561470006773 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbπ gCV"`Ml_O(H_@Ư~l@WNNN$i` fSb{?,f&G AT̲y.@gb{Ǐ<<jP~P@r`r2 ? @?0!n{b###H=>Y/ R4mhD d@@.H @~h0bvBIENDB`flags/de.png000066600000001041152100561470006737 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbqf?f_ pb{qq9 / ~^n5@011U8y $?A~N@" ,X_@:~"?~@Ne@b@ь7h4LVg2-K , z#2ׯP `@;D?H%@1??ڀ T /@b`PPI@҄ab_A*$B$b`.a ?FL A@@@ X~e3o?6fA1?`@03b21@wt_XIENDB`flags/mv.png000066600000001036152100561470006775 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb| p(6 й'$PdK|K m @b'O@@߿?$+  Xvÿi-j?X??PdQaYy?1e@r1H3Is 2 E:_@ '_S]]= `? r$t?cd<K.d+ ou@2wͿp߿_T NWqyP߯ j`Y8P1@QR jH$ @xb110iK0{IENDB`flags/mq.png000066600000001217152100561470006771 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<!IDATx1%xB& ɼvYoJ2.ucӡэLIYB^IT' gzp)ԅ#G?W_<~">O"\g`@, /UUZ ߾oE7o~ ٫ϛJ?}^nV#'}W6?I_w /Ͽ ,?| yk.K 𲳱2>y_@F$x{6VE1uzLgV.PBb ta4{?_>ySn.VN߿AFP ?m$/_ %! ɦ_bb+@%>4310b`ݗ/W}") G.!$@ :hIENDB`flags/ws.png000066600000000734152100561470007010 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<nIDATxbd`f@ `䏟 w9 XKDLLnd${W^߿F~ٴ X9Я_ QVh@1a?кzP?@`u?A/i޽7!~u  4/d @IX`Ԯwo` @'A!T X2g{ob ѿa$#IČ`!(PUd@ c+/߿@?H? `c2d!_* ƯɀR@`o] .oIENDB`flags/sa.png000066600000001047152100561470006760 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdf@ H @#(,lg2EYi) i~P_~ˏ2B@tah,ǧ1132{NK Z@ `?})# y~~7 ̿]@L@on_|ڋklמ_`k; $  @a,WBڇroYZBc  3:%xXWdj  g-÷@ Xq > pEF+.ONHh'P@12(D$O 0z79NIENDB`flags/no.png000066600000001000152100561470006756 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb|rsE]D3?`A @,@Qj )FFF0~ "߿n@,`{H|σ@ ׿_,+  U@_ @=@$@W߿@g@c@e>#sdv@m@$ H 9 @ɂgqq&&=ffܬ? l줷v~|o7~aQVz@d@ g'D/ H'?f ?$A.,_P3@WaQމ̮ 1$`$ZlIENDB`flags/cn.png000066600000000730152100561470006753 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<jIDATxb@@n", @,@D}5o,Xx? $}m&i,7۪f3˪ u~,@K/k붿fϯ/AJ~I( X@u8M~@Uk q8V7T@@ / : D UM@ @ĉ΀l0X X@$P (7xX_bb<Ȍ?Ha `:s056IENDB`flags/tm.png000066600000001121152100561470006766 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdd$?|!ѐ~10`? 1|s" u  Rss ?çO~>|u'ϥ7x۷ 1sn=xٽ?;3&ۇ{+ן߿~hobjϿ~_]LSyo  X~/+o_r'RTK({Ƿ@ K8 Xa_8~}/هW~؆?@o5 /ǯ\q/`j50ghn `~q0pi >߽"s)I?  Vl bdEğ 2 w A&IENDB`flags/so.png000066600000001017152100561470006773 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbTߟ? 1 /B97hh&ȰO@Q]z7$a*8 W_AJ2`8#P@1*6vr? t@a f8gd; _ NR<%* ? `W+ g?$ϿAfd2@,@[e Ӱ_@vy / 3a -W  ` t@12~eHb@G < mxȮIENDB`flags/gr.png000066600000000747152100561470006773 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<yIDATxb?pb4x (" P]L3S@  ?ÃGѣG q02Ttxb(nߟ/$R? @1[v3أ TuhҶ ZPW0@֭G̍7s%CH?'˅Cwŋ7""H"31н@{@,}eI!fT apq0 Xy$˯@_y=$"ڹ&@1޼QTH(… 0:{ 7C#??;0kPl~IENDB`flags/na.png000066600000001207152100561470006751 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd`_ -2q/)W` 1~}C  26OK h*U;a{g1k2K@51Ȩ! Ƽ /e"l~8_7|ﯿw~b(? a>儕/_>n?bj( 5 h6 "3cϿr@5翤О?  oR_^qc?#C(j\+RL 2%>%IENDB`flags/gu.png000066600000000775152100561470006777 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbɀb„PdMR@ ?@ܿ7P ̨ /߂U_໥LD@=K3a` & `{pć @Dm: 79ǿ~#P@0h@mI߮?u_Fbv{& k7;/Y* & \_J y̯ߌjiwۘW1*z,T @ '{Ӂ0 kFjzbb? 0HsdIENDB`flags/nf.png000066600000001132152100561470006753 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb`pf{g~?~||ڽAsllxw)^)οNNMn{kH?|߿ ``AVBk V} t#ñǞ{ݳ ;&0g @  ??t!m~j &_@3UE-; ?`/~YPAm  (tȰ߿{˧߿yuo@=4_ bRY.Y7_ 2*@ I~I6VvMNMq@ʢ* $z@C86w_CGˏ/MZ >T GHIENDB`flags/cg.png000066600000001011152100561470006735 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd8@R XՊ`? 'F &}@MSҿHUK6P/Zq,zbd0LRD[sA~ob* 4n_fh:@42ߟ4v @yR߯$?|k~/FhbDÔI_@U3 j럿B~ XgQ` CbaǏ_(oi0 !$bʰ'4"ݘ fv&RIENDB`flags/ye.png000066600000000635152100561470006774 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe</IDATxb|π`$2IbJpV1?D7doŒM6OD~3 Vo0׿߿l&iY "ޞm$A:A @AFo,WNNN3!.#bD5Hn@YFFbi 5he„>ϟ?ȇpT  F3߿ ~D N8@`HHHHC -@ V3azDIENDB`flags/td.png000066600000001072152100561470006762 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbu/`='KL՟?3  $͇_}EZ ߿Ekپx~q@`$lk[-,3qZqA jCS @ $90BQN:T? ʑ͐-xP8)0aZMWC@ #o&+HNI?,R.Ku?i2ɥC;#iJ yp< @0t 6 @ @ fz~C X~5rPϿ N(H0Xj / QA6?Yف~gb#/9P  7Atpu(nfbG&H :"z[VIENDB`flags/dk.png000066600000000757152100561470006762 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb zAR Q] VxyK}ϟ3I /7m *Dz5I%Ѯ&1 gK 1/W j1\?c3Z = 1P|8 H)#%wXO~-o.]{6#Ы}t{o8i ?0(g߿ߟ_{3Kq:/(h 0ԀP9xJ:?^)# ~OB ( >0JR ,"&y G9I٫h_xIENDB`flags/bf.png000066600000000761152100561470006746 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbπPX@_upɒ2ҒKF6hU wg@ տCH($ f@,`JCL7P@1#P5Pş? ~ 4 X10rq@_@bׯ {X\b` Z|?>ן~u\5 (7T} @ B.c^=VBzE҈Rf a,l@, @ԁLj D #- 6N f/@123@T$p<31ShBIENDB`flags/ly.png000066600000000643152100561470007002 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<5IDATxbdɀ00ؿ$@b`BWZ\}`f6{jW&ɱ"4E} x_j "$296H! T/ *b9/ PE Ư_06H@lo`JAF im @W qfj ?,P9ӑ@6( (!!(@V* ` %"$ r(IENDB`flags/ax.png000066600000001227152100561470006765 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<)IDATxbT?.%<7M`ɔ~b/  3C-6{G̿߯? 1P8)0SߺV,!HF:cSvEp/VfV_ _n;~_0߿?9Z@,,d|ߌ ~2'#Pۏ?2 IJ 1*^  k֔Toj9"wd@/ʋrY!z w\7 X:B,~ [q[!SȂr@, >Y~a`bf!!?0 3ʅ3(OL< #6qL-AIENDB`flags/hk.png000066600000001017152100561470006754 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb| Hd,fb`   0oN>޴ X@j{(/nOk_@L@V?T߿L@?9鿺:0#ÿ_ b ?9kj̓&q?5+ח/ A@j7;9ߴ?'7 `o5 q4^(8?[gN &PPuMb<d<6?+|XQ_?9c?/P1@?L cYTYP˫W,rr  P1@1>d`Ȍ?q`=歆bIENDB`flags/ba.png000066600000001121152100561470006730 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd`8.O.fQ/$ 1VIƷE1Sm*>^3mŮwaf20~l@K h˿ 0m.KOj @ Ts?8G?ϟ~AT Tq٫߻z'@?5_ @ l?_CN]?e`?6 ߟ?u¢w>A["``@s$>{ۀ @h:@l_Rhb2@{{ƏY3 ȱ@ ;@ Tj/ `@IENDB`flags/kr.png000066600000001120152100561470006761 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb+1@18كGW_d--|w 5 ׯ_oݺ"bbʊg/^]F@PPXHHFVh@l~mhb,%Au bn^^o޼yPbիW\{pL/~%)"7RR= /EDDo0fl29}vvni)FF޾}U]7W؇?GIIIF o޼9m4= 8U-T0 1|$o'OB@,ZRw1. [HS1$%x-ٟ= K^xP_! L20hzIENDB`flags/bo.png000066600000000764152100561470006762 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb/e~01@`8ގ(oKlhF[l܉B)Ѐp ߼**?H(& XEeSO?X`<@|Ib0?Po]0oXy?0 # A@PE13 ?ojfl%`@,k0? f@a1@~bO(\  WO ($" ?Ib H| a#8 !,n! P #|9FIENDB`flags/bh.png000066600000000711152100561470006743 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<[IDATxb n/*_1  xyy!*5ü_f? @6i@@._a5w ~ѿ_@ tu761CTĀ#fb/_f=x @@Lp'KKBb1ΜfXoà60@L@'#&j`pm1@AS{{?{P !5@1zJPP$Ç ?~+T=MWYɀwTmIENDB`flags/vu.png000066600000001134152100561470007004 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxL @5k C$^u"b24bҗ'wXVu??0ϟ0˦MpoF2Mno?A* / QV@15K7.c߿JA~_P=@ !8w,Z'!?_~H20HÏ;V.Ms?~o7 Ic/+u o?2ׯ@;~ $ $PTr@4;_&:@ 1 ߿D'C c@'}?I02|a -?ArI  d$P=//bad`0'`$h)PĀLr0$QOJQIENDB`flags/vn.png000066600000000732152100561470007000 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<lIDATxbπPX@_upɒ2ҒKF6hU wg@ տH_/8,bE5P 7P@1#P5?.'"4M /R Df{ $@ 䤿~;ͯ@ @ï~TIvo WM$w/o@C00H38ȀT3:9~P@ L0HJQd$ȗ@+jDc0RZ2IENDB`flags/am.png000066600000000761152100561470006754 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbׯ0?1@1QW)'veýL02 OW001$T~joF ? t &B5&a2~: XDf51yۿ*_2HW7lWAouMp~ 8<Ý q 9^?(T_?o?/?[ŜH@9jp=X'2000#F F ?>0^o ~1 01 ?Hq ͦWIENDB`flags/bs.png000066600000001016152100561470006755 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdfb`ccc60 R18: Mǎ Ȱwܽ7$䯨 =1~D@m x?3wn +@5@ f1~3c@4x1Fz`!J {ˏ~_P@ma~ ~'5䷬"7P@lׯ?A~1$98 ^/xJIENDB`flags/kg.png000066600000000776152100561470006766 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbȀ`$2p) 0أꊐ{3# pzU}ߓ @7_F ] ($+  XGfߌ~.` @T @L @΀ΤQŨYH/%@ ߟ(?/~}20'od/b˯O~BU-: ~bï_fd`]P1@5@<uկ~1ן}N %%A 1@7#ِ0$b|03v!f Tg_TIENDB`flags/bt.png000066600000001167152100561470006765 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe< IDATx4ɱ (P|/_"7` v P3w~޼Mj@?00 3ga;7?oj[}_ïܿj w,ވpQg}yo? 4?滏z>)Lexp/Li_?@,L< ?Vn?2|bg`?0 F| ?"CA@!#IENDB`flags/vi.png000066600000001150152100561470006766 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb#L) @,@q]ƌL_ IE߿} 1Z@1 Y > L:ei  s 180 7 ioO^j=mQ}FX^q☙߀ &97o~ g;-W2WfvG޽?(۷k\AFOot߷9oOJIqܽ{ X A*LKz/̚_޿7^AԔBQ $995~|v劐_&&FFf $fhqhZ E v&[IENDB`flags/lk.png000066600000001163152100561470006762 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxDƱ 0%3 Rpqg ҈3O1v=ڼ- `g˟??\"bd _@K]7-S=!(ﯿ_{|{  ߿7_sAn;7'Bn&( & Hj/.7r3K%8hbZT / ` S/?W} XaP X_H?ٕ_h@؆~7I?~><ǟ16#bF \,L2300񑍕ֿX3{n#RDPe}`TsRS_IENDB`flags/uy.png000066600000001024152100561470007005 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb#"AL8(MX0 ,=Ͽ߿~2ڏ۷o611``XgN?8c011]q Xw&e`k߀ An\@q0?ln? t?YA3 ho?^p?X_ @,E;0}|%8Yf +Ɋ?y KA0ϕ"@!& 5#l}`87$? t? o-Z@>4!,?`?(YL ̓"K{IENDB`flags/ki.png000066600000001220152100561470006751 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<"IDATxb`? PL?0qb12g_ߟ?O?> H1=R@ P@o6 ֿ h6$ Csn'397ؖEHsP<T r 1׍EM w xn p` x1{qjDM9jP{R~eQ[wnUW O=>WRSW>_z;_}S# ]Ƞ<ށEz{}ɷK ”*s>H[E]@?@1gt5U9}PH߿/~?~{+}7 1wET(5M͵cq,S_2GW4  8IENDB`flags/bz.png000066600000001130152100561470006761 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbɀ0 & v E𓝃7n_y 3'㻏2ϟ/ .g?? vd~_7hT D2L j@oD7u^c&Y>")yX~-b@L@'習 v>wG?%ytt"`eQ|!_GǓ?W`P~_@Wi &_^<?>dP}OoHog{P;^g ÿ?@,0__agr? W4;<{ S!@, ^1~ _,6=/@? H o _ 0b@f 0(t0IENDB`flags/ru.png000066600000000644152100561470007005 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<6IDATxb?BAX )̀l#/ dj?6 ==gd䌿 d@$$XX XoH7?_Iyy?|4D/ THRH\) @@,5|HӟD efE ?phU=L0HJ倢 `g1 H W*M  ?e8aIENDB`flags/vg.png000066600000001166152100561470006773 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbܟ^VoŜ8~վ!/`1: 1 ͻ@; 1:b' ! %P]1>^!<,,)!V?7שc+T=Nd|ױ7r3/*E ?1ӫ ,@߿~?PC*/ۭ[d,@5uTݺ͡#ߟk9j@@ @IJrI?@ڀ.X2_ȑ􏁁 )CnIENDB`flags/ad.png000066600000001203152100561470006733 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbL?~bZ1I?~Ea @?`d1\Oo04&@K M ;1 qk# kȑ3>Oqia`bbd?#<3? 9n@0n"ǎ$CU1 ^+1Tf3J`ΌN:V&de7AdV$2KIENDB`flags/lb.png000066600000001005152100561470006744 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbπ`$cIbJHtT1_? @o dM3@i?a@~ٿ &)%1H```|ռS~h,',󟑑-<@11011 F ;w?0?btJw]_nƋȚrd21:@5@1oV$ʙ @r>z PO`8~yO 0.(  f&` LA ePb"e@`SD>|IENDB`flags/kn.png000066600000001134152100561470006762 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd 10@ D20aH* FVjjpp o'O|ߛ6m O>*o-!쿧Wk]\b:h2P@~5w_F<>fԙg  r0߳[~_t¯/{2^@ѿf`>- _?fP bh)?1Bwܶe׿~-!kZocOׯ3 @, L ! Yr/;VqpP @5@u`8K@m|ZZK u ӿ@?#g'7 ߬G~3 4l00+d_}< GAA@S- \0~IENDB`flags/occitania.png000066600000000701152100561470010303 0ustar00PNG  IHDR v 9sBIT|d pHYsGGGtEXtSoftwarewww.inkscape.org<>IDAT(}NP{R kܝQ@'Gw+_F-bL3|'–fI LX6jp5Sꙏt5"'`6'}dĢB0$%Eq?BM =e {;Fk3A¨ՀqNpv1DРvv0y(,WhuįҘ5 D`ޮW+=o)$P7K1u~5!x z6K*G'H)ȂFs!UI k$ O;z:7IENDB`flags/fo.png000066600000000732152100561470006761 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<lIDATxb3 ʽ^Ub/yYR $Bgb6D?>xlh@UV 1 vFu&hc'JHo `S(@3_{ϯ E/ 2l$r2@# qk~$L=}/G X _@ af!#+ 4P=Kx,>`ȰMC x0_i{IENDB`flags/gt.png000066600000000755152100561470006774 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdNc`,$ߧo#8(." FϿ*  H@! Q@Ew_4_Zh@]21@s_6,a XcrT{~5b  P?}4 @I!N rҟ a s ï0E@E @4@#?&1>%?~102D!3#0nY \2No{ϟ`W{1p*1 sIENDB`flags/ng.png000066600000000742152100561470006762 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<tIDATxbd10av_M߿ xަb``a / ծ 3q00 o? M37 PPקL(x_~[Gh@1d ?H@t@?j A6P@=4_ 8  @p:?ir@տ$O &* @JCV5 P1@c ƒܒ o  LJJ!_ P Ǡp$+ gP430|v PIENDB`flags/cf.png000066600000001146152100561470006745 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbԿ/Vҿ9~axA/c 2L1ئ}2k m<n_9loO R? ). T^> &02a >[Ǭ  7ߊp ' X_??ވ c@s eÜw?xʬsw>+$> ~cfK0\}v+(3/#0f! t@12e?@P?h :ZYIENDB`flags/dj.png000066600000001074152100561470006752 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb<|= /1p100??~Ͽ"~3~cca p1߿/? f@,@< f*Nf?Ha@ @K7/j@1a_ s3x&b0go'`F qt &A'';æg>_~&VbWb:@,@'1|W|<F"I O{_P?f >CL\22@u # !~1˴ӊ3|``0&` ` |^#iIENDB`flags/my.png000066600000001073152100561470007001 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd`8)yaӒ?I{ @3gT]G[ ohaga˳g1vnP5. JApVbcܨxɣw 0{ƃ FffbfwLJϴ6/Ie+d,#s}bd`8:e"vU@';a*QN_`30mx@1d`/Loߟ9$={󧌼|eu,@!fI# ˛w垤h~@&2 &pȀ/= @g u 0,Mbُ'O0@f3@ L g[fTIENDB`flags/si.png000066600000000776152100561470007000 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb+Df(?Ïsq05(|@,<~=󿿭 LLFFF%,xxBB,~? CB}CO~ԙg[s=bof_@ ~ɿ>f`x@@'aW"__`b B Xcl@@#0/ïPL@ӧ@gr2:ן@@%'3L /vo!.7A?T=L@JJ@ba@/#0!!T.^\1 Pp,IENDB`flags/il.png000066600000000657152100561470006767 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<AIDATxb|%p.@1'*dALL  ##kYuߒ/Bq'@@\ Ua7g/?o5 @\5X?g+Uaޥ?w@ =)~ v\g Y ~@ $x 4@< @,.Z l ?e r?Êxmd J)yo~.IENDB`flags/dm.png000066600000001154152100561470006754 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdd@ @(fU?WD~1@_ T $2 Z\9+ ϟVX@,~{_PC̕_)=͍$@=@L 0×v?QVS~y?~1BI/\Α@X}q ש1|{v d+1\ N ߿@=t/2Kd?)Ծ({bdf(.~¢H9οvnt!n&@()j?@Lr~r1%fz~4D5P @,@[SD@Zcπ3/vPH5#C.JDB/>}*" $M,8̃IENDB`flags/sn.png000066600000001024152100561470006770 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdhd@ @&@TVY R1e`?0̟"l@,`?e~_@Ռ@490sT7Z:pZ_XR+@2Uϟ~{?P%i￿+~mR\! /Xm0e.ۯ_v@? l`; @~/g C&n<h0I@_= b0PO@, ~#- 8X~32Iq àN Fd/z=O`,[XIENDB`flags/gs.png000066600000001166152100561470006770 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbYYY{tA(IuݴA(@ O2~eÇB*U˞|9qׯ~BM1b~  T=q1`?MR ( <,ͮJJ/bb8 洴ѷCL0;!ُjZ(G98 fK12wPŒT!3y*$ŴTST1io@ m8%}p I~ {C"^} X~PXP3$.:xi ۷**@  ȗA/X3d_^ @f`f  $)OIENDB`flags/ca.png000066600000001164152100561470006740 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb&p>̀$LX ``@,=,/J0~ ~}Y,YY,ddU~u Ϙ~+! ?PHGmml }/P@11?H5I㊭0HnM%NG? 6ZUm^!~6c1?'SYY P@m Ѐϟe\~W>8ACm `mL1~ox"Rv2 %9 ? otS9^>qn4}~S4 _Ƌr%G~٢7Y tP?bd`NDH0DB`0@ྭIENDB`flags/co.png000066600000000743152100561470006760 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<uIDATxb|?(b @,@ !j@ /P ۲ X&OJ@z@*~_`]h @ȼ` Xe`l0d0500#/!Ha(~hIba~Cd0ofk1 \~ XM($\>@)+g8@,l ~0I D a @w  DC@`k/|IENDB`flags/tl.png000066600000001002152100561470006763 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxLA ]=3=\$IfMNp :J!s#5^ 1|?@?$˦Mp¿Oc/ $ f@ ?/aJAC40 @L@ Gg 6biknn8syI_`?6Hm[ķP1jd ĂQ_Y (@1O]h Eeal[ X.wZ;`80B&P2@lHBAEa%@o& ~(o`$1h?x@ _"(=v!Q /1blIENDB`flags/ch.png000066600000000557152100561470006754 0ustar00PNG  IHDR &qgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbπP@, ^u5###7Ï0gl`S-d:II$/T~7@hYe@ׯ@ 020q/@m,*~  fe֭PIssSeeR@_@q)@T0HQ|?ڀ)&ǏIENDB`flags/py.png000066600000000731152100561470007004 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<kIDATxbπPX@_upɒ2ҒKF6hU wg@ տCH($ f@, _gcc?CbG~nYo6 99o~ħpCA˧8?2``@1[5 WX Ʒsis>i! 3ӓ/Abs㗿&I8/'fiA 49P{AzK8 (UX_120F8IRS]IENDB`flags/tk.png000066600000001176152100561470006776 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd> c&y?01{!4'0$ %+ dÓiϓW#X>Y)voEϝ)#X#6t@11?~{U|@wyp+e_Nj@@}?cvK~Sad%'@e@ e{ֺg~fxoxG@#\+z7V_=J'(U'P1@l ǯ xع??w P_.{0~J;ayI^@120FK/ π1000e@[%tIENDB`flags/ie.png000066600000000741152100561470006752 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<sIDATxbd10ax򔉁 ă??DTc 8 Ck5T⌌@ (ߟ11 XX@O>/|󅗕?|QXbh2P ?&_@Kj ?P_HP1@= 4b? lz0,rI`'HoA (t=@'1; 7aA XInI7eE###00)$bd(e`cP|`^]K @7dJr IENDB`flags/mw.png000066600000001021152100561470006770 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd  &3`c"a>jN !Lgdl_s `K ~I0U@,`m~Ϟ=,?,`cHݯ,+  @,/;vp VWT7P/@@ '>xښ~ 1HU3 XVrxx3qq l0ß?0JJxxLLLo |gp,?f0 @`! @, xB4`OVY}IENDB`flags/ml.png000066600000000732152100561500006757 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<lIDATxbd10ax\ 3 A2p@, _]*O/adI?D~ٴ XX?￿ 7CѯoP5,baY d?` 7P@ 0bbzh￿k(@ f ID$i տfÿpの@`' jd5} nb$%Aߌ ho? J@J$bd(e`B{x` DB c4r2 ZIENDB`flags/nr.png000066600000001017152100561500006763 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdg1$  P#x?׵W bR?4Hʈ @S2/0?j0 d @, \03?Ю ׀ā ޟ^@,gҰ՟`d07!qS/@(K>~a#{O_ϯ 7]ϟ`W)H @L @glӞ/p0~]zӗo?}Ǐa4`O  &9w a?0S f@i FK(-r 9IENDB`flags/ga.png000066600000000751152100561500006737 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<{IDATxbdhf@ `$!0 RA7DUFjo;͚v9ђɐ}M} y?￿ ~/ CG@ amTv)fTooZ<|?N+X002/00~32d@,`k SI5?i*!C!j Fr  l?i92@0h`?N)ba4?L`SCx90~#zo~3<A`#h_plIENDB`flags/arab.png000066600000000621152100561500007251 0ustar00PNG  IHDR v 9sBIT|d pHYs??GtEXtSoftwarewww.inkscape.org<IDAT(JPFMsM(E+⢮tsDmiąnJXpgf睔V$$E$,IK4+6+!b^8Bھ %l7Q2A׆8#W*&hj& *srŦNZg(+Nhir #^497piS[εb {D]5ýWE2ȄsWK  b='= 1+? O_%IENDB`flags/nu.png000066600000001074152100561500006771 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb,.2W݉"Y?~t'IK9 A_by%u'gb7?_>z?feLL*c1!3% 22ɚ F08(0Stګ'$“HMciSm9,3l Sμ 7X0h|:epkHP|ן?@5^'sq {ϼ 1hNyV *:yLVO~ 1pG U  .c ATCCh-$DA$ @@@ 30'+ I@e`wXhg?@F hc Hx|!IENDB`flags/pe.png000066600000000615152100561500006753 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbπs (*KA@VW1f?@˦M rdp_ee6 Pտj߿6Lh@/ĕ44 N_50@`' *V `うa` fprV @t@40 ) 6/$ѩ C * ƯH "B =a;n'IENDB`flags/tibet.png000066600000001243152100561500007454 0ustar00PNG  IHDR v 9bKGD pHYs B(xtIME ,3!~N0IDAT(eKHTa;{9( &CɅ0EOV \Em WQԪMVDQ EM -d` Y8>jbU--ܩ%$a0:XU"))?°k(O5pș^Ƣ7Hp5@- z &")$/Jw.Ņf KzOHJ+$xXENpgc;`bWAK+)8m[贿sͲh&TO=DP\.G-:NQqO?xPFbeaxe`,M60v0^GFU>7:l޲1TtȇU$, s%Z0F%Mm o8LK<7q۶1dž3d:yV#RMP|(*e"12losAٱgu[nZ A.DkwQVqqb6@hKmH~Eʀ"Y -5O*IENDB`flags/tw.png000066600000000721152100561500006777 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<cIDATxbdPЯ ?<|. PYK4fgfb: P+#l@,Esgee|07ރ?_f@,@k_7DP X5sǟ 4l[Pٿ>h2Ah20ߧ ?x47H@&N  f  @Q$ t@40S @~aH'#H DBP1@1~EHl ISf捧IENDB`flags/mk.png000066600000001230152100561500006750 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<*IDATx< 0TK"RDxiD{ybr2}1x{rf _(NAӧ Q7HY~?P8Oa1#@H*15+25(Ў?ρ ݯJf Xl'|@ ?ͨ$bwd a߯>7Wa` ?O͠wY_A`8a30/SǒfxA7ߌj0(nahP?Yb_ÿ @L?k T@DV;0IENDB`flags/gh.png000066600000000752152100561500006747 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<|IDATxbπPX@_upɒ2ҒKF6hU wg@ տCH($ f@,`J̓( 7P@ ` >7:BSx+)% =Z FL<q_ڴJNh#@1}2?DWD/9_?㣁ܟ0 j 2?￿~߯ߎmDemd ? }" R7 j D #- 6N? /05c Fd=  !pB0br(IENDB`flags/cz.png000066600000000734152100561500006765 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<nIDATxbd? & 8@+{_EB/^ & g/G+C3b!@s@4纋-Kß?o?ߟ+߾ZI d Q@!/ 6  s~ׯA߿I%??@5؝hwn#T ~1Ik@ X~>30|d`x 3bt#,G1?1MY3_>|yrDo_XHݯ(+ 1~!' s1h$ LGㅃ-Of A 7o4 Xqwxǟo? ' idxDxߝQC&,~}lS./xYde~3KI7_0.6Iؽu/^? @+HE]ϋ"7hyg}c0H] 2f/` F ` B._CIENDB`flags/sr.png000066600000001001152100561500006761 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdg``/0 $YP(F0p4I\"=  fkJ7܁*1$ŠO1?0 0,$#w$9߿@C"?Ц߿ d0JI}\ Xf|S:@*~gk @ ?A԰_e~!;i߿@nOO߿$^`7Lo(Mk^6`?@4,?3#W!;?pHBй ` Bybd(f`_H pH0i hIENDB`flags/pl.png000066600000000566152100561500006767 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb# ?l X@ 3300G_= Ȍ##?H)VFj0ģ X?{? Yi I_ !~_ 69vXd<"T00H3 pE5ei`ARl_? `# $ A@pĀE\Ǵ]IENDB`flags/rs.png000066600000000647152100561500007000 0ustar00PNG  IHDR ntEXtSoftwareAdobe ImageReadyqe<IIDATxtPMK@m6\DZ؜{UQG7QDWգ TQ4"q6ff罙 Q3Ÿx">HvdyȘE>_+*7>ao $k ;iܘLZ=K/-]wT ڋQߩθŒ*vd2렌\4jMxo\EunF8%dQAserw^2 :DBWNomy T,+ C$۶azyhBV -? 0Xx<4IENDB`flags/va.png000066600000001051152100561500006750 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb|}^; #=&Ͽr?P5 H?E8/^`?Hϟg`??` ! u0 @fϗOP@16lzE]?ÿ``4g'O7 X}b<ٿ~.%>iFǎIɲ1 E +Ż7ؙߚ勗 u?P@<Y?n F&F&FVEb20 pN!!`xw?ÿe I ?hh0SF.7IENDB`flags/lc.png000066600000001010152100561500006733 0ustar00PNG  IHDR ntEXtSoftwareAdobe ImageReadyqe<IDATx4Q=kTA3o7Y7F0! M@Ơ؄P,&bh*kH*6@A,}o{sgހ|{>/b첌tm D&Jath# MHCy7 F$FQ H6ʭ|+8;B4yGsnJ[/dQ*0T+:1@ƕtatFQUՕ:& 5ʺF!T5qh̒Z%`YKoTy}^ +y}$ͳ, [놝 ~7O E;*+._OO&&6V` `  1Fv rK0}^@#²Oua`/8X@nz^A{Utߧ"`9P<(LAa/>ڰyЈDC1 AL43UIENDB`flags/fi.png000066600000000751152100561500006746 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<{IDATxb|30I`2.?A0bab`*kƿePr!ڝ_l8Dٛ@S`dd@5_ ߟ?$d 15#o~ @m@w?Po Јa_հ tl@ 4Β*NW7T`S9bad%Pj" /c`dxqh*Ws'>~@0cfr @V@5:<Yƀz;@"rVQ_(@>}`iIENDB`flags/ae.png000066600000000630152100561500006731 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<*IDATxbπk P V8)妛/F4e{/ђ"[@` ?y/=߿_ Ȑ@,`CTt^`dd| XNe;ȓI@f;/ NU~q: @Af kk_~JY篊ŋII?es!$=p$@ziٟ>IENDB`flags/al.png000066600000001130152100561500006734 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb򏁁X0"#8@%'U߿,y5߹odr3ϯѕ |wB9t{ϯ_} eZ@,?Wq3߿~fs2߯_ ~53_K?=珟"_~ 5 _߿KA%/_ 7 !c~_k}cϯ>Kagdh6Б@~ ??rc0?~Qc@Aj@ Љ 6>f?f!ֿ~|r6  VEĘ!O0PȠ?@FX@1?`HBc ,0eB@Mv=IENDB`flags/br.png000066600000001121152100561500006743 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbdHf@ `/03 @5F7g`￿6ZXl9 ϟ߿UOBY;K^?K_h@5T T5ToUդ $~涐eO; o bL_g~ UszhdČY/D:U6[R?f?OGsA_2ЖҶ0<t{W|x_D˒_.fg y)h)˖bU?}n[/I^r2|d   &go~Ko2,@ `H?$x$A^; 3˿kaܿ(@128"b9F1C/AnIENDB`flags/bi.png000066600000001243152100561500006737 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<5IDATxb*/*~e1Ǐ?c` ?OĨ\J= ɓ_ae @m981<   , 39]`,-)%|yҵEOM`~C1xNIo=x0pM  Б <\~/(4!1# /ଜݢ! )  Hu?|PWz5%3_]Hƛ1e,i73feqp놅0Əϊa:@};~%"x߿C$n7`ee>3@aC얯& }h&tIENDB`flags/kz.png000066600000001150152100561500006766 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd.? >Q ?`d0I @@ U1a@џ?ba``x w0qAr2n>_4/@113cmͿ֚@ $[/h0L~p| O/f ?'Ko_\o%B XaQ[]KO?/@ @"}?*{kKf tҿ? Rnk(0XSO+ =FPI@`2(r3Eix_d_q@ bdX_%;x\@0001iZsqIENDB`flags/ee.png000066600000000655152100561500006744 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<?IDATxbdp~cF@?P(0 v`yS+4kvrOVȦܙR60 2 OA߿ (/ ?Yav?t?@AU R R$ tba״ϣG7B_`FIr4P @)|dFӧO @J/\@,^+%@P @y R D@90 _~ree =( 4 ߿?10˓'yBg: 2A9,ll ƿ222pF&>˛sed60@n ɓX}P8( P_I9bz  ?W@` X.II1E0B:0,"!E/hD?@|(IEPZIENDB`flags/aw.png000066600000001014152100561500006750 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATx, (}XUِ9 aJs9H ͗DQbykIϣk7G`` -?a1b`ҞAſ A< ӧ_Zg_@*TR/B@/,l~%߯PK"/!n &a}@,?Av1hd `j ߷yt< edse@NOCf[*v=KkU"`0Mb'(H =@60K!?çF$(:_h2\,hҪUIENDB`flags/bn.png000066600000001177152100561500006752 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbzPƿ? P0 bl0 07\Q :F+@BkW+PZ8&Ԛ/X 3D3տ~y'N_~f`/FV=aem [G~(?``߷~[1wyybhh" yhpQQÇ?V,T?-O`b|Q~fj$ׯߝ2Yu޿1u#u311cee555Ev?gA>w߿~篊ŋR@9Ff?LlV} O<@ӠXF_Pdbad4 paw p1iIENDB`flags/ro.png000066600000000757152100561500006776 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbd>010?`` !@0SݤTL?D~?߿_6m  O^L=b`o(_f@, 3U B@&C40 @, UxEtba0 Nbh@4P_$ `I`'H u `n@0I?@  TR䍿LL R0: 20K\|o0 ÿ?xC 'oEEIENDB`flags/hm.png000066600000001241152100561500006747 0ustar00PNG  IHDR ngAMA7tEXtSoftwareAdobe ImageReadyqe<3IDATxb<^|CrǻXV*Dsg101KMy<"[M-ܣ1  =F;! 鐎>_aQY.3߲we~pkt ano!$AXx?ݑa/B? 0DL, Ff2G~ B $ Dt c 5S d޲IU%sX Raf:%@a´f!|g W0aן b@s @,=q S@;JB~3˨򷎁 X$P(? $ A@H& td { padding: 20px 20px 20px 40px; } .pll-configure legend { font-size: 14px; font-weight: 600; margin-bottom: 0.5em; } .pll-configure td .description { margin-top: 2px; margin-bottom: 0.5em; } .pll-configure p.submit { margin-top: 20px; } .pll-configure .button { margin-right: 20px; } .pll-configure fieldset { margin-bottom: 1.5em; } .pll-inline-block-list { margin: 0; } .pll-inline-block-list li { display: inline-block; margin: 0; width: 250px; } /* settings URL modifications */ #pll-domains-table td { padding: 2px 2px 2px 1.5em; -webkit-box-shadow: none; box-shadow: none; border: none; } .pll-settings-url-col { display: inline-block; width: 49%; vertical-align: top; } /* settings Activation keys */ #pll-licenses-table td { vertical-align: top; } #pll-licenses-table label { font-size: 1em; font-weight: 600; } .pll-configure .pll-deactivate-license { margin: 0 0 0 20px; } /* language columns in edit.php and edit-tags.php */ th[class*='column-language_'], td[class*='column-language_'] { width: 1.5em; } /* Text direcction in post.php and edit-tags.php */ .pll-dir-rtl textarea, .pll-dir-rtl input[type="text"] { direction: rtl; } .pll-dir-ltr textarea, .pll-dir-ltr input[type="text"] { direction: ltr; } .pll-dir-ltr .tr_lang, .pll-dir-rtl .tr_lang { direction: inherit; } /* languages metabox in post.php */ #post-translations p { float: left; } #post-translations table { table-layout: fixed; width: 100%; clear: both; } #post-translations a { text-decoration: none; } #post-translations .pll-language-column, #post-translations .pll-column-icon { width: 20px; } #post-translations .tr_lang { width: 100%; } #post-translations td { padding: 2px; } #post-translations .spinner, #term-translations .spinner { float: none; margin: 0; background-position: center; width: auto; } .pll-column-icon { text-align: center; } #select-post-language .pll-select-flag { padding: 4px; margin-right: 32px; } /* specific cases for media */ #select-media-language .pll-select-flag { padding: 4px; margin-right: 10px; } .pll-media-edit-column { float: right; } /* language and translations in edit-tags.php */ .pll-translation-flag { /* also for media */ margin-right: 14px; } #select-add-term-language .pll-select-flag { padding: 11px; margin-right: 13px; } #select-edit-term-language .pll-select-flag { padding: 11px; margin-right: 4px; } #term-translations p { /* same style as label */ font-size: 12px; font-style: normal; padding: 2px; color: #23282d; } #add-term-translations, #edit-term-translations { width: 95%; } #term-translations .pll-language-column { line-height: 28px; width: 20%; } #term-translations .pll-edit-column, #add-term-translations .pll-language-column { width: 20px; } #edit-term-translations .pll-language-column { padding: 15px 10px; font-weight: normal; } /* icon fonts */ .pll_icon_tick:before { content: "\f147"; } .pll_icon_add:before { content: "\f132"; } .pll_icon_edit:before { content: "\f464"; } [class^="pll_icon_"] { font: 20px/1 'dashicons'; vertical-align: middle; } /* admin bar */ #wpadminbar #wp-admin-bar-languages .ab-item img { margin: 0 8px 0 2px; } #wpadminbar #wp-admin-bar-languages #wp-admin-bar-all .ab-item .ab-icon { float: none; top: 4px; } #wpadminbar #wp-admin-bar-languages .ab-icon:before { content: "\f326"; top: 1px; } @media screen and ( max-width: 782px ) { /* settings */ #wpbody-content .pll-settings .pll-configure > td { padding: 20px; } #wpbody-content .pll-settings #cb { padding: 20px 9px; } /* settings URL modifications */ .pll-inline-block { width: auto; } .pll-settings-url-col { display: block; width: 100%; } /* settings licenses */ #wpbody-content .pll-settings #pll-licenses-table td { display: block; } .pll-configure .pll-deactivate-license { margin: 10px 0 5px; } /* strings translations table */ .stringstranslations .column-context, .stringstranslations .column-name { display: none; /* backward compatibility WP < 4.3 */ } .translation label { display: block; width: 95%; padding-left: 0; } .translation input { width: 95%; } /* hide selected language flag and translations language name */ #select-add-term-language .pll-select-flag, #select-edit-term-language .pll-select-flag, #edit-term-translations .pll-language-name { display: none; } #edit-term-translations { width: 100%; } #add-term-translations .pll-language-column { line-height: 38px; } #edit-term-translations td { padding: 8px 10px; } #edit-term-translations .pll-language-column, #edit-term-translations .pll-edit-column { width: 20px; } /* translations tables should be kept as table */ .term-translations .pll-language-column, .term-translations .pll-edit-column, .term-translations .pll-translation-column { display: table-cell; } .term-translations .hidden { display: none; } /* admin bar */ #wpadminbar #wp-admin-bar-languages { display: block; /*shows our menu on mobile devices */ } #wpadminbar #wp-admin-bar-languages > .ab-item { width: 50px; text-align: center; } #wpadminbar #wp-admin-bar-languages > .ab-item .ab-icon:before { font: 32px/1 'dashicons'; top: -1px; } #wpadminbar #wp-admin-bar-languages > .ab-item img { margin: 19px 0; } #wpadminbar #wp-admin-bar-languages #wp-admin-bar-all .ab-item .ab-icon { margin-right: 6px; font-size: 20px !important; line-height: 20px !important; } } css/selectmenu.css000066600000004506152100561500010216 0ustar00/* Greatly modified version of the jquery-ui.css */ .ui-widget-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; } .ui-menu { list-style: none; padding: 0; margin: 0; display: block; outline: none; } .ui-menu .ui-menu { position: absolute; } .ui-menu .ui-menu-item { position: relative; margin: 0; padding: 3px 1em 3px .4em; min-height: 0; /* support: IE7 */ /* support: IE10, see #8844 */ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); } /* icon support */ .ui-menu-icons { position: relative; } .ui-menu-icons .ui-menu-item { padding-left: 2em; } /* left-aligned */ .ui-selectmenu-text .ui-icon, .ui-menu .ui-icon { position: absolute; top: 0; bottom: 0; left: .2em; margin: auto 0; } /* right-aligned */ .ui-menu .ui-menu-icon { left: auto; right: 0; } .ui-selectmenu-menu { padding: 0; margin: 0; position: absolute; top: 0; left: 0; display: none; } .ui-selectmenu-menu .ui-menu { overflow: auto; /* Support: IE7 */ overflow-x: hidden; padding-bottom: 1px; } .ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { font-size: 1em; font-weight: bold; line-height: 23px; padding: 2px 0.4em; margin: 0.5em 0 0 0; height: auto; border: 0; } .ui-selectmenu-open { display: block; } .ui-selectmenu-button { display: inline-block; overflow: hidden; position: relative; text-decoration: none; } .ui-selectmenu-button span.ui-icon { right: 0.5em; left: auto; margin-top: -10px; position: absolute; top: 50%; } .ui-selectmenu-button span.ui-selectmenu-text { text-align: left; padding: 0.4em 2.1em 0.4em 2em; display: block; line-height: 23px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .ui-widget-content, .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { background: #fff; border: 1px solid #ddd; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.07) inset; color: #32373c; } .ui-widget-content .ui-state-hover, .ui-widget-content .ui-state-focus { background: #f5f5f5; } .ui-selectmenu-button.ui-state-focus { border: 1px solid #5b9dd9; box-shadow: 0 0 2px rgba(30, 140, 190, 0.8); } .ui-icon-triangle-1-s:before { content: "\f140"; font: 20px/1 'dashicons'; } .ui-widget-content { max-height: 231px; box-shadow: 0 2px 6px rgba(100, 100, 100, 0.3); } css/admin.min.css000066600000011541152100561500007721 0ustar00#pll-licenses-table td,.translation label{vertical-align:top}#add-lang select{width:95%}.column-locale,.languages .column-slug{width:15%}.column-default_lang{width:5%}.column-count,.column-flag,.column-term_group{width:10%}.icon-default-lang:before{font-family:dashicons;content:"\f155"}.form-field input[type=radio]{width:auto;margin-right:2px}#pll-about-box p,#pll-recommended p{text-align:justify}#pll-about-box input{margin:0;padding:0;float:right}.stringstranslations .column-context,.stringstranslations .column-name{width:10%}.stringstranslations .column-string{width:33%}.translation label{display:inline-block;width:23%}.translation input,.translation textarea{width:72%}.pll-settings{margin-top:20px}.pll-settings .plugin-title{width:25%}#wpbody-content .pll-settings .pll-configure tr{display:table-row}#wpbody-content .pll-settings .pll-configure td{display:table-cell}#wpbody-content .pll-settings .pll-configure>td{padding:20px 20px 20px 40px}.pll-configure legend{font-size:14px;font-weight:600;margin-bottom:.5em}.pll-configure td .description{margin-top:2px;margin-bottom:.5em}.pll-configure p.submit{margin-top:20px}.pll-configure .button{margin-right:20px}.pll-configure fieldset{margin-bottom:1.5em}.pll-inline-block-list{margin:0}.pll-inline-block-list li{display:inline-block;margin:0;width:250px}#pll-domains-table td{padding:2px 2px 2px 1.5em;-webkit-box-shadow:none;box-shadow:none;border:none}.pll-settings-url-col{display:inline-block;width:49%;vertical-align:top}#pll-licenses-table label{font-size:1em;font-weight:600}.pll-configure .pll-deactivate-license{margin:0 0 0 20px}td[class*=column-language_],th[class*=column-language_]{width:1.5em}.pll-dir-rtl input[type=text],.pll-dir-rtl textarea{direction:rtl}.pll-dir-ltr input[type=text],.pll-dir-ltr textarea{direction:ltr}.pll-dir-ltr .tr_lang,.pll-dir-rtl .tr_lang{direction:inherit}#post-translations p{float:left}#post-translations table{table-layout:fixed;width:100%;clear:both}#post-translations a{text-decoration:none}#post-translations .pll-column-icon,#post-translations .pll-language-column{width:20px}#post-translations .tr_lang{width:100%}#post-translations td{padding:2px}#post-translations .spinner,#term-translations .spinner{float:none;margin:0;background-position:center;width:auto}.pll-column-icon{text-align:center}#select-post-language .pll-select-flag{padding:4px;margin-right:32px}#select-media-language .pll-select-flag{padding:4px;margin-right:10px}.pll-media-edit-column{float:right}.pll-translation-flag{margin-right:14px}#select-add-term-language .pll-select-flag{padding:11px;margin-right:13px}#select-edit-term-language .pll-select-flag{padding:11px;margin-right:4px}#term-translations p{font-size:12px;font-style:normal;padding:2px;color:#23282d}#add-term-translations,#edit-term-translations{width:95%}#term-translations .pll-language-column{line-height:28px;width:20%}#add-term-translations .pll-language-column,#term-translations .pll-edit-column{width:20px}#edit-term-translations .pll-language-column{padding:15px 10px;font-weight:400}.pll_icon_tick:before{content:"\f147"}.pll_icon_add:before{content:"\f132"}.pll_icon_edit:before{content:"\f464"}[class^=pll_icon_]{font:20px/1 dashicons;vertical-align:middle}#wpadminbar #wp-admin-bar-languages .ab-item img{margin:0 8px 0 2px}#wpadminbar #wp-admin-bar-languages #wp-admin-bar-all .ab-item .ab-icon{float:none;top:4px}#wpadminbar #wp-admin-bar-languages .ab-icon:before{content:"\f326";top:1px}@media screen and (max-width:782px){#wpbody-content .pll-settings .pll-configure>td{padding:20px}#wpbody-content .pll-settings #cb{padding:20px 9px}.pll-inline-block{width:auto}.pll-settings-url-col{display:block;width:100%}#wpbody-content .pll-settings #pll-licenses-table td{display:block}.pll-configure .pll-deactivate-license{margin:10px 0 5px}.stringstranslations .column-context,.stringstranslations .column-name{display:none}.translation label{display:block;width:95%;padding-left:0}.translation input{width:95%}#edit-term-translations .pll-language-name,#select-add-term-language .pll-select-flag,#select-edit-term-language .pll-select-flag{display:none}#edit-term-translations{width:100%}#add-term-translations .pll-language-column{line-height:38px}#edit-term-translations td{padding:8px 10px}#edit-term-translations .pll-edit-column,#edit-term-translations .pll-language-column{width:20px}.term-translations .pll-edit-column,.term-translations .pll-language-column,.term-translations .pll-translation-column{display:table-cell}.term-translations .hidden{display:none}#wpadminbar #wp-admin-bar-languages{display:block}#wpadminbar #wp-admin-bar-languages>.ab-item{width:50px;text-align:center}#wpadminbar #wp-admin-bar-languages>.ab-item .ab-icon:before{font:32px/1 dashicons;top:-1px}#wpadminbar #wp-admin-bar-languages>.ab-item img{margin:19px 0}#wpadminbar #wp-admin-bar-languages #wp-admin-bar-all .ab-item .ab-icon{margin-right:6px;font-size:20px!important;line-height:20px!important}} css/selectmenu.min.css000066600000003477152100561500011006 0ustar00.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;min-height:0;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon,.ui-selectmenu-text .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:700;line-height:23px;padding:2px .4em;margin:.5em 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none}.ui-selectmenu-button span.ui-icon{right:.5em;left:auto;margin-top:-10px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:.4em 2.1em .4em 2em;display:block;line-height:23px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-state-default,.ui-widget-content,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{background:#fff;border:1px solid #ddd;box-shadow:0 1px 2px rgba(0,0,0,.07) inset;color:#32373c}.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover{background:#f5f5f5}.ui-selectmenu-button.ui-state-focus{border:1px solid #5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}.ui-icon-triangle-1-s:before{content:"\f140";font:20px/1 dashicons}.ui-widget-content{max-height:231px;box-shadow:0 2px 6px rgba(100,100,100,.3)} js/term.js000066600000012157152100561500006472 0ustar00// quick edit (function( $ ) { $( document ).bind( 'DOMNodeInserted', function( e ) { var t = $( e.target ); // WP inserts the quick edit from if ( 'inline-edit' == t.attr( 'id' ) ) { var term_id = t.prev().attr( 'id' ).replace( "tag-", "" ); if ( term_id > 0 ) { // language dropdown var select = t.find( ':input[name="inline_lang_choice"]' ); var lang = $( '#lang_' + term_id ).html(); select.val( lang ); // populates the dropdown // disable the language dropdown for default categories var default_cat = $( '#default_cat_' + term_id ).html(); if ( term_id == default_cat ) { select.prop( 'disabled', true ); } } } }); })( jQuery ); // update rows of translated terms when adding / deleting a translation or when the language is modified in quick edit // acts on ajaxSuccess event (function( $ ) { $( document ).ajaxSuccess(function( event, xhr, settings ) { function update_rows( term_id ) { // collect old translations var translations = new Array; $( '.translation_' + term_id ).each(function() { translations.push( $( this ).parent().parent().attr( 'id' ).substring( 4 ) ); }); var data = { action: 'pll_update_term_rows', term_id: term_id, translations: translations.join( ',' ), taxonomy: $( "input[name='taxonomy']" ).val(), post_type: $( "input[name='post_type']" ).val(), screen: $( "input[name='screen']" ).val(), _pll_nonce: $( '#_pll_nonce' ).val() } // get the modified rows in ajax and update them $.post( ajaxurl, data, function( response ) { if ( response ) { var res = wpAjax.parseAjaxResponse( response, 'ajax-response' ); $.each( res.responses, function() { if ( 'row' == this.what ) { $( "#tag-" + this.supplemental.term_id ).replaceWith( this.data ); } }); } }); } var data = wpAjax.unserialize( settings.data ); // what were the data sent by the ajax request? if ( 'undefined' != typeof( data['action'] ) ) { switch ( data['action'] ) { // when adding a term, the new term_id is in the ajax response case 'add-tag': res = wpAjax.parseAjaxResponse( xhr.responseXML, 'ajax-response' ); $.each( res.responses, function() { if ( 'term' == this.what ) { update_rows( this.supplemental.term_id ); } }); // and also reset translations hidden input fields $( '.htr_lang' ).val( 0 ); break; // when deleting a term case 'delete-tag': update_rows( data['tag_ID'] ); break; // in case the language is modified in quick edit and breaks translations case 'inline-save-tax': update_rows( data['tax_ID'] ); break; } } }); })( jQuery ); jQuery( document ).ready(function( $ ) { // translations autocomplete input box function init_translations() { $( '.tr_lang' ).each(function(){ var tr_lang = $( this ).attr( 'id' ).substring( 8 ); var td = $( this ).parent().parent().siblings( '.pll-edit-column' ); $( this ).autocomplete({ minLength: 0, source: ajaxurl + '?action=pll_terms_not_translated' + '&term_language=' + $( '#term_lang_choice' ).val() + '&term_id=' + $( "input[name='tag_ID']" ).val() + '&taxonomy=' + $( "input[name='taxonomy']" ).val() + '&translation_language=' + tr_lang + '&post_type=' + typenow + '&_pll_nonce=' + $( '#_pll_nonce' ).val(), select: function( event, ui ) { $( '#htr_lang_' + tr_lang ).val( ui.item.id ); td.html( ui.item.link ); }, }); // when the input box is emptied $( this ).blur(function() { if ( ! $( this ).val() ) { $( '#htr_lang_' + tr_lang ).val( 0 ); td.html( td.siblings( '.hidden' ).children().clone() ); } }); }); } init_translations(); // ajax for changing the term's language $( '#term_lang_choice' ).change(function() { var value = $( this ).val(); var lang = $( this ).children( 'option[value="' + value + '"]' ).attr( 'lang' ); var dir = $( '.pll-translation-column > span[lang="' + lang + '"]' ).attr( 'dir' ); var data = { action: 'term_lang_choice', lang: value, from_tag: $( "input[name='from_tag']" ).val(), term_id: $( "input[name='tag_ID']" ).val(), taxonomy: $( "input[name='taxonomy']" ).val(), post_type: typenow, _pll_nonce: $( '#_pll_nonce' ).val() } $.post( ajaxurl, data, function( response ) { var res = wpAjax.parseAjaxResponse( response, 'ajax-response' ); $.each( res.responses, function() { switch ( this.what ) { case 'translations': // translations fields $( "#term-translations" ).html( this.data ); init_translations(); break; case 'parent': // parent dropdown list for hierarchical taxonomies $( '#parent' ).replaceWith( this.data ); break; case 'tag_cloud': // popular items $( '.tagcloud' ).replaceWith( this.data ); break; case 'flag': // flag in front of the select dropdown $( '.pll-select-flag' ).html( this.data ); break; } }); // Modifies the text direction $( 'body' ).removeClass( 'pll-dir-rtl' ).removeClass( 'pll-dir-ltr' ).addClass( 'pll-dir-' + dir ); }); }); }); js/media.min.js000066600000000153152100561500007355 0ustar00!function(a){a.ajaxPrefilter(function(t){t.data="pll_post_id="+a("#affected").val()+"&"+t.data})}(jQuery); js/media.js000066600000000374152100561500006600 0ustar00// when clicking on attach link, filters find post list per media language (function( $ ){ $.ajaxPrefilter(function ( options, originalOptions, jqXHR ) { options.data = 'pll_post_id=' + $( '#affected' ).val() + '&' + options.data; }); })( jQuery ) js/admin.js000066600000013442152100561500006611 0ustar00jQuery( document ).ready(function( $ ) { var transitionTimeout; // languages list table // accessibility to row actions on focus // mainly copy paste of WP code from common.js $( 'table.languages' ).on({ // restricted to languages list table focusin: function() { clearTimeout( transitionTimeout ); focusedRowActions = $( this ).find( '.row-actions' ); // transitionTimeout is necessary for Firefox, but Chrome won't remove the CSS class without a little help. $( '.row-actions' ).not( this ).removeClass( 'visible' ); focusedRowActions.addClass( 'visible' ); }, focusout: function() { // Tabbing between post title and .row-actions links needs a brief pause, otherwise // the .row-actions div gets hidden in transit in some browsers ( ahem, Firefox ). transitionTimeout = setTimeout(function() { focusedRowActions.removeClass( 'visible' ); }, 30 ); } }, 'tr' ); // acts on the whole tr instead of single td as we have actions links in several columns // extends selectmenu to add flags in menu items $.widget( "custom.iconselectmenu", $.ui.selectmenu, { _renderItem: function( ul, item ) { var li = $( "
  • ", { text: item.label } ); if ( item.value ) { $( "", { src: pll_flag_base_url + item.value + '.png', "class": "ui-icon" }).appendTo( li ); } return li.appendTo( ul ); } }); // allows to display the flag for the selected menu item function add_icon( event, ui ) { var value = $( this ).val(); if ( value ) { var txt = $( this ).iconselectmenu( "widget" ).children( ":last" ); var img = $( '' ).appendTo( txt ); img.attr( "src", pll_flag_base_url + value + '.png' ); } } // overrides the flag dropdown list with our customized jquery ui selectmenu $( "#flag_list" ).iconselectmenu({ create: add_icon, select: add_icon, }); // languages form // fills the fields based on the language dropdown list choice $( '#lang_list' ).change(function() { var value = $( this ).val().split( ':' ); var selected = $( "select option:selected" ).text().split( ' - ' ); $( '#lang_slug' ).val( value[0] ); $( '#lang_locale' ).val( value[1] ); $( 'input[name="rtl"]' ).val( [value[2]] ); $( '#lang_name' ).val( selected[0] ); $( '#flag_list option[value="' + value[3] + '"]' ).attr( 'selected', 'selected' ); // recreate the jquery ui selectmenu $( "#flag_list" ).iconselectmenu( 'destroy' ).iconselectmenu({ create: add_icon, select: add_icon, }) }); // strings translations // save translations when pressing enter $( '.translation input' ).keypress(function( event ){ if ( 13 === event.keyCode ) { event.preventDefault(); $( '#submit' ).click(); } }); // settings page // click on configure link $( '#the-list' ).on( 'click', '.configure>a', function(){ $( '.pll-configure' ).hide().prev().show(); $( this ).closest( 'tr' ).hide().next().show(); return false; }); // cancel $( '#the-list' ).on( 'click', '.cancel', function(){ $( this ).closest( 'tr' ).hide().prev().show(); }); // save settings $( '#the-list' ).on( 'click', '.save', function(){ var tr = $( this ).closest( 'tr' ); var parts = tr.attr( 'id' ).split( '-' ); var data = { action: 'pll_save_options', pll_ajax_settings: true, module: parts[parts.length - 1], _pll_nonce: $( '#_pll_nonce' ).val() } data = tr.find( ':input' ).serialize() + '&' + $.param( data ); $.post( ajaxurl, data, function( response ) { var res = wpAjax.parseAjaxResponse( response, 'ajax-response' ); $.each( res.responses, function() { switch ( this.what ) { case 'license-update': $( '#pll-license-' + this.data ).replaceWith( this.supplemental.html ); break; case 'success': tr.hide().prev().show(); // close only if there is no error case 'error': $( '.settings-error' ).remove(); // remove previous messages if any $( 'h1' ).after( this.data ); // Make notices dismissible // copy paste of common.js from WP 4.2.2 $( '.notice.is-dismissible' ).each(function() { var $this = $( this ), $button = $( '' ), btnText = commonL10n.dismiss || ''; // Ensure plain text $button.find( '.screen-reader-text' ).text( btnText ); $this.append( $button ); $button.on( 'click.wp-dismiss-notice', function( event ) { event.preventDefault(); $this.fadeTo( 100 , 0, function() { $( this ).slideUp( 100, function() { $( this ).remove(); }); }); }); }); break; } }); }); }); // act when pressing enter or esc in configurations $( '.pll-configure' ).keypress(function( event ){ if ( 13 === event.keyCode ) { event.preventDefault(); $( this ).find( '.save' ).click(); } if ( 27 === event.keyCode ) { event.preventDefault(); $( this ).find( '.cancel' ).click(); } }); // settings URL modifications // manages visibility of fields $( "input[name='force_lang']" ).change(function() { function pll_toggle( a, test ) { test ? a.show() : a.hide(); } var value = $( this ).val(); pll_toggle( $( '#pll-domains-table' ), 3 == value ); pll_toggle( $( "#pll-hide-default" ), 3 > value ); pll_toggle( $( "#pll-rewrite" ), 2 > value ); pll_toggle( $( "#pll-redirect-lang" ), 2 > value ); }); // settings license // deactivate button $( '.pll-deactivate-license' ).on( 'click', function() { var data = { action: 'pll_deactivate_license', pll_ajax_settings: true, id: $( this ).attr( 'id' ), _pll_nonce: $( '#_pll_nonce' ).val() } $.post( ajaxurl, data , function( response ){ $( '#pll-license-' + response.id ).replaceWith( response.html ); }); }); }); js/admin.min.js000066600000006063152100561500007374 0ustar00jQuery(document).ready(function(e){function t(){var t=e(this).val();if(t){var n=e(this).iconselectmenu("widget").children(":last"),i=e('').appendTo(n);i.attr("src",pll_flag_base_url+t+".png")}}var n;e("table.languages").on({focusin:function(){clearTimeout(n),focusedRowActions=e(this).find(".row-actions"),e(".row-actions").not(this).removeClass("visible"),focusedRowActions.addClass("visible")},focusout:function(){n=setTimeout(function(){focusedRowActions.removeClass("visible")},30)}},"tr"),e.widget("custom.iconselectmenu",e.ui.selectmenu,{_renderItem:function(t,n){var i=e("
  • ",{text:n.label});return n.value&&e("",{src:pll_flag_base_url+n.value+".png","class":"ui-icon"}).appendTo(i),i.appendTo(t)}}),e("#flag_list").iconselectmenu({create:t,select:t}),e("#lang_list").change(function(){var n=e(this).val().split(":"),i=e("select option:selected").text().split(" - ");e("#lang_slug").val(n[0]),e("#lang_locale").val(n[1]),e('input[name="rtl"]').val([n[2]]),e("#lang_name").val(i[0]),e('#flag_list option[value="'+n[3]+'"]').attr("selected","selected"),e("#flag_list").iconselectmenu("destroy").iconselectmenu({create:t,select:t})}),e(".translation input").keypress(function(t){13===t.keyCode&&(t.preventDefault(),e("#submit").click())}),e("#the-list").on("click",".configure>a",function(){return e(".pll-configure").hide().prev().show(),e(this).closest("tr").hide().next().show(),!1}),e("#the-list").on("click",".cancel",function(){e(this).closest("tr").hide().prev().show()}),e("#the-list").on("click",".save",function(){var t=e(this).closest("tr"),n=t.attr("id").split("-"),i={action:"pll_save_options",pll_ajax_settings:!0,module:n[n.length-1],_pll_nonce:e("#_pll_nonce").val()};i=t.find(":input").serialize()+"&"+e.param(i),e.post(ajaxurl,i,function(n){var i=wpAjax.parseAjaxResponse(n,"ajax-response");e.each(i.responses,function(){switch(this.what){case"license-update":e("#pll-license-"+this.data).replaceWith(this.supplemental.html);break;case"success":t.hide().prev().show();case"error":e(".settings-error").remove(),e("h1").after(this.data),e(".notice.is-dismissible").each(function(){var t=e(this),n=e(''),i=commonL10n.dismiss||"";n.find(".screen-reader-text").text(i),t.append(n),n.on("click.wp-dismiss-notice",function(n){n.preventDefault(),t.fadeTo(100,0,function(){e(this).slideUp(100,function(){e(this).remove()})})})})}})})}),e(".pll-configure").keypress(function(t){13===t.keyCode&&(t.preventDefault(),e(this).find(".save").click()),27===t.keyCode&&(t.preventDefault(),e(this).find(".cancel").click())}),e("input[name='force_lang']").change(function(){function t(e,t){t?e.show():e.hide()}var n=e(this).val();t(e("#pll-domains-table"),3==n),t(e("#pll-hide-default"),3>n),t(e("#pll-rewrite"),2>n),t(e("#pll-redirect-lang"),2>n)}),e(".pll-deactivate-license").on("click",function(){var t={action:"pll_deactivate_license",pll_ajax_settings:!0,id:e(this).attr("id"),_pll_nonce:e("#_pll_nonce").val()};e.post(ajaxurl,t,function(t){e("#pll-license-"+t.id).replaceWith(t.html)})})}); js/post.min.js000066600000010511152100561500007262 0ustar00!function(t){t.ajaxPrefilter(function(a){"string"!=typeof a.data||-1===a.url.indexOf("action=ajax-tag-search")&&-1===a.data.indexOf("action=ajax-tag-search")||!(lang=t(".post_lang_choice").val())&&!(lang=t(':input[name="inline_lang_choice"]').val())||(a.data="lang="+lang+"&"+a.data)})}(jQuery),function(t){tagBox.get=function(a){var n=a.substr(a.indexOf("-")+1),e={action:"get-tagcloud",lang:t(".post_lang_choice").val(),tax:n};t.post(ajaxurl,e,function(e,i){0!=e&&"success"==i||(e=wpAjax.broken),e=t('

    '+e+"

    "),t("a",e).click(function(){return tagBox.flushTags(t(this).closest(".inside").children(".tagsdiv"),this),!1}),(v=t(".the-tagcloud").css("display"))?(t(".the-tagcloud").replaceWith(e),t(".the-tagcloud").css("display",v)):t("#"+a).after(e)})}}(jQuery),function(t){t(document).bind("DOMNodeInserted",function(a){function n(a){"undefined"!=typeof pll_term_languages&&t.each(pll_term_languages,function(n,e){t.each(e,function(e,i){t.each(i,function(i){id="#"+e+"-"+pll_term_languages[n][e][i],a==n?t(id).show():t(id).hide()})})})}function e(a){"undefined"!=typeof pll_page_languages&&t.each(pll_page_languages,function(n,e){t.each(e,function(e){v=t('#post_parent option[value="'+pll_page_languages[n][e]+'"]'),a==n?v.show():v.hide()})})}var i=t(a.target);if("inline-edit"==i.attr("id")){var l=i.prev().attr("id").replace("post-","");if(l>0){var s=i.find(':input[name="inline_lang_choice"]'),o=t("#lang_"+l).html();s.val(o),n(o),e(o),s.change(function(){n(t(this).val()),e(t(this).val())})}}})}(jQuery),function(t){t(document).ajaxSuccess(function(a,n,e){function i(a){var n=new Array;t(".translation_"+a).each(function(){n.push(t(this).parent().parent().attr("id").substring(5))});var e={action:"pll_update_post_rows",post_id:a,translations:n.join(","),post_type:t("input[name='post_type']").val(),screen:t("input[name='screen']").val(),_pll_nonce:t("input[name='_inline_edit']").val()};t.post(ajaxurl,e,function(a){if(a){var n=wpAjax.parseAjaxResponse(a,"ajax-response");t.each(n.responses,function(){"row"==this.what&&t("#post-"+this.supplemental.post_id).replaceWith(this.data)})}})}var l=wpAjax.unserialize(e.data);"undefined"!=typeof l.action&&"inline-save"==l.action&&i(l.post_ID)})}(jQuery),jQuery(document).ready(function(t){function a(){t(".tr_lang").each(function(){var a=t(this).attr("id").substring(8),n=t(this).parent().parent().siblings(".pll-edit-column");t(this).autocomplete({minLength:0,source:ajaxurl+"?action=pll_posts_not_translated&post_language="+t(".post_lang_choice").val()+"&translation_language="+a+"&post_type="+t("#post_type").val()+"&_pll_nonce="+t("#_pll_nonce").val(),select:function(e,i){t("#htr_lang_"+a).val(i.item.id),n.html(i.item.link)}}),t(this).blur(function(){t(this).val()||(t("#htr_lang_"+a).val(0),n.html(n.siblings(".hidden").children().clone()))})})}var n=new Array;t(".categorydiv").each(function(){var a,e,i=t(this).attr("id");a=i.split("-"),a.shift(),e=a.join("-"),n.push(e),t("#"+e+"-add-submit").before(t("").attr("type","hidden").attr("id",e+"-lang").attr("name","term_lang_choice").attr("value",t(".post_lang_choice").val()))}),t(".post_lang_choice").change(function(){var e=t(this).val(),i=t(this).children('option[value="'+e+'"]').attr("lang"),l=t('.pll-translation-column > span[lang="'+i+'"]').attr("dir"),s={action:"post_lang_choice",lang:e,post_type:t("#post_type").val(),taxonomies:n,post_id:t("#post_ID").val(),_pll_nonce:t("#_pll_nonce").val()};t.post(ajaxurl,s,function(n){var e=wpAjax.parseAjaxResponse(n,"ajax-response");t.each(e.responses,function(){switch(this.what){case"translations":t(".translations").html(this.data),a();break;case"taxonomy":var n=this.data;t("#"+n+"checklist").html(this.supplemental.all),t("#"+n+"checklist-pop").html(this.supplemental.populars),t("#new"+n+"_parent").replaceWith(this.supplemental.dropdown),t("#"+n+"-lang").val(t(".post_lang_choice").val());break;case"pages":t("#parent_id").html(this.data);break;case"flag":t(".pll-select-flag").html(this.data);break;case"permalink":var e=t("#edit-slug-box");"-1"!=this.data&&e.children().length&&e.html(this.data)}}),t(".tagcloud-link").each(function(){var a=t(this).attr("id");tagBox.get(a)}),t("body").removeClass("pll-dir-rtl").removeClass("pll-dir-ltr").addClass("pll-dir-"+l),t("#content_ifr").contents().find("html").attr("lang",i).attr("dir",l),t("#content_ifr").contents().find("body").attr("dir",l)})}),a()}); js/post.js000066600000020146152100561500006505 0ustar00// tag suggest // valid for both tag metabox and quick edit (function( $ ){ $.ajaxPrefilter(function( options, originalOptions, jqXHR ) { if ( 'string' === typeof options.data && ( -1 !== options.url.indexOf( 'action=ajax-tag-search' ) || -1 !== options.data.indexOf( 'action=ajax-tag-search' ) ) && ( ( lang = $( '.post_lang_choice' ).val() ) || ( lang = $( ':input[name="inline_lang_choice"]' ).val() ) ) ) { options.data = 'lang=' + lang + '&' + options.data; } }); })( jQuery ); // overrides tagBox.get (function( $ ){ // overrides function to add the language tagBox.get = function( id ) { var tax = id.substr( id.indexOf( '-' ) + 1 ); // add the language in the $_POST variable var data = { action: 'get-tagcloud', lang: $( '.post_lang_choice' ).val(), tax: tax } $.post( ajaxurl, data, function( r, stat ) { if ( 0 == r || 'success' != stat ) { r = wpAjax.broken; } r = $( '

    ' + r + '

    ' ); $( 'a', r ).click(function(){ tagBox.flushTags( $( this ).closest( '.inside' ).children( '.tagsdiv' ), this ); return false; }); // add an if else condition to allow modifying the tags outputed when switching the language if ( v = $( '.the-tagcloud' ).css( 'display' ) ) { $( '.the-tagcloud' ).replaceWith( r ); $( '.the-tagcloud' ).css( 'display', v ); } else { $( '#' + id ).after( r ); } }); } })( jQuery ); // quick edit (function( $ ) { $( document ).bind( 'DOMNodeInserted', function( e ) { var t = $( e.target ); // WP inserts the quick edit from if ( 'inline-edit' == t.attr( 'id' ) ) { var post_id = t.prev().attr( 'id' ).replace( "post-", "" ); if ( post_id > 0 ) { // language dropdown var select = t.find( ':input[name="inline_lang_choice"]' ); var lang = $( '#lang_' + post_id ).html(); select.val( lang ); // populates the dropdown filter_terms( lang ); // initial filter for category checklist filter_pages( lang ); // initial filter for parent dropdown // modify category checklist an parent dropdown on language change select.change(function() { filter_terms( $( this ).val() ); filter_pages( $( this ).val() ); }); } } // filter category checklist function filter_terms( lang ) { if ( "undefined" != typeof( pll_term_languages ) ) { $.each( pll_term_languages, function( lg, term_tax ) { $.each( term_tax, function( tax, terms ) { $.each( terms, function( i ) { id = '#' + tax + '-' + pll_term_languages[ lg ][ tax ][ i ]; lang == lg ? $( id ).show() : $( id ).hide(); }); }); }); } } // filter parent page dropdown list function filter_pages( lang ) { if ( "undefined" != typeof( pll_page_languages ) ) { $.each( pll_page_languages, function( lg, pages ) { $.each( pages, function( i ) { v = $( '#post_parent option[value="' + pll_page_languages[ lg ][ i ] + '"]' ); lang == lg ? v.show() : v.hide(); }); }); } } }); })( jQuery ); // update rows of translated posts when the language is modified in quick edit // acts on ajaxSuccess event (function( $ ) { $( document ).ajaxSuccess(function( event, xhr, settings ) { function update_rows( post_id ) { // collect old translations var translations = new Array; $( '.translation_' + post_id ).each(function() { translations.push( $( this ).parent().parent().attr( 'id' ).substring( 5 ) ); }); var data = { action: 'pll_update_post_rows', post_id: post_id, translations: translations.join( ',' ), post_type: $( "input[name='post_type']" ).val(), screen: $( "input[name='screen']" ).val(), _pll_nonce: $( "input[name='_inline_edit']" ).val() // reuse quick edit nonce } // get the modified rows in ajax and update them $.post( ajaxurl, data, function( response ) { if ( response ) { var res = wpAjax.parseAjaxResponse( response, 'ajax-response' ); $.each( res.responses, function() { if ( 'row' == this.what ) { $( "#post-" + this.supplemental.post_id ).replaceWith( this.data ); } }); } }); } var data = wpAjax.unserialize( settings.data ); // what were the data sent by the ajax request? if ( 'undefined' != typeof( data['action'] ) && 'inline-save' == data['action'] ) { update_rows( data['post_ID'] ); } }); })( jQuery ); jQuery( document ).ready(function( $ ) { // collect taxonomies - code partly copied from WordPress var taxonomies = new Array(); $( '.categorydiv' ).each(function(){ var this_id = $( this ).attr( 'id' ), taxonomyParts, taxonomy; taxonomyParts = this_id.split( '-' ); taxonomyParts.shift(); taxonomy = taxonomyParts.join( '-' ); taxonomies.push( taxonomy ); // store the taxonomy for future use // add our hidden field in the new category form - for each hierarchical taxonomy // to set the language when creating a new category $( '#' + taxonomy + '-add-submit' ).before( $( '' ) .attr( 'type', 'hidden' ) .attr( 'id', taxonomy + '-lang' ) .attr( 'name', 'term_lang_choice' ) .attr( 'value', $( '.post_lang_choice' ).val() ) ); }); // ajax for changing the post's language in the languages metabox $( '.post_lang_choice' ).change(function() { var value = $( this ).val(); var lang = $( this ).children( 'option[value="' + value + '"]' ).attr( 'lang' ); var dir = $( '.pll-translation-column > span[lang="' + lang + '"]' ).attr( 'dir' ); var data = { action: 'post_lang_choice', lang: value, post_type: $( '#post_type' ).val(), taxonomies: taxonomies, post_id: $( '#post_ID' ).val(), _pll_nonce: $( '#_pll_nonce' ).val() } $.post( ajaxurl, data , function( response ) { var res = wpAjax.parseAjaxResponse( response, 'ajax-response' ); $.each( res.responses, function() { switch ( this.what ) { case 'translations': // translations fields $( '.translations' ).html( this.data ); init_translations(); break; case 'taxonomy': // categories metabox for posts var tax = this.data; $( '#' + tax + 'checklist' ).html( this.supplemental.all ); $( '#' + tax + 'checklist-pop' ).html( this.supplemental.populars ); $( '#new' + tax + '_parent' ).replaceWith( this.supplemental.dropdown ); $( '#' + tax + '-lang' ).val( $( '.post_lang_choice' ).val() ); // hidden field break; case 'pages': // parent dropdown list for pages $( '#parent_id' ).html( this.data ); break; case 'flag': // flag in front of the select dropdown $( '.pll-select-flag' ).html( this.data ); break; case 'permalink': // Sample permalink var div = $( '#edit-slug-box' ); if ( '-1' != this.data && div.children().length ) { div.html( this.data ); } break; } }); // modifies the language in the tag cloud $( '.tagcloud-link' ).each(function() { var id = $( this ).attr( 'id' ); tagBox.get( id ); }); // Modifies the text direction $( 'body' ).removeClass( 'pll-dir-rtl' ).removeClass( 'pll-dir-ltr' ).addClass( 'pll-dir-' + dir ); $( '#content_ifr' ).contents().find( 'html' ).attr( 'lang', lang ).attr( 'dir', dir ); $( '#content_ifr' ).contents().find( 'body' ).attr( 'dir', dir ); }); }); // translations autocomplete input box function init_translations() { $( '.tr_lang' ).each(function(){ var tr_lang = $( this ).attr( 'id' ).substring( 8 ); var td = $( this ).parent().parent().siblings( '.pll-edit-column' ); $( this ).autocomplete({ minLength: 0, source: ajaxurl + '?action=pll_posts_not_translated' + '&post_language=' + $( '.post_lang_choice' ).val() + '&translation_language=' + tr_lang + '&post_type=' + $( '#post_type' ).val() + '&_pll_nonce=' + $( '#_pll_nonce' ).val(), select: function( event, ui ) { $( '#htr_lang_' + tr_lang ).val( ui.item.id ); td.html( ui.item.link ); }, }); // when the input box is emptied $( this ).blur(function() { if ( ! $( this ).val() ) { $( '#htr_lang_' + tr_lang ).val( 0 ); td.html( td.siblings( '.hidden' ).children().clone() ); } }); }); } init_translations(); }); js/term.min.js000066600000005373152100561500007256 0ustar00!function(a){a(document).bind("DOMNodeInserted",function(t){var n=a(t.target);if("inline-edit"==n.attr("id")){var e=n.prev().attr("id").replace("tag-","");if(e>0){var l=n.find(':input[name="inline_lang_choice"]'),i=a("#lang_"+e).html();l.val(i);var r=a("#default_cat_"+e).html();e==r&&l.prop("disabled",!0)}}})}(jQuery),function(a){a(document).ajaxSuccess(function(t,n,e){function l(t){var n=new Array;a(".translation_"+t).each(function(){n.push(a(this).parent().parent().attr("id").substring(4))});var e={action:"pll_update_term_rows",term_id:t,translations:n.join(","),taxonomy:a("input[name='taxonomy']").val(),post_type:a("input[name='post_type']").val(),screen:a("input[name='screen']").val(),_pll_nonce:a("#_pll_nonce").val()};a.post(ajaxurl,e,function(t){if(t){var n=wpAjax.parseAjaxResponse(t,"ajax-response");a.each(n.responses,function(){"row"==this.what&&a("#tag-"+this.supplemental.term_id).replaceWith(this.data)})}})}var i=wpAjax.unserialize(e.data);if("undefined"!=typeof i.action)switch(i.action){case"add-tag":res=wpAjax.parseAjaxResponse(n.responseXML,"ajax-response"),a.each(res.responses,function(){"term"==this.what&&l(this.supplemental.term_id)}),a(".htr_lang").val(0);break;case"delete-tag":l(i.tag_ID);break;case"inline-save-tax":l(i.tax_ID)}})}(jQuery),jQuery(document).ready(function(a){function t(){a(".tr_lang").each(function(){var t=a(this).attr("id").substring(8),n=a(this).parent().parent().siblings(".pll-edit-column");a(this).autocomplete({minLength:0,source:ajaxurl+"?action=pll_terms_not_translated&term_language="+a("#term_lang_choice").val()+"&term_id="+a("input[name='tag_ID']").val()+"&taxonomy="+a("input[name='taxonomy']").val()+"&translation_language="+t+"&post_type="+typenow+"&_pll_nonce="+a("#_pll_nonce").val(),select:function(e,l){a("#htr_lang_"+t).val(l.item.id),n.html(l.item.link)}}),a(this).blur(function(){a(this).val()||(a("#htr_lang_"+t).val(0),n.html(n.siblings(".hidden").children().clone()))})})}t(),a("#term_lang_choice").change(function(){var n=a(this).val(),e=a(this).children('option[value="'+n+'"]').attr("lang"),l=a('.pll-translation-column > span[lang="'+e+'"]').attr("dir"),i={action:"term_lang_choice",lang:n,from_tag:a("input[name='from_tag']").val(),term_id:a("input[name='tag_ID']").val(),taxonomy:a("input[name='taxonomy']").val(),post_type:typenow,_pll_nonce:a("#_pll_nonce").val()};a.post(ajaxurl,i,function(n){var e=wpAjax.parseAjaxResponse(n,"ajax-response");a.each(e.responses,function(){switch(this.what){case"translations":a("#term-translations").html(this.data),t();break;case"parent":a("#parent").replaceWith(this.data);break;case"tag_cloud":a(".tagcloud").replaceWith(this.data);break;case"flag":a(".pll-select-flag").html(this.data)}}),a("body").removeClass("pll-dir-rtl").removeClass("pll-dir-ltr").addClass("pll-dir-"+l)})})}); js/user.min.js000066600000000610152100561500007252 0ustar00jQuery(document).ready(function(e){var n=e("#description").parent(),d=e("#description").clone(),i=n.children(".description").clone();n.children().remove(),e(".biography").each(function(){lang=e(this).attr("name").split("___"),desc=d.clone(),desc.attr("name","description_"+lang[0]),desc.html(e(this).val()),n.append("
    "+lang[1]+""),n.append(i)}); js/nav-menu.js000066600000004724152100561500007252 0ustar00jQuery( document ).ready(function( $ ) { $( '#update-nav-menu' ).bind( 'click', function( e ) { if ( e.target && e.target.className && -1 != e.target.className.indexOf( 'item-edit' ) ) { $( "input[value='#pll_switcher'][type=text]" ).parent().parent().parent().each(function(){ var item = $( this ).attr( 'id' ).substring( 19 ); $( this ).children( 'p:not( .field-move )' ).remove(); // remove default fields we don't need h = $( '' ).attr({ type: 'hidden', id: 'edit-menu-item-title-' + item, name: 'menu-item-title[' + item + ']', value: pll_data.title }); $( this ).append( h ); h = $( '' ).attr({ type: 'hidden', id: 'edit-menu-item-url-' + item, name: 'menu-item-url[' + item + ']', value: '#pll_switcher' }); $( this ).append( h ); // a hidden field which exits only if our jQuery code has been executed h = $( '' ).attr({ type: 'hidden', id: 'edit-menu-item-pll-detect-' + item, name: 'menu-item-pll-detect[' + item + ']', value: 1 }); $( this ).append( h ); ids = Array( 'hide_if_no_translation', 'hide_current', 'force_home', 'show_flags', 'show_names', 'dropdown' ); // reverse order // add the fields for ( var i = 0; i < ids.length; i++ ) { p = $( '

    ' ).attr( 'class', 'description' ); $( this ).prepend( p ); label = $( '

    ' + lang[1] + '' ); td.append( span ); }); modules/plugins/plugins-compat.php000066600000067237152100561500013366 0ustar00getFileName() ) ) . '/languages' ); $GLOBALS['wp_import'] = new PLL_WP_Import(); register_importer( 'wordpress', 'WordPress', __( 'Import posts, pages, comments, custom fields, categories, and tags from a WordPress export file.', 'wordpress-importer' ), array( $GLOBALS['wp_import'], 'dispatch' ) ); // WPCS: spelling ok. } /** * WordPress Importer * Backward Compatibility Polylang < 1.8 * Sets the flag when importing a language and the file has been exported with Polylang < 1.8 * * @since 1.8 * * @param array $terms an array of arrays containing terms information form the WXR file * @return array */ function wp_import_terms( $terms ) { include PLL_SETTINGS_INC . '/languages.php'; foreach ( $terms as $key => $term ) { if ( 'language' === $term['term_taxonomy'] ) { $description = maybe_unserialize( $term['term_description'] ); if ( empty( $description['flag_code'] ) && isset( $languages[ $description['locale'] ] ) ) { $description['flag_code'] = $languages[ $description['locale'] ][4]; $terms[ $key ]['term_description'] = serialize( $description ); } } } return $terms; } /** * YARPP * Just makes YARPP aware of the language taxonomy ( after Polylang registered it ) * * @since 1.0 */ public function yarpp_init() { $GLOBALS['wp_taxonomies']['language']->yarpp_support = 1; } /** * Yoast SEO * Translate options and add specific filters and actions * * @since 1.6.4 */ public function wpseo_init() { if ( ! defined( 'WPSEO_VERSION' ) ) { return; } if ( ! PLL() instanceof PLL_Frontend ) { add_action( 'admin_init', array( $this, 'wpseo_register_strings' ) ); return; } add_filter( 'option_wpseo_titles', array( $this, 'wpseo_translate_titles' ) ); // Reloads options once the language has been defined to enable translations // Useful only when the language is set from content if ( did_action( 'wp_loaded' ) ) { if ( version_compare( WPSEO_VERSION, '1.7.2', '<' ) ) { global $wpseo_front; } else { $wpseo_front = WPSEO_Frontend::get_instance(); } $options = version_compare( WPSEO_VERSION, '1.5', '<' ) ? get_wpseo_options_arr() : WPSEO_Options::get_option_names(); foreach ( $options as $opt ) { $wpseo_front->options = array_merge( $wpseo_front->options, (array) get_option( $opt ) ); } } // Filters sitemap queries to remove inactive language or to get // one sitemap per language when using multiple domains or subdomains // because WPSEO does not accept several domains or subdomains in one sitemap add_filter( 'wpseo_posts_join', array( $this, 'wpseo_posts_join' ), 10, 2 ); add_filter( 'wpseo_posts_where', array( $this, 'wpseo_posts_where' ), 10, 2 ); add_filter( 'wpseo_typecount_join', array( $this, 'wpseo_posts_join' ), 10, 2 ); add_filter( 'wpseo_typecount_where', array( $this, 'wpseo_posts_where' ), 10, 2 ); if ( PLL()->options['force_lang'] > 1 ) { add_filter( 'wpseo_enable_xml_sitemap_transient_caching', '__return_false' ); // Disable cache! otherwise WPSEO keeps only one domain (thanks to Junaid Bhura) add_filter( 'home_url', array( $this, 'wpseo_home_url' ) , 10, 2 ); // Fix home_url } else { // Get all terms in all languages when the language is set from the content or directory name add_filter( 'get_terms_args', array( $this, 'wpseo_remove_terms_filter' ) ); // Add the homepages for all languages to the sitemap when the front page displays posts if ( ! get_option( 'page_on_front' ) ) { add_filter( 'wpseo_sitemap_post_content', array( $this, 'add_language_home_urls' ) ); } } add_filter( 'pll_home_url_white_list', array( $this, 'wpseo_home_url_white_list' ) ); add_action( 'wpseo_opengraph', array( $this, 'wpseo_ogp' ), 2 ); add_filter( 'wpseo_canonical', array( $this, 'wpseo_canonical' ) ); } /** * Yoast SEO * Helper function to register strings for custom post types and custom taxonomies titles and meta descriptions * * @since 2.1.6 * * @param array $options * @param array $titles * @return array */ protected function _wpseo_register_strings( $options, $titles ) { foreach ( $titles as $title ) { if ( ! empty( $options[ $title ] ) ) { pll_register_string( $title, $options[ $title ], 'wordpress-seo' ); } } return $options; } /** * Yoast SEO * Registers strings for custom post types and custom taxonomies titles and meta descriptions * * @since 2.0 */ function wpseo_register_strings() { $options = get_option( 'wpseo_titles' ); foreach ( get_post_types( array( 'public' => true, '_builtin' => false ) ) as $t ) { if ( pll_is_translated_post_type( $t ) ) { $this->_wpseo_register_strings( $options, array( 'title-' . $t, 'metadesc-' . $t ) ); } } foreach ( get_post_types( array( 'has_archive' => true, '_builtin' => false ) ) as $t ) { if ( pll_is_translated_post_type( $t ) ) { $this->_wpseo_register_strings( $options, array( 'title-ptarchive-' . $t, 'metadesc-ptarchive-' . $t, 'bctitle-ptarchive-' . $t ) ); } } foreach ( get_taxonomies( array( 'public' => true, '_builtin' => false ) ) as $t ) { if ( pll_is_translated_taxonomy( $t ) ) { $this->_wpseo_register_strings( $options, array( 'title-tax-' . $t, 'metadesc-tax-' . $t ) ); } } } /** * Yoast SEO * Helper function to translate custom post types and custom taxonomies titles and meta descriptions * * @since 2.1.6 * * @param array $options * @param array $titles * @return array */ protected function _wpseo_translate_titles( $options, $titles ) { foreach ( $titles as $title ) { if ( ! empty( $options[ $title ] ) ) { $options[ $title ] = pll__( $options[ $title ] ); } } return $options; } /** * Yoast SEO * Translates strings for custom post types and custom taxonomies titles and meta descriptions * * @since 2.0 * * @param array $options * @return array */ function wpseo_translate_titles( $options ) { if ( PLL() instanceof PLL_Frontend ) { foreach ( get_post_types( array( 'public' => true, '_builtin' => false ) ) as $t ) { if ( pll_is_translated_post_type( $t ) ) { $options = $this->_wpseo_translate_titles( $options, array( 'title-' . $t, 'metadesc-' . $t ) ); } } foreach ( get_post_types( array( 'has_archive' => true, '_builtin' => false ) ) as $t ) { if ( pll_is_translated_post_type( $t ) ) { $options = $this->_wpseo_translate_titles( $options, array( 'title-ptarchive-' . $t, 'metadesc-ptarchive-' . $t, 'bctitle-ptarchive-' . $t ) ); } } foreach ( get_taxonomies( array( 'public' => true, '_builtin' => false ) ) as $t ) { if ( pll_is_translated_taxonomy( $t ) ) { $options = $this->_wpseo_translate_titles( $options, array( 'title-tax-' . $t, 'metadesc-tax-' . $t ) ); } } } return $options; } /** * Yoast SEO * Fixes the home url as well as the stylesheet url * Only when using multiple domains or subdomains * * @since 1.6.4 * * @param string $url * @param string $path * @return $url */ public function wpseo_home_url( $url, $path ) { $uri = empty( $path ) ? ltrim( $_SERVER['REQUEST_URI'], '/' ) : $path; if ( 'sitemap_index.xml' === $uri || preg_match( '#([^/]+?)-sitemap([0-9]+)?\.xml|([a-z]+)?-?sitemap\.xsl#', $uri ) ) { $url = PLL()->links_model->switch_language_in_link( $url, PLL()->curlang ); } return $url; } /** * Yoast SEO * Get active languages for the sitemaps * * @since 2.0 * * @return array list of active language slugs, empty if all languages are active */ protected function wpseo_get_active_languages() { $languages = PLL()->model->get_languages_list(); if ( wp_list_filter( $languages, array( 'active' => false ) ) ) { return wp_list_pluck( wp_list_filter( $languages, array( 'active' => false ), 'NOT' ), 'slug' ); } return array(); } /** * Yoast SEO * Modifies the sql request for posts sitemaps * Only when using multiple domains or subdomains or if some languages are not active * * @since 1.6.4 * * @param string $sql JOIN clause * @param string $post_type * @return string */ public function wpseo_posts_join( $sql, $post_type ) { return pll_is_translated_post_type( $post_type ) && ( PLL()->options['force_lang'] > 1 || $this->wpseo_get_active_languages() ) ? $sql . PLL()->model->post->join_clause() : $sql; } /** * Yoast SEO * Modifies the sql request for posts sitemaps * Only when using multiple domains or subdomains or if some languages are not active * * @since 1.6.4 * * @param string $sql WHERE clause * @param string $post_type * @return string */ public function wpseo_posts_where( $sql, $post_type ) { if ( pll_is_translated_post_type( $post_type ) ) { if ( PLL()->options['force_lang'] > 1 ) { return $sql . PLL()->model->post->where_clause( PLL()->curlang ); } if ( $languages = $this->wpseo_get_active_languages() ) { return $sql . PLL()->model->post->where_clause( $languages ); } } return $sql; } /** * Yoast SEO * Removes the language filter (and remove inactive languages) for the taxonomy sitemaps * Only when the language is set from the content or directory name * * @since 1.0.3 * * @param array $args get_terms arguments * @return array modified list of arguments */ public function wpseo_remove_terms_filter( $args ) { if ( isset( $GLOBALS['wp_query']->query['sitemap'] ) ) { $args['lang'] = implode( ',', $this->wpseo_get_active_languages() ); } return $args; } /** * Yoast SEO * Adds the home urls for all (active) languages to the sitemap * * @since 1.9 * * @param string $str additional urls to sitemap post * @return string */ public function add_language_home_urls( $str ) { global $wpseo_sitemaps; $renderer = version_compare( WPSEO_VERSION, '3.2', '<' ) ? $wpseo_sitemaps : $wpseo_sitemaps->renderer; $languages = wp_list_pluck( wp_list_filter( PLL()->model->get_languages_list() , array( 'active' => false ), 'NOT' ), 'slug' ); foreach ( $languages as $lang ) { if ( empty( PLL()->options['hide_default'] ) || pll_default_language() !== $lang ) { $str .= $renderer->sitemap_url( array( 'loc' => pll_home_url( $lang ), 'pri' => 1, 'chf' => apply_filters( 'wpseo_sitemap_homepage_change_freq', 'daily', pll_home_url( $lang ) ), ) ); } } return $str; } /** * Yoast SEO * * @since 1.1.2 * * @param array $arr * @return array */ public function wpseo_home_url_white_list( $arr ) { return array_merge( $arr, array( array( 'file' => 'wordpress-seo' ) ) ); } /** * Yoast SEO * Adds opengraph support for translations * * @since 1.6 */ public function wpseo_ogp() { global $wpseo_og; // WPSEO already deals with the locale if ( did_action( 'pll_init' ) && method_exists( $wpseo_og, 'og_tag' ) ) { foreach ( PLL()->model->get_languages_list() as $language ) { if ( PLL()->curlang->slug !== $language->slug && PLL()->links->get_translation_url( $language ) && $fb_locale = self::get_fb_locale( $language ) ) { $wpseo_og->og_tag( 'og:locale:alternate', $fb_locale ); } } } } /** * Yoast SEO * Fixes the canonical front page url as unlike WP, WPSEO does not add a trailing slash to the canonical front page url * * @since 1.7.10 * * @param string $url * @return $url */ public function wpseo_canonical( $url ) { return is_front_page( $url ) && get_option( 'permalink_structure' ) ? trailingslashit( $url ) : $url; } /** * Aqua Resizer * * @since 1.1.5 * * @param array $arr * @return array */ public function aq_home_url_black_list( $arr ) { return array_merge( $arr, array( array( 'function' => 'aq_resize' ) ) ); } /** * Custom field template * Custom field template does check $_REQUEST['post'] to populate the custom fields values * * @since 1.0.2 * * @param string $post_type unused * @param object $post current post object */ public function cft_copy( $post_type, $post ) { global $custom_field_template; if ( isset( $custom_field_template, $_REQUEST['from_post'], $_REQUEST['new_lang'] ) && ! empty( $post ) ) { $_REQUEST['post'] = $post->ID; } } /** * Twenty Fourteen * Rewrites the function Featured_Content::get_featured_post_ids() * * @since 1.4 * * @param array $featured_ids featured posts ids * @return array modified featured posts ids ( include all languages ) */ public function twenty_fourteen_featured_content_ids( $featured_ids ) { if ( 'twentyfourteen' != get_template() || ! did_action( 'pll_init' ) || false !== $featured_ids ) { return $featured_ids; } $settings = Featured_Content::get_setting(); if ( ! $term = wpcom_vip_get_term_by( 'name', $settings['tag-name'], 'post_tag' ) ) { return $featured_ids; } // Get featured tag translations $tags = PLL()->model->term->get_translations( $term->term_id ); $ids = array(); // Query for featured posts in all languages // One query per language to get the correct number of posts per language foreach ( $tags as $tag ) { $_ids = get_posts( array( 'lang' => 0, // avoid language filters 'fields' => 'ids', 'numberposts' => Featured_Content::$max_posts, 'tax_query' => array( array( 'taxonomy' => 'post_tag', 'terms' => (int) $tag, ), ), ) ); $ids = array_merge( $ids, $_ids ); } $ids = array_map( 'absint', $ids ); set_transient( 'featured_content_ids', $ids ); return $ids; } /** * Twenty Fourteen * Translates the featured tag id in featured content settings * Mainly to allow hiding it when requested in featured content options * Acts only on frontend * * @since 1.4 * * @param array $settings featured content settings * @return array modified $settings */ public function twenty_fourteen_option_featured_content( $settings ) { if ( 'twentyfourteen' == get_template() && PLL() instanceof PLL_Frontend && $settings['tag-id'] && $tr = pll_get_term( $settings['tag-id'] ) ) { $settings['tag-id'] = $tr; } return $settings; } /** * Duplicate Post * Avoid duplicating the 'post_translations' taxonomy * * @since 1.8 * * @param array $taxonomies * @return array */ function duplicate_post_taxonomies_blacklist( $taxonomies ) { $taxonomies[] = 'post_translations'; return $taxonomies; } /** * Jetpack * Add filters * * @since 2.1 */ public function jetpack_init() { if ( ! defined( 'JETPACK__VERSION' ) ) { return; } // Infinite scroll ajax url must be on the right domain if ( did_action( 'pll_init' ) && PLL()->options['force_lang'] > 1 ) { add_filter( 'infinite_scroll_ajax_url', array( PLL()->links_model, 'site_url' ) ); add_filter( 'infinite_scroll_js_settings', array( $this, 'jetpack_infinite_scroll_js_settings' ) ); } } /** * Jetpack * Filter the Top Posts and Pages by language. * Adapted from the same function in jetpack-3.0.2/3rd-party/wpml.php * * @since 1.5.4 * * @param array $posts Array of the most popular posts. * @param array $post_ids Array of Post IDs. * @param string $count Number of Top Posts we want to display. * @return array */ public function jetpack_widget_get_top_posts( $posts, $post_ids, $count ) { foreach ( $posts as $k => $post ) { if ( pll_current_language() !== pll_get_post_language( $post['post_id'] ) ) { unset( $posts[ $k ] ); } } return $posts; } /** * Jetpack * Filter the HTML of the Contact Form and output the one requested by language. * Adapted from the same function in jetpack-3.0.2/3rd-party/wpml.php * Keeps using 'icl_translate' as the function registers the string * * @since 1.5.4 * * @param string $r Contact Form HTML output. * @param string $field_label Field label. * @param int|null $id Post ID. * @return string */ public function grunion_contact_form_field_html_filter( $r, $field_label, $id ) { if ( function_exists( 'icl_translate' ) ) { if ( pll_current_language() !== pll_default_language() ) { $label_translation = icl_translate( 'jetpack ', $field_label . '_label', $field_label ); $r = str_replace( $field_label, $label_translation, $r ); } } return $r; } /** * Jetpack * Adds opengraph support for locale and translations * * @since 1.6 * * @param array $tags opengraph tags to output * @return array */ public function jetpack_ogp( $tags ) { if ( did_action( 'pll_init' ) ) { foreach ( PLL()->model->get_languages_list() as $language ) { if ( PLL()->curlang->slug !== $language->slug && PLL()->links->get_translation_url( $language ) && $fb_locale = self::get_fb_locale( $language ) ) { $tags['og:locale:alternate'][] = $fb_locale; } if ( PLL()->curlang->slug === $language->slug && $fb_locale = self::get_fb_locale( $language ) ) { $tags['og:locale'] = $fb_locale; } } } return $tags; } /** * Jetpack * Allows to make sure that related posts are in the correct language * * @since 1.8 * * @param array $filters Array of ElasticSearch filters based on the post_id and args. * @param string $post_id Post ID of the post for which we are retrieving Related Posts. * @return array */ function jetpack_relatedposts_filter_filters( $filters, $post_id ) { $slug = sanitize_title( pll_get_post_language( $post_id, 'slug' ) ); $filters[] = array( 'term' => array( 'taxonomy.language.slug' => $slug ) ); return $filters; } /** * Jetpack * Fixes the settings history host for infinite scroll when using subdomains or multiple domains * * @since 2.1 * * @param array $settings * @return array */ public function jetpack_infinite_scroll_js_settings( $settings ) { $settings['history']['host'] = parse_url( pll_home_url(), PHP_URL_HOST ); // Jetpack uses get_option( 'home' ) return $settings; } /** * WP Sweep * Add 'term_language' and 'term_translations' to excluded taxonomies otherwise terms loose their language and translation group * * @since 2.0 * * @param array $excluded_taxonomies list of taxonomies excluded from sweeping * @return array */ public function wp_sweep_excluded_taxonomies( $excluded_taxonomies ) { return array_merge( $excluded_taxonomies, array( 'term_language', 'term_translations' ) ); } /** * Twenty Seventeen * Translates the front page panels * * @since 2.0.10 */ public function twenty_seventeen_init() { if ( 'twentyseventeen' === get_template() && function_exists( 'twentyseventeen_panel_count' ) && did_action( 'pll_init' ) && PLL() instanceof PLL_Frontend ) { $num_sections = twentyseventeen_panel_count(); for ( $i = 1; $i < ( 1 + $num_sections ); $i++ ) { add_filter( 'theme_mod_panel_' . $i, 'pll_get_post' ); } } } /** * Make sure No category base plugins (including Yoast SEO) get all categories when flushing rules * * @since 2.1 * * @param array $args * @return array */ public function no_category_base_get_terms_args( $args ) { if ( doing_filter( 'category_rewrite_rules' ) ) { $args['lang'] = ''; } return $args; } /** * WordPress MU Domain Mapping * Fix primary domain check which forces only one domain per blog * Accept only known domains/subdomains for the current blog * * @since 2.2 */ public function dm_redirect_to_mapped_domain() { // Don't redirect the main site if ( is_main_site() ) { return; } // Don't redirect post previews if ( isset( $_GET['preview'] ) && 'true' === $_GET['preview'] ) { return; } // Don't redirect theme customizer if ( isset( $_POST['customize'] ) && isset( $_POST['theme'] ) && 'on' === $_POST['customize'] ) { return; } // If we can't associate the requested domain to a language, redirect to the default domain $options = get_option( 'polylang' ); if ( $options['force_lang'] > 1 ) { $hosts = PLL()->links_model->get_hosts(); $lang = array_search( $_SERVER['HTTP_HOST'], $hosts ); if ( empty( $lang ) ) { $status = get_site_option( 'dm_301_redirect' ) ? '301' : '302'; // Honor status redirect option $redirect = ( is_ssl() ? 'https://' : 'http://' ) . $hosts[ $options['default_lang'] ] . $_SERVER['REQUEST_URI']; wp_redirect( $redirect, $status ); exit; } } } /** * Correspondance between WordPress locales and Facebook locales * @see https://translate.wordpress.org/ * @see https://www.facebook.com/translations/FacebookLocales.xml * * @since 1.8.1 Update the list of locales * @since 1.6 * * @param object $language * @return bool|string Facebook locale, false if no correspondance found */ static public function get_fb_locale( $language ) { static $facebook_locales = array( 'af' => 'af_ZA', 'ak' => 'ak_GH', 'am' => 'am_ET', 'ar' => 'ar_AR', 'arq' => 'ar_AR', 'ary' => 'ar_AR', 'as' => 'as_IN', 'az' => 'az_AZ', 'bel' => 'be_BY', 'bg_BG' => 'bg_BG', 'bn_BD' => 'bn_IN', 'bre' => 'br_FR', 'bs_BA' => 'bs_BA', 'ca' => 'ca_ES', 'ceb' => 'cx_PH', 'ckb' => 'cb_IQ', 'co' => 'co_FR', 'cs_CZ' => 'cs_CZ', 'cy' => 'cy_GB', 'da_DK' => 'da_DK', 'de_CH' => 'de_DE', 'de_DE' => 'de_DE', 'de_DE_formal' => 'de_DE', 'el' => 'el_GR', 'en_AU' => 'en_US', 'en_CA' => 'en_US', 'en_GB' => 'en_GB', 'en_NZ' => 'en_US', 'en_US' => 'en_US', 'en_ZA' => 'en_US', 'eo' => 'eo_EO', 'es_AR' => 'es_LA', 'es_CL' => 'es_CL', 'es_CO' => 'es_CO', 'es_MX' => 'es_MX', 'es_PE' => 'es_LA', 'es_ES' => 'es_ES', 'es_VE' => 'es_VE', 'et' => 'et_EE', 'eu' => 'eu_ES', 'fa_IR' => 'fa_IR', 'fi' => 'fi_FI', 'fo' => 'fo_FO', 'fr_CA' => 'fr_CA', 'fr_FR' => 'fr_FR', 'fuc' => 'ff_NG', 'fy' => 'fy_NL', 'ga' => 'ga_IE', 'gl_ES' => 'gl_ES', 'gn' => 'gn_PY', 'gu' => 'gu_IN', 'he_IL' => 'he_IL', 'hi_IN' => 'hi_IN', 'hr' => 'hr_HR', 'hu_HU' => 'hu_HU', 'hy' => 'hy_AM', 'id_ID' => 'id_ID', 'is_IS' => 'is_IS', 'it_IT' => 'it_IT', 'ja' => 'ja_JP', 'jv_ID' => 'jv_ID', 'ka_GE' => 'ka_GE', 'kin' => 'rw_RW', 'kk' => 'kk_KZ', 'km' => 'km_kH', 'kn' => 'kn_IN', 'ko_KR' => 'ko_KR', 'ku' => 'ku_TR', 'ky_KY' => 'ky_KG', 'la' => 'la_Va', 'li' => 'li_NL', 'lin' => 'ln_CD', 'lo' => 'lo_LA', 'lt_LT' => 'lt_LT', 'lv' => 'lv_LV', 'mg_MG' => 'mg_MG', 'mk_MK' => 'mk_MK', 'ml_IN' => 'ml_IN', 'mn' => 'mn_MN', 'mr' => 'mr_IN', 'mri' => 'mi_NZ', 'ms_MY' => 'ms_MY', 'my_MM' => 'my_MM', 'ne_NP' => 'ne_NP', 'nb_NO' => 'nb_NO', 'nl_BE' => 'nl_BE', 'nl_NL' => 'nl_NL', 'nn_NO' => 'nn_NO', 'ory' => 'or_IN', 'pa_IN' => 'pa_IN', 'pl_PL' => 'pl_PL', 'ps' => 'ps_AF', 'pt_BR' => 'pt_BR', 'pt_PT' => 'pt_PT', 'ps' => 'ps_AF', 'ro_RO' => 'ro_RO', 'roh' => 'rm_CH', 'ru_RU' => 'ru_RU', 'sa_IN' => 'sa_IN', 'si_LK' => 'si_LK', 'sk_SK' => 'sk_SK', 'sl_SI' => 'sl_SI', 'so_SO' => 'so_SO', 'sq' => 'sq_AL', 'sr_RS' => 'sr_RS', 'srd' => 'sc_IT', 'sv_SE' => 'sv_SE', 'sw' => 'sw_KE', 'szl' => 'sz_PL', 'ta_LK' => 'ta_IN', 'ta_IN' => 'ta_IN', 'te' => 'te_IN', 'tg' => 'tg_TJ', 'th' => 'th_TH', 'tl' => 'tl_PH', 'tuk' => 'tk_TM', 'tr_TR' => 'tr_TR', 'tt_RU' => 'tt_RU', 'tzm' => 'tz_MA', 'uk' => 'uk_UA', 'ur' => 'ur_PK', 'uz_UZ' => 'uz_UZ', 'vi' => 'vi_VN', 'yor' => 'yo_NG', 'zh_CN' => 'zh_CN', 'zh_HK' => 'zh_HK', 'zh_TW' => 'zh_TW', ); return isset( $facebook_locales[ $language->locale ] ) ? $facebook_locales[ $language->locale ] : false; } } modules/plugins/wp-import.php000066600000013624152100561500012351 0ustar00terms foreach ( $this->terms as $term ) { if ( 'post_translations' == $term['term_taxonomy'] ) { $this->post_translations[] = $term; } if ( 'term_translations' == $term['term_taxonomy'] ) { $term_translations[] = $term; } } parent::process_terms(); // update the languages list if needed // first reset the core terms cache as WordPress Importer calls wp_suspend_cache_invalidation( true ); wp_cache_set( 'last_changed', microtime(), 'terms' ); PLL()->model->clean_languages_cache(); if ( ( $options = get_option( 'polylang' ) ) && empty( $options['default_lang'] ) && ( $languages = PLL()->model->get_languages_list() ) ) { // assign the default language if importer created the first language $default_lang = reset( $languages ); $options['default_lang'] = $default_lang->slug; update_option( 'polylang', $options ); } $this->remap_terms_relations( $term_translations ); $this->remap_translations( $term_translations, $this->processed_terms ); } /** * overrides WP_Import::process_post to remap posts translations * also merges strings translations from the WXR file to the existing ones * * @since 1.2 */ function process_posts() { $menu_items = $mo_posts = array(); // store this for future usage as parent function unset $this->posts foreach ( $this->posts as $post ) { if ( 'nav_menu_item' == $post['post_type'] ) { $menu_items[] = $post; } if ( 0 === strpos( $post['post_title'], 'polylang_mo_' ) ) { $mo_posts[] = $post; } } if ( ! empty( $mo_posts ) ) { new PLL_MO(); // just to register the polylang_mo post type before processing posts } parent::process_posts(); PLL()->model->clean_languages_cache(); // to update the posts count in ( cached ) languages list $this->remap_translations( $this->post_translations, $this->processed_posts ); unset( $this->post_translations ); // language switcher menu items foreach ( $menu_items as $item ) { foreach ( $item['postmeta'] as $meta ) { if ( '_pll_menu_item' == $meta['key'] ) { update_post_meta( $this->processed_menu_items[ $item['post_id'] ], '_pll_menu_item', maybe_unserialize( $meta['value'] ) ); } } } // merge strings translations foreach ( $mo_posts as $post ) { $lang_id = (int) substr( $post['post_title'], 12 ); if ( ! empty( $this->processed_terms[ $lang_id ] ) ) { if ( $strings = unserialize( $post['post_content'] ) ) { $mo = new PLL_MO(); $mo->import_from_db( $this->processed_terms[ $lang_id ] ); foreach ( $strings as $msg ) { $mo->add_entry_or_merge( $mo->make_entry( $msg[0], $msg[1] ) ); } $mo->export_to_db( $this->processed_terms[ $lang_id ] ); } } // delete the now useless imported post wp_delete_post( $this->processed_posts[ $post['post_id'] ], true ); } } /** * remaps terms languages * * @since 1.2 * * @param array $terms array of terms in 'term_translations' taxonomy */ function remap_terms_relations( &$terms ) { global $wpdb; foreach ( $terms as $term ) { $translations = unserialize( $term['term_description'] ); foreach ( $translations as $slug => $old_id ) { if ( $old_id && ! empty( $this->processed_terms[ $old_id ] ) && $lang = PLL()->model->get_language( $slug ) ) { // language relationship $trs[] = $wpdb->prepare( '( %d, %d )', $this->processed_terms[ $old_id ], $lang->tl_term_taxonomy_id ); // translation relationship $trs[] = $wpdb->prepare( '( %d, %d )', $this->processed_terms[ $old_id ], get_term( $this->processed_terms[ $term['term_id'] ], 'term_translations' )->term_taxonomy_id ); } } } // insert term_relationships if ( ! empty( $trs ) ) { $trs = array_unique( $trs ); // make sure we don't attempt to insert already existing term relationships $existing_trs = $wpdb->get_results( " SELECT tr.object_id, tr.term_taxonomy_id FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ( 'term_language', 'term_translations' ) " ); foreach ( $existing_trs as $key => $tr ) { $existing_trs[ $key ] = $wpdb->prepare( '( %d, %d )', $tr->object_id, $tr->term_taxonomy_id ); } $trs = array_diff( $trs, $existing_trs ); if ( ! empty( $trs ) ) { $wpdb->query( "INSERT INTO $wpdb->term_relationships ( object_id, term_taxonomy_id ) VALUES " . implode( ',', $trs ) ); } } } /** * remaps translations for both posts and terms * * @since 1.2 * * @param array $terms array of terms in 'post_translations' or 'term_translations' taxonomies * @param array $processed_objects array of posts or terms processed by WordPress Importer */ function remap_translations( &$terms, &$processed_objects ) { global $wpdb; foreach ( $terms as $term ) { $translations = unserialize( $term['term_description'] ); $new_translations = array(); foreach ( $translations as $slug => $old_id ) { if ( $old_id && ! empty( $processed_objects[ $old_id ] ) ) { $new_translations[ $slug ] = $processed_objects[ $old_id ]; } } if ( ! empty( $new_translations ) ) { $u['case'][] = $wpdb->prepare( 'WHEN %d THEN %s', $this->processed_terms[ $term['term_id'] ], serialize( $new_translations ) ); $u['in'][] = (int) $this->processed_terms[ $term['term_id'] ]; } } if ( ! empty( $u ) ) { $wpdb->query( "UPDATE $wpdb->term_taxonomy SET description = ( CASE term_id " . implode( ' ', $u['case'] ) . ' END ) WHERE term_id IN ( ' . implode( ',', $u['in'] ) . ' )' ); } } } modules/wpml/wpml-api.php000066600000022107152100561500011433 0ustar00 not applicable add_filter( 'wpml_current_language', 'pll_current_language', 10, 0 ); add_filter( 'wpml_default_language', 'pll_default_language', 10, 0 ); // wpml_add_language_selector => not implemented // wpml_footer_language_selector => not applicable add_action( 'wpml_add_language_form_field', array( $this, 'wpml_add_language_form_field' ) ); add_filter( 'wpml_language_is_active', array( $this, 'wpml_language_is_active' ), 10, 2 ); add_filter( 'wpml_is_rtl' , array( $this, 'wpml_is_rtl' ) ); // wpml_language_form_input_field => See wpml_add_language_form_field // wpml_language_has_switched => not implemented // Retrieving Language Information for Content add_filter( 'wpml_post_language_details', 'wpml_get_language_information', 10, 2 ); // wpml_switch_language => not implemented add_filter( 'wpml_element_language_code', array( $this, 'wpml_element_language_code' ), 10, 3 ); // wpml_element_language_details => not applicable // Retrieving Localized Content add_filter( 'wpml_home_url', 'pll_home_url', 10, 0 ); add_filter( 'wpml_element_link', 'icl_link_to_element' , 10, 7 ); add_filter( 'wpml_object_id', 'icl_object_id', 10, 4 ); add_filter( 'wpml_translate_single_string', array( $this, 'wpml_translate_single_string' ), 10, 4 ); // wpml_translate_string => not applicable // wpml_unfiltered_admin_string => not implemented add_filter( 'wpml_permalink', array( $this, 'wpml_permalink' ), 10, 2 ); // wpml_elements_without_translations => not implemented add_filter( 'wpml_get_translated_slug', array( $this, 'wpml_get_translated_slug' ), 10, 3 ); // Finding the Translation State of Content // wpml_element_translation_type add_filter( 'wpml_element_has_translations', array( $this, 'wpml_element_has_translations' ), 10, 3 ); // wpml_master_post_from_duplicate => not applicable // wpml_post_duplicates => not applicable // Inserting Content // wpml_admin_make_post_duplicates => not applicable // wpml_make_post_duplicates => not applicable add_action( 'wpml_register_single_string', 'icl_register_string', 10, 3 ); // wpml_register_string => not applicable // wpml_register_string_packages => not applicable // wpml_delete_package_action => not applicable // wpml_show_package_language_ui => not applicable // wpml_set_element_language_details => not implemented // Miscellaneous // wpml_element_type => not applicable // wpml_setting => not applicable // wpml_sub_setting => not applicable // wpml_editor_cf_to_display => not applicable // wpml_tm_save_translation_cf => not implemented // wpml_tm_xliff_export_translated_cf => not applicable // wpml_tm_xliff_export_original_cf => not applicable // wpml_duplicate_generic_string => not applicable // wpml_translatable_user_meta_fields => not implemented // wpml_cross_domain_language_data => not applicable // wpml_get_cross_domain_language_data => not applicable // wpml_loaded => not applicable // wpml_st_loaded => not applicable // wpml_tm_loaded => not applicable // wpml_hide_management_column (3.4.1) => not applicable } /** * Get a list of the languages enabled for a site * * @since 2.0 * * @param mixed $null Not used * @param array| string $args See arguments of icl_get_languages() * @return array Array of arrays per language */ public function wpml_active_languages( $null, $args = '' ) { return icl_get_languages( $args ); } /** * In WPML, get a language's native and translated name for display in a custom language switcher * Since Polylang does not implement the translated name, always returns only the native name * * @since 2.2 * * @param mixed $null Not used. * @param string $native_name The language native name. * @param string|bool $translated_name The language translated name. Not used. * @param bool $native_hidden Whether to hide the language native name or not. Not used. * @param bool $translated_hidden Whether to hide the language translated name or not. Not used. * @return string */ public function wpml_display_language_names( $null, $native_name, $translated_name = false, $native_hidden = false, $translated_hidden = false ) { return $native_name; } /** * Returns an HTML hidden input field with name=”lang” and as value the current language * * @since 2.0 */ public function wpml_add_language_form_field() { $lang = pll_current_language(); $field = sprintf( '', esc_attr( $lang ) ); $field = apply_filters( 'wpml_language_form_input_field', $field, $lang ); echo $field; } /** * Find out if a specific language is enabled for the site * * @since 2.0 * * @param mixed $null Not used * @param string $slug Language code * @return bool */ public function wpml_language_is_active( $null, $slug ) { $language = PLL()->model->get_language( $slug ); return empty( $language->active ) || true === $language->active; } /** * Find out whether the current language text direction is RTL or not * * @since 2.0 * * @param mixed $null Not used * @return bool */ public function wpml_is_rtl( $null ) { return pll_current_language( 'is_rtl' ); } /** * Get the language code for a translatable element * * @since 2.0 * * @param mixed $language_code * @param array $args An array with two keys element_id => post_id or term_taxonomy_id, element_type => post type or taxonomy * @return string */ public function wpml_element_language_code( $language_code, $args ) { $type = $args['element_type']; $id = $args['element_id']; $pll_type = ( 'post' == $type || pll_is_translated_post_type( $type ) ) ? 'post' : ( 'term' == $type || pll_is_translated_taxonomy( $type ) ? 'term' : false ); if ( 'term' === $pll_type && $term = wpcom_vip_get_term_by( 'term_taxonomy_id', $id ) ) { $id = $term->term_id; } return $pll_type ? call_user_func( "pll_get_{$pll_type}_language", $id ) : $language_code; } /** * Translates a string * * @since 2.0 * * @param string $string The string's original value * @param string $context The string's registered context * @param string $name The string's registered name * @param null|string $lang Optional, return the translation in this language, defaults to current language * @return string The translated string */ public function wpml_translate_single_string( $string, $context, $name, $lang = null ) { $has_translation = null; // Passed by reference return icl_translate( $context, $name, $string, false, $has_translation, $lang ); } /** * Converts a permalink to a language specific permalink * * @since 2.2 * * @param string $url The url to filter * @param null|string $lang Langage code, optional, defaults to the current language * @return string */ public function wpml_permalink( $url, $lang = '' ) { $lang = PLL()->model->get_language( $lang ); if ( empty( $lang ) && ! empty( PLL()->curlang ) ) { $lang = PLL()->curlang; } return empty( $lang ) ? $url : PLL()->links_model->switch_language_in_link( $url, $lang ); } /** * Translates a post type slug * * @since 2.2 * * @param string $slug Post type slug * @param string $post_type Post type name * @param string $lang Optional language code (defaults to current language) * @return string */ public function wpml_get_translated_slug( $slug, $post_type, $lang = null ) { if ( isset( PLL()->translate_slugs ) ) { if ( empty( $lang ) ) { $lang = pll_current_language(); } $slug = PLL()->translate_slugs->slugs_model->get_translated_slug( $post_type, $lang ); } return $slug; } /** * Find out whether a post type or a taxonomy term is translated * * @since 2.0 * * @param mixed $null * @param int $id The post_id or term_id * @param string $type The post type or taxonomy * @return bool */ public function wpml_element_has_translations( $null, $id, $type ) { $pll_type = ( 'post' == $type || pll_is_translated_post_type( $type ) ) ? 'post' : ( 'term' == $type || pll_is_translated_taxonomy( $type ) ? 'term' : false ); return ( $pll_type && $translations = call_user_func( "pll_get_{$pll_type}_translations", $id ) ) ? count( $translations ) > 1 : false; } } modules/wpml/wpml-config.php000066600000021072152100561500012127 0ustar00init(); } } /** * Access to the single instance of the class * * @since 1.7 * * @return object */ static public function instance() { if ( empty( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * Finds the wpml-config.xml files to parse and setup filters * * @since 1.0 */ public function init() { $this->xmls = array(); // Plugins // Don't forget sitewide active plugins thanks to Reactorshop http://wordpress.org/support/topic/polylang-and-yoast-seo-plugin/page/2?replies=38#post-4801829 $plugins = ( is_multisite() && $sitewide_plugins = get_site_option( 'active_sitewide_plugins' ) ) && is_array( $sitewide_plugins ) ? array_keys( $sitewide_plugins ) : array(); $plugins = array_merge( $plugins, get_option( 'active_plugins', array() ) ); foreach ( $plugins as $plugin ) { if ( file_exists( $file = WP_PLUGIN_DIR . '/' . dirname( $plugin ) . '/wpml-config.xml' ) && false !== $xml = simplexml_load_file( $file ) ) { $this->xmls[ dirname( $plugin ) ] = $xml; } } // Theme if ( file_exists( $file = ( $template = get_template_directory() ) . '/wpml-config.xml' ) && false !== $xml = simplexml_load_file( $file ) ) { $this->xmls[ get_template() ] = $xml; } // Child theme if ( ( $stylesheet = get_stylesheet_directory() ) !== $template && file_exists( $file = $stylesheet . '/wpml-config.xml' ) && false !== $xml = simplexml_load_file( $file ) ) { $this->xmls[ get_stylesheet() ] = $xml; } // Custom if ( file_exists( $file = PLL_LOCAL_DIR . '/wpml-config.xml' ) && false !== $xml = simplexml_load_file( $file ) ) { $this->xmls['Polylang'] = $xml; } if ( ! empty( $this->xmls ) ) { add_filter( 'pll_copy_post_metas', array( $this, 'copy_post_metas' ), 10, 2 ); add_filter( 'pll_get_post_types', array( $this, 'translate_types' ), 10, 2 ); add_filter( 'pll_get_taxonomies', array( $this, 'translate_taxonomies' ), 10, 2 ); foreach ( $this->xmls as $context => $xml ) { foreach ( $xml->xpath( 'admin-texts/key' ) as $key ) { $attributes = $key->attributes(); $name = (string) $attributes['name']; if ( PLL() instanceof PLL_Frontend ) { $this->options[ $name ] = $key; add_filter( 'option_' . $name, array( $this, 'translate_strings' ) ); } else { $this->register_string_recursive( $context, get_option( $name ), $key ); } } } } } /** * Adds custom fields to the list of metas to copy when creating a new translation * * @since 1.0 * * @param array $metas the list of custom fields to copy or synchronize * @param bool $sync true for sync, false for copy * @return array the list of custom fields to copy or synchronize */ public function copy_post_metas( $metas, $sync ) { foreach ( $this->xmls as $xml ) { foreach ( $xml->xpath( 'custom-fields/custom-field' ) as $cf ) { $attributes = $cf->attributes(); if ( 'copy' == $attributes['action'] || ( ! $sync && in_array( $attributes['action'], array( 'translate', 'copy-once' ) ) ) ) { $metas[] = (string) $cf; } else { $metas = array_diff( $metas, array( (string) $cf ) ); } } } return $metas; } /** * Language and translation management for custom post types * * @since 1.0 * * @param array $types list of post type names for which Polylang manages language and translations * @param bool $hide true when displaying the list in Polylang settings * @return array list of post type names for which Polylang manages language and translations */ public function translate_types( $types, $hide ) { foreach ( $this->xmls as $xml ) { foreach ( $xml->xpath( 'custom-types/custom-type' ) as $pt ) { $attributes = $pt->attributes(); if ( 1 == $attributes['translate'] && ! $hide ) { $types[ (string) $pt ] = (string) $pt; } else { unset( $types[ (string) $pt ] ); // The theme/plugin author decided what to do with the post type so don't allow the user to change this } } } return $types; } /** * Language and translation management for custom taxonomies * * @since 1.0 * * @param array $taxonomies list of taxonomy names for which Polylang manages language and translations * @param bool $hide true when displaying the list in Polylang settings * @return array list of taxonomy names for which Polylang manages language and translations */ public function translate_taxonomies( $taxonomies, $hide ) { foreach ( $this->xmls as $xml ) { foreach ( $xml->xpath( 'taxonomies/taxonomy' ) as $tax ) { $attributes = $tax->attributes(); if ( 1 == $attributes['translate'] && ! $hide ) { $taxonomies[ (string) $tax ] = (string) $tax; } else { unset( $taxonomies[ (string) $tax ] ); // the theme/plugin author decided what to do with the taxonomy so don't allow the user to change this } } } return $taxonomies; } /** * Translates the strings for an option * * @since 1.0 * * @param array|string $value Either a string to translate or a list of strings to translate * @return array|string translated string(s) */ public function translate_strings( $value ) { $option = substr( current_filter(), 7 ); return $this->translate_strings_recursive( $value, $this->options[ $option ] ); } /** * Recursively registers strings for a serialized option * * @since 1.0 * * @param string $context the group in which the strings will be registered * @param array $options * @param object $key XML node */ protected function register_string_recursive( $context, $options, $key ) { $children = $key->children(); if ( count( $children ) ) { foreach ( $children as $child ) { $attributes = $child->attributes(); $name = (string) $attributes['name']; if ( '*' === $name && is_array( $options ) ) { foreach ( $options as $n => $option ) { $this->register_wildcard_options_recursive( $context, $option, $n ); } } elseif ( isset( $options[ $name ] ) ) { $this->register_string_recursive( $context, $options[ $name ], $child ); } } } else { $attributes = $key->attributes(); pll_register_string( (string) $attributes['name'], $options, $context, true ); // Multiline as in WPML } } /** * Recursively registers strings with a wildcard * * @since 2.1 * * @param string $context the group in which the strings will be registered * @param array $options * @param string $name Option name */ protected function register_wildcard_options_recursive( $context, $options, $name ) { if ( is_array( $options ) ) { foreach ( $options as $n => $option ) { $this->register_wildcard_options_recursive( $context, $option, $n ); } } else { pll_register_string( $name, $options, $context ); } } /** * Recursively translates strings for a serialized option * * @since 1.0 * * @param array|string $values either a string to translate or a list of strings to translate * @param object $key XML node * @return array|string translated string(s) */ protected function translate_strings_recursive( $values, $key ) { $children = $key->children(); if ( count( $children ) ) { foreach ( $children as $child ) { $attributes = $child->attributes(); $name = (string) $attributes['name']; if ( '*' === $name && is_array( $values ) ) { foreach ( $values as $n => $v ) { $values[ $n ] = $this->translate_wildcard_options_recursive( $v, $n ); } } elseif ( isset( $values[ $name ] ) ) { $values[ $name ] = $this->translate_strings_recursive( $values[ $name ], $child ); } } } else { $values = pll__( $values ); } return $values; } /** * Recursively translates strings registered by a wildcard * * @since 2.1 * * @param array|string $options Either a string to translate or a list of strings to translate * @param string $name Option name * @return array|string Translated string(s) */ protected function translate_wildcard_options_recursive( $options, $name ) { if ( is_array( $options ) ) { foreach ( $options as $n => $option ) { $options[ $n ] = $this->translate_wildcard_options_recursive( $option, $n ); } } else { $options = pll__( $options ); } return $options; } } modules/wpml/settings-wpml.php000066600000001274152100561500012524 0ustar00 'wpml', 'title' => __( 'WPML Compatibility', 'polylang' ), 'description' => __( 'WPML compatibility mode of Polylang', 'polylang' ), ) ); } /** * tells if the module is active * * @since 1.8 * * @return bool */ public function is_active() { return ! defined( 'PLL_WPML_COMPAT' ) || PLL_WPML_COMPAT; } } modules/wpml/wpml-compat.php000066600000010077152100561500012150 0ustar00api = new PLL_WPML_API(); self::$strings = get_option( 'polylang_wpml_strings', array() ); add_action( 'pll_language_defined', array( $this, 'define_constants' ) ); add_action( 'pll_no_language_defined', array( $this, 'define_constants' ) ); add_filter( 'pll_get_strings', array( $this, 'get_strings' ) ); } /** * Access to the single instance of the class * * @since 1.7 * * @return object */ static public function instance() { if ( empty( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * Defines two WPML constants once the language has been defined * The compatibility with WPML is not perfect on admin side as the constants are defined * in 'setup_theme' by Polylang ( based on user info ) and 'plugins_loaded' by WPML ( based on cookie ) * * @since 0.9.5 */ public function define_constants() { if ( ! empty( PLL()->curlang ) ) { if ( ! defined( 'ICL_LANGUAGE_CODE' ) ) { define( 'ICL_LANGUAGE_CODE', PLL()->curlang->slug ); } if ( ! defined( 'ICL_LANGUAGE_NAME' ) ) { define( 'ICL_LANGUAGE_NAME', PLL()->curlang->name ); } } elseif ( ! PLL() instanceof PLL_Frontend ) { if ( ! defined( 'ICL_LANGUAGE_CODE' ) ) { define( 'ICL_LANGUAGE_CODE', 'all' ); } if ( ! defined( 'ICL_LANGUAGE_NAME' ) ) { define( 'ICL_LANGUAGE_NAME', '' ); } } } /** * Unlike pll_register_string, icl_register_string stores the string in database * so we need to do the same as some plugins or themes may expect this * we use a serialized option to do this * * @since 1.0.2 * * @param string $context the group in which the string is registered, defaults to 'polylang' * @param string $name a unique name for the string * @param string $string the string to register */ public function register_string( $context, $name, $string ) { // Registers the string if it does not exist yet (multiline as in WPML) $to_register = array( 'context' => $context, 'name' => $name, 'string' => $string, 'multiline' => true, 'icl' => true ); if ( ! in_array( $to_register, self::$strings ) && $to_register['string'] ) { self::$strings[] = $to_register; update_option( 'polylang_wpml_strings', self::$strings ); } } /** * Removes a string from the registered strings list * * @since 1.0.2 * * @param string $context the group in which the string is registered, defaults to 'polylang' * @param string $name a unique name for the string */ public function unregister_string( $context, $name ) { foreach ( self::$strings as $key => $string ) { if ( $string['context'] == $context && $string['name'] == $name ) { unset( self::$strings[ $key ] ); update_option( 'polylang_wpml_strings', self::$strings ); } } } /** * Adds strings registered by icl_register_string to those registered by pll_register_string * * @since 1.0.2 * * @param array $strings existing registered strings * @return array registered strings with added strings through WPML API */ public function get_strings( $strings ) { return empty( self::$strings ) ? $strings : array_merge( $strings, self::$strings ); } /** * Get a registered string by its context and name * * @since 2.0 * * @param string $context the group in which the string is registered * @param string $name a unique name for the string * @return bool|string the registered string, false if none was found */ public function get_string_by_context_and_name( $context, $name ) { foreach ( self::$strings as $string ) { if ( $string['context'] == $context && $string['name'] == $name ) { return $string['string']; } } return false; } } modules/wpml/wpml-legacy-api.php000066600000031456152100561500012704 0ustar00 wether to skip missing translation or not, 0 or 1, defaults to 0 * orderby => 'id', 'code', 'name', defaults to 'id' * order => 'ASC' or 'DESC', defaults to 'ASC' * link_empty_to => link to use when the translation is missing {$lang} is replaced by the language code * * list of parameters returned per language: * * id => the language id * active => wether this is the active language or no, 0 or 1 * native_name => the language name * missing => wether the translation is missing or not, 0 or 1 * translated_name => empty, does not exist in Polylang * language_code => the language code ( slug ) * country_flag_url => the url of the flag * url => the url of the translation * * @since 1.0 * * @param string|array $args optional * @return array array of arrays per language */ function icl_get_languages( $args = '' ) { $args = wp_parse_args( $args, array( 'skip_missing' => 0, 'orderby' => 'id', 'order' => 'ASC' ) ); $orderby = ( isset( $args['orderby'] ) && 'code' == $args['orderby'] ) ? 'slug' : ( isset( $args['orderby'] ) && 'name' == $args['orderby'] ? 'name' : 'id' ); $order = ( ! empty( $args['order'] ) && 'desc' == $args['order'] ) ? 'DESC' : 'ASC'; $arr = array(); foreach ( PLL()->model->get_languages_list( array( 'hide_empty' => true, 'orderby' => $orderby, 'order' => $order ) ) as $lang ) { // We can find a translation only on frontend if ( method_exists( PLL()->links, 'get_translation_url' ) ) { $url = PLL()->links->get_translation_url( $lang ); } // It seems that WPML does not bother of skip_missing parameter on admin side and before the $wp_query object has been filled if ( empty( $url ) && ! empty( $args['skip_missing'] ) && ! is_admin() && did_action( 'parse_query' ) ) { continue; } $arr[ $lang->slug ] = array( 'id' => $lang->term_id, 'active' => isset( PLL()->curlang->slug ) && PLL()->curlang->slug == $lang->slug ? 1 : 0, 'native_name' => $lang->name, 'missing' => empty( $url ) ? 1 : 0, 'translated_name' => '', // Does not exist in Polylang 'language_code' => $lang->slug, 'country_flag_url' => $lang->flag_url, 'url' => ! empty( $url ) ? $url : ( empty( $args['link_empty_to'] ) ? PLL()->links->get_home_url( $lang ) : str_replace( '{$lang}', $lang->slug, $args['link_empty_to'] ) ), ); } // Apply undocumented WPML filter $arr = apply_filters( 'icl_ls_languages', $arr ); return $arr; } } if ( ! function_exists( 'icl_link_to_element' ) ) { /** * Used for creating language dependent links in themes * * @since 1.0 * @since 2.0 add support for arguments 6 and 7 * * @param int $id object id * @param string $type optional, post type or taxonomy name of the object, defaults to 'post' * @param string $text optional, the link text. If not specified will produce the name of the element in the current language * @param array $args optional, an array of arguments to add to the link, defaults to empty * @param string $anchor optional, the anchor to add to the link, defaults to empty * @param bool $echo optional, whether to echo the link, defaults to true * @param bool $return_original_if_missing optional, whether to return a value if the translation is missing * @return string a language dependent link */ function icl_link_to_element( $id, $type = 'post', $text = '', $args = array(), $anchor = '', $echo = true, $return_original_if_missing = true ) { if ( 'tag' == $type ) { $type = 'post_tag'; } $pll_type = ( 'post' == $type || pll_is_translated_post_type( $type ) ) ? 'post' : ( 'term' == $type || pll_is_translated_taxonomy( $type ) ? 'term' : false ); if ( $pll_type && ( $lang = pll_current_language() ) && ( $tr_id = PLL()->model->$pll_type->get_translation( $id, $lang ) ) && PLL()->links->current_user_can_read( $tr_id ) ) { $id = $tr_id; } elseif ( ! $return_original_if_missing ) { return ''; } if ( post_type_exists( $type ) ) { $link = get_permalink( $id ); if ( empty( $text ) ) { $text = get_the_title( $id ); } } elseif ( taxonomy_exists( $type ) ) { $link = wpcom_vip_get_term_link( $id, $type ); if ( empty( $text ) && ( $term = get_term( $id, $type ) ) && ! empty( $term ) && ! is_wp_error( $term ) ) { $text = $term->name; } } if ( empty( $link ) || is_wp_error( $link ) ) { return ''; } if ( ! empty( $args ) ) { $link .= ( false === strpos( $link, '?' ) ? '?' : '&' ) . http_build_query( $args ); } if ( ! empty( $anchor ) ) { $link .= '#' . $anchor; } $link = sprintf( '%s', esc_url( $link ), esc_html( $text ) ); if ( $echo ) { echo $link; } return $link; } } if ( ! function_exists( 'icl_object_id' ) ) { /** * Used for calculating the IDs of objects (usually categories) in the current language * * @since 0.9.5 * * @param int $id object id * @param string $type optional, post type or taxonomy name of the object, defaults to 'post' * @param bool $return_original_if_missing optional, true if Polylang should return the original id if the translation is missing, defaults to false * @param string $lang optional, language code, defaults to current language * @return int|null the object id of the translation, null if the translation is missing and $return_original_if_missing set to false */ function icl_object_id( $id, $type = 'post', $return_original_if_missing = false, $lang = false ) { $pll_type = ( 'post' === $type || pll_is_translated_post_type( $type ) ) ? 'post' : ( 'term' === $type || pll_is_translated_taxonomy( $type ) ? 'term' : false ); return $pll_type && ( $lang = $lang ? $lang : pll_current_language() ) && ( $tr_id = PLL()->model->$pll_type->get_translation( $id, $lang ) ) ? $tr_id : ( $return_original_if_missing ? $id : null ); } } if ( ! function_exists( 'wpml_get_language_information' ) ) { /** * Undocumented function used by the theme Maya * returns the post language * @see original WPML code at https://wpml.org/forums/topic/canonical-urls-for-wpml-duplicated-posts/#post-52198 * * @since 1.8 * * @param null $empty optional, not used * @param int $post_id optional, post id, defaults to current post * @return array */ function wpml_get_language_information( $empty = null, $post_id = null ) { if ( empty( $post_id ) ) { $post_id = get_the_ID(); } // FIXME WPML may return a WP_Error object return false === ( $lang = PLL()->model->post->get_language( $post_id ) ) ? array() : array( 'language_code' => $lang->slug, 'locale' => $lang->locale, 'text_direction' => (bool) $lang->is_rtl, 'display_name' => $lang->name, // Seems to be the post language name displayed in the current language, not a feature in Polylang 'native_name' => $lang->name, 'different_language' => pll_current_language() !== $lang->slug, ); } } if ( ! function_exists( 'icl_register_string' ) ) { /** * Registers a string for translation in the "strings translation" panel * * @since 0.9.3 * * @param string $context the group in which the string is registered, defaults to 'polylang' * @param string $name a unique name for the string * @param string $string the string to register * @param bool $allow_empty_value not used * @param string $source_lang not used by Polylang */ function icl_register_string( $context, $name, $string, $allow_empty_value = false, $source_lang = '' ) { PLL_WPML_Compat::instance()->register_string( $context, $name, $string ); } } if ( ! function_exists( 'icl_unregister_string' ) ) { /** * Removes a string from the "strings translation" panel * * @since 1.0.2 * * @param string $context the group in which the string is registered, defaults to 'polylang' * @param string $name a unique name for the string */ function icl_unregister_string( $context, $name ) { PLL_WPML_Compat::instance()->unregister_string( $context, $name ); } } if ( ! function_exists( 'icl_t' ) ) { /** * Gets the translated value of a string ( previously registered with icl_register_string or pll_register_string ) * * @since 0.9.3 * @since 1.9.2 argument 3 is optional * @since 2.0 add support for arguments 4 to 6 * * @param string $context the group in which the string is registered * @param string $name a unique name for the string * @param string $string the string to translate, optional for strings registered with icl_register_string * @param bool|null $has_translation optional, not supported in Polylang * @param bool $bool optional, not used * @param string|null $lang optional, return the translation in this language, defaults to current language * @return string the translated string */ function icl_t( $context, $name, $string = false, &$has_translation = null, $bool = false, $lang = null ) { return icl_translate( $context, $name, $string, false, $has_translation, $lang ); } } if ( ! function_exists( 'icl_translate' ) ) { /** * Undocumented function used by NextGen Gallery * used in PLL_Plugins_Compat for Jetpack with only 3 arguments * * @since 1.0.2 * @since 2.0 add support for arguments 5 and 6, strings are no more automatically registered * * @param string $context the group in which the string is registered * @param string $name a unique name for the string * @param string $string the string to translate, optional for strings registered with icl_register_string * @param bool $bool optional, not used * @param bool|null $has_translation optional, not supported in Polylang * @param string|null $lang optional, return the translation in this language, defaults to current language * @return string the translated string */ function icl_translate( $context, $name, $string = false, $bool = false, &$has_translation = null, $lang = null ) { // FIXME WPML can automatically registers the string based on an option if ( empty( $string ) ) { $string = PLL_WPML_Compat::instance()->get_string_by_context_and_name( $context, $name ); } return empty( $lang ) ? pll__( $string ) : pll_translate_string( $string, $lang ); } } if ( ! function_exists( 'wpml_get_copied_fields_for_post_edit' ) ) { /** * Undocumented function used by Types * FIXME: tested only with Types * probably incomplete as Types locks the custom fields for a new post, but not when edited * This is probably linked to the fact that WPML has always an original post in the default language and not Polylang :) * * @since 1.1.2 * * @return array */ function wpml_get_copied_fields_for_post_edit() { if ( empty( $_GET['from_post'] ) ) { return array(); } // Don't know what WPML does but Polylang does copy all public meta keys by default foreach ( $keys = array_unique( array_keys( get_post_custom( (int) $_GET['from_post'] ) ) ) as $k => $meta_key ) { if ( is_protected_meta( $meta_key ) ) { unset( $keys[ $k ] ); } } // Apply our filter and fill the expected output ( see /types/embedded/includes/fields-post.php ) /** This filter is documented in modules/sync/admin-sync.php */ $arr['fields'] = array_unique( apply_filters( 'pll_copy_post_metas', empty( $keys ) ? array() : $keys, false ) ); $arr['original_post_id'] = (int) $_GET['from_post']; return $arr; } } if ( ! function_exists( 'icl_get_default_language' ) ) { /** * Undocumented function used by Warp 6 by Yootheme * * @since 1.0.5 * * @return string default language code */ function icl_get_default_language() { return pll_default_language(); } } if ( ! function_exists( 'wpml_get_default_language' ) ) { /** * Undocumented function reported to be used by Table Rate Shipping for WooCommerce * @see https://wordpress.org/support/topic/add-wpml-compatibility-function * * @since 1.8.2 * * @return string default language code */ function wpml_get_default_language() { return pll_default_language(); } } modules/sync/settings-sync.php000066600000005106152100561500012514 0ustar00 'sync', 'title' => __( 'Synchronization', 'polylang' ), 'description' => __( 'The synchronization options allow to maintain exact same values (or translations in the case of taxonomies and page parent) of meta content between the translations of a post or page.', 'polylang' ), ) ); } /** * deactivates the module * * @since 1.8 */ public function deactivate() { $this->options['sync'] = array(); update_option( 'polylang', $this->options ); } /** * displays the settings form * * @since 1.8 */ protected function form() { ?>
      $str ) { printf( '
    • ', esc_attr( $key ), in_array( $key, $this->options['sync'] ) ? 'checked="checked"' : '', esc_html( $str ) ); } ?>
    options['sync'] ) ? array( 'configure' ) : array( 'configure', 'deactivate' ); } /** * list the post metas to synchronize * * @since 1.0 * * @return array */ static public function list_metas_to_sync() { return array( 'taxonomies' => __( 'Taxonomies', 'polylang' ), 'post_meta' => __( 'Custom fields', 'polylang' ), 'comment_status' => __( 'Comment status', 'polylang' ), 'ping_status' => __( 'Ping status', 'polylang' ), 'sticky_posts' => __( 'Sticky posts', 'polylang' ), 'post_date' => __( 'Published date', 'polylang' ), 'post_format' => __( 'Post format', 'polylang' ), 'post_parent' => __( 'Page parent', 'polylang' ), '_wp_page_template' => __( 'Page template', 'polylang' ), 'menu_order' => __( 'Page order', 'polylang' ), '_thumbnail_id' => __( 'Featured image', 'polylang' ), ); } } modules/sync/admin-sync.php000066600000037566152100561500011763 0ustar00model = &$polylang->model; $this->options = &$polylang->options; add_filter( 'wp_insert_post_parent', array( $this, 'wp_insert_post_parent' ), 10, 3 ); add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ), 5, 2 ); // Before Types which populates custom fields in same hook with priority 10 add_action( 'pll_save_post', array( $this, 'pll_save_post' ), 10, 3 ); add_action( 'pll_save_term', array( $this, 'pll_save_term' ), 10, 3 ); if ( $this->options['media_support'] ) { add_action( 'pll_translate_media', array( $this, 'copy_taxonomies' ), 10, 3 ); add_action( 'pll_translate_media', array( $this, 'copy_post_metas' ), 10, 3 ); add_action( 'edit_attachment', array( $this, 'edit_attachment' ) ); } } /** * Translate post parent if exists when using "Add new" ( translation ) * * @since 0.6 * * @param int $post_parent Post parent ID * @param int $post_id Post ID, unused * @param array $postarr Array of parsed post data * @return int */ public function wp_insert_post_parent( $post_parent, $post_id, $postarr ) { // Make sure not to impact media translations created at the same time return isset( $_GET['from_post'], $_GET['new_lang'], $_GET['post_type'] ) && $_GET['post_type'] === $postarr['post_type'] && ( $id = wp_get_post_parent_id( (int) $_GET['from_post'] ) ) && ( $parent = $this->model->post->get_translation( $id, $_GET['new_lang'] ) ) ? $parent : $post_parent; } /** * Copy post metas, menu order, comment and ping status when using "Add new" ( translation ) * formerly used dbx_post_advanced deprecated in WP 3.7 * * @since 1.2 * * @param string $post_type unused * @param object $post current post object */ public function add_meta_boxes( $post_type, $post ) { if ( 'post-new.php' == $GLOBALS['pagenow'] && isset( $_GET['from_post'], $_GET['new_lang'] ) && $this->model->is_translated_post_type( $post->post_type ) ) { // Capability check already done in post-new.php $from_post_id = (int) $_GET['from_post']; $from_post = get_post( $from_post_id ); $lang = $this->model->get_language( $_GET['new_lang'] ); if ( ! $from_post || ! $lang ) { return; } $this->copy_taxonomies( $from_post_id, $post->ID, $lang->slug ); $this->copy_post_metas( $from_post_id, $post->ID, $lang->slug ); foreach ( array( 'menu_order', 'comment_status', 'ping_status' ) as $property ) { $post->$property = $from_post->$property; } // Copy the date only if the synchronization is activated if ( in_array( 'post_date', $this->options['sync'] ) ) { $post->post_date = $from_post->post_date; $post->post_date_gmt = $from_post->post_date_gmt; } if ( is_sticky( $from_post_id ) ) { stick_post( $post->ID ); } } } /** * Get the list of taxonomies to copy or to synchronize * * @since 1.7 * @since 2.1 The `$from`, `$to`, `$lang` parameters were added. * * @param bool $sync true if it is synchronization, false if it is a copy * @param int $from id of the post from which we copy informations, optional, defaults to null * @param int $to id of the post to which we paste informations, optional, defaults to null * @param string $lang language slug, optional, defaults to null * @return array list of taxonomy names */ public function get_taxonomies_to_copy( $sync, $from = null, $to = null, $lang = null ) { $taxonomies = ! $sync || in_array( 'taxonomies', $this->options['sync'] ) ? $this->model->get_translated_taxonomies() : array(); if ( ! $sync || in_array( 'post_format', $this->options['sync'] ) ) { $taxonomies[] = 'post_format'; } /** * Filter the taxonomies to copy or synchronize * * @since 1.7 * @since 2.1 The `$from`, `$to`, `$lang` parameters were added. * * @param array $taxonomies list of taxonomy names * @param bool $sync true if it is synchronization, false if it is a copy * @param int $from id of the post from which we copy informations * @param int $to id of the post to which we paste informations * @param string $lang language slug */ return array_unique( apply_filters( 'pll_copy_taxonomies', $taxonomies, $sync, $from, $to, $lang ) ); } /** * Copy or synchronize terms * * @since 1.8 * * @param int $from id of the post from which we copy informations * @param int $to id of the post to which we paste informations * @param string $lang language slug * @param bool $sync true if it is synchronization, false if it is a copy, defaults to false */ public function copy_taxonomies( $from, $to, $lang, $sync = false ) { // Get taxonomies to sync for this post type $taxonomies = array_intersect( get_post_taxonomies( $from ), $this->get_taxonomies_to_copy( $sync, $from, $to, $lang ) ); // Update the term cache to reduce the number of queries in the loop update_object_term_cache( $sync ? array( $from, $to ) : $from, get_post_type( $from ) ); // Copy or synchronize terms // FIXME quite a lot of query in foreach foreach ( $taxonomies as $tax ) { $terms = get_the_terms( $from, $tax ); // Translated taxonomy if ( $this->model->is_translated_taxonomy( $tax ) ) { $newterms = array(); if ( is_array( $terms ) ) { foreach ( $terms as $term ) { if ( $term_id = $this->model->term->get_translation( $term->term_id, $lang ) ) { $newterms[] = (int) $term_id; // Cast is important otherwise we get 'numeric' tags } } } // For some reasons, the user may have untranslated terms in the translation. don't forget them. if ( $sync ) { $tr_terms = get_the_terms( $to, $tax ); if ( is_array( $tr_terms ) ) { foreach ( $tr_terms as $term ) { if ( ! $this->model->term->get_translation( $term->term_id, $this->model->post->get_language( $from ) ) ) { $newterms[] = (int) $term->term_id; } } } } if ( ! empty( $newterms ) || $sync ) { wp_set_object_terms( $to, $newterms, $tax ); // replace terms in translation } } // Untranslated taxonomy ( post format ) // Don't use simple get_post_format / set_post_format to generalize the case to other taxonomies else { wp_set_object_terms( $to, is_array( $terms ) ? array_map( 'intval', wp_list_pluck( $terms, 'term_id' ) ) : null, $tax ); } } } /** * Copy or synchronize metas (custom fields) * * @since 0.9 * * @param int $from id of the post from which we copy informations * @param int $to id of the post to which we paste informations * @param string $lang language slug * @param bool $sync true if it is synchronization, false if it is a copy, defaults to false */ public function copy_post_metas( $from, $to, $lang, $sync = false ) { // Copy or synchronize post metas and allow plugins to do the same $metas = get_post_custom( $from ); $keys = array(); // Get public meta keys ( including from translated post in case we just deleted a custom field ) if ( ! $sync || in_array( 'post_meta', $this->options['sync'] ) ) { foreach ( $keys = array_unique( array_merge( array_keys( $metas ), array_keys( get_post_custom( $to ) ) ) ) as $k => $meta_key ) { if ( is_protected_meta( $meta_key ) ) { unset( $keys[ $k ] ); } } } // Add page template and featured image foreach ( array( '_wp_page_template', '_thumbnail_id' ) as $meta ) { if ( ! $sync || in_array( $meta, $this->options['sync'] ) ) { $keys[] = $meta; } } /** * Filter the custom fields to copy or synchronize * * @since 0.6 * @since 1.9.2 The `$from`, `$to`, `$lang` parameters were added. * * @param array $keys list of custom fields names * @param bool $sync true if it is synchronization, false if it is a copy * @param int $from id of the post from which we copy informations * @param int $to id of the post to which we paste informations * @param string $lang language slug */ $keys = array_unique( apply_filters( 'pll_copy_post_metas', $keys, $sync, $from, $to, $lang ) ); // And now copy / synchronize foreach ( $keys as $key ) { delete_post_meta( $to, $key ); // The synchronization process of multiple values custom fields is easier if we delete all metas first if ( isset( $metas[ $key ] ) ) { foreach ( $metas[ $key ] as $value ) { // Important: always maybe_unserialize value coming from get_post_custom. See codex. // Thanks to goncalveshugo http://wordpress.org/support/topic/plugin-polylang-pll_copy_post_meta $value = maybe_unserialize( $value ); // Special case for featured images which can be translated add_post_meta( $to, $key, ( '_thumbnail_id' == $key && $tr_value = $this->model->post->get_translation( $value, $lang ) ) ? $tr_value : $value ); } } } } /** * Synchronizes terms and metas in translations * * @since 1.2 * * @param int $post_id post id * @param object $post post object * @param array $translations post translations */ public function pll_save_post( $post_id, $post, $translations ) { global $wpdb; // Prepare properties to synchronize foreach ( array( 'comment_status', 'ping_status', 'menu_order' ) as $property ) { if ( in_array( $property, $this->options['sync'] ) ) { $postarr[ $property ] = $post->$property; } } if ( in_array( 'post_date', $this->options['sync'] ) ) { // For new drafts, save the date now otherwise it is overriden by WP. Thanks to JoryHogeveen. See #32. if ( 'post-new.php' === $GLOBALS['pagenow'] && isset( $_GET['from_post'], $_GET['new_lang'] ) ) { $original = get_post( (int) $_GET['from_post'] ); $wpdb->update( $wpdb->posts, array( 'post_date' => $original->post_date, 'post_date_gmt' => $original->post_date_gmt, ), array( 'ID' => $post_id ) ); } else { $postarr['post_date'] = $post->post_date; $postarr['post_date_gmt'] = $post->post_date_gmt; } } // Synchronize terms and metas in translations foreach ( $translations as $lang => $tr_id ) { if ( ! $tr_id || $tr_id === $post_id ) { continue; } // Synchronize terms and metas $this->copy_taxonomies( $post_id, $tr_id, $lang, true ); $this->copy_post_metas( $post_id, $tr_id, $lang, true ); // Sticky posts if ( in_array( 'sticky_posts', $this->options['sync'] ) ) { isset( $_REQUEST['sticky'] ) && 'sticky' === $_REQUEST['sticky'] ? stick_post( $tr_id ) : unstick_post( $tr_id ); } // Add comment status, ping status, menu order... to synchronization $tr_arr = empty( $postarr ) ? array() : $postarr; if ( isset( $GLOBALS['post_type'] ) ) { $post_type = $GLOBALS['post_type']; } elseif ( isset( $_REQUEST['post_type'] ) ) { $post_type = $_REQUEST['post_type']; // 2nd case for quick edit } // Add post parent to synchronization // Make sure not to impact media translations when creating them at the same time as post // Do not udpate the translation parent if the user set a parent with no translation if ( in_array( 'post_parent', $this->options['sync'] ) && isset( $post_type ) && $post_type === $post->post_type ) { $post_parent = ( $parent_id = wp_get_post_parent_id( $post_id ) ) ? $this->model->post->get_translation( $parent_id, $lang ) : 0; if ( ! ( $parent_id && ! $post_parent ) ) { $tr_arr['post_parent'] = $post_parent; } } // Update all the row at once // Don't use wp_update_post to avoid infinite loop if ( ! empty( $tr_arr ) ) { $wpdb->update( $wpdb->posts, $tr_arr, array( 'ID' => $tr_id ) ); clean_post_cache( $tr_id ); } } } /** * Synchronize translations of a term in all posts * * @since 1.2 * * @param int $term_id term id * @param string $taxonomy taxonomy name of the term * @param array $translations translations of the term */ public function pll_save_term( $term_id, $taxonomy, $translations ) { // Sync term metas foreach ( $translations as $lang => $tr_id ) { if ( $tr_id && $tr_id !== $term_id ) { $this->copy_term_metas( $term_id, $tr_id, $lang, true ); } } // Check if the taxonomy is synchronized if ( ! in_array( $taxonomy, $this->get_taxonomies_to_copy( true ) ) ) { return; } // Get all posts associated to this term $posts = get_posts( array( 'numberposts' => -1, 'nopaging' => true, 'post_type' => 'any', 'post_status' => 'any', 'fields' => 'ids', 'tax_query' => array( array( 'taxonomy' => $taxonomy, 'field' => 'id', 'terms' => array_merge( array( $term_id ), array_values( $translations ) ), 'include_children' => false, ), ), ) ); // Associate translated term to translated post // FIXME quite a lot of query in foreach foreach ( $this->model->get_languages_list() as $language ) { if ( $translated_term = $this->model->term->get( $term_id, $language ) ) { foreach ( $posts as $post_id ) { if ( $translated_post = $this->model->post->get( $post_id, $language ) ) { wp_set_object_terms( $translated_post, $translated_term, $taxonomy, true ); } } } } // Synchronize parent in translations // Calling clean_term_cache *after* this is mandatory otherwise the $taxonomy_children option is not correctly updated // Before WP 3.9 clean_term_cache could be called ( efficiently ) only one time due to static array which prevented to update the option more than once // This is the reason to use the edit_term filter and not edited_term // Take care that $_POST contains the only valid values for the current term // FIXME can I synchronize parent without using $_POST instead? if ( isset( $_POST['term_tr_lang'] ) ) { foreach ( $_POST['term_tr_lang'] as $lang => $tr_id ) { if ( $tr_id ) { if ( isset( $_POST['parent'] ) && -1 != $_POST['parent'] ) { // Since WP 3.1 $term_parent = $this->model->term->get_translation( (int) $_POST['parent'], $lang ); } global $wpdb; $wpdb->update( $wpdb->term_taxonomy, array( 'parent' => isset( $term_parent ) ? $term_parent : 0 ), array( 'term_taxonomy_id' => get_term( (int) $tr_id, $taxonomy )->term_taxonomy_id ) ); clean_term_cache( $tr_id, $taxonomy ); // OK since WP 3.9 } } } } /** * Synchronizes terms and metas in translations for media * * @since 1.8 * * @param int $post_id post id */ public function edit_attachment( $post_id ) { $this->pll_save_post( $post_id, get_post( $post_id ), $this->model->post->get_translations( $post_id ) ); } /** * Copy or synchronize term metas (custom fields) * * @since 2.2 * * @param int $from id of the term from which we copy informations * @param int $to id of the term to which we paste informations * @param string $lang language slug * @param bool $sync true if it is synchronization, false if it is a copy, defaults to false */ public function copy_term_metas( $from, $to, $lang, $sync = false ) { $metas = get_term_meta( $from ); /** * Filter the term metas to copy or synchronize * * @since 2.2 * * @param array $keys list of term meta names * @param bool $sync true if it is synchronization, false if it is a copy * @param int $from id of the term from which we copy informations * @param int $to id of the term to which we paste informations * @param string $lang language slug */ $keys = array_unique( apply_filters( 'pll_copy_term_metas', array(), $sync, $from, $to, $lang ) ); // And now copy / synchronize foreach ( $keys as $key ) { delete_term_meta( $to, $key ); // The synchronization process of multiple values term metas is easier if we delete all metas first if ( isset( $metas[ $key ] ) ) { foreach ( $metas[ $key ] as $value ) { $value = maybe_unserialize( $value ); add_term_meta( $to, $key, $value ); } } } } } modules/translate-slugs/settings-translate-slugs.php000066600000001743152100561500017047 0ustar00 'translate-slugs', 'title' => __( 'Translate slugs', 'polylang' ), 'description' => __( 'Allows to translate custom post types and taxonomies slugs in urls.', 'polylang' ), ) ); } /** * tells if the module is active * * @since 1.9 * * @return bool */ public function is_active() { return class_exists( 'PLL_Translate_Slugs_Model', true ) && get_option( 'permalink_structure' ); } /** * displays upgrade message * * @since 1.9 * * @return string */ public function get_upgrade_message() { return class_exists( 'PLL_Translate_Slugs_Model', true ) ? '' : $this->default_upgrade_message(); } } modules/share-slug/settings-share-slug.php000066600000004301152100561500014704 0ustar00 'share-slugs', 'title' => __( 'Share slugs', 'polylang' ), 'description' => __( 'Allows to share the same url slug across languages for posts and terms.', 'polylang' ), ) ); if ( class_exists( 'PLL_Share_Post_Slug', true ) && get_option( 'permalink_structure' ) ) { add_action( 'admin_print_footer_scripts', array( $this, 'print_js' ) ); } } /** * tells if the module is active * * @since 1.9 * * @return bool */ public function is_active() { return class_exists( 'PLL_Share_Post_Slug', true ) && $this->options['force_lang'] && get_option( 'permalink_structure' ); } /** * displays upgrade message * * @since 1.9 * * @return string */ public function get_upgrade_message() { return class_exists( 'PLL_Share_Post_Slug', true ) ? '' : $this->default_upgrade_message(); } /** * displays the javascript to handle dynamically the change in url modifications * as sharing slugs is not possible when the language is set from the content * * @since 1.9 */ public function print_js() { wp_enqueue_script( 'jquery' ); $activated = sprintf( '%s', $this->action_links['activated'] ); $deactivated = sprintf( '%s', $this->action_links['deactivated'] ); ?> options = &$options; } /** * Check if upgrade is possible otherwise die to avoid activation * * @since 1.2 */ public function can_activate() { if ( ! $this->can_upgrade() ) { ob_start(); $this->admin_notices(); // FIXME the error message is displayed two times die( ob_get_contents() ); } } /** * Upgrades if possible otherwise returns false to stop Polylang loading * * @since 1.2 * * @return bool true if upgrade is possible, false otherwise */ public function upgrade() { if ( ! $this->can_upgrade() ) { add_action( 'all_admin_notices', array( $this, 'admin_notices' ) ); return false; } add_action( 'admin_init', array( $this, '_upgrade' ) ); return true; } /** * Check if we the previous version is not too old * Upgrades if OK * /!\ never start any upgrade before admin_init as it is likely to conflict with some other plugins * * @since 1.2 * * @return bool true if upgrade is possible, false otherwise */ public function can_upgrade() { // Don't manage upgrade from version < 0.8 return version_compare( $this->options['version'], '0.8', '>=' ); } /** * Displays a notice when ugrading from a too old version * * @since 1.0 */ public function admin_notices() { load_plugin_textdomain( 'polylang', false, basename( POLYLANG_DIR ) . '/languages' ); printf( '

    %s

    %s

    ', esc_html__( 'Polylang has been deactivated because you upgraded from a too old version.', 'polylang' ), sprintf( /* translators: %s are Polylang version numbers */ esc_html__( 'Please upgrade first to %s before ugrading to %s.', 'polylang' ), '0.9.8', POLYLANG_VERSION ) ); } /** * Upgrades the plugin depending on the previous version * * @since 1.2 */ public function _upgrade() { foreach ( array( '0.9', '1.0', '1.1', '1.2', '1.2.1', '1.2.3', '1.3', '1.4', '1.4.1', '1.4.4', '1.5', '1.6', '1.7.4', '1.8', '2.0.8', '2.1', '2.2' ) as $version ) { if ( version_compare( $this->options['version'], $version, '<' ) ) { call_user_func( array( $this, 'upgrade_' . str_replace( '.', '_', $version ) ) ); } } $delete_pre_1_2_data = get_transient( 'pll_upgrade_1_4' ); if ( false !== $delete_pre_1_2_data && absint( $delete_pre_1_2_data ) < time() ) { $this->delete_pre_1_2_data(); } $this->options['previous_version'] = $this->options['version']; // Remember the previous version of Polylang since v1.7.7 $this->options['version'] = POLYLANG_VERSION; update_option( 'polylang', $this->options ); } /** * Upgrades if the previous version is < 0.9 * * @since 1.2 */ protected function upgrade_0_9() { $this->options['sync'] = defined( 'PLL_SYNC' ) && ! PLL_SYNC ? 0 : 1; // The option replaces PLL_SYNC in 0.9 } /** * Upgrades if the previous version is < 1.0 * * @since 1.2 */ protected function upgrade_1_0() { // The option replaces PLL_MEDIA_SUPPORT in 1.0 $this->options['media_support'] = defined( 'PLL_MEDIA_SUPPORT' ) && ! PLL_MEDIA_SUPPORT ? 0 : 1; // Split the synchronization options in 1.0 $this->options['sync'] = empty( $this->options['sync'] ) ? array() : array_keys( PLL_Settings_Sync::list_metas_to_sync() ); // Set default values for post types and taxonomies to translate $this->options['post_types'] = array_values( get_post_types( array( '_builtin' => false, 'show_ui' => true ) ) ); $this->options['taxonomies'] = array_values( get_taxonomies( array( '_builtin' => false, 'show_ui' => true ) ) ); update_option( 'polylang', $this->options ); flush_rewrite_rules(); // Rewrite rules have been modified in 1.0 } /** * Upgrades if the previous version is < 1.1 * * @since 1.2 */ protected function upgrade_1_1() { // Update strings register with icl_register_string $strings = get_option( 'polylang_wpml_strings' ); if ( $strings ) { foreach ( $strings as $key => $string ) { $strings[ $key ]['icl'] = 1; } update_option( 'polylang_wpml_strings', $strings ); } // Move polylang_widgets options if ( $widgets = get_option( 'polylang_widgets' ) ) { $this->options['widgets'] = $widgets; delete_option( 'polylang_widgets' ); } } /** * Upgrades if the previous version is < 1.2 * * @since 1.2 */ protected function upgrade_1_2() { $this->options['domains'] = array(); // Option added in 1.2 // Need to register the taxonomies foreach ( array( 'language', 'term_language', 'post_translations', 'term_translations' ) as $taxonomy ) { register_taxonomy( $taxonomy, null , array( 'label' => false, 'public' => false, 'query_var' => false, 'rewrite' => false ) ); } // Abort if the db upgrade has already been done previously if ( get_terms( 'term_language', array( 'hide_empty' => 0 ) ) ) { return; } set_time_limit( 0 ); // In case we upgrade a huge site // Upgrade old model based on metas to new model based on taxonomies global $wpdb; $wpdb->termmeta = $wpdb->prefix . 'termmeta'; // Registers the termmeta table in wpdb $languages = get_terms( 'language', array( 'hide_empty' => 0 ) ); // Don't use get_languages_list which can't work with the old model foreach ( $languages as $lang ) { // First update language with new storage for locale and text direction $text_direction = get_metadata( 'term', $lang->term_id, '_rtl', true ); $desc = serialize( array( 'locale' => $lang->description, 'rtl' => $text_direction ) ); wp_update_term( (int) $lang->term_id, 'language', array( 'description' => $desc ) ); // Add language to new 'term_language' taxonomy $term_lang = wp_insert_term( $lang->name, 'term_language', array( 'slug' => 'pll_' . $lang->slug ) ); $lang_tt_ids[ $lang->term_id ] = $term_lang['term_taxonomy_id']; // Keep the term taxonomy id for future } // Get all terms with a language defined $terms = $wpdb->get_results( "SELECT term_id, meta_value FROM $wpdb->termmeta WHERE meta_key = '_language'" ); foreach ( $terms as $key => $term ) { $terms[ $key ] = $wpdb->prepare( '( %d, %d )', $term->term_id, $lang_tt_ids[ $term->meta_value ] ); } $terms = array_unique( $terms ); // Assign language to each term if ( ! empty( $terms ) ) { $wpdb->query( "INSERT INTO $wpdb->term_relationships ( object_id, term_taxonomy_id ) VALUES " . implode( ',', $terms ) ); } // Translations foreach ( array( 'post', 'term' ) as $type ) { $table = $type . 'meta'; $terms = $slugs = $tts = $trs = array(); // Get all translated objects $objects = $wpdb->get_col( "SELECT DISTINCT meta_value FROM {$wpdb->$table} WHERE meta_key = '_translations'" ); if ( empty( $objects ) ) { continue; } foreach ( $objects as $obj ) { $term = uniqid( 'pll_' ); // The term name $terms[] = $wpdb->prepare( '( "%s", "%s" )', $term, $term ); $slugs[] = $wpdb->prepare( '"%s"', $term ); $translations = maybe_unserialize( maybe_unserialize( $obj ) ); // 2 unserialize due to an old storage bug $description[ $term ] = serialize( $translations ); } $terms = array_unique( $terms ); // Insert terms if ( ! empty( $terms ) ) { $wpdb->query( "INSERT INTO $wpdb->terms ( slug, name ) VALUES " . implode( ',', $terms ) ); } // Get all terms with their term_id $terms = $wpdb->get_results( "SELECT term_id, slug FROM $wpdb->terms WHERE slug IN ( " . implode( ',', $slugs ) . ' )' ); // Prepare terms taxonomy relationship foreach ( $terms as $term ) { $tts[] = $wpdb->prepare( '( %d, "%s", "%s" )', $term->term_id, $type . '_translations', $description[ $term->slug ] ); } $tts = array_unique( $tts ); // Insert term_taxonomy if ( ! empty( $tts ) ) { $wpdb->query( "INSERT INTO $wpdb->term_taxonomy ( term_id, taxonomy, description ) VALUES " . implode( ',', $tts ) ); } // Get all terms with term_taxonomy_id $terms = get_terms( $type . '_translations', array( 'hide_empty' => false ) ); // Prepare objects relationships foreach ( $terms as $term ) { $translations = unserialize( $term->description ); foreach ( $translations as $object_id ) { if ( ! empty( $object_id ) ) { $trs[] = $wpdb->prepare( '( %d, %d )', $object_id, $term->term_taxonomy_id ); } } } $trs = array_unique( $trs ); // Insert term_relationships if ( ! empty( $trs ) ) { $wpdb->query( "INSERT INTO $wpdb->term_relationships ( object_id, term_taxonomy_id ) VALUES " . implode( ',', $trs ) ); } } // Upgrade of string translations is now in upgrade_1_2_1 // Upgrade of nav menus is now in upgrade_1_2_3 } /** * Upgrades if the previous version is < 1.2.1 * * @since 1.2.1 */ protected function upgrade_1_2_1() { // Strings translations foreach ( get_terms( 'language', array( 'hide_empty' => 0 ) ) as $lang ) { if ( $strings = get_option( 'polylang_mo' . $lang->term_id ) ) { $mo = new PLL_MO(); foreach ( $strings as $msg ) { $mo->add_entry( $mo->make_entry( $msg[0], $msg[1] ) ); } $mo->export_to_db( $lang ); } } } /** * Upgrades if the previous version is < 1.2.3 * Uprades multilingual menus depending on the old version due to multiple changes in menus management * * @since 1.2.3 */ public function upgrade_1_2_3() { // Old version < 1.1 // Multilingal locations and switcher item were stored in a dedicated option if ( version_compare( $this->options['version'], '1.1', '<' ) ) { if ( $menu_lang = get_option( 'polylang_nav_menus' ) ) { foreach ( $menu_lang as $location => $arr ) { if ( ! in_array( $location, array_keys( get_registered_nav_menus() ) ) ) { continue; } $switch_options = array_slice( $arr, -5, 5 ); $translations = array_diff_key( $arr, $switch_options ); $has_switcher = array_shift( $switch_options ); foreach ( get_terms( 'language', array( 'hide_empty' => 0 ) ) as $lang ) { // Move nav menus locations if ( ! empty( $translations[ $lang->slug ] ) ) { $locations[ $location ][ $lang->slug ] = $translations[ $lang->slug ]; } // Create the menu items for the language switcher if ( ! empty( $has_switcher ) ) { $menu_item_db_id = wp_update_nav_menu_item( $translations[ $lang->slug ], 0, array( 'menu-item-title' => __( 'Language switcher', 'polylang' ), 'menu-item-url' => '#pll_switcher', 'menu-item-status' => 'publish', ) ); update_post_meta( $menu_item_db_id, '_pll_menu_item', $switch_options ); } } } if ( ! empty( $locations ) ) { $this->options['nav_menus'][ get_option( 'stylesheet' ) ] = $locations; } delete_option( 'polylang_nav_menus' ); } } elseif ( empty( $this->options['nav_menus'] ) ) { $menus = get_theme_mod( 'nav_menu_locations' ); if ( is_array( $menus ) ) { // If old version < 1.2 // Clean the WP option as it was a bad idea to pollute it if ( version_compare( $this->options['version'], '1.2', '<' ) ) { foreach ( $menus as $loc => $menu ) { if ( $pos = strpos( $loc, '#' ) ) { unset( $menus[ $loc ] ); } } set_theme_mod( 'nav_menu_locations', $menus ); } // Get the multilingual locations foreach ( $menus as $loc => $menu ) { foreach ( get_terms( 'language', array( 'hide_empty' => 0 ) ) as $lang ) { $arr[ $loc ][ $lang->slug ] = pll_get_term( $menu, $lang ); } } if ( ! empty( $arr ) ) { $this->options['nav_menus'][ get_option( 'stylesheet' ) ] = $arr; } } } } /** * Upgrades if the previous version is < 1.3 * Moves the user biographies in default language to the 'description' user meta * * @since 1.3 */ protected function upgrade_1_3() { $usermeta = 'description_' . $this->options['default_lang']; $query = new WP_User_Query( array( 'blog_id' => $GLOBALS['blog_id'], 'meta_key' => $usermeta ) ); foreach ( $query->get_results() as $user ) { $desc = get_user_meta( $user->ID, $usermeta, true ); if ( ! empty( $desc ) ) { update_user_meta( $user->ID, 'description', $desc ); delete_user_meta( $user->ID, $usermeta ); } } } /** * Upgrades if the previous version is < 1.4 * Sets a transient to delete old model data * Deletes language cache (due to bug correction in home urls in 1.3.1 and added mo_id in 1.4) * * @since 1.4 */ protected function upgrade_1_4() { set_transient( 'pll_upgrade_1_4', time() + 60 * 24 * 60 * 60 ); // 60 days delete_transient( 'pll_languages_list' ); } /** * Old data were not deleted in 1.2, just in case... * Delete them at first upgrade at least 60 days after upgrade to 1.4 * * @since 1.4 */ protected function delete_pre_1_2_data() { // Suppress data of the old model < 1.2 global $wpdb; $wpdb->termmeta = $wpdb->prefix . 'termmeta'; // registers the termmeta table in wpdb in case WP < 4.4 // Do nothing if the termmeta table does not exists if ( count( $wpdb->get_results( "SHOW TABLES LIKE '$wpdb->termmeta'" ) ) ) { $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_translations'" ); $wpdb->query( "DELETE FROM $wpdb->termmeta WHERE meta_key = '_language'" ); $wpdb->query( "DELETE FROM $wpdb->termmeta WHERE meta_key = '_rtl'" ); $wpdb->query( "DELETE FROM $wpdb->termmeta WHERE meta_key = '_translations'" ); } // Delete the strings translations $languages = get_terms( 'language', array( 'hide_empty' => false ) ); foreach ( $languages as $lang ) { delete_option( 'polylang_mo' . $lang->term_id ); } delete_transient( 'pll_upgrade_1_4' ); } /** * Upgrades if the previous version is < 1.4.1 * Disables the browser detection when using multiple domains * * @since 1.4.1 */ protected function upgrade_1_4_1() { if ( 3 == $this->options['force_lang'] ) { $this->options['browser'] = $this->options['hide_default'] = 0; } } /** * Upgrades if the previous version is < 1.4.4 * Uprades widgets options for language filter * * @since 1.4.4 */ protected function upgrade_1_4_4() { foreach ( $GLOBALS['wp_registered_widgets'] as $widget ) { if ( ! empty( $this->options['widgets'][ $widget['id'] ] ) && ! empty( $widget['callback'][0] ) && ! empty( $widget['params'][0]['number'] ) ) { $obj = $widget['callback'][0]; if ( is_object( $obj ) && method_exists( $obj, 'get_settings' ) && method_exists( $obj, 'save_settings' ) ) { $settings = $obj->get_settings(); $settings[ $widget['params'][0]['number'] ]['pll_lang'] = $this->options['widgets'][ $widget['id'] ]; $obj->save_settings( $settings ); } } } unset( $this->options['widgets'] ); } /** * Upgrades if the previous version is < 1.5 * Deletes language cache (due to host property added and bug on search url) * * @since 1.5 */ protected function upgrade_1_5() { delete_transient( 'pll_languages_list' ); } /** * Upgrades if the previous version is < 1.6 * Upgrades core language files to get the .po file (only for WP 4.0+) * * @since 1.6 */ protected function upgrade_1_6() { if ( version_compare( $GLOBALS['wp_version'], '4.0', '>=' ) ) { self::download_language_packs(); } } /** * Downloads language packs * Intended to be used only one time (at upgrade to Polylang 1.6 or first upgrade of WP 4.0 or later) * Adapted from wp_download_language_pack * Rewritten because wp_download_language_pack checks the existence of .mo and I need to download .po * * @since 1.6 */ static function download_language_packs() { $languages = pll_languages_list( array( 'fields' => 'locale' ) ); // Prevents upgrade if the .po file is already here. Let WP manage the upgrades :) foreach ( $languages as $key => $locale ) { if ( file_exists( WP_LANG_DIR . "/$locale.po" ) ) { unset( $languages[ $key ] ); } } if ( empty( $languages ) ) { return; } require_once ABSPATH . 'wp-admin/includes/translation-install.php'; $translations = wp_get_available_translations(); if ( ! $translations ) { return; } foreach ( $translations as $translation ) { if ( in_array( $translation['language'], $languages ) ) { $translation['type'] = 'core'; $translations_to_load[] = (object) $translation; } } if ( ! empty( $translations_to_load ) ) { require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; $upgrader = new Language_Pack_Upgrader( new Automatic_Upgrader_Skin ); $upgrader->bulk_upgrade( $translations_to_load, array( 'clear_update_cache' => false ) ); } } /** * Upgrades if the previous version is < 1.7.4 * * @since 1.7.4 */ protected function upgrade_1_7_4() { delete_transient( 'pll_languages_list' ); // Deletes language cache (due to flag properties added in 1.7, page on front removed in 1.7.2, home url fixes in 1.7.4) flush_rewrite_rules(); // Flush rewrite rules due to custom taxonomy rewrite rule bug fix } /** * Upgrades if the previous version is < 1.8 * * @since 1.8 */ protected function upgrade_1_8() { // Adds the flag code in languages stored in DB include PLL_SETTINGS_INC . '/languages.php'; $terms = get_terms( 'language', array( 'hide_empty' => 0 ) ); foreach ( $terms as $lang ) { $description = maybe_unserialize( $lang->description ); if ( isset( $languages[ $description['locale'] ] ) ) { $description['flag_code'] = $languages[ $description['locale'] ][4]; $description = serialize( $description ); wp_update_term( (int) $lang->term_id, 'language', array( 'description' => $description ) ); } } delete_transient( 'pll_languages_list' ); } /** * Upgrades if the previous version is < 2.0.8 * Changes the user meta 'user_lang' to 'locale' to match WP 4.7 choice * * @since 2.0.8 */ protected function upgrade_2_0_8() { global $wpdb; $wpdb->update( $wpdb->usermeta, array( 'meta_key' => 'locale' ), array( 'meta_key' => 'user_lang' ) ); } /** * Upgrades if the previous version is < 2.1 * Moves strings translations from polylang_mo post_content to post meta _pll_strings_translations * * @since 2.1 */ protected function upgrade_2_1() { foreach ( get_terms( 'language', array( 'hide_empty' => 0 ) ) as $lang ) { $mo_id = PLL_MO::get_id( $lang ); $meta = get_post_meta( $mo_id, '_pll_strings_translations', true ); if ( empty( $meta ) ) { $post = get_post( $mo_id, OBJECT ); $strings = unserialize( $post->post_content ); if ( is_array( $strings ) ) { update_post_meta( $mo_id, '_pll_strings_translations', $strings ); } } } } /** * Upgrades if the previous version is < 2.2 * * @since 2.2 */ protected function upgrade_2_2() { delete_transient( 'pll_languages_list' ); // Deletes language cache (due to 'redirect_lang' option removed for subdomains and multiple domains) } } install/install-base.php000066600000005041152100561500011300 0ustar00plugin_basename = $plugin_basename; // Manages plugin activation and deactivation register_activation_hook( $plugin_basename, array( $this, 'activate' ) ); register_deactivation_hook( $plugin_basename, array( $this, 'deactivate' ) ); // Blog creation on multisite add_action( 'wpmu_new_blog', array( $this, 'wpmu_new_blog' ), 5 ); // Before WP attempts to send mails which can break on some PHP versions } /** * Allows to detect plugin deactivation * * @since 1.7 * * @return bool true if the plugin is currently beeing deactivated */ public function is_deactivation() { return isset( $_GET['action'], $_GET['plugin'] ) && 'deactivate' == $_GET['action'] && $this->plugin_basename == $_GET['plugin']; } /** * Activation or deactivation for all blogs * * @since 1.2 * * @param string $what Either 'activate' or 'deactivate' * @param bool $networkwide */ protected function do_for_all_blogs( $what, $networkwide ) { // Network if ( is_multisite() && $networkwide ) { global $wpdb; foreach ( $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" ) as $blog_id ) { switch_to_blog( $blog_id ); 'activate' == $what ? $this->_activate() : $this->_deactivate(); } restore_current_blog(); } // Single blog else { 'activate' == $what ? $this->_activate() : $this->_deactivate(); } } /** * Plugin activation for multisite * * @since 1.7 * * @param bool $networkwide */ public function activate( $networkwide ) { $this->do_for_all_blogs( 'activate', $networkwide ); } /** * Plugin activation * * @since 0.5 */ protected function _activate() { // Can be overriden in child class } /** * Plugin deactivation for multisite * * @since 0.1 * * @param bool $networkwide */ public function deactivate( $networkwide ) { $this->do_for_all_blogs( 'deactivate', $networkwide ); } /** * Plugin deactivation * * @since 0.5 */ protected function _deactivate() { // Can be overriden in child class } /** * Blog creation on multisite ( to set default options ) * * @since 0.9.4 * * @param int $blog_id */ public function wpmu_new_blog( $blog_id ) { switch_to_blog( $blog_id ); $this->_activate(); restore_current_blog(); } } install/install.php000066600000005741152100561500010377 0ustar00%s

    ', /* translators: %s are WordPress version numbers */ sprintf( esc_html__( 'You are using WordPress %s. Polylang requires at least WordPress %s.', 'polylang' ), esc_html( $wp_version ), PLL_MIN_WP_VERSION ) ) ); } $this->do_for_all_blogs( 'activate', $networkwide ); } /** * Get default Polylang options * * @since 1.8 * * return array */ static public function get_default_options() { return array( 'browser' => 1, // Default language for the front page is set by browser preference 'rewrite' => 1, // Remove /language/ in permalinks ( was the opposite before 0.7.2 ) 'hide_default' => 1, // Remove URL language information for default language ( was the opposite before 2.1.5 ) 'force_lang' => 1, // Add URL language information ( was 0 before 1.7 ) 'redirect_lang' => 0, // Do not redirect the language page to the homepage 'media_support' => 1, // Support languages and translation for media by default 'uninstall' => 0, // Do not remove data when uninstalling Polylang 'sync' => array(), // Synchronisation is disabled by default ( was the opposite before 1.2 ) 'post_types' => array(), 'taxonomies' => array(), 'domains' => array(), 'version' => POLYLANG_VERSION, ); } /** * Plugin activation * * @since 0.5 */ protected function _activate() { if ( $options = get_option( 'polylang' ) ) { // Check if we will be able to upgrade if ( version_compare( $options['version'], POLYLANG_VERSION, '<' ) ) { $upgrade = new PLL_Upgrade( $options ); $upgrade->can_activate(); } } // Defines default values for options in case this is the first installation else { update_option( 'polylang', self::get_default_options() ); } // Avoid 1 query on every pages if no wpml strings is registered if ( ! get_option( 'polylang_wpml_strings' ) ) { update_option( 'polylang_wpml_strings', array() ); } // Don't use flush_rewrite_rules at network activation. See #32471 // Thanks to RavanH for the trick. See https://polylang.wordpress.com/2015/06/10/polylang-1-7-6-and-multisite/ // Rewrite rules are created at next page load :) delete_option( 'rewrite_rules' ); } /** * Plugin deactivation * * @since 0.5 */ protected function _deactivate() { delete_option( 'rewrite_rules' ); // Don't use flush_rewrite_rules at network activation. See #32471 } } install/plugin-updater.php000066600000034304152100561500011666 0ustar00api_url = trailingslashit( $_api_url ); $this->api_data = $_api_data; $this->name = plugin_basename( $_plugin_file ); $this->slug = basename( $_plugin_file, '.php' ); $this->version = $_api_data['version']; $this->wp_override = isset( $_api_data['wp_override'] ) ? (bool) $_api_data['wp_override'] : false; $this->beta = ! empty( $this->api_data['beta'] ) ? true : false; $this->cache_key = md5( serialize( $this->slug . $this->api_data['license'] . $this->beta ) ); $edd_plugin_data[ $this->slug ] = $this->api_data; // Set up hooks. $this->init(); } /** * Set up WordPress filters to hook into WP's update process. * * @uses add_filter() * * @return void */ public function init() { add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) ); add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 ); remove_action( 'after_plugin_row_' . $this->name, 'wp_plugin_update_row', 10 ); add_action( 'after_plugin_row_' . $this->name, array( $this, 'show_update_notification' ), 10, 2 ); add_action( 'admin_init', array( $this, 'show_changelog' ) ); } /** * Check for Updates at the defined API endpoint and modify the update array. * * This function dives into the update API just when WordPress creates its update array, * then adds a custom API call and injects the custom plugin data retrieved from the API. * It is reassembled from parts of the native WordPress plugin update code. * See wp-includes/update.php line 121 for the original wp_update_plugins() function. * * @uses api_request() * * @param array $_transient_data Update array build by WordPress. * @return array Modified update array with custom plugin data. */ public function check_update( $_transient_data ) { global $pagenow; if ( ! is_object( $_transient_data ) ) { $_transient_data = new stdClass; } if ( 'plugins.php' == $pagenow && is_multisite() ) { return $_transient_data; } if ( ! empty( $_transient_data->response ) && ! empty( $_transient_data->response[ $this->name ] ) && false === $this->wp_override ) { return $_transient_data; } $version_info = $this->get_cached_version_info(); if ( false === $version_info ) { $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug, 'beta' => $this->beta ) ); $this->set_version_info_cache( $version_info ); } if ( false !== $version_info && is_object( $version_info ) && isset( $version_info->new_version ) ) { if ( version_compare( $this->version, $version_info->new_version, '<' ) ) { $_transient_data->response[ $this->name ] = $version_info; } $_transient_data->last_checked = current_time( 'timestamp' ); $_transient_data->checked[ $this->name ] = $this->version; } return $_transient_data; } /** * show update nofication row -- needed for multisite subsites, because WP won't tell you otherwise! * * @param string $file * @param array $plugin */ public function show_update_notification( $file, $plugin ) { if ( is_network_admin() ) { return; } if( ! current_user_can( 'update_plugins' ) ) { return; } if( ! is_multisite() ) { return; } if ( $this->name != $file ) { return; } // Remove our filter on the site transient remove_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ), 10 ); $update_cache = get_site_transient( 'update_plugins' ); $update_cache = is_object( $update_cache ) ? $update_cache : new stdClass(); if ( empty( $update_cache->response ) || empty( $update_cache->response[ $this->name ] ) ) { $version_info = $this->get_cached_version_info(); if ( false === $version_info ) { $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug, 'beta' => $this->beta ) ); $this->set_version_info_cache( $version_info ); } if ( ! is_object( $version_info ) ) { return; } if ( version_compare( $this->version, $version_info->new_version, '<' ) ) { $update_cache->response[ $this->name ] = $version_info; } $update_cache->last_checked = current_time( 'timestamp' ); $update_cache->checked[ $this->name ] = $this->version; set_site_transient( 'update_plugins', $update_cache ); } else { $version_info = $update_cache->response[ $this->name ]; } // Restore our filter add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) ); if ( ! empty( $update_cache->response[ $this->name ] ) && version_compare( $this->version, $version_info->new_version, '<' ) ) { // build a plugin list row, with update notification $wp_list_table = _get_list_table( 'WP_Plugins_List_Table' ); # echo ''; echo ''; echo '
    '; $changelog_link = self_admin_url( 'index.php?edd_sl_action=view_plugin_changelog&plugin=' . $this->name . '&slug=' . $this->slug . '&TB_iframe=true&width=772&height=911' ); if ( empty( $version_info->download_link ) ) { printf( /* translators: %1$s plugin name, %3$s plugin version, %2$s and %4$s are html tags */ esc_html__( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s.', 'polylang' ), esc_html( $version_info->name ), '', esc_html( $version_info->new_version ), '' ); } else { printf( /* translators: %1$s plugin name, %3$s plugin version, %2$s, %4$s, %5$s and %6$s are html tags */ esc_html__( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s or %5$supdate now%6$s.', 'polylang' ), esc_html( $version_info->name ), '', esc_html( $version_info->new_version ), '', '', '' ); } do_action( "in_plugin_update_message-{$file}", $plugin, $version_info ); echo '
    '; } } /** * Updates information on the "View version x.x details" page with custom data. * * @uses api_request() * * @param mixed $_data * @param string $_action * @param object $_args * @return object $_data */ public function plugins_api_filter( $_data, $_action = '', $_args = null ) { if ( $_action != 'plugin_information' ) { return $_data; } if ( ! isset( $_args->slug ) || ( $_args->slug != $this->slug ) ) { return $_data; } $to_send = array( 'slug' => $this->slug, 'is_ssl' => is_ssl(), 'fields' => array( 'banners' => array(), 'reviews' => false ) ); $cache_key = 'edd_api_request_' . md5( serialize( $this->slug . $this->api_data['license'] . $this->beta ) ); // Get the transient where we store the api request for this plugin for 24 hours $edd_api_request_transient = $this->get_cached_version_info( $cache_key ); //If we have no transient-saved value, run the API, set a fresh transient with the API value, and return that value too right now. if ( empty( $edd_api_request_transient ) ) { $api_response = $this->api_request( 'plugin_information', $to_send ); // Expires in 3 hours $this->set_version_info_cache( $api_response, $cache_key ); if ( false !== $api_response ) { $_data = $api_response; } } else { $_data = $edd_api_request_transient; } // Convert sections into an associative array, since we're getting an object, but Core expects an array. if ( isset( $_data->sections ) && ! is_array( $_data->sections ) ) { $new_sections = array(); foreach ( $_data->sections as $key => $value ) { $new_sections[ $key ] = $value; } $_data->sections = $new_sections; } // Convert banners into an associative array, since we're getting an object, but Core expects an array. if ( isset( $_data->banners ) && ! is_array( $_data->banners ) ) { $new_banners = array(); foreach ( $_data->banners as $key => $value ) { $new_banners[ $key ] = $value; } $_data->banners = $new_banners; } return $_data; } /** * Disable SSL verification in order to prevent download update failures * * @param array $args * @param string $url * @return object $array */ public function http_request_args( $args, $url ) { // If it is an https request and we are performing a package download, disable ssl verification if ( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) { $args['sslverify'] = false; } return $args; } /** * Calls the API and, if successfull, returns the object delivered by the API. * * @uses get_bloginfo() * @uses wp_remote_post() * @uses is_wp_error() * * @param string $_action The requested action. * @param array $_data Parameters for the API action. * @return false|object */ private function api_request( $_action, $_data ) { global $wp_version; $data = array_merge( $this->api_data, $_data ); if ( $data['slug'] != $this->slug ) { return; } if( $this->api_url == trailingslashit (home_url() ) ) { return false; // Don't allow a plugin to ping itself } $api_params = array( 'edd_action' => 'get_version', 'license' => ! empty( $data['license'] ) ? $data['license'] : '', 'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false, 'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false, 'version' => isset( $data['version'] ) ? $data['version'] : false, 'slug' => $data['slug'], 'author' => $data['author'], 'url' => home_url(), 'beta' => ! empty( $data['beta'] ), ); $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) ); if ( ! is_wp_error( $request ) ) { $request = json_decode( wp_remote_retrieve_body( $request ) ); } if ( $request && isset( $request->sections ) ) { $request->sections = maybe_unserialize( $request->sections ); } else { $request = false; } if ( $request && isset( $request->banners ) ) { $request->banners = maybe_unserialize( $request->banners ); } if( ! empty( $request->sections ) ) { foreach( $request->sections as $key => $section ) { $request->$key = (array) $section; } } return $request; } public function show_changelog() { global $edd_plugin_data; if( empty( $_REQUEST['edd_sl_action'] ) || 'view_plugin_changelog' != $_REQUEST['edd_sl_action'] ) { return; } if( empty( $_REQUEST['plugin'] ) ) { return; } if( empty( $_REQUEST['slug'] ) ) { return; } if( ! current_user_can( 'update_plugins' ) ) { wp_die( __( 'You do not have permission to install plugin updates', 'polylang' ), __( 'Error', 'polylang' ), array( 'response' => 403 ) ); } $data = $edd_plugin_data[ $_REQUEST['slug'] ]; $beta = ! empty( $data['beta'] ) ? true : false; $cache_key = md5( 'edd_plugin_' . sanitize_key( $_REQUEST['plugin'] ) . '_' . $beta . '_version_info' ); $version_info = $this->get_cached_version_info( $cache_key ); if( false === $version_info ) { $api_params = array( 'edd_action' => 'get_version', 'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false, 'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false, 'slug' => $_REQUEST['slug'], 'author' => $data['author'], 'url' => home_url(), 'beta' => ! empty( $data['beta'] ) ); $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) ); if ( ! is_wp_error( $request ) ) { $version_info = json_decode( wp_remote_retrieve_body( $request ) ); } if ( ! empty( $version_info ) && isset( $version_info->sections ) ) { $version_info->sections = maybe_unserialize( $version_info->sections ); } else { $version_info = false; } if( ! empty( $version_info ) ) { foreach( $version_info->sections as $key => $section ) { $version_info->$key = (array) $section; } } $this->set_version_info_cache( $version_info, $cache_key ); } if( ! empty( $version_info ) && isset( $version_info->sections['changelog'] ) ) { echo '
    ' . $version_info->sections['changelog'] . '
    '; } exit; } public function get_cached_version_info( $cache_key = '' ) { if( empty( $cache_key ) ) { $cache_key = $this->cache_key; } $cache = get_option( $cache_key ); if( empty( $cache['timeout'] ) || current_time( 'timestamp' ) > $cache['timeout'] ) { return false; // Cache is expired } return json_decode( $cache['value'] ); } public function set_version_info_cache( $value = '', $cache_key = '' ) { if( empty( $cache_key ) ) { $cache_key = $this->cache_key; } $data = array( 'timeout' => strtotime( '+3 hours', current_time( 'timestamp' ) ), 'value' => json_encode( $value ) ); update_option( $cache_key, $data ); } } readme.txt000066600000017711152100561500006550 0ustar00=== Polylang === Contributors: Chouby Donate link: https://polylang.pro Tags: multilingual, bilingual, translate, translation, language, multilanguage, international, localization Requires at least: 4.4 Tested up to: 4.8 Stable tag: 2.2.3 License: GPLv2 or later Making WordPress multilingual == Description == = Features = Polylang allows you to create a bilingual or multilingual WordPress site. You write posts, pages and create categories and post tags as usual, and then define the language for each of them. The translation of a post, whether it is in the default language or not, is optional. * You can use as many languages as you want. RTL language scripts are supported. WordPress languages packs are automatically downloaded and updated. * You can translate posts, pages, media, categories, post tags, menus, widgets... * Custom post types, custom taxonomies, sticky posts and post formats, RSS feeds and all default WordPress widgets are supported. * The language is either set by the content or by the language code in url, or you can use one different subdomain or domain per language * Categories, post tags as well as some other metas are automatically copied when adding a new post or page translation * A customizable language switcher is provided as a widget or in the nav menu > The author does not provide support on the wordpress.org forum. Support and extra features are available to [Polylang Pro](https://polylang.pro) users. If you wish to migrate from WPML, you can use the plugin [WPML to Polylang](https://wordpress.org/plugins/wpml-to-polylang/) If you wish to use a professional or automatic translation service, you can install [Lingotek Translation](https://wordpress.org/plugins/lingotek-translation/), as an addon of Polylang. Lingotek offers a complete translation management system which provides services such as translation memory or semi-automated translation processes (e.g. machine translation > human translation > legal review). = Credits = Thanks a lot to all translators who [help translating Polylang](https://translate.wordpress.org/projects/wp-plugins/polylang). Thanks a lot to [Alex Lopez](http://www.alexlopez.rocks/) for the design of the logo. Most of the flags included with Polylang are coming from [famfamfam](http://famfamfam.com/) and are public domain. Wherever third party code has been used, credit has been given in the code’s comments. = Do you like Polylang? = Don't hesitate to [give your feedback](http://wordpress.org/support/view/plugin-reviews/polylang#postform). == Installation == 1. Make sure you are using WordPress 4.0 or later and that your server is running PHP 5.2.4 or later (same requirement as WordPress itself) 1. If you tried other multilingual plugins, deactivate them before activating Polylang, otherwise, you may get unexpected results! 1. Install and activate the plugin as usual from the 'Plugins' menu in WordPress. 1. Go to the languages settings page and create the languages you need 1. Add the 'language switcher' widget to let your visitors switch the language. 1. Take care that your theme must come with the corresponding .mo files (Polylang automatically downloads them when they are available for themes and plugins in this repository). If your theme is not internationalized yet, please refer to the [Theme Handbook](https://developer.wordpress.org/themes/functionality/internationalization/) or ask the theme author to internationalize it. == Frequently Asked Questions == = Where to find help ? = * First time users should read [Polylang - Getting started](https://polylang.pro/doc-category/getting-started/), which explains the basics with a lot of screenshots. * Read the [documentation](https://polylang.pro/doc/). It includes a [FAQ](https://polylang.pro/doc-category/faq/) and the [documentation for developers](https://polylang.pro/doc-category/developers/). * Search the [community support forum](https://wordpress.org/search/). You will probably find your answer here. * Read the sticky posts in the [community support forum](http://wordpress.org/support/plugin/polylang). * If you still have a problem, open a new thread in the [community support forum](http://wordpress.org/support/plugin/polylang). * [Polylang Pro](https://polylang.pro) users have access to our helpdesk. = Is Polylang compatible with WooCommerce? = * You need a separate addon to make Polylang and WooCommerce work together. [A Premium addon](https://polylang.pro/downloads/polylang-for-woocommerce/) is available. = Do you need translation services? = * If you want to use professional or automatic translation services, install and activate the [Lingotek Translation](https://wordpress.org/plugins/lingotek-translation/) plugin. == Screenshots == 1. The Polylang languages admin panel 2. The Strings translations admin panel 3. Multilingual media library 4. The Edit Post screen with the Languages metabox == Changelog == = 2.2.3 (2017-09-24) = * Fix editor removed on pages (introduced in 2.2.2) = 2.2.2 (2017-09-22) = * Pro: Fix Duplicate post button not working when the user meta has been corrupted * Fix PHP notice with the plugin Members #175 * Fix page template select displayed when editing a translated page for posts * Fix incompatibility with WP 4.8.2 (placeholder %1$s in prepare) = 2.2.1 (2017-08-30) = * Pro: partially refactor REST API classes * Pro: Fix duplicate content user meta not removed from DB when uninstalling the plugin * Fix strings translations not removed from DB when uninstalling the plugin * Fix incorrect translation files loaded in ajax on front when the user is logged in (WP 4.7+) * Fix widget language dropdown removed when saving a widget (introduced in 2.2) * Fix queries with negative values for the 'cat' parameter (introduced in 2.2 for queries made on frontend) * Fix performance issue in combination with some plugins when the language is set from the content (introduced in 2.2) = 2.2 (2017-08-16) = * Pro: Add support for the REST API * Pro: Add integration with The Events Calendar * Pro: Refactor ACF Pro integration for post metas and integrate term metas * Pro: Ask confirmation if synchronizing a post overwrites an existing translation * Pro: Separate sync post logic from interface * Pro: Fix 'Detect browser language' option automatically deactivated * Pro: Fix redirect to 404 when the 'page' slug translation includes non alphanumeric characters. * Pro: Fix untranslated post type archive slug * Pro: Fix ACF taxonomy fields not copied when the taxonomy is not translated #156 * Pro: Fix fatal error with ACF4 * Support a different content text direction in admin #45 * Add support for wildcards and 'copy-once' attribute in wpml-config.xml * Add minimal support for the filters 'wpml_display_language_names' and 'icl_ls_languages' * Improve compatibility with the plugin WordPress MU Domain Mapping #116 * Improve speed of the sticky posts filter #41 * Remove redirect_lang option for multiple domains and subdomains * Use secure cookie when using SSL * Allow to copy/sync term metas with the filter 'pll_copy_term_metas' * Filter ajax requests in term.php according to the term language * Add error message in customizer when setting an untranslated static front page #47 * Load static page class only if we are using a static front page * Refactor parse_query filters to use the same code on frontend and admin * Don't use add_language_to_link in filters * Move ajaxPrefilter footer script on top * Use wp_doing_ajax() instead of DOING_AJAX constant * Fix queries custom tax not excluded from language filter on admin * Fix WP translation not loaded when the language is set from the content on multisite. * Fix the list of core post types in PLL_OLT_Manager for WP 4.7+ * Fix post name and tag slug incorrectly sanitized for German and Danish * Fix lang attribute in dropdowns * Fix wpml_permalink filter #139 * Fix WPML constants undefined on backend #151 * Fix a conflict with the plugin Custom Permalinks #143 * Fix menu location unexpectedly unset See [changelog.txt](https://plugins.svn.wordpress.org/polylang/trunk/changelog.txt) for older changelog include/links-domain.php000066600000004774152100561500011300 0ustar00hosts = $this->get_hosts(); // Filrer the site url ( mainly to get the correct login form ) add_filter( 'site_url', array( $this, 'site_url' ) ); } /** * Adds the language code in url * links_model interface * * @since 1.2 * * @param string $url url to modify * @param object $lang language * @return string modified url */ public function add_language_to_link( $url, $lang ) { if ( ! empty( $lang ) && ! empty( $this->hosts[ $lang->slug ] ) ) { $url = preg_replace( '#:\/\/(' . parse_url( $this->home, PHP_URL_HOST ) . ')($|\/.*)#', '://' . $this->hosts[ $lang->slug ] . '$2', $url ); } return $url; } /** * Returns the url without language code * links_model interface * * @since 1.2 * * @param string $url url to modify * @return string modified url */ public function remove_language_from_link( $url ) { if ( ! empty( $this->hosts ) ) { $url = preg_replace( '#:\/\/(' . implode( '|', $this->hosts ) . ')($|\/.*)#', '://' . parse_url( $this->home, PHP_URL_HOST ) . '$2', $url ); } return $url; } /** * Returns the language based on language code in url * links_model interface * * @since 1.2 * @since 2.0 add $url argument * * @param string $url optional, defaults to current url * @return string language slug */ public function get_language_from_url( $url = '' ) { $host = empty( $url ) ? $_SERVER['HTTP_HOST'] : parse_url( $url, PHP_URL_HOST ); return ( $lang = array_search( $host , $this->hosts ) ) ? $lang : ''; } /** * Returns the home url * links_model interface * * @since 1.3.1 * * @param object $lang PLL_Language object * @return string */ function home_url( $lang ) { return trailingslashit( empty( $this->options['domains'][ $lang->slug ] ) ? $this->home : $this->options['domains'][ $lang->slug ] ); } /** * Get hosts managed on the website * * @since 1.5 * * @return array list of hosts */ public function get_hosts() { $hosts = array(); foreach ( $this->options['domains'] as $lang => $domain ) { $hosts[ $lang ] = parse_url( $domain, PHP_URL_HOST ); } return $hosts; } } include/pointer.php000066600000006467152100561500010374 0ustar00 required, unique identifier of the pointer * id => required, the pointer will be attached to this html id * position => optional array, if used both sub parameters are required * edge => 'top' or 'bottom' * align => 'right' or 'left' * width => optional, the width in px * title => required, title * content => required, content * buttons => optional array of arrays, by default the pointer uses the standard dismiss button offered by WP * label => the label of the button * link => optional link for the button. By default, the button just dismisses the pointer * * @since 1.7.7 * * @param array $args */ public function __construct( $args ) { $this->args = $args; add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); } /** * enqueue javascripts and styles if the pointer has not been dismissed * * @since 1.7.7 */ public function enqueue_scripts() { $dismissed = explode( ',', get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) ); if ( in_array( $this->args['pointer'], $dismissed ) || ! current_user_can( 'manage_options' ) ) { return; } // Add pointer javascript add_action( 'admin_print_footer_scripts', array( $this, 'print_js' ) ); wp_enqueue_style( 'wp-pointer' ); wp_enqueue_script( 'wp-pointer' ); } /** * adds the javascript of our pointer to the page * * @since 1.7.7 */ public function print_js() { // add optional buttons if ( ! empty( $this->args['buttons'] ) ) { $b = " var widget = pointer.pointer( 'widget' ); var buttons = $( '.wp-pointer-buttons', widget ); $( 'a.close', widget ).remove();"; // removes the WP button // all the buttons use the standard WP ajax action to remember the pointer has been dismissed foreach ( $this->args['buttons'] as $button ) { $b .= sprintf( " $( '' ).addClass( '%s' ).html( '%s' ).css( 'margin-left', '10px' ).click( function() { $.post( ajaxurl, { pointer: '%s', action: 'dismiss-wp-pointer' }, function( response ) { %s } ); } ).appendTo( buttons );", empty( $button['link'] ) ? 'button' : 'button button-primary', esc_html( $button['label'] ), $this->args['pointer'], empty( $button['link'] ) ? "pointer.pointer( 'close' )" : sprintf( "location.href = '%s'", $button['link'] ) ); } } $js = sprintf( " //", $this->args['id'], sprintf( '

    %s

    %s

    ', esc_html( $this->args['title'] ), esc_html( $this->args['content'] ) ), empty( $this->args['position'] ) ? '' : sprintf( 'position: {edge: "%s", align: "%s",},', $this->args['position']['edge'], $this->args['position']['align'] ), empty( $this->args['width'] ) ? '' : sprintf( 'pointerWidth: %d,', $this->args['width'] ), empty( $b ) ? '' : $b ); echo ''; } } include/mo.php000066600000006116152100561500007316 0ustar00 __( 'Strings translations', 'polylang' ) ); register_post_type( 'polylang_mo', array( 'labels' => $labels, 'rewrite' => false, 'query_var' => false, '_pll' => true ) ); add_action( 'pll_add_language', array( $this, 'clean_cache' ) ); } } /** * Writes a PLL_MO object into a custom post meta * * @since 1.2 * * @param object $lang The language in which we want to export strings */ public function export_to_db( $lang ) { $this->add_entry( $this->make_entry( '', '' ) ); // Empty string translation, just in case // Would be convenient to store the whole object but it would take a huge space in DB // So let's keep only the strings in an array $strings = array(); foreach ( $this->entries as $entry ) { $strings[] = array( $entry->singular, $this->translate( $entry->singular ) ); } $strings = wp_slash( $strings ); // Avoid breaking slashed strings in update_post_meta. See https://codex.wordpress.org/Function_Reference/update_post_meta#Character_Escaping if ( empty( $lang->mo_id ) ) { $post = array( 'post_title' => 'polylang_mo_' . $lang->term_id, 'post_status' => 'private', // To avoid a conflict with WP Super Cache. See https://wordpress.org/support/topic/polylang_mo-and-404s-take-2 'post_type' => 'polylang_mo', ); $mo_id = wp_insert_post( $post ); update_post_meta( $mo_id, '_pll_strings_translations', $strings ); } else { update_post_meta( $lang->mo_id, '_pll_strings_translations', $strings ); } } /** * Reads a PLL_MO object from a custom post meta * * @since 1.2 * * @param object $lang The language in which we want to get strings */ public function import_from_db( $lang ) { if ( ! empty( $lang->mo_id ) ) { $strings = get_post_meta( $lang->mo_id, '_pll_strings_translations', true ); if ( is_array( $strings ) ) { foreach ( $strings as $msg ) { $this->add_entry( $this->make_entry( $msg[0], $msg[1] ) ); } } } } /** * Returns the post id of the post storing the strings translations * * @since 1.4 * * @param object $lang * @return int */ public static function get_id( $lang ) { global $wpdb; $ids = wp_cache_get( 'polylang_mo_ids' ); if ( empty( $ids ) ) { $ids = $wpdb->get_results( "SELECT post_title, ID FROM $wpdb->posts WHERE post_type='polylang_mo'", OBJECT_K ); wp_cache_add( 'polylang_mo_ids', $ids ); } // The mo id for a language can be transiently empty return isset( $ids[ 'polylang_mo_' . $lang->term_id ] ) ? $ids[ 'polylang_mo_' . $lang->term_id ]->ID : null; } /** * Invalidate the cache when adding a new language * * @since 2.0.5 */ public function clean_cache() { wp_cache_delete( 'polylang_mo_ids' ); } } include/nav-menu.php000066600000003631152100561500010430 0ustar00model = &$polylang->model; $this->options = &$polylang->options; // integration with WP customizer add_action( 'customize_register', array( $this, 'create_nav_menu_locations' ), 5 ); } /** * create temporary nav menu locations ( one per location and per language ) for all non-default language * to do only one time * * @since 1.2 */ public function create_nav_menu_locations() { static $once; global $_wp_registered_nav_menus; if ( isset( $_wp_registered_nav_menus ) && ! $once ) { foreach ( $_wp_registered_nav_menus as $loc => $name ) { foreach ( $this->model->get_languages_list() as $lang ) { $arr[ $this->combine_location( $loc, $lang ) ] = $name . ' ' . $lang->name; } } $_wp_registered_nav_menus = $arr; $once = true; } } /** * creates a temporary nav menu location from a location and a language * * @since 1.8 * * @param string $loc nav menu location * @param object $lang * @return string */ public function combine_location( $loc, $lang ) { return $loc . ( strpos( $loc, '___' ) || $this->options['default_lang'] === $lang->slug ? '' : '___' . $lang->slug ); } /** * get nav menu locations and language from a temporary locaction * * @since 1.8 * * @param string $loc temporary location * @return array * 'location' => nav menu location * 'lang' => language slug */ public function explode_location( $loc ) { $infos = explode( '___', $loc ); if ( 1 == count( $infos ) ) { $infos[] = $this->options['default_lang']; } return array_combine( array( 'location', 'lang' ), $infos ); } } include/functions.php000066600000005703152100561500010714 0ustar00home_url( $language ); $language->set_home_url( $home_url, $home_url ); // Search url and home url are the same } /** * Returns the current site url * * @since 1.8 * * @param string $url * @return string */ public function site_url( $url ) { $lang = $this->get_language_from_url(); $lang = $this->model->get_language( $lang ); return $this->add_language_to_link( $url, $lang ); } /** * Fix the domain for upload directory * * @since 2.0.6 * * @param array $uploads * @return array */ public function upload_dir( $uploads ) { $lang = $this->get_language_from_url(); $lang = $this->model->get_language( $lang ); $uploads['url'] = $this->add_language_to_link( $uploads['url'], $lang ); $uploads['baseurl'] = $this->add_language_to_link( $uploads['baseurl'], $lang ); return $uploads; } } include/widget-languages.php000066600000011514152100561500012130 0ustar00 __( 'Displays a language switcher', 'polylang' ), 'customize_selective_refresh' => true, ) ); } /** * Displays the widget * * @since 0.1 * * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget. * @param array $instance The settings for the particular instance of the widget */ function widget( $args, $instance ) { // Sets a unique id for dropdown $instance['dropdown'] = empty( $instance['dropdown'] ) ? 0 : $args['widget_id']; if ( $list = pll_the_languages( array_merge( $instance, array( 'echo' => 0 ) ) ) ) { $title = empty( $instance['title'] ) ? '' : $instance['title']; /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); echo $args['before_widget']; if ( $title ) { echo $args['before_title'] . $title . $args['after_title']; } if ( $instance['dropdown'] ) { echo ''; echo $list; } else { echo "
      \n" . $list . "
    \n"; } echo $args['after_widget']; } } /** * Updates the widget options * * @since 0.4 * * @param array $new_instance New settings for this instance as input by the user via form() * @param array $old_instance Old settings for this instance * @return array Settings to save or bool false to cancel saving */ function update( $new_instance, $old_instance ) { $instance['title'] = strip_tags( $new_instance['title'] ); foreach ( array_keys( PLL_Switcher::get_switcher_options( 'widget' ) ) as $key ) { $instance[ $key ] = ! empty( $new_instance[ $key ] ) ? 1 : 0; } return $instance; } /** * Displays the widget form * * @since 0.4 * * @param array $instance Current settings */ function form( $instance ) { // Default values $instance = wp_parse_args( (array) $instance, array_merge( array( 'title' => '' ), PLL_Switcher::get_switcher_options( 'widget', 'default' ) ) ); // Title printf( '

    ', $this->get_field_id( 'title' ), esc_html__( 'Title:', 'polylang' ), $this->get_field_name( 'title' ), esc_attr( $instance['title'] ) ); $fields = ''; foreach ( PLL_Switcher::get_switcher_options( 'widget' ) as $key => $str ) { $fields .= sprintf( '
    ', $this->get_field_id( $key ), $this->get_field_name( $key ), $instance[ $key ] ? ' checked="checked"' : '', esc_html( $str ), in_array( $key, array( 'show_names', 'show_flags', 'hide_current' ) ) ? ' class="no-dropdown-' . $this->id . '"' : '', ! empty( $instance['dropdown'] ) && in_array( $key, array( 'show_names', 'show_flags', 'hide_current' ) ) ? ' style="display:none;"' : '', 'pll-' . $key ); } echo $fields; // FIXME echoing script in form is not very clean // but it does not work if enqueued properly : // clicking save on a widget makes this code unreachable for the just saved widget ( ?! ) $this->admin_print_script(); } /** * Add javascript to control the language switcher options * * @since 1.3 */ public function admin_print_script() { static $done = false; if ( $done ) { return; } $done = true; ?> query = &$query; $this->model = &$model; } /** * Check if translated taxonomy is queried * Compatible with nested queries introduced in WP 4.1 * @see https://wordpress.org/support/topic/tax_query-bug * * @since 1.7 * * @param array $tax_queries * @return bool */ protected function have_translated_taxonomy( $tax_queries ) { foreach ( $tax_queries as $tax_query ) { if ( isset( $tax_query['taxonomy'] ) && $this->model->is_translated_taxonomy( $tax_query['taxonomy'] ) && ! ( isset( $tax_query['operator'] ) && 'NOT IN' === $tax_query['operator'] ) ) { return true; } // Nested queries elseif ( is_array( $tax_query ) && $this->have_translated_taxonomy( $tax_query ) ) { return true; } } return false; } /** * Get queried taxonomies * * @since 2.2 * * @return array queried taxonomies */ public function get_queried_taxonomies() { return isset( $this->query->tax_query->queried_terms ) ? array_keys( wp_list_filter( $this->query->tax_query->queried_terms, array( 'operator' => 'NOT IN' ), 'NOT' ) ) : array(); } /** * Sets the language in query * Optimized for ( needs ) WP 3.5+ * * @since 2.2 * * @param object $lang */ public function set_language( $lang ) { // Defining directly the tax_query ( rather than setting 'lang' avoids transforming the query by WP ) $this->query->query_vars['tax_query'][] = array( 'taxonomy' => 'language', 'field' => 'term_taxonomy_id', // Since WP 3.5 'terms' => $lang->term_taxonomy_id, 'operator' => 'IN', ); } /** * Add the language in query after it has checked that it won't conflict with other query vars * * @since 2.2 * * @param object $lang Language */ public function filter_query( $lang ) { $qvars = &$this->query->query_vars; if ( ! isset( $qvars['lang'] ) ) { // Do not filter the query if the language is already specified in another way foreach ( self::$excludes as $k ) { if ( ! empty( $qvars[ $k ] ) ) { return; } } // Specific case for 'cat' as it can contain negative values if ( ! empty( $qvars['cat'] ) ) { foreach ( explode( ',', $qvars['cat'] ) as $cat ) { if ( $cat > 0 ) { return; } } } $taxonomies = array_intersect( $this->model->get_translated_taxonomies(), get_taxonomies( array( '_builtin' => false ) ) ); foreach ( $taxonomies as $tax ) { $tax = get_taxonomy( $tax ); if ( ! empty( $qvars[ $tax->query_var ] ) ) { return; } } if ( ! empty( $qvars['tax_query'] ) && is_array( $qvars['tax_query'] ) && $this->have_translated_taxonomy( $qvars['tax_query'] ) ) { return; } // Filter queries according to the requested language if ( ! empty( $lang ) ) { $taxonomies = $this->get_queried_taxonomies(); if ( $taxonomies && ( empty( $qvars['post_type'] ) || 'any' === $qvars['post_type'] ) ) { foreach ( $taxonomies as $taxonomy ) { $tax_object = get_taxonomy( $taxonomy ); if ( $this->model->is_translated_post_type( $tax_object->object_type ) ) { $this->set_language( $lang ); break; } } } elseif ( empty( $qvars['post_type'] ) || $this->model->is_translated_post_type( $qvars['post_type'] ) ) { $this->set_language( $lang ); } } } else { // Do not filter untranslatable post types such as nav_menu_item if ( isset( $qvars['post_type'] ) && ! $this->model->is_translated_post_type( $qvars['post_type'] ) ) { unset( $qvars['lang'] ); } // Unset 'all' query var (mainly for admin language filter). if ( isset( $qvars['lang'] ) && 'all' === $qvars['lang'] ) { unset( $qvars['lang'] ); } } } } include/links.php000066600000003434152100561500010023 0ustar00links_model = &$polylang->links_model; $this->model = &$polylang->model; $this->options = &$polylang->options; } /** * Returns the home url in the requested language * * @since 1.3 * * @param object|string $language * @param bool $is_search optional wether we need the home url for a search form, defaults to false */ public function get_home_url( $language, $is_search = false ) { $language = is_object( $language ) ? $language : $this->model->get_language( $language ); return $is_search ? $language->search_url : $language->home_url; } /** * Checks if the current user can read the post * * @since 1.5 * * @param int $post_id * @return bool */ public function current_user_can_read( $post_id ) { $post = get_post( $post_id ); if ( 'inherit' === $post->post_status && $post->post_parent ) { $post = get_post( $post->post_parent ); } if ( 'inherit' === $post->post_status || in_array( $post->post_status, get_post_stati( array( 'public' => true ) ) ) ) { return true; } // Follow WP practices, which shows links to private posts ( when readable ), but not for draft posts ( ex: get_adjacent_post_link() ) if ( in_array( $post->post_status, get_post_stati( array( 'private' => true ) ) ) ) { $post_type_object = get_post_type_object( $post->post_type ); $user = wp_get_current_user(); return is_user_logged_in() && ( current_user_can( $post_type_object->cap->read_private_posts ) || $user->ID == $post->post_author ); // Comparison must not be strict! } return false; } } include/links-default.php000066600000005022152100561500011440 0ustar00options['hide_default'] && $this->options['default_lang'] == $lang->slug ) ? $url : add_query_arg( 'lang', $lang->slug, $url ); } /** * Removes the language information from an url * links_model interface * * @since 1.2 * * @param string $url url to modify * @return string modified url */ public function remove_language_from_link( $url ) { return remove_query_arg( 'lang', $url ); } /** * Returns the link to the first page * links_model interface * * @since 1.2 * * @param string $url url to modify * @return string modified url */ function remove_paged_from_link( $url ) { return remove_query_arg( 'paged', $url ); } /** * Returns the link to the paged page when using pretty permalinks * * @since 1.5 * * @param string $url url to modify * @param int $page * @return string modified url */ public function add_paged_to_link( $url, $page ) { return add_query_arg( array( 'paged' => $page ), $url ); } /** * Gets the language slug from the url if present * links_model interface * * @since 1.2 * @since 2.0 add $url argument * * @param string $url optional, defaults to current url * @return string language slug */ public function get_language_from_url( $url = '' ) { if ( empty( $url ) ) { $url = $_SERVER['REQUEST_URI']; } $pattern = '#lang=(' . implode( '|', $this->model->get_languages_list( array( 'fields' => 'slug' ) ) ) . ')#'; return preg_match( $pattern, trailingslashit( $url ), $matches ) ? $matches[1] : ''; // $matches[1] is the slug of the requested language } /** * Returns the static front page url * * @since 1.8 * * @param object $lang * @return string */ public function front_page_url( $lang ) { if ( $this->options['hide_default'] && $lang->slug == $this->options['default_lang'] ) { return trailingslashit( $this->home ); } $url = home_url( '/?page_id=' . $lang->page_on_front ); return $this->options['force_lang'] ? $this->add_language_to_link( $url, $lang ) : $url; } } include/links-model.php000066600000006465152100561500011130 0ustar00model = &$model; $this->options = &$model->options; $this->home = home_url(); add_filter( 'pll_languages_list', array( $this, 'pll_languages_list' ), 4 ); // after PLL_Static_Pages add_filter( 'pll_after_languages_cache', array( $this, 'pll_after_languages_cache' ) ); // adds our domains or subdomains to allowed hosts for safe redirection add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) ); } /** * Changes the language code in url * * @since 1.5 * * @param string $url url to modify * @param object $lang language * @return string modified url */ public function switch_language_in_link( $url, $lang ) { $url = $this->remove_language_from_link( $url ); return $this->add_language_to_link( $url, $lang ); } /** * Get hosts managed on the website * * @since 1.5 * * @return array list of hosts */ public function get_hosts() { return array( parse_url( $this->home, PHP_URL_HOST ) ); } /** * Returns the home url * * @since 1.3.1 * * @param object $lang PLL_Language object * @return string */ public function home_url( $lang ) { $url = trailingslashit( $this->home ); return $this->options['hide_default'] && $lang->slug == $this->options['default_lang'] ? $url : $this->add_language_to_link( $url, $lang ); } /** * Sets the home urls * * @since 1.8 * * @param object $language */ protected function set_home_url( $language ) { $search_url = $this->home_url( $language ); $home_url = empty( $language->page_on_front ) || $this->options['redirect_lang'] ? $search_url : $this->front_page_url( $language ); $language->set_home_url( $search_url, $home_url ); } /** * Sets the home urls and flags before the languages are persistently cached * * @since 1.8 * * @param array $languages array of PLL_Language objects * @return array */ public function pll_languages_list( $languages ) { foreach ( $languages as $language ) { $this->set_home_url( $language ); $language->set_flag(); } return $languages; } /** * Sets the home urls when not cached * Sets the home urls scheme * * @since 1.8 * * @param array $languages array of PLL_Language objects * @return array */ public function pll_after_languages_cache( $languages ) { foreach ( $languages as $language ) { // Get the home urls when not cached if ( ( defined( 'PLL_CACHE_LANGUAGES' ) && ! PLL_CACHE_LANGUAGES ) || ( defined( 'PLL_CACHE_HOME_URL' ) && ! PLL_CACHE_HOME_URL ) ) { $this->set_home_url( $language ); } // Ensures that the ( possibly cached ) home url uses the right scheme http or https $language->set_home_url_scheme(); } return $languages; } /** * Adds our domains or subdomains to allowed hosts for safe redirection * * @since 1.4.3 * * @param array $hosts allowed hosts * @return array */ public function allowed_redirect_hosts( $hosts ) { return array_unique( array_merge( $hosts, array_values( $this->get_hosts() ) ) ); } } include/links-directory.php000066600000021163152100561500012024 0ustar00init(); } else { add_action( 'pll_init', array( $this, 'init' ) ); } } /** * Called only at first object creation to avoid duplicating filters when switching blog * * @since 1.6 */ public function init() { if ( did_action( 'setup_theme' ) ) { $this->add_permastruct(); } else { add_action( 'setup_theme', array( $this, 'add_permastruct' ), 2 ); } // Make sure to prepare rewrite rules when flushing add_action( 'pre_option_rewrite_rules', array( $this, 'prepare_rewrite_rules' ) ); } /** * Adds the language code in url * links_model interface * * @since 1.2 * * @param string $url url to modify * @param object $lang language * @return string modified url */ public function add_language_to_link( $url, $lang ) { if ( ! empty( $lang ) ) { $base = $this->options['rewrite'] ? '' : 'language/'; $slug = $this->options['default_lang'] == $lang->slug && $this->options['hide_default'] ? '' : $base . $lang->slug . '/'; if ( false === strpos( $url, $this->home . '/' . $this->root . $slug ) ) { return str_replace( $this->home . '/' . $this->root, $this->home . '/' . $this->root . $slug, $url ); } } return $url; } /** * Returns the url without language code * links_model interface * * @since 1.2 * * @param string $url url to modify * @return string modified url */ function remove_language_from_link( $url ) { foreach ( $this->model->get_languages_list() as $language ) { if ( ! $this->options['hide_default'] || $this->options['default_lang'] != $language->slug ) { $languages[] = $language->slug; } } if ( ! empty( $languages ) ) { $pattern = str_replace( '/', '\/', $this->home . '/' . $this->root ); $pattern = '#' . $pattern . ( $this->options['rewrite'] ? '' : 'language\/' ) . '(' . implode( '|', $languages ) . ')(\/|$)#'; $url = preg_replace( $pattern, $this->home . '/' . $this->root, $url ); } return $url; } /** * Returns the language based on language code in url * links_model interface * * @since 1.2 * @since 2.0 add $url argument * * @param string $url optional, defaults to current url * @return string language slug */ public function get_language_from_url( $url = '' ) { if ( empty( $url ) ) { $path = $_SERVER['REQUEST_URI']; } else { $path = parse_url( $url, PHP_URL_PATH ); } $pattern = parse_url( $this->home . '/' . $this->root . ( $this->options['rewrite'] ? '' : 'language/' ), PHP_URL_PATH ); $pattern = str_replace( '/', '\/', $pattern ); $pattern = '#' . $pattern . '(' . implode( '|', $this->model->get_languages_list( array( 'fields' => 'slug' ) ) ) . ')(\/|$)#'; return preg_match( $pattern, trailingslashit( $path ), $matches ) ? $matches[1] : ''; // $matches[1] is the slug of the requested language } /** * Returns the home url * links_model interface * * @since 1.3.1 * * @param object $lang PLL_Language object * @return string */ public function home_url( $lang ) { $base = $this->options['rewrite'] ? '' : 'language/'; $slug = $this->options['default_lang'] == $lang->slug && $this->options['hide_default'] ? '' : '/' . $this->root . $base . $lang->slug; return trailingslashit( $this->home . $slug ); } /** * Optionaly removes 'language' in permalinks so that we get http://www.myblog/en/ instead of http://www.myblog/language/en/ * * @since 1.2 */ function add_permastruct() { // Language information always in front of the uri ( 'with_front' => false ) // The 3rd parameter structure has been modified in WP 3.4 // Leads to error 404 for pages when there is no language created yet if ( $this->model->get_languages_list() ) { add_permastruct( 'language', $this->options['rewrite'] ? '%language%' : 'language/%language%', array( 'with_front' => false ) ); } } /** * Prepares rewrite rules filters * * @since 0.8.1 * * @param array $pre not used * @return unmodified $pre */ public function prepare_rewrite_rules( $pre ) { // Don't modify the rules if there is no languages created yet // Make sure to add filter only once and if all custom post types and taxonomies have been registered if ( $this->model->get_languages_list() && did_action( 'wp_loaded' ) && ! has_filter( 'language_rewrite_rules', '__return_empty_array' ) ) { // Suppress the rules created by WordPress for our taxonomy add_filter( 'language_rewrite_rules', '__return_empty_array' ); foreach ( $this->get_rewrite_rules_filters() as $type ) { add_filter( $type . '_rewrite_rules', array( $this, 'rewrite_rules' ) ); } add_filter( 'rewrite_rules_array', array( $this, 'rewrite_rules' ) ); // needed for post type archives } return $pre; } /** * The rewrite rules ! * always make sure the default language is at the end in case the language information is hidden for default language * thanks to brbrbr http://wordpress.org/support/topic/plugin-polylang-rewrite-rules-not-correct * * @since 0.8.1 * * @param array $rules rewrite rules * @return array modified rewrite rules */ public function rewrite_rules( $rules ) { $filter = str_replace( '_rewrite_rules', '', current_filter() ); global $wp_rewrite; $newrules = array(); $languages = $this->model->get_languages_list( array( 'fields' => 'slug' ) ); if ( $this->options['hide_default'] ) { $languages = array_diff( $languages, array( $this->options['default_lang'] ) ); } if ( ! empty( $languages ) ) { $slug = $wp_rewrite->root . ( $this->options['rewrite'] ? '' : 'language/' ) . '(' . implode( '|', $languages ) . ')/'; } // For custom post type archives $cpts = array_intersect( $this->model->get_translated_post_types(), get_post_types( array( '_builtin' => false ) ) ); $cpts = $cpts ? '#post_type=(' . implode( '|', $cpts ) . ')#' : ''; foreach ( $rules as $key => $rule ) { // Special case for translated post types and taxonomies to allow canonical redirection if ( $this->options['force_lang'] && in_array( $filter, array_merge( $this->model->get_translated_post_types(), $this->model->get_translated_taxonomies() ) ) ) { /** * Filters the rewrite rules to modify * * @since 1.9.1 * * @param bool $modify whether to modify or not the rule, defaults to true * @param array $rule original rewrite rule * @param string $filter current set of rules being modified * @param string|bool $archive custom post post type archive name or false if it is not a cpt archive */ if ( isset( $slug ) && apply_filters( 'pll_modify_rewrite_rule', true, array( $key => $rule ), $filter, false ) ) { $newrules[ $slug . str_replace( $wp_rewrite->root, '', ltrim( $key, '^' ) ) ] = str_replace( array( '[8]', '[7]', '[6]', '[5]', '[4]', '[3]', '[2]', '[1]', '?' ), array( '[9]', '[8]', '[7]', '[6]', '[5]', '[4]', '[3]', '[2]', '?lang=$matches[1]&' ), $rule ); // Should be enough! } $newrules[ $key ] = $rule; } // Rewrite rules filtered by language elseif ( in_array( $filter, $this->always_rewrite ) || in_array( $filter, $this->model->get_filtered_taxonomies() ) || ( $cpts && preg_match( $cpts, $rule, $matches ) && ! strpos( $rule, 'name=' ) ) || ( 'rewrite_rules_array' != $filter && $this->options['force_lang'] ) ) { /** This filter is documented in include/links-directory.php */ if ( apply_filters( 'pll_modify_rewrite_rule', true, array( $key => $rule ), $filter, empty( $matches[1] ) ? false : $matches[1] ) ) { if ( isset( $slug ) ) { $newrules[ $slug . str_replace( $wp_rewrite->root, '', ltrim( $key, '^' ) ) ] = str_replace( array( '[8]', '[7]', '[6]', '[5]', '[4]', '[3]', '[2]', '[1]', '?' ), array( '[9]', '[8]', '[7]', '[6]', '[5]', '[4]', '[3]', '[2]', '?lang=$matches[1]&' ), $rule ); // Should be enough! } if ( $this->options['hide_default'] ) { $newrules[ $key ] = str_replace( '?', '?lang=' . $this->options['default_lang'] . '&', $rule ); } } else { $newrules[ $key ] = $rule; } } // Unmodified rules else { $newrules[ $key ] = $rule; } } // The home rewrite rule if ( 'root' == $filter && isset( $slug ) ) { $newrules[ $slug . '?$' ] = $wp_rewrite->index . '?lang=$matches[1]'; } return $newrules; } } include/widget-calendar.php000066600000021427152100561500011737 0ustar00 not very efficient (add 4 to 5 sql queries) * method used since 0.5: remove the WP widget and replace it by our own -> our language filter will not work if get_calendar is called directly by a theme * * @since 0.5 */ class PLL_Widget_Calendar extends WP_Widget_Calendar { /** * displays the widget * modified version of the parent function to call our own get_calendar function * * @since 0.5 * * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget. * @param array $instance The settings for the particular instance of the widget */ function widget( $args, $instance ) { /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? ' ' : $instance['title'], $instance, $this->id_base ); echo $args['before_widget']; if ( $title ) { echo $args['before_title'] . $title . $args['after_title']; } echo '
    '; empty( PLL()->curlang ) ? get_calendar() : self::get_calendar(); #modified# echo '
    '; echo $args['after_widget']; } /** * modified version of WP get_calendar function to filter the query * * @since 0.5 * * @param bool $initial Optional, default is true. Use initial calendar names. * @param bool $echo Optional, default is true. Set to false for return. * @return string|null String when retrieving, null when displaying. */ static function get_calendar( $initial = true, $echo = true ) { global $wpdb, $m, $monthnum, $year, $wp_locale, $posts; $join_clause = PLL()->model->post->join_clause(); #added# $where_clause = PLL()->model->post->where_clause( PLL()->curlang ); #added# $key = md5( PLL()->curlang->slug . $m . $monthnum . $year ); #modified# $cache = wp_cache_get( 'get_calendar', 'calendar' ); if ( $cache && is_array( $cache ) && isset( $cache[ $key ] ) ) { /** This filter is documented in wp-includes/general-template.php */ $output = apply_filters( 'get_calendar', $cache[ $key ] ); if ( $echo ) { echo $output; return; } return $output; } if ( ! is_array( $cache ) ) { $cache = array(); } // Quick check. If we have no posts at all, abort! if ( ! $posts ) { $gotsome = $wpdb->get_var("SELECT 1 as test FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 1"); if ( ! $gotsome ) { $cache[ $key ] = ''; wp_cache_set( 'get_calendar', $cache, 'calendar' ); return; } } if ( isset( $_GET['w'] ) ) { $w = (int) $_GET['w']; } // week_begins = 0 stands for Sunday $week_begins = (int) get_option( 'start_of_week' ); $ts = current_time( 'timestamp' ); // Let's figure out when we are if ( ! empty( $monthnum ) && ! empty( $year ) ) { $thismonth = zeroise( intval( $monthnum ), 2 ); $thisyear = (int) $year; } elseif ( ! empty( $w ) ) { // We need to get the month from MySQL $thisyear = (int) substr( $m, 0, 4 ); //it seems MySQL's weeks disagree with PHP's $d = ( ( $w - 1 ) * 7 ) + 6; $thismonth = $wpdb->get_var("SELECT DATE_FORMAT((DATE_ADD('{$thisyear}0101', INTERVAL $d DAY) ), '%m')"); } elseif ( ! empty( $m ) ) { $thisyear = (int) substr( $m, 0, 4 ); if ( strlen( $m ) < 6 ) { $thismonth = '01'; } else { $thismonth = zeroise( (int) substr( $m, 4, 2 ), 2 ); } } else { $thisyear = gmdate( 'Y', $ts ); $thismonth = gmdate( 'm', $ts ); } $unixmonth = mktime( 0, 0 , 0, $thismonth, 1, $thisyear ); $last_day = date( 't', $unixmonth ); // Get the next and previous month and year with at least one post $previous = $wpdb->get_row( "SELECT MONTH( post_date ) AS month, YEAR( post_date ) AS year FROM $wpdb->posts $join_clause WHERE post_date < '$thisyear-$thismonth-01' AND post_type = 'post' AND post_status = 'publish' $where_clause ORDER BY post_date DESC LIMIT 1" ); #modified# $next = $wpdb->get_row( "SELECT MONTH( post_date ) AS month, YEAR( post_date ) AS year FROM $wpdb->posts $join_clause WHERE post_date > '$thisyear-$thismonth-{$last_day} 23:59:59' AND post_type = 'post' AND post_status = 'publish' $where_clause ORDER BY post_date ASC LIMIT 1" ); #modified# /* translators: Calendar caption: 1: month name, 2: 4-digit year */ $calendar_caption = _x( '%1$s %2$s', 'calendar caption' ); $calendar_output = ''; $myweek = array(); for ( $wdcount = 0; $wdcount <= 6; $wdcount++ ) { $myweek[] = $wp_locale->get_weekday( ( $wdcount + $week_begins ) % 7 ); } foreach ( $myweek as $wd ) { $day_name = $initial ? $wp_locale->get_weekday_initial( $wd ) : $wp_locale->get_weekday_abbrev( $wd ); $wd = esc_attr( $wd ); $calendar_output .= "\n\t\t"; } $calendar_output .= ' '; if ( $previous ) { $calendar_output .= "\n\t\t".''; } else { $calendar_output .= "\n\t\t".''; } $calendar_output .= "\n\t\t".''; if ( $next ) { $calendar_output .= "\n\t\t".''; } else { $calendar_output .= "\n\t\t".''; } $calendar_output .= ' '; $daywithpost = array(); // Get days with posts $dayswithposts = $wpdb->get_results( "SELECT DISTINCT DAYOFMONTH( post_date ) FROM $wpdb->posts $join_clause WHERE post_date >= '{$thisyear}-{$thismonth}-01 00:00:00' AND post_type = 'post' AND post_status = 'publish' $where_clause AND post_date <= '{$thisyear}-{$thismonth}-{$last_day} 23:59:59'", ARRAY_N ); #modified# if ( $dayswithposts ) { foreach ( (array) $dayswithposts as $daywith ) { $daywithpost[] = $daywith[0]; } } // See how much we should pad in the beginning $pad = calendar_week_mod( date( 'w', $unixmonth ) - $week_begins ); if ( 0 != $pad ) { $calendar_output .= "\n\t\t".''; } $newrow = false; $daysinmonth = (int) date( 't', $unixmonth ); for ( $day = 1; $day <= $daysinmonth; ++$day ) { if ( isset($newrow) && $newrow ) { $calendar_output .= "\n\t\n\t\n\t\t"; } $newrow = false; if ( $day == gmdate( 'j', $ts ) && $thismonth == gmdate( 'm', $ts ) && $thisyear == gmdate( 'Y', $ts ) ) { $calendar_output .= ''; if ( 6 == calendar_week_mod( date( 'w', mktime(0, 0 , 0, $thismonth, $day, $thisyear ) ) - $week_begins ) ) { $newrow = true; } } $pad = 7 - calendar_week_mod( date( 'w', mktime( 0, 0 , 0, $thismonth, $day, $thisyear ) ) - $week_begins ); if ( $pad != 0 && $pad != 7 ) { $calendar_output .= "\n\t\t".''; } $calendar_output .= "\n\t\n\t\n\t
    ' . sprintf( $calendar_caption, $wp_locale->get_month( $thismonth ), date( 'Y', $unixmonth ) ) . '
    $day_name
    « ' . $wp_locale->get_month_abbrev( $wp_locale->get_month( $previous->month ) ) . '  ' . $wp_locale->get_month_abbrev( $wp_locale->get_month( $next->month ) ) . ' » 
     
    '; } else { $calendar_output .= ''; } if ( in_array( $day, $daywithpost ) ) { // any posts today? $date_format = date( _x( 'F j, Y', 'daily archives date format' ), strtotime( "{$thisyear}-{$thismonth}-{$day}" ) ); $label = sprintf( __( 'Posts published on %s' ), $date_format ); $calendar_output .= sprintf( '%s', get_day_link( $thisyear, $thismonth, $day ), esc_attr( $label ), $day ); } else { $calendar_output .= $day; } $calendar_output .= ' 
    "; $cache[ $key ] = $calendar_output; wp_cache_set( 'get_calendar', $cache, 'calendar' ); if ( $echo ) { /** * Filter the HTML calendar output. * * @since 3.0.0 * * @param string $calendar_output HTML output of the calendar. */ echo apply_filters( 'get_calendar', $calendar_output ); return; } /** This filter is documented in wp-includes/general-template.php */ return apply_filters( 'get_calendar', $calendar_output ); } } include/license.php000066600000007737152100561500010337 0ustar00id = sanitize_title( $item_name ); $this->file = $file; $this->name = $item_name; $this->version = $version; $this->author = $author; $this->api_url = empty( $api_url ) ? $this->api_url : $api_url; $licenses = get_option( 'polylang_licenses' ); $this->license_key = empty( $licenses[ $this->id ]['key'] ) ? '' : $licenses[ $this->id ]['key']; if ( ! empty( $licenses[ $this->id ]['data'] ) ) { $this->license_data = $licenses[ $this->id ]['data']; } // Updater add_action( 'admin_init', array( $this, 'auto_updater' ), 0 ); // Register settings add_filter( 'pll_settings_licenses', array( $this, 'settings' ) ); // Weekly schedule if ( ! wp_next_scheduled( 'polylang_check_licenses' ) ) { wp_schedule_event( time(), 'weekly', 'polylang_check_licenses' ); } add_action( 'polylang_check_licenses', array( $this, 'check_license' ) ); } /** * Auto updater * * @since 1.9 */ public function auto_updater() { $args = array( 'version' => $this->version, 'license' => $this->license_key, 'author' => $this->author, 'item_name' => $this->name, ); // Setup the updater new PLL_Plugin_Updater( $this->api_url, $this->file, $args ); } /** * Registers the licence in the Settings * * @since 1.9 * * @param array $items * @return array */ public function settings( $items ) { $items[ $this->id ] = $this; return $items; } /** * Activate the license key * * @since 1.9 * * @param string $license_key activation key * @return object updated $this */ public function activate_license( $license_key ) { $this->license_key = $license_key; $this->api_request( 'activate_license' ); // Tell WordPress to look for updates set_site_transient( 'update_plugins', null ); return $this; } /** * Deactivate the license key * * @since 1.9 * * @return object updated $this */ public function deactivate_license() { $this->api_request( 'deactivate_license' ); return $this; } /** * Check if license key is valid * * @since 1.9 * * @return object updated $this */ public function check_license() { $this->api_request( 'check_license' ); return $this; } /** * Sends an api request to check, activate or deactivate the license * Updates the licenses option according to the status * * @since 1.9 * * @param string $request check_license | activate_license | deactivate_license */ private function api_request( $request ) { $licenses = get_option( 'polylang_licenses' ); unset( $licenses[ $this->id ], $this->license_data ); if ( ! empty( $this->license_key ) ) { // Data to send in our API request $api_params = array( 'edd_action' => $request, 'license' => $this->license_key, 'item_name' => urlencode( $this->name ), 'url' => home_url(), ); // Call the API $response = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params, ) ); // Update the option only if we got a response if ( is_wp_error( $response ) ) { return; } // Save new license info $licenses[ $this->id ] = array( 'key' => $this->license_key ); $data = json_decode( wp_remote_retrieve_body( $response ) ); if ( 'deactivated' !== $data->license ) { $licenses[ $this->id ]['data'] = $this->license_data = $data; } } update_option( 'polylang_licenses', $licenses ); // FIXME called multiple times when saving all licenses } } include/static-pages.php000066600000005405152100561500011267 0ustar00model = &$polylang->model; $this->options = &$polylang->options; $this->curlang = &$polylang->curlang; $this->init(); // Modifies the page link in case the front page is not in the default language add_filter( 'page_link', array( $this, 'page_link' ), 20, 2 ); // clean the languages cache when editing page of front, page for posts add_action( 'update_option_show_on_front', array( $this->model, 'clean_languages_cache' ) ); add_action( 'update_option_page_on_front', array( $this->model, 'clean_languages_cache' ) ); add_action( 'update_option_page_for_posts', array( $this->model, 'clean_languages_cache' ) ); // refresh rewrite rules when the page on front is modified add_action( 'update_option_page_on_front', 'flush_rewrite_rules' ); } /** * stores the page on front and page for posts ids * * @since 1.8 */ public function init() { if ( 'page' == get_option( 'show_on_front' ) ) { $this->page_on_front = get_option( 'page_on_front' ); $this->page_for_posts = get_option( 'page_for_posts' ); } else { $this->page_on_front = 0; $this->page_for_posts = 0; } } /** * Modifies the page link in case the front page is not in the default language * * @since 0.7.2 * * @param string $link link to the page * @param int $id post id of the page * @return string modified link */ public function page_link( $link, $id ) { if ( ( $lang = $this->model->post->get_language( $id ) ) && $id == $lang->page_on_front ) { return $lang->home_url; } return $link; } /** * adds page_on_front and page_for_posts properties to the language objects * * @since 1.8 * * @param array $languages * @param object $model */ public static function pll_languages_list( $languages, $model ) { if ( 'page' === get_option( 'show_on_front' ) ) { foreach ( $languages as $k => $language ) { $languages[ $k ]->page_on_front = $model->post->get( get_option( 'page_on_front' ), $language ); $languages[ $k ]->page_for_posts = $model->post->get( get_option( 'page_for_posts' ), $language ); } } return $languages; } /** * Translates page for posts * * @since 1.8 * * @param int $v page for posts page id * @return int */ public function translate_page_for_posts( $v ) { // Returns the current page if there is no translation to avoid ugly notices return isset( $this->curlang->page_for_posts ) ? $this->curlang->page_for_posts : $v; } } include/cache.php000066600000002362152100561500007745 0ustar00blog_id = get_current_blog_id(); add_action( 'switch_blog', array( $this, 'switch_blog' ) ); } /** * Called when switching blog * * @since 1.7 * * @param int $new_blog */ public function switch_blog( $new_blog ) { $this->blog_id = $new_blog; } /** * Add a value in cache * * @since 1.7 * * @param string $key * @param mixed $data */ public function set( $key, $data ) { $this->cache[ $this->blog_id ][ $key ] = $data; } /** * Get value from cache * * @since 1.7 * * @param string $key * @return mixed $data */ public function get( $key ) { return isset( $this->cache[ $this->blog_id ][ $key ] ) ? $this->cache[ $this->blog_id ][ $key ] : false; } /** * Clean the cache (for this blog only) * * @since 1.7 * * @param string $key */ public function clean( $key = '' ) { if ( empty( $key ) ) { unset( $this->cache[ $this->blog_id ] ); } else { unset( $this->cache[ $this->blog_id ][ $key ] ); } } } include/translated-object.php000066600000022436152100561500012313 0ustar00model = &$model; // register our taxonomies as soon as possible // this is early registration, not ready for rewrite rules as wp_rewrite will be setup later $args = array( 'label' => false, 'public' => false, 'query_var' => false, 'rewrite' => false, '_pll' => true ); register_taxonomy( $this->tax_language, $this->object_type, $args ); $args['update_count_callback'] = '_update_generic_term_count'; // count *all* posts to avoid deleting in clean_translations_terms register_taxonomy( $this->tax_translations, $this->object_type, $args ); } /** * Wrap wp_get_object_terms to cache it and return only one object * inspired by the function get_the_terms * * @since 1.2 * * @param int $object_id post_id or term_id * @param string $taxonomy Polylang taxonomy depending if we are looking for a post ( or term ) language ( or translation ) * @return bool|object the term associated to the object in the requested taxonomy if exists, false otherwise */ public function get_object_term( $object_id, $taxonomy ) { if ( empty( $object_id ) || is_wp_error( $object_id ) ) { return false; } $object_id = (int) $object_id; $term = get_object_term_cache( $object_id, $taxonomy ); if ( false === $term ) { // query language and translations at the same time $taxonomies = array( $this->tax_language, $this->tax_translations ); // query terms foreach ( wp_get_object_terms( $object_id, $taxonomies, array( 'update_term_meta_cache' => false ) ) as $t ) { $terms[ $t->taxonomy ] = $t; if ( $t->taxonomy == $taxonomy ) { $term = $t; } } // store it the way WP wants it // set an empty cache if no term found in the taxonomy foreach ( $taxonomies as $tax ) { wp_cache_add( $object_id, empty( $terms[ $tax ] ) ? array() : array( $terms[ $tax ] ), $tax . '_relationships' ); } } else { $term = reset( $term ); } return empty( $term ) ? false : $term; } /** * Tells wether to store a translation term * * @since 1.8 * * @param array $translations an associative array of translations with language code as key and translation id as value */ protected function keep_translation_group( $translations ) { return count( $translations ) > 1; } /** * Saves translations for posts or terms * * @since 0.5 * * @param int $id post id or term id * @param array $translations an associative array of translations with language code as key and translation id as value */ public function save_translations( $id, $translations ) { $id = (int) $id; if ( ( $lang = $this->get_language( $id ) ) && isset( $translations ) && is_array( $translations ) ) { // sanitize the translations array $translations = array_map( 'intval', $translations ); $translations = array_merge( array( $lang->slug => $id ), $translations ); // make sure this object is in translations $translations = array_diff( $translations, array( 0 ) ); // don't keep non translated languages $translations = array_intersect_key( $translations, array_flip( $this->model->get_languages_list( array( 'fields' => 'slug' ) ) ) ); // keep only valid languages slugs as keys // unlink removed translations $old_translations = $this->get_translations( $id ); foreach ( array_diff_assoc( $old_translations, $translations ) as $object_id ) { $this->delete_translation( $object_id ); } // don't create a translation group for untranslated posts as it is useless // but we need one for terms to allow relationships remap when importing from a WXR file if ( $this->keep_translation_group( $translations ) ) { $terms = wp_get_object_terms( $translations, $this->tax_translations ); $term = reset( $terms ); // create a new term if necessary if ( empty( $term ) ) { wp_insert_term( $group = uniqid( 'pll_' ), $this->tax_translations, array( 'description' => serialize( $translations ) ) ); } else { // take care not to overwrite extra data stored in description field, if any $d = unserialize( $term->description ); $d = is_array( $d ) ? array_diff_key( $d, $old_translations ) : array(); // remove old translations $d = array_merge( $d, $translations ); // add new one wp_update_term( $group = (int) $term->term_id, $this->tax_translations, array( 'description' => serialize( $d ) ) ); } // link all translations to the new term foreach ( $translations as $p ) { wp_set_object_terms( $p, $group, $this->tax_translations ); } // clean now unused translation groups foreach ( wp_list_pluck( $terms, 'term_id' ) as $term_id ) { $term = get_term( $term_id, $this->tax_translations ); if ( empty( $term->count ) ) { wp_delete_term( $term_id, $this->tax_translations ); } } } } } /** * Deletes a translation of a post or term * * @since 0.5 * * @param int $id post id or term id */ public function delete_translation( $id ) { $id = (int) $id; $term = $this->get_object_term( $id, $this->tax_translations ); if ( ! empty( $term ) ) { $d = unserialize( $term->description ); $slug = array_search( $id, $this->get_translations( $id ) ); // in case some plugin stores the same value with different key unset( $d[ $slug ] ); if ( empty( $d ) ) { wp_delete_term( (int) $term->term_id, $this->tax_translations ); } else { wp_update_term( (int) $term->term_id, $this->tax_translations, array( 'description' => serialize( $d ) ) ); } } } /** * Returns an array of translations of a post or term * * @since 0.5 * * @param int $id post id or term id * @return array an associative array of translations with language code as key and translation id as value */ public function get_translations( $id ) { $term = $this->get_object_term( $id, $this->tax_translations ); $translations = empty( $term ) ? array() : unserialize( $term->description ); // make sure we return only translations ( thus we allow plugins to store other informations in the array ) if ( is_array( $translations ) ) { $translations = array_intersect_key( $translations, array_flip( $this->model->get_languages_list( array( 'fields' => 'slug' ) ) ) ); } // make sure to return at least the passed post or term in its translation array if ( empty( $translations ) && $lang = $this->get_language( $id ) ) { $translations = array( $lang->slug => $id ); } return $translations; } /** * Returns the id of the translation of a post or term * * @since 0.5 * * @param int $id post id or term id * @param object|string $lang object or slug * @return bool|int post id or term id of the translation, false if there is none */ public function get_translation( $id, $lang ) { if ( ! $lang = $this->model->get_language( $lang ) ) { return false; } $translations = $this->get_translations( $id ); return isset( $translations[ $lang->slug ] ) ? $translations[ $lang->slug ] : false; } /** * Among the object and its translations, returns the id of the object which is in $lang * * @since 0.1 * * @param int $id post id or term id * @param int|string|object $lang language ( term_id or slug or object ) * @return bool|int the translation post id or term id if exists, otherwise the post id or term id, false if the post has no language */ public function get( $id, $lang ) { $obj_lang = $this->get_language( $id ); // FIXME is this necessary? if ( ! $lang || ! $obj_lang ) { return false; } $lang = $this->model->get_language( $lang ); return $obj_lang->term_id == $lang->term_id ? $id : $this->get_translation( $id, $lang ); } /** * A where clause to add to sql queries when filtering by language is needed directly in query * * @since 1.2 * * @param object|array|string $lang a PLL_Language object or a comma separated list of languag slug or an array of language slugs * @return string where clause */ public function where_clause( $lang ) { global $wpdb; $tt_id = $this->tax_tt; // $lang is an object // generally the case if the query is coming from Polylang if ( is_object( $lang ) ) { return $wpdb->prepare( ' AND pll_tr.term_taxonomy_id = %d', $lang->$tt_id ); } // $lang is a comma separated list of slugs ( or an array of slugs ) // generally the case is the query is coming from outside with 'lang' parameter $slugs = is_array( $lang ) ? $lang : explode( ',', $lang ); foreach ( $slugs as $slug ) { $languages[] = (int) $this->model->get_language( $slug )->$tt_id; } return ' AND pll_tr.term_taxonomy_id IN ( ' . implode( ',', $languages ) . ' )'; } /** * Returns ids of objects in a language similarly to get_objects_in_term for a taxonomy * faster than get_objects_in_term as it avoids a JOIN * * @since 1.4 * * @param object $lang a PLL_Language object * @return array */ public function get_objects_in_language( $lang ) { global $wpdb; $tt_id = $this->tax_tt; return $wpdb->get_col( $wpdb->prepare( "SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id = %d", $lang->$tt_id ) ); } } include/language.php000066600000020413152100561500010462 0ustar00 id of term in 'language' taxonomy * name => language name. Ex: English * slug => language code used in url. Ex: en * term_group => order of the language when displayed in a list of languages * term_taxonomy_id => term taxonomy id in 'language' taxonomy * taxonomy => 'language' * description => language locale for backward compatibility * parent => 0 / not used * count => number of posts and pages in that language * tl_term_id => id of the term in 'term_language' taxonomy * tl_term_taxonomy_id => term taxonomy id in 'term_language' taxonomy * tl_count => number of terms in that language ( not used by Polylang ) * locale => WordPress language locale. Ex: en_US * is_rtl => 1 if the language is rtl * flag_code => code of the flag * flag_url => url of the flag * flag => html img of the flag * custom_flag_url => url of the custom flag if exists, internal use only, moves to flag_url on frontend * custom_flag => html img of the custom flag if exists, internal use only, moves to flag on frontend * home_url => home url in this language * search_url => home url to use in search forms * host => host of this language * mo_id => id of the post storing strings translations * page_on_front => id of the page on front in this language ( set from pll_languages_list filter ) * page_for_posts => id of the page for posts in this language ( set from pll_languages_list filter ) * * @since 1.2 */ class PLL_Language { public $term_id, $name, $slug, $term_group, $term_taxonomy_id, $taxonomy, $description, $parent, $count; public $tl_term_id, $tl_term_taxonomy_id, $tl_count; public $locale, $is_rtl; public $flag_url, $flag; public $home_url, $search_url; public $host, $mo_id; public $page_on_front, $page_for_posts; /** * constructor: builds a language object given its two corresponding terms in language and term_language taxonomies * * @since 1.2 * * @param object|array $language 'language' term or language object properties stored as an array * @param object $term_language Corresponding 'term_language' term */ public function __construct( $language, $term_language = null ) { // build the object from all properties stored as an array if ( empty( $term_language ) ) { foreach ( $language as $prop => $value ) { $this->$prop = $value; } } // build the object from taxonomies else { foreach ( $language as $prop => $value ) { $this->$prop = in_array( $prop, array( 'term_id', 'term_taxonomy_id', 'count' ) ) ? (int) $language->$prop : $language->$prop; } // although it would be convenient here, don't assume the term is shared between taxonomies as it may not be the case in future // http://make.wordpress.org/core/2013/07/28/potential-roadmap-for-taxonomy-meta-and-post-relationships/ $this->tl_term_id = (int) $term_language->term_id; $this->tl_term_taxonomy_id = (int) $term_language->term_taxonomy_id; $this->tl_count = (int) $term_language->count; // the description field can contain any property // backward compatibility for is_rtl $description = maybe_unserialize( $language->description ); foreach ( $description as $prop => $value ) { 'rtl' == $prop ? $this->is_rtl = $value : $this->$prop = $value; } $this->description = &$this->locale; // backward compatibility with Polylang < 1.2 $this->mo_id = PLL_MO::get_id( $this ); } } /** * sets flag_url and flag properties * * @since 1.2 */ public function set_flag() { $flags['flag']['url'] = ''; // Polylang builtin flags if ( ! empty( $this->flag_code ) && file_exists( POLYLANG_DIR . ( $file = '/flags/' . $this->flag_code . '.png' ) ) ) { $flags['flag']['url'] = esc_url_raw( plugins_url( $file, POLYLANG_FILE ) ); // if base64 encoded flags are preferred if ( ! defined( 'PLL_ENCODED_FLAGS' ) || PLL_ENCODED_FLAGS ) { $flags['flag']['src'] = 'data:image/png;base64,' . base64_encode( file_get_contents( POLYLANG_DIR . $file ) ); } else { $flags['flag']['src'] = esc_url( plugins_url( $file, POLYLANG_FILE ) ); } } // custom flags ? if ( file_exists( PLL_LOCAL_DIR . ( $file = '/' . $this->locale . '.png' ) ) || file_exists( PLL_LOCAL_DIR . ( $file = '/' . $this->locale . '.jpg' ) ) ) { $url = content_url( '/polylang' . $file ); $flags['custom_flag']['url'] = esc_url_raw( $url ); $flags['custom_flag']['src'] = esc_url( $url ); } /** * Filter the flag title attribute * Defaults to the language name * * @since 0.7 * * @param string $title the flag title attribute * @param string $slug the language code * @param string $locale the language locale */ $title = apply_filters( 'pll_flag_title', $this->name, $this->slug, $this->locale ); foreach ( $flags as $key => $flag ) { $this->{$key . '_url'} = empty( $flag['url'] ) ? '' : $flag['url']; /** * Filter the html markup of a flag * * @since 1.0.2 * * @param string $flag html markup of the flag or empty string * @param string $slug language code */ $this->{$key} = apply_filters( 'pll_get_flag', empty( $flag['src'] ) ? '' : sprintf( '%s', $flag['src'], esc_attr( $title ), esc_attr( $this->name ) ), $this->slug ); } } /** * replace flag by custom flag * takes care of url scheme * * @since 1.7 */ public function set_custom_flag() { // overwrite with custom flags on frontend only if ( ! empty( $this->custom_flag ) ) { $this->flag = $this->custom_flag; $this->flag_url = $this->custom_flag_url; unset( $this->custom_flag, $this->custom_flag_url ); // hide this } // set url scheme, also for default flags if ( is_ssl() ) { $this->flag = str_replace( 'http://', 'https://', $this->flag ); $this->flag_url = str_replace( 'http://', 'https://', $this->flag_url ); } else { $this->flag = str_replace( 'https://', 'http://', $this->flag ); $this->flag_url = str_replace( 'https://', 'http://', $this->flag_url ); } } /** * updates post and term count * * @since 1.2 */ public function update_count() { wp_update_term_count( $this->term_taxonomy_id, 'language' ); // posts count wp_update_term_count( $this->tl_term_taxonomy_id, 'term_language' ); // terms count } /** * set home_url and search_url properties * * @since 1.3 * * @param string $search_url * @param string $home_url */ public function set_home_url( $search_url, $home_url ) { $this->search_url = $search_url; $this->home_url = $home_url; } /** * set home_url scheme * this can't be cached across pages * * @since 1.6.4 */ public function set_home_url_scheme() { if ( is_ssl() ) { $this->home_url = str_replace( 'http://', 'https://', $this->home_url ); $this->search_url = str_replace( 'http://', 'https://', $this->search_url ); } else { $this->home_url = str_replace( 'https://', 'http://', $this->home_url ); $this->search_url = str_replace( 'https://', 'http://', $this->search_url ); } } /** * returns the language locale * converts WP locales to W3C valid locales for display * @see #33511 * * @since 1.8 * * @param string $filter either 'display' or 'raw', defaults to raw * @return string */ public function get_locale( $filter = 'raw' ) { if ( 'display' == $filter ) { static $valid_locales = array( 'bel' => 'be', 'bre' => 'br', 'de_CH_informal' => 'de_CH', 'de_DE_formal' => 'de_DE', 'dzo' => 'dz', 'ido' => 'io', 'kin' => 'rw', 'oci' => 'oc', 'mri' => 'mi', 'nl_NL_formal' => 'nl_NL', 'roh' => 'rm', 'srd' => 'sc', 'tuk' => 'tk', ); $locale = isset( $valid_locales[ $this->locale ] ) ? $valid_locales[ $this->locale ] : $this->locale; return str_replace( '_', '-', $locale ); } return $this->locale; } } include/links-subdomain.php000066600000004777152100561500012015 0ustar00www = ( false === strpos( $this->home, '://www.' ) ) ? '://' : '://www.'; } /** * Adds the language code in url * links_model interface * * @since 1.2 * * @param string $url url to modify * @param object $lang language * @return string modified url */ public function add_language_to_link( $url, $lang ) { if ( ! empty( $lang ) && false === strpos( $url, '://' . $lang->slug . '.' ) ) { $url = $this->options['default_lang'] == $lang->slug && $this->options['hide_default'] ? $url : str_replace( $this->www, '://' . $lang->slug . '.', $url ); } return $url; } /** * Returns the url without language code * links_model interface * * @since 1.2 * * @param string $url url to modify * @return string modified url */ public function remove_language_from_link( $url ) { foreach ( $this->model->get_languages_list() as $language ) { if ( ! $this->options['hide_default'] || $this->options['default_lang'] != $language->slug ) { $languages[] = $language->slug; } } if ( ! empty( $languages ) ) { $url = preg_replace( '#:\/\/(' . implode( '|', $languages ) . ')\.#', $this->www, $url ); } return $url; } /** * Returns the language based on language code in url * links_model interface * * @since 1.2 * @since 2.0 add $url argument * * @param string $url optional, defaults to current url * @return string language slug */ public function get_language_from_url( $url = '' ) { $host = empty( $url ) ? $_SERVER['HTTP_HOST'] : parse_url( $url, PHP_URL_HOST ); $pattern = '#(' . implode( '|', $this->model->get_languages_list( array( 'fields' => 'slug' ) ) ) . ')\.#'; return preg_match( $pattern, trailingslashit( $host ), $matches ) ? $matches[1] : ''; // $matches[1] is the slug of the requested language } /** * Get hosts managed on the website * * @since 1.5 * * @return array list of hosts */ public function get_hosts() { $hosts = array(); foreach ( $this->model->get_languages_list() as $lang ) { $hosts[] = parse_url( $this->home_url( $lang ), PHP_URL_HOST ); } return $hosts; } } include/translated-term.php000066600000012355152100561500012013 0ustar00object_type = 'term'; $this->tax_language = 'term_language'; $this->tax_translations = 'term_translations'; $this->tax_tt = 'tl_term_taxonomy_id'; parent::__construct( $model ); // Filters to prime terms cache add_filter( 'get_terms', array( $this, '_prime_terms_cache' ), 10, 2 ); add_filter( 'wp_get_object_terms', array( $this, 'wp_get_object_terms' ), 10, 3 ); add_action( 'clean_term_cache', array( $this, 'clean_term_cache' ) ); } /** * Stores the term language in the database * * @since 0.6 * * @param int $term_id term id * @param int|string|object $lang language ( term_id or slug or object ) */ public function set_language( $term_id, $lang ) { $term_id = (int) $term_id; wp_set_object_terms( $term_id, $lang ? $this->model->get_language( $lang )->tl_term_id : '', 'term_language' ); // Add translation group for correct WXR export $translations = $this->get_translations( $term_id ); if ( $slug = array_search( $term_id, $translations ) ) { unset( $translations[ $slug ] ); } $this->save_translations( $term_id, $translations ); } /** * Removes the term language in database * * @since 0.5 * * @param int $term_id term id */ public function delete_language( $term_id ) { wp_delete_object_term_relationships( $term_id, 'term_language' ); } /** * Returns the language of a term * * @since 0.1 * * @param int|string $value term id or term slug * @param string $taxonomy optional taxonomy needed when the term slug is passed as first parameter * @return bool|object PLL_Language object, false if no language is associated to that term */ public function get_language( $value, $taxonomy = '' ) { if ( is_numeric( $value ) ) { $term_id = $value; } // get_term_by still not cached in WP 3.5.1 but internally, the function is always called by term_id elseif ( is_string( $value ) && $taxonomy ) { $term_id = wpcom_vip_get_term_by( 'slug', $value , $taxonomy )->term_id; } // Get the language and make sure it is a PLL_Language object return isset( $term_id ) && ( $lang = $this->get_object_term( $term_id, 'term_language' ) ) ? $this->model->get_language( $lang->term_id ) : false; } /** * Tells the parent class to always store a translation term * * @since 1.8 * * @param array $translations An associative array of translations with language code as key and translation id as value */ protected function keep_translation_group( $translations ) { return true; } /** * Deletes a translation * * @since 0.5 * * @param int $id term id */ public function delete_translation( $id ) { global $wpdb; $slug = array_search( $id, $this->get_translations( $id ) ); // in case some plugin stores the same value with different key parent::delete_translation( $id ); wp_delete_object_term_relationships( $id, 'term_translations' ); if ( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT( * ) FROM $wpdb->terms WHERE term_id = %d;", $id ) ) ) { // Always keep a group for terms to allow relationships remap when importing from a WXR file $translations[ $slug ] = $id; wp_insert_term( $group = uniqid( 'pll_' ), 'term_translations', array( 'description' => serialize( $translations ) ) ); wp_set_object_terms( $id, $group, 'term_translations' ); } } /** * A join clause to add to sql queries when filtering by language is needed directly in query * * @since 1.2 * * @return string join clause */ public function join_clause() { global $wpdb; return " INNER JOIN $wpdb->term_relationships AS pll_tr ON pll_tr.object_id = t.term_id"; } /** * Cache language and translations when terms are queried by get_terms * * @since 1.2 * * @param array $terms queried terms * @param array $taxonomies queried taxonomies * @return array unmodified $terms */ public function _prime_terms_cache( $terms, $taxonomies ) { if ( is_array( $terms ) && $this->model->is_translated_taxonomy( $taxonomies ) ) { foreach ( $terms as $term ) { $term_ids[] = is_object( $term ) ? $term->term_id : (int) $term; } } if ( ! empty( $term_ids ) ) { update_object_term_cache( array_unique( $term_ids ), 'term' ); // Adds language and translation of terms to cache } return $terms; } /** * When terms are found for posts, add their language and translations to cache * * @since 1.2 * * @param array $terms terms found * @param array $object_ids not used * @param array $taxonomies terms taxonomies * @return array unmodified $terms */ public function wp_get_object_terms( $terms, $object_ids, $taxonomies ) { $taxonomies = explode( "', '", trim( $taxonomies, "'" ) ); if ( ! in_array( 'term_translations', $taxonomies ) ) { $this->_prime_terms_cache( $terms, $taxonomies ); } return $terms; } /** * When the term cache is cleaned, clean the object term cache too * * @since 2.0 * * @param array $ids An array of term IDs. */ function clean_term_cache( $ids ) { clean_object_term_cache( $ids, 'term' ); } } include/walker-list.php000066600000004352152100561500011141 0ustar00 'parent', 'id' => 'id' ); /** * Outputs one element * * @since 1.2 * * @param string $output Passed by reference. Used to append additional content. * @param object $element The data object. * @param int $depth Depth of the item. * @param array $args An array of additional arguments. * @param int $current_object_id ID of the current item. */ function start_el( &$output, $element, $depth = 0, $args = array(), $current_object_id = 0 ) { $output .= sprintf( '%6$s
  • %4$s%5$s
  • %7$s', esc_attr( implode( ' ', $element->classes ) ), esc_attr( $element->locale ), esc_url( $element->url ), $element->flag, $args['show_flags'] && $args['show_names'] ? '' . esc_html( $element->name ) . '' : esc_html( $element->name ), 'discard' === $args['item_spacing'] ? '' : "\t", 'discard' === $args['item_spacing'] ? '' : "\n" ); } /** * Overrides Walker::display_element as it expects an object with a parent property * * @since 1.2 * * @param object $element Data object. * @param array $children_elements List of elements to continue traversing. * @param int $max_depth Max depth to traverse. * @param int $depth Depth of current element. * @param array $args An array of arguments. * @param string $output Passed by reference. Used to append additional content. */ function display_element( $element, &$children_elements, $max_depth, $depth = 0, $args, &$output ) { $element = (object) $element; // Make sure we have an object $element->parent = $element->id = 0; // Don't care about this parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output ); } /** * Overrides Walker:walk to set depth argument * * @since 1.2 * * @param array $elements elements to display * @param array $args * @return string */ function walk( $elements, $args = array() ) { return parent::walk( $elements, -1, $args ); } } include/filters.php000066600000016054152100561500010355 0ustar00links_model = &$polylang->links_model; $this->model = &$polylang->model; $this->options = &$polylang->options; $this->curlang = &$polylang->curlang; // Filters the comments according to the current language add_action( 'parse_comment_query', array( $this, 'parse_comment_query' ) ); add_filter( 'comments_clauses', array( $this, 'comments_clauses' ), 10, 2 ); // Filters the get_pages function according to the current language add_filter( 'get_pages', array( $this, 'get_pages' ), 10, 2 ); // Converts the locale to a valid W3C locale add_filter( 'language_attributes', array( $this, 'language_attributes' ) ); // Prevents deleting all the translations of the default category add_filter( 'map_meta_cap', array( $this, 'fix_delete_default_category' ), 10, 4 ); // Translate the site title in emails sent to users add_filter( 'password_change_email', array( $this, 'translate_user_email' ) ); add_filter( 'email_change_email', array( $this, 'translate_user_email' ) ); } /** * Get the language to filter a comments query * * @since 2.0 * * @param object $query * @return object|bool the language(s) to use in the filter, false otherwise */ protected function get_comments_queried_language( $query ) { // Don't filter comments if comment ids or post ids are specified $plucked = wp_array_slice_assoc( $query->query_vars, array( 'comment__in', 'parent', 'post_id', 'post__in', 'post_parent' ) ); $fields = array_filter( $plucked ); if ( ! empty( $fields ) ) { return false; } // Don't filter comments if a non translated post type is specified if ( ! empty( $query->query_vars['post_type'] ) && ! $this->model->is_translated_post_type( $query->query_vars['post_type'] ) ) { return false; } return empty( $query->query_vars['lang'] ) ? $this->curlang : $this->model->get_language( $query->query_vars['lang'] ); } /** * Adds language dependent cache domain when querying comments * Useful as the 'lang' parameter is not included in cache key by WordPress * Needed since WP 4.6 as comments have been added to persistent cache. See #36906, #37419 * * @since 2.0 * * @param object $query */ public function parse_comment_query( $query ) { if ( $lang = $this->get_comments_queried_language( $query ) ) { $key = '_' . ( is_array( $lang ) ? implode( ',', $lang ) : $this->model->get_language( $lang )->slug ); $query->query_vars['cache_domain'] = empty( $query->query_vars['cache_domain'] ) ? 'pll' . $key : $query->query_vars['cache_domain'] . $key; } } /** * Filters the comments according to the current language * Used by the recent comments widget and admin language filter * * @since 0.2 * * @param array $clauses sql clauses * @param object $query WP_Comment_Query object * @return array modified $clauses */ public function comments_clauses( $clauses, $query ) { global $wpdb; $lang = $this->get_comments_queried_language( $query ); if ( ! empty( $lang ) ) { // If this clause is not already added by WP if ( ! strpos( $clauses['join'], '.ID' ) ) { $clauses['join'] .= " JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->comments.comment_post_ID"; } $clauses['join'] .= $this->model->post->join_clause(); $clauses['where'] .= $this->model->post->where_clause( $lang ); } return $clauses; } /** * Filters get_pages per language * * @since 1.4 * * @param array $pages an array of pages already queried * @param array $args get_pages arguments * @return array modified list of pages */ public function get_pages( $pages, $args ) { if ( isset( $args['lang'] ) && empty( $args['lang'] ) ) { return $pages; } $language = empty( $args['lang'] ) ? $this->curlang : $this->model->get_language( $args['lang'] ); if ( empty( $language ) || empty( $pages ) || ! $this->model->is_translated_post_type( $args['post_type'] ) ) { return $pages; } static $once = false; // Obliged to redo the get_pages query if we want to get the right number if ( ! empty( $args['number'] ) && ! $once ) { $once = true; // avoid infinite loop $r = array( 'lang' => 0, // So this query is not filtered 'numberposts' => -1, 'nopaging' => true, 'post_type' => $args['post_type'], 'fields' => 'ids', 'tax_query' => array( array( 'taxonomy' => 'language', 'field' => 'term_taxonomy_id', // Since WP 3.5 'terms' => $language->term_taxonomy_id, 'operator' => 'NOT IN', ), ), ); $args['exclude'] = array_merge( $args['exclude'], get_posts( $r ) ); $pages = get_pages( $args ); } $ids = wp_list_pluck( $pages, 'ID' ); // Filters the queried list of pages by language if ( ! $once ) { $ids = array_intersect( $ids, $this->model->post->get_objects_in_language( $language ) ); foreach ( $pages as $key => $page ) { if ( ! in_array( $page->ID, $ids ) ) { unset( $pages[ $key ] ); } } $pages = array_values( $pages ); // In case 3rd parties suppose the existence of $pages[0] } // Not done by WP but extremely useful for performance when manipulating taxonomies update_object_term_cache( $ids, $args['post_type'] ); $once = false; // In case get_pages is called another time return $pages; } /** * Converts WordPress locale to valid W3 locale in html language attributes * * @since 1.8 * * @param string $output language attributes * @return string */ public function language_attributes( $output ) { if ( $language = $this->model->get_language( get_locale() ) ) { $output = str_replace( '"' . get_bloginfo( 'language' ) . '"', '"' . $language->get_locale( 'display' ) . '"', $output ); } return $output; } /** * Prevents deleting all the translations of the default category * * @since 2.1 * * @param array $caps The user's actual capabilities. * @param string $cap Capability name. * @param int $user_id The user ID. * @param array $args Adds the context to the cap. The category id. * @return array */ public function fix_delete_default_category( $caps, $cap, $user_id, $args ) { if ( 'delete_term' === $cap && array_intersect( $args, $this->model->term->get_translations( get_option( 'default_category' ) ) ) ) { $caps[] = 'do_not_allow'; } return $caps; } /** * Translates the site title in emails sent to the user (change email, reset password) * It is necessary to filter the email because WP evaluates the site title before calling switch_to_locale() * * @since 2.1.3 * * @param array $email * @return array */ function translate_user_email( $email ) { $blog_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ); $email['subject'] = sprintf( $email['subject'], $blog_name ); $email['message'] = str_replace( '###SITENAME###', $blog_name, $email['message'] ); return $email; } } include/walker-dropdown.php000066600000006701152100561500012022 0ustar00 'parent', 'id' => 'id' ); /** * Outputs one element * * @since 1.2 * * @param string $output Passed by reference. Used to append additional content. * @param object $element The data object. * @param int $depth Depth of the item. * @param array $args An array of additional arguments. * @param int $current_object_id ID of the current item. */ function start_el( &$output, $element, $depth = 0, $args = array(), $current_object_id = 0 ) { $value = $args['value']; $output .= sprintf( "\t" . '' . "\n", esc_attr( $element->$value ), method_exists( $element, 'get_locale' ) ? sprintf( ' lang="%s"', esc_attr( $element->get_locale( 'display' ) ) ) : '', isset( $args['selected'] ) && $args['selected'] === $element->$value ? ' selected="selected"' : '', esc_html( $element->name ) ); } /** * Overrides Walker::display_element as expects an object with a parent property * * @since 1.2 * * @param object $element Data object. * @param array $children_elements List of elements to continue traversing. * @param int $max_depth Max depth to traverse. * @param int $depth Depth of current element. * @param array $args An array of arguments. * @param string $output Passed by reference. Used to append additional content. */ function display_element( $element, &$children_elements, $max_depth, $depth = 0, $args, &$output ) { $element = (object) $element; // Make sure we have an object $element->parent = $element->id = 0; // Don't care about this parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output ); } /** * Starts the output of the dropdown list * * @since 1.2 * * List of parameters accepted in $args: * * flag => display the selected language flag in front of the dropdown if set to 1, defaults to 0 * value => the language field to use as value attribute, defaults to 'slug' * selected => the selected value, mandatory * name => the select name attribute, defaults to 'lang_choice' * id => the select id attribute, defaults to $args['name'] * class => the class attribute * disabled => disables the dropdown if set to 1 * * @param array $elements elements to display * @param array $args * @return string */ function walk( $elements, $args = array() ) { $output = ''; $args = wp_parse_args( $args, array( 'value' => 'slug', 'name' => 'lang_choice' ) ); if ( ! empty( $args['flag'] ) ) { $current = wp_list_filter( $elements, array( $args['value'] => $args['selected'] ) ); $lang = reset( $current ); $output = sprintf( '%s', empty( $lang->flag ) ? esc_html( $lang->slug ) : $lang->flag ); } $output .= sprintf( '' . "\n", $name = esc_attr( $args['name'] ), isset( $args['id'] ) && ! $args['id'] ? '' : ' id="' . ( empty( $args['id'] ) ? $name : esc_attr( $args['id'] ) ) . '"', empty( $args['class'] ) ? '' : ' class="' . esc_attr( $args['class'] ) . '"', empty( $args['disabled'] ) ? '' : ' disabled="disabled"', parent::walk( $elements, -1, $args ) ); return $output; } } include/switcher.php000066600000020257152100561500010535 0ustar00 array( 'string' => __( 'Displays as dropdown', 'polylang' ), 'default' => 0 ), 'show_names' => array( 'string' => __( 'Displays language names', 'polylang' ), 'default' => 1 ), 'show_flags' => array( 'string' => __( 'Displays flags', 'polylang' ), 'default' => 0 ), 'force_home' => array( 'string' => __( 'Forces link to front page', 'polylang' ), 'default' => 0 ), 'hide_current' => array( 'string' => __( 'Hides the current language', 'polylang' ), 'default' => 0 ), 'hide_if_no_translation' => array( 'string' => __( 'Hides languages with no translation', 'polylang' ), 'default' => 0 ), ); return wp_list_pluck( $options, $key ); } /** * Get the language elements for use in a walker * * List of parameters accepted in $args: * @see PLL_Switcher::the_languages * * @since 1.2 * * @param object $links instance of PLL_Frontend_Links * @param array $args * @return array */ protected function get_elements( $links, $args ) { $first = true; foreach ( $links->model->get_languages_list( array( 'hide_empty' => $args['hide_if_empty'] ) ) as $language ) { $id = (int) $language->term_id; $order = (int) $language->term_group; $slug = $language->slug; $locale = $language->get_locale( 'display' ); $classes = array( 'lang-item', 'lang-item-' . $id, 'lang-item-' . esc_attr( $slug ) ); $url = null; // Avoids potential notice if ( $first ) { $classes[] = 'lang-item-first'; $first = false; } if ( $current_lang = $links->curlang->slug == $slug ) { if ( $args['hide_current'] && ! ( $args['dropdown'] && ! $args['raw'] ) ) { continue; // Hide current language except for dropdown } else { $classes[] = 'current-lang'; } } if ( null !== $args['post_id'] && ( $tr_id = $links->model->post->get( $args['post_id'], $language ) ) && $links->current_user_can_read( $tr_id ) ) { $url = get_permalink( $tr_id ); } elseif ( null === $args['post_id'] ) { $url = $links->get_translation_url( $language ); } if ( $no_translation = empty( $url ) ) { $classes[] = 'no-translation'; } /** * Filter the link in the language switcher * * @since 0.7 * * @param string $url the link * @param string $slug language code * @param string $locale language locale */ $url = apply_filters( 'pll_the_language_link', $url, $slug, $language->locale ); // Hide if no translation exists if ( empty( $url ) && $args['hide_if_no_translation'] ) { continue; } $url = empty( $url ) || $args['force_home'] ? $links->get_home_url( $language ) : $url ; // If the page is not translated, link to the home page $name = $args['show_names'] || ! $args['show_flags'] || $args['raw'] ? ( 'slug' == $args['display_names_as'] ? $slug : $language->name ) : ''; $flag = $args['raw'] && ! $args['show_flags'] ? $language->flag_url : ( $args['show_flags'] ? $language->flag : '' ); $out[ $slug ] = compact( 'id', 'order', 'slug', 'locale', 'name', 'url', 'flag', 'current_lang', 'no_translation', 'classes' ); } return empty( $out ) ? array() : $out; } /** * Displays a language switcher * or returns the raw elements to build a custom language switcher * * List of parameters accepted in $args: * * dropdown => the list is displayed as dropdown if set, defaults to 0 * echo => echoes the list if set to 1, defaults to 1 * hide_if_empty => hides languages with no posts ( or pages ) if set to 1, defaults to 1 * show_flags => displays flags if set to 1, defaults to 0 * show_names => show language names if set to 1, defaults to 1 * display_names_as => whether to display the language name or its slug, valid options are 'slug' and 'name', defaults to name * force_home => will always link to home in translated language if set to 1, defaults to 0 * hide_if_no_translation => hide the link if there is no translation if set to 1, defaults to 0 * hide_current => hide the current language if set to 1, defaults to 0 * post_id => returns links to translations of post defined by post_id if set, defaults not set * raw => return a raw array instead of html markup if set to 1, defaults to 0 * item_spacing => whether to preserve or discard whitespace between list items, valid options are 'preserve' and 'discard', defaults to preserve * * @since 0.1 * * @param object $links instance of PLL_Frontend_Links * @param array $args * @return string|array either the html markup of the switcher or the raw elements to build a custom language switcher */ public function the_languages( $links, $args = '' ) { $defaults = array( 'dropdown' => 0, // display as list and not as dropdown 'echo' => 1, // echoes the list 'hide_if_empty' => 1, // hides languages with no posts ( or pages ) 'menu' => 0, // not for nav menu ( this argument is deprecated since v1.1.1 ) 'show_flags' => 0, // don't show flags 'show_names' => 1, // show language names 'display_names_as' => 'name', // valid options are slug and name 'force_home' => 0, // tries to find a translation 'hide_if_no_translation' => 0, // don't hide the link if there is no translation 'hide_current' => 0, // don't hide current language 'post_id' => null, // if not null, link to translations of post defined by post_id 'raw' => 0, // set this to true to build your own custom language switcher 'item_spacing' => 'preserve', // 'preserve' or 'discard' whitespace between list items ); $args = wp_parse_args( $args, $defaults ); /** * Filter the arguments of the 'pll_the_languages' template tag * * @since 1.5 * * @param array $args */ $args = apply_filters( 'pll_the_languages_args', $args ); // Prevents showing empty options in dropdown if ( $args['dropdown'] ) { $args['show_names'] = 1; } $elements = $this->get_elements( $links, $args ); if ( $args['raw'] ) { return $elements; } if ( $args['dropdown'] ) { $args['name'] = 'lang_choice_' . $args['dropdown']; $walker = new PLL_Walker_Dropdown(); $args['selected'] = $links->curlang->slug; } else { $walker = new PLL_Walker_List(); } /** * Filter the whole html markup returned by the 'pll_the_languages' template tag * * @since 0.8 * * @param string $html html returned/outputed by the template tag * @param array $args arguments passed to the template tag */ $out = apply_filters( 'pll_the_languages', $walker->walk( $elements, $args ), $args ); // Javascript to switch the language when using a dropdown list if ( $args['dropdown'] ) { foreach ( $links->model->get_languages_list() as $language ) { $url = $links->get_translation_url( $language ); $urls[ $language->slug ] = $args['force_home'] || empty( $url ) ? $links->get_home_url( $language ) : $url; } // Accept only few valid characters for the urls_x variable name ( as the widget id includes '-' which is invalid ) $out .= sprintf( ' ', 'urls_' . preg_replace( '#[^a-zA-Z0-9]#', '', $args['dropdown'] ), json_encode( $urls ), esc_js( $args['name'] ) ); } if ( $args['echo'] ) { echo $out; } return $out; } } include/translated-post.php000066600000010167152100561500012030 0ustar00object_type = null; $this->tax_language = 'language'; $this->tax_translations = 'post_translations'; $this->tax_tt = 'term_taxonomy_id'; parent::__construct( $model ); // registers completely the language taxonomy add_action( 'setup_theme', array( $this, 'register_taxonomy' ), 1 ); // setups post types to translate add_action( 'registered_post_type', array( $this, 'registered_post_type' ) ); // forces updating posts cache add_action( 'pre_get_posts', array( $this, 'pre_get_posts' ) ); } /** * Store the post language in the database * * @since 0.6 * * @param int $post_id post id * @param int|string|object $lang language ( term_id or slug or object ) */ public function set_language( $post_id, $lang ) { wp_set_post_terms( (int) $post_id, $lang ? $this->model->get_language( $lang )->slug : '', 'language' ); } /** * Returns the language of a post * * @since 0.1 * * @param int $post_id post id * @return bool|object PLL_Language object, false if no language is associated to that post */ public function get_language( $post_id ) { $lang = $this->get_object_term( $post_id, 'language' ); return ( $lang ) ? $this->model->get_language( $lang ) : false; } /** * Deletes a translation * * @since 0.5 * * @param int $id post id */ public function delete_translation( $id ) { parent::delete_translation( $id ); wp_set_object_terms( $id, null, $this->tax_translations ); } /** * A join clause to add to sql queries when filtering by language is needed directly in query * * @since 1.2 * * @param string $alias Alias for $wpdb->posts table * @return string join clause */ public function join_clause( $alias = '' ) { global $wpdb; if ( empty( $alias ) ) { $alias = $wpdb->posts; } return " INNER JOIN $wpdb->term_relationships AS pll_tr ON pll_tr.object_id = $alias.ID"; } /** * Register the language taxonomy * * @since 1.2 */ public function register_taxonomy() { register_taxonomy( 'language', $this->model->get_translated_post_types(), array( 'labels' => array( 'name' => __( 'Languages', 'polylang' ), 'singular_name' => __( 'Language', 'polylang' ), 'all_items' => __( 'All languages', 'polylang' ), ), // FIXME backward compatibility with WP 4.4.x: we must keep public to true for WP to accept our query var 'public' => version_compare( $GLOBALS['wp_version'], '4.4', '>=' ) && version_compare( $GLOBALS['wp_version'], '4.5', '<' ), 'show_ui' => false, // hide the taxonomy on admin side, needed for WP 4.4.x 'show_in_nav_menus' => false, // no metabox for nav menus, needed for WP 4.4.x 'publicly_queryable' => true, // since WP 4.5 'query_var' => 'lang', 'rewrite' => $this->model->options['force_lang'] < 2, // no rewrite for domains and sub-domains '_pll' => true, // polylang taxonomy ) ); } /** * Check if registered post type must be translated * * @since 1.2 * * @param string $post_type post type name */ public function registered_post_type( $post_type ) { if ( $this->model->is_translated_post_type( $post_type ) ) { register_taxonomy_for_object_type( 'language', $post_type ); register_taxonomy_for_object_type( 'post_translations', $post_type ); } } /** * Forces calling 'update_object_term_cache' when querying posts or pages * this is especially useful for nav menus with a lot of pages * without doing this, we would have one query per page in the menu to get the page language for the permalink * * @since 1.8 * * @param object $query reference to the query object */ public function pre_get_posts( $query ) { if ( ! empty( $query->query['post_type'] ) && $this->model->is_translated_post_type( $query->query['post_type'] ) ) { $query->query_vars['update_post_term_cache'] = true; } } } include/filters-links.php000066600000011545152100561500011473 0ustar00links = &$polylang->links; $this->links_model = &$polylang->links_model; $this->model = &$polylang->model; $this->options = &$polylang->options; $this->curlang = &$polylang->curlang; // Low priority on links filters to come after any other modifications if ( $this->options['force_lang'] ) { add_filter( 'post_link', array( $this, 'post_type_link' ), 20, 2 ); add_filter( '_get_page_link', array( $this, '_get_page_link' ), 20, 2 ); } add_filter( 'post_type_link', array( $this, 'post_type_link' ), 20, 2 ); add_filter( 'term_link', array( $this, 'term_link' ), 20, 3 ); if ( $this->options['force_lang'] > 0 ) { add_filter( 'attachment_link', array( $this, 'attachment_link' ), 20, 2 ); } if ( 3 === $this->options['force_lang'] ) { add_filter( 'preview_post_link', array( $this, 'preview_post_link' ), 20 ); } // Rewrites post types archives links to filter them by language add_filter( 'post_type_archive_link', array( $this, 'post_type_archive_link' ), 20, 2 ); } /** * Modifies page links * * @since 1.7 * * @param string $link post link * @param int $post_id post ID * @return string modified post link */ public function _get_page_link( $link, $post_id ) { // /!\ WP does not use pretty permalinks for preview return false !== strpos( $link, 'preview=true' ) && false !== strpos( $link, 'page_id=' ) ? $link : $this->links_model->switch_language_in_link( $link, $this->model->post->get_language( $post_id ) ); } /** * Modifies attachment links * * @since 1.6.2 * * @param string $link attachment link * @param int $post_id attachment link * @return string modified attachment link */ public function attachment_link( $link, $post_id ) { return wp_get_post_parent_id( $post_id ) ? $link : $this->links_model->switch_language_in_link( $link, $this->model->post->get_language( $post_id ) ); } /** * Modifies custom posts links * * @since 1.6 * * @param string $link post link * @param object $post post object * @return string modified post link */ public function post_type_link( $link, $post ) { // /!\ WP does not use pretty permalinks for preview if ( ( false === strpos( $link, 'preview=true' ) || false === strpos( $link, 'p=' ) ) && $this->model->is_translated_post_type( $post->post_type ) ) { $lang = $this->model->post->get_language( $post->ID ); $link = $this->options['force_lang'] ? $this->links_model->switch_language_in_link( $link, $lang ) : $link; /** * Filter a post or custom post type link * * @since 1.6 * * @param string $link the post link * @param object $lang the current language * @param object $post the post object */ $link = apply_filters( 'pll_post_type_link', $link, $lang, $post ); } return $link; } /** * Modifies term link * * @since 0.7 * * @param string $link term link * @param object $term term object * @param string $tax taxonomy name * @return string modified term link */ public function term_link( $link, $term, $tax ) { if ( $this->model->is_translated_taxonomy( $tax ) ) { $lang = $this->model->term->get_language( $term->term_id ); $link = $this->options['force_lang'] ? $this->links_model->switch_language_in_link( $link, $lang ) : $link; /** * Filter a term link * * @since 1.6 * * @param string $link the term link * @param object $lang the current language * @param object $term the term object */ return apply_filters( 'pll_term_link', $link, $lang, $term ); } // in case someone calls get_term_link for the 'language' taxonomy if ( 'language' === $tax ) { return $this->links_model->home_url( $term ); } return $link; } /** * FIXME: keeps the preview post link on default domain when using multiple domains * * @since 1.6.1 * * @param string $url * @return string modified url */ public function preview_post_link( $url ) { return $this->links_model->remove_language_from_link( $url ); } /** * Modifies the post type archive links to add the language parameter * only if the post type is translated * * The filter was originally only on frontend but is needed on admin too for * compatibility with the archive link of the ACF link field since ACF 5.4.0 * * @since 1.7.6 * * @param string $link * @param string $post_type * @return string modified link */ public function post_type_archive_link( $link, $post_type ) { return $this->model->is_translated_post_type( $post_type ) && 'post' !== $post_type ? $this->links_model->switch_language_in_link( $link, $this->curlang ) : $link; } } include/api.php000066600000026112152100561500007452 0ustar00 displays a dropdown if set to 1, defaults to 0 * echo => echoes the switcher if set to 1 ( default ) * hide_if_empty => hides languages with no posts ( or pages ) if set to 1 ( default ) * show_flags => shows flags if set to 1, defaults to 0 * show_names => shows languages names if set to 1 ( default ) * display_names_as => whether to display the language name or its slug, valid options are 'slug' and 'name', defaults to name * force_home => forces linking to the home page is set to 1, defaults to 0 * hide_if_no_translation => hides the link if there is no translation if set to 1, defaults to 0 * hide_current => hides the current language if set to 1, defaults to 0 * post_id => if not null, link to translations of post defined by post_id, defaults to null * raw => set this to true to build your own custom language switcher, defaults to 0 * item_spacing => whether to preserve or discard whitespace between list items, valid options are 'preserve' and 'discard', defaults to preserve * * @since 0.5 * * @param array $args optional * @return null|string|array null if displaying, array if raw is requested, string otherwise */ function pll_the_languages( $args = '' ) { if ( PLL() instanceof PLL_Frontend ) { $switcher = new PLL_Switcher; return $switcher->the_languages( PLL()->links, $args ); } return ''; } /** * Returns the current language on frontend * Returns the language set in admin language filter on backend ( false if set to all languages ) * * @since 0.8.1 * * @param string $field Optional, the language field to return ( see PLL_Language ), defaults to 'slug' * @return string|bool The requested field for the current language */ function pll_current_language( $field = 'slug' ) { return isset( PLL()->curlang->$field ) ? PLL()->curlang->$field : false; } /** * Returns the default language * * @since 1.0 * * @param string $field Optional, the language field to return ( see PLL_Language ), defaults to 'slug' * @return string The requested field for the default language */ function pll_default_language( $field = 'slug' ) { return isset( PLL()->options['default_lang'] ) && ( $lang = PLL()->model->get_language( PLL()->options['default_lang'] ) ) && isset( $lang->$field ) ? $lang->$field : false; } /** * Among the post and its translations, returns the id of the post which is in the language represented by $slug * * @since 0.5 * * @param int $post_id post id * @param string $slug optional language code, defaults to current language * @return int|false|null post id of the translation if exists, false otherwise, null if the current language is not defined yet */ function pll_get_post( $post_id, $slug = '' ) { return ( $slug = $slug ? $slug : pll_current_language() ) ? PLL()->model->post->get( $post_id, $slug ) : null; } /** * Among the term and its translations, returns the id of the term which is in the language represented by $slug * * @since 0.5 * * @param int $term_id term id * @param string $slug optional language code, defaults to current language * @return int|false|null term id of the translation if exists, false otherwise, null if the current language is not defined yet */ function pll_get_term( $term_id, $slug = '' ) { return ( $slug = $slug ? $slug : pll_current_language() ) ? PLL()->model->term->get( $term_id, $slug ) : null; } /** * Returns the home url in the current language * * @since 0.8 * * @param string $lang language code ( optional on frontend ) * @return string */ function pll_home_url( $lang = '' ) { if ( empty( $lang ) ) { $lang = pll_current_language(); } return empty( $lang ) ? home_url( '/' ) : PLL()->links->get_home_url( $lang ); } /** * Registers a string for translation in the "strings translation" panel * * @since 0.6 * * @param string $name a unique name for the string * @param string $string the string to register * @param string $context optional the group in which the string is registered, defaults to 'polylang' * @param bool $multiline optional wether the string table should display a multiline textarea or a single line input, defaults to single line */ function pll_register_string( $name, $string, $context = 'polylang', $multiline = false ) { if ( PLL() instanceof PLL_Admin_Base ) { PLL_Admin_Strings::register_string( $name, $string, $context, $multiline ); } } /** * Translates a string ( previously registered with pll_register_string ) * * @since 0.6 * * @param string $string the string to translate * @return string the string translation in the current language */ function pll__( $string ) { return is_scalar( $string ) ? __( $string, 'pll_string' ) : $string; } /** * Translates a string ( previously registered with pll_register_string ) and escapes it for safe use in HTML output. * * @since 2.1 * * @param string $string the string to translate * @return string translation in the current language */ function pll_esc_html__( $string ) { return esc_html( pll__( $string ) ); } /** * Translates a string ( previously registered with pll_register_string ) and escapes it for safe use in HTML attributes. * * @since 2.1 * * @param string $string The string to translate * @return string */ function pll_esc_attr__( $string ) { return esc_attr( pll__( $string ) ); } /** * Echoes a translated string ( previously registered with pll_register_string ) * * @since 0.6 * * @param string $string The string to translate */ function pll_e( $string ) { echo pll__( $string ); } /** * Echoes a translated string ( previously registered with pll_register_string ) and escapes it for safe use in HTML output. * * @since 2.1 * * @param string $string The string to translate */ function pll_esc_html_e( $string ) { echo pll_esc_html__( $string ); } /** * Echoes a translated a string ( previously registered with pll_register_string ) and escapes it for safe use in HTML attributes. * * @since 2.1 * * @param string $string The string to translate */ function pll_esc_attr_e( $string ) { echo pll_esc_attr__( $string ); } /** * Translates a string ( previously registered with pll_register_string ) * * @since 1.5.4 * * @param string $string the string to translate * @param string $lang language code * @return string the string translation in the requested language */ function pll_translate_string( $string, $lang ) { if ( pll_current_language() == $lang ) { return pll__( $string ); } if ( ! is_scalar( $string ) ) { return $string; } static $cache; // Cache object to avoid loading the same translations object several times if ( empty( $cache ) ) { $cache = new PLL_Cache(); } if ( false === $mo = $cache->get( $lang ) ) { $mo = new PLL_MO(); $mo->import_from_db( PLL()->model->get_language( $lang ) ); $cache->set( $lang, $mo ); } return $mo->translate( $string ); } /** * Returns true if Polylang manages languages and translations for this post type * * @since 1.0.1 * * @param string $post_type Post type name * @return bool */ function pll_is_translated_post_type( $post_type ) { return PLL()->model->is_translated_post_type( $post_type ); } /** * Returns true if Polylang manages languages and translations for this taxonomy * * @since 1.0.1 * * @param string $tax Taxonomy name * @return bool */ function pll_is_translated_taxonomy( $tax ) { return PLL()->model->is_translated_taxonomy( $tax ); } /** * Returns the list of available languages * * List of parameters accepted in $args: * * hide_empty => hides languages with no posts if set to true ( defaults to false ) * fields => return only that field if set ( see PLL_Language for a list of fields ) * * @since 1.5 * * @param array $args list of parameters * @return array */ function pll_languages_list( $args = array() ) { $args = wp_parse_args( $args, array( 'fields' => 'slug' ) ); return PLL()->model->get_languages_list( $args ); } /** * Set the post language * * @since 1.5 * * @param int $id post id * @param string $lang language code */ function pll_set_post_language( $id, $lang ) { PLL()->model->post->set_language( $id, $lang ); } /** * Set the term language * * @since 1.5 * * @param int $id term id * @param string $lang language code */ function pll_set_term_language( $id, $lang ) { PLL()->model->term->set_language( $id, $lang ); } /** * Save posts translations * * @since 1.5 * * @param array $arr an associative array of translations with language code as key and post id as value */ function pll_save_post_translations( $arr ) { PLL()->model->post->save_translations( reset( $arr ), $arr ); } /** * Save terms translations * * @since 1.5 * * @param array $arr an associative array of translations with language code as key and term id as value */ function pll_save_term_translations( $arr ) { PLL()->model->term->save_translations( reset( $arr ), $arr ); } /** * Returns the post language * * @since 1.5.4 * * @param int $post_id * @param string $field Optional, the language field to return ( see PLL_Language ), defaults to 'slug' * @return bool|string The requested field for the post language, false if no language is associated to that post */ function pll_get_post_language( $post_id, $field = 'slug' ) { return ( $lang = PLL()->model->post->get_language( $post_id ) ) ? $lang->$field : false; } /** * Returns the term language * * @since 1.5.4 * * @param int $term_id * @param string $field Optional, the language field to return ( see PLL_Language ), defaults to 'slug' * @return bool|string The requested field for the term language, false if no language is associated to that term */ function pll_get_term_language( $term_id, $field = 'slug' ) { return ( $lang = PLL()->model->term->get_language( $term_id ) ) ? $lang->$field : false; } /** * Returns an array of translations of a post * * @since 1.8 * * @param int $post_id * @return array an associative array of translations with language code as key and translation post_id as value */ function pll_get_post_translations( $post_id ) { return PLL()->model->post->get_translations( $post_id ); } /** * Returns an array of translations of a term * * @since 1.8 * * @param int $term_id * @return array an associative array of translations with language code as key and translation term_id as value */ function pll_get_term_translations( $term_id ) { return PLL()->model->term->get_translations( $term_id ); } /** * Count posts in a language * * @since 1.5 * * @param string $lang language code * @param array $args ( accepted keys: post_type, m, year, monthnum, day, author, author_name, post_format ) * @return int posts count */ function pll_count_posts( $lang, $args = array() ) { return PLL()->model->count_posts( PLL()->model->get_language( $lang ), $args ); } /** * Allows to access the Polylang instance * It is always preferable to use API functions * Internal methods may be changed without prior notice * * @since 1.8 */ function PLL() { return $GLOBALS['polylang']; } include/class-polylang.php000066600000013674152100561500011642 0ustar00is_deactivation() ) { return; } // Plugin initialization // Take no action before all plugins are loaded add_action( 'plugins_loaded', array( $this, 'init' ), 1 ); // Override load text domain waiting for the language to be defined // Here for plugins which load text domain as soon as loaded :( if ( ! defined( 'PLL_OLT' ) || PLL_OLT ) { PLL_OLT_Manager::instance(); } // Extra code for compatibility with some plugins // Loaded as soon as possible as we may need to act before other plugins are loaded if ( ! defined( 'PLL_PLUGINS_COMPAT' ) || PLL_PLUGINS_COMPAT ) { PLL_Plugins_Compat::instance(); } } /** * Autoload classes * * @since 1.2 * * @param string $class */ public function autoload( $class ) { // Not a Polylang class if ( 0 !== strncmp( 'PLL_', $class, 4 ) ) { return; } $class = str_replace( '_', '-', strtolower( substr( $class, 4 ) ) ); $to_find = array( 'media', 'share', 'slug', 'slugs', 'sync', 'translate', 'wpml', 'xdata', 'rest' ); $dir = implode( '-', array_intersect( explode( '-', $class ), $to_find ) ); $dirs = array( PLL_FRONT_INC, PLL_MODULES_INC, PLL_MODULES_INC . "/$dir", PLL_MODULES_INC . '/plugins', PLL_INSTALL_INC, PLL_ADMIN_INC, PLL_SETTINGS_INC, PLL_INC, ); foreach ( $dirs as $dir ) { if ( file_exists( $file = "$dir/$class.php" ) ) { require_once $file; return; } } } /** * Tells whether the current request is an ajax request on frontend or not * * @since 2.2 * * @return bool */ static public function is_ajax_on_front() { // Special test for plupload which does not use jquery ajax and thus does not pass our ajax prefilter // Special test for customize_save done in frontend but for which we want to load the admin $in = isset( $_REQUEST['action'] ) && in_array( $_REQUEST['action'], array( 'upload-attachment', 'customize_save' ) ); return wp_doing_ajax() && empty( $_REQUEST['pll_ajax_backend'] ) && ! $in; } /** * Defines constants * May be overriden by a plugin if set before plugins_loaded, 1 * * @since 1.6 */ static public function define_constants() { // Cookie name. no cookie will be used if set to false if ( ! defined( 'PLL_COOKIE' ) ) { define( 'PLL_COOKIE', 'pll_language' ); } // Avoid loading polylang admin for frontend ajax requests if ( ! defined( 'PLL_AJAX_ON_FRONT' ) ) { define( 'PLL_AJAX_ON_FRONT', self::is_ajax_on_front() ); } // Admin if ( ! defined( 'PLL_ADMIN' ) ) { define( 'PLL_ADMIN', defined( 'DOING_CRON' ) || ( is_admin() && ! PLL_AJAX_ON_FRONT ) ); } // Settings page whatever the tab if ( ! defined( 'PLL_SETTINGS' ) ) { define( 'PLL_SETTINGS', is_admin() && ( ( isset( $_GET['page'] ) && 0 === strpos( $_GET['page'], 'mlang' ) ) || ! empty( $_REQUEST['pll_ajax_settings'] ) ) ); } } /** * Polylang initialization * setups models and separate admin and frontend * * @since 1.2 */ public function init() { global $polylang; self::define_constants(); $options = get_option( 'polylang' ); // Plugin upgrade if ( $options && version_compare( $options['version'], POLYLANG_VERSION, '<' ) ) { $upgrade = new PLL_Upgrade( $options ); if ( ! $upgrade->upgrade() ) { // If the version is too old return; } } // Make sure that this filter is *always* added before PLL_Model::get_languages_list() is called for the first time add_filter( 'pll_languages_list', array( 'PLL_Static_Pages', 'pll_languages_list' ), 2, 2 ); // Before PLL_Links_Model /** * Filter the model class to use * /!\ this filter is fired *before* the $polylang object is available * * @since 1.5 * * @param string $class either PLL_Model or PLL_Admin_Model */ $class = apply_filters( 'pll_model', PLL_SETTINGS ? 'PLL_Admin_Model' : 'PLL_Model' ); $model = new $class( $options ); $links_model = $model->get_links_model(); if ( PLL_SETTINGS ) { $polylang = new PLL_Settings( $links_model ); } elseif ( PLL_ADMIN ) { $polylang = new PLL_Admin( $links_model ); } // Do nothing on frontend if no language is defined elseif ( $model->get_languages_list() && empty( $_GET['deactivate-polylang'] ) ) { $polylang = new PLL_Frontend( $links_model ); } if ( ! $model->get_languages_list() ) { /** * Fires when no language has been defined yet * Used to load overriden textdomains * * @since 1.2 */ do_action( 'pll_no_language_defined' ); } if ( ! empty( $polylang ) ) { /** * Fires after the $polylang object is created and before the API is loaded * * @since 2.0 * * @param object $polylang */ do_action_ref_array( 'pll_pre_init', array( &$polylang ) ); require_once PLL_INC . '/api.php'; // Loads the API if ( ! defined( 'PLL_WPML_COMPAT' ) || PLL_WPML_COMPAT ) { PLL_WPML_Compat::instance(); // WPML API PLL_WPML_Config::instance(); // wpml-config.xml } $polylang->init(); /** * Fires after the $polylang object and the API is loaded * * @since 1.7 * * @param object $polylang */ do_action_ref_array( 'pll_init', array( &$polylang ) ); } } } new Polylang(); include/links-permalinks.php000066600000006771152100561500012175 0ustar00root = preg_match( '#^/*' . $this->index . '#', $permalink_structure ) ? $this->index . '/' : ''; $this->use_trailing_slashes = ( '/' == substr( $permalink_structure, -1, 1 ) ); } /** * Returns the link to the first page when using pretty permalinks * * @since 1.2 * * @param string $url url to modify * @return string modified url */ public function remove_paged_from_link( $url ) { /** * Filter an url after the paged part has been removed * * @since 2.0.6 * * @param string $modified_url The link to the first page * @param string $orginal_url The link to the original paged page */ return apply_filters( 'pll_remove_paged_from_link', preg_replace( '#\/page\/[0-9]+\/?#', $this->use_trailing_slashes ? '/' : '', $url ), $url ); } /** * Returns the link to the paged page when using pretty permalinks * * @since 1.5 * * @param string $url url to modify * @param int $page * @return string modified url */ public function add_paged_to_link( $url, $page ) { /** * Filter an url after the paged part has been added * * @since 2.0.6 * * @param string $modified_url The link to the paged page * @param string $orginal_url The link to the original first page * @param int $page The page number */ return apply_filters( 'pll_add_paged_to_link', user_trailingslashit( trailingslashit( $url ) . 'page/' . $page, 'paged' ), $url, $page ); } /** * Returns the home url * * @since 1.3.1 * * @param object $lang PLL_Language object * @return string */ public function home_url( $lang ) { return trailingslashit( parent::home_url( $lang ) ); } /** * Returns the static front page url * * @since 1.8 * * @param object $lang * @return string */ public function front_page_url( $lang ) { if ( $this->options['hide_default'] && $lang->slug == $this->options['default_lang'] ) { return trailingslashit( $this->home ); } $url = home_url( $this->root . get_page_uri( $lang->page_on_front ) ); $url = $this->use_trailing_slashes ? trailingslashit( $url ) : untrailingslashit( $url ); return $this->options['force_lang'] ? $this->add_language_to_link( $url, $lang ) : $url; } /** * Prepares rewrite rules filters * * @since 1.6 */ public function get_rewrite_rules_filters() { // Make sure we have the right post types and taxonomies $types = array_values( array_merge( $this->model->get_translated_post_types(), $this->model->get_translated_taxonomies(), $this->model->get_filtered_taxonomies() ) ); $types = array_merge( $this->always_rewrite, $types ); /** * Filter the list of rewrite rules filters to be used by Polylang * * @since 0.8.1 * * @param array $types the list of filters (without '_rewrite_rules' at the end) */ return apply_filters( 'pll_rewrite_rules', $types ); } } include/model.php000066600000052104152100561500010001 0ustar00options = &$options; $this->cache = new PLL_Cache(); $this->post = new PLL_Translated_Post( $this ); // translated post sub model $this->term = new PLL_Translated_Term( $this ); // translated term sub model // we need to clean languages cache when editing a language and when modifying the permalink structure add_action( 'edited_term_taxonomy', array( $this, 'clean_languages_cache' ), 10, 2 ); add_action( 'update_option_permalink_structure', array( $this, 'clean_languages_cache' ) ); add_action( 'update_option_siteurl', array( $this, 'clean_languages_cache' ) ); add_action( 'update_option_home', array( $this, 'clean_languages_cache' ) ); // just in case someone would like to display the language description ;- ) add_filter( 'language_description', '__return_empty_string' ); } /** * Returns the list of available languages * caches the list in a db transient ( except flags ), unless PLL_CACHE_LANGUAGES is set to false * caches the list ( with flags ) in the private property $languages * * list of parameters accepted in $args: * * hide_empty => hides languages with no posts if set to true ( defaults to false ) * fields => return only that field if set ( see PLL_Language for a list of fields ) * * @since 0.1 * * @param array $args * @return array|string|int list of PLL_Language objects or PLL_Language object properties */ public function get_languages_list( $args = array() ) { if ( false === $languages = $this->cache->get( 'languages' ) ) { // create the languages from taxonomies if ( ( defined( 'PLL_CACHE_LANGUAGES' ) && ! PLL_CACHE_LANGUAGES ) || false === ( $languages = get_transient( 'pll_languages_list' ) ) ) { $languages = get_terms( 'language', array( 'hide_empty' => false, 'orderby' => 'term_group' ) ); $languages = empty( $languages ) || is_wp_error( $languages ) ? array() : $languages; $term_languages = get_terms( 'term_language', array( 'hide_empty' => false ) ); $term_languages = empty( $term_languages ) || is_wp_error( $term_languages ) ? array() : array_combine( wp_list_pluck( $term_languages, 'slug' ), $term_languages ); if ( ! empty( $languages ) && ! empty( $term_languages ) ) { // don't use array_map + create_function to instantiate an autoloaded class as it breaks badly in old versions of PHP foreach ( $languages as $k => $v ) { $languages[ $k ] = new PLL_Language( $v, $term_languages[ 'pll_' . $v->slug ] ); } // we will need the languages list to allow its access in the filter below $this->cache->set( 'languages', $languages ); /** * Filter the list of languages *before* it is stored in the persistent cache * /!\ this filter is fired *before* the $polylang object is available * * @since 1.7.5 * * @param array $languages the list of language objects * @param object $model PLL_Model object */ $languages = apply_filters( 'pll_languages_list', $languages, $this ); // don't store directly objects as it badly break with some hosts ( GoDaddy ) due to race conditions when using object cache // thanks to captin411 for catching this! // see https://wordpress.org/support/topic/fatal-error-pll_model_languages_list?replies=8#post-6782255; set_transient( 'pll_languages_list', array_map( 'get_object_vars', $languages ) ); } else { $languages = array(); // in case something went wrong } } // create the languages directly from arrays stored in transients else { foreach ( $languages as $k => $v ) { $languages[ $k ] = new PLL_Language( $v ); } } // custom flags if ( ! PLL_ADMIN ) { foreach ( $languages as $language ) { $language->set_custom_flag(); } } /** * Filter the list of languages *after* it is stored in the persistent cache * /!\ this filter is fired *before* the $polylang object is available * * @since 1.8 * * @param array $languages the list of language objects */ $languages = apply_filters( 'pll_after_languages_cache', $languages ); $this->cache->set( 'languages', $languages ); } $args = wp_parse_args( $args, array( 'hide_empty' => false ) ); // remove empty languages if requested if ( $args['hide_empty'] ) { $languages = wp_list_filter( $languages, array( 'count' => 0 ), 'NOT' ); } return empty( $args['fields'] ) ? $languages : wp_list_pluck( $languages, $args['fields'] ); } /** * Cleans language cache * can be called directly with no parameter * called by the 'edited_term_taxonomy' filter with 2 parameters when count needs to be updated * * @since 1.2 * * @param int $term not used * @param string $taxonomy taxonomy name */ public function clean_languages_cache( $term = 0, $taxonomy = null ) { if ( empty( $taxonomy ) || 'language' == $taxonomy ) { delete_transient( 'pll_languages_list' ); $this->cache->clean(); } } /** * Returns the language by its term_id, tl_term_id, slug or locale * * @since 0.1 * * @param int|string $value term_id, tl_term_id, slug or locale of the queried language * @return object|bool PLL_Language object, false if no language found */ public function get_language( $value ) { if ( is_object( $value ) ) { return $value instanceof PLL_Language ? $value : $this->get_language( $value->term_id ); // will force cast to PLL_Language } if ( false === $return = $this->cache->get( 'language:' . $value ) ) { foreach ( $this->get_languages_list() as $lang ) { $this->cache->set( 'language:' . $lang->term_id, $lang ); $this->cache->set( 'language:' . $lang->tl_term_id, $lang ); $this->cache->set( 'language:' . $lang->slug, $lang ); $this->cache->set( 'language:' . $lang->locale, $lang ); } $return = $this->cache->get( 'language:' . $value ); } return $return; } /** * Adds terms clauses to get_terms to filter them by languages - used in both frontend and admin * * @since 1.2 * * @param array $clauses the list of sql clauses in terms query * @param object $lang PLL_Language object * @return array modifed list of clauses */ public function terms_clauses( $clauses, $lang ) { if ( ! empty( $lang ) && false === strpos( $clauses['join'], 'pll_tr' ) ) { $clauses['join'] .= $this->term->join_clause(); $clauses['where'] .= $this->term->where_clause( $lang ); } return $clauses; } /** * Returns post types that need to be translated * the post types list is cached for better better performance * wait for 'after_setup_theme' to apply the cache to allow themes adding the filter in functions.php * * @since 1.2 * * @param bool $filter true if we should return only valid registered post types * @return array post type names for which Polylang manages languages and translations */ public function get_translated_post_types( $filter = true ) { if ( false === $post_types = $this->cache->get( 'post_types' ) ) { $post_types = array( 'post' => 'post', 'page' => 'page' ); if ( ! empty( $this->options['media_support'] ) ) { $post_types['attachment'] = 'attachment'; } if ( ! empty( $this->options['post_types'] ) && is_array( $this->options['post_types'] ) ) { $post_types = array_merge( $post_types, array_combine( $this->options['post_types'], $this->options['post_types'] ) ); } /** * Filter the list of post types available for translation. * The default are post types which have the parameter ‘public’ set to true. * The filter must be added soon in the WordPress loading process: * in a function hooked to ‘plugins_loaded’ or directly in functions.php for themes. * * @since 0.8 * * @param array $post_types list of post type names * @param bool $is_settings true when displaying the list of custom post types in Polylang settings */ $post_types = apply_filters( 'pll_get_post_types', $post_types, false ); if ( did_action( 'after_setup_theme' ) ) { $this->cache->set( 'post_types', $post_types ); } } return $filter ? array_intersect( $post_types, get_post_types() ) : $post_types; } /** * Returns true if Polylang manages languages and translations for this post type * * @since 1.2 * * @param string|array $post_type post type name or array of post type names * @return bool */ public function is_translated_post_type( $post_type ) { $post_types = $this->get_translated_post_types( false ); return ( is_array( $post_type ) && array_intersect( $post_type, $post_types ) || in_array( $post_type, $post_types ) ); } /** * Return taxonomies that need to be translated * * @since 1.2 * * @param bool $filter true if we should return only valid registered taxonmies * @return array array of registered taxonomy names for which Polylang manages languages and translations */ public function get_translated_taxonomies( $filter = true ) { if ( false === $taxonomies = $this->cache->get( 'taxonomies' ) ) { $taxonomies = array( 'category' => 'category', 'post_tag' => 'post_tag' ); if ( ! empty( $this->options['taxonomies'] ) && is_array( $this->options['taxonomies'] ) ) { $taxonomies = array_merge( $taxonomies, array_combine( $this->options['taxonomies'], $this->options['taxonomies'] ) ); } /** * Filter the list of taxonomies available for translation. * The default are taxonomies which have the parameter ‘public’ set to true. * The filter must be added soon in the WordPress loading process: * in a function hooked to ‘plugins_loaded’ or directly in functions.php for themes. * * @since 0.8 * * @param array $taxonomies list of taxonomy names * @param bool $is_settings true when displaying the list of custom taxonomies in Polylang settings */ $taxonomies = apply_filters( 'pll_get_taxonomies', $taxonomies, false ); if ( did_action( 'after_setup_theme' ) ) { $this->cache->set( 'taxonomies', $taxonomies ); } } return $filter ? array_intersect( $taxonomies, get_taxonomies() ) : $taxonomies; } /** * Returns true if Polylang manages languages and translations for this taxonomy * * @since 1.2 * * @param string|array $tax taxonomy name or array of taxonomy names * @return bool */ public function is_translated_taxonomy( $tax ) { $taxonomies = $this->get_translated_taxonomies( false ); return ( is_array( $tax ) && array_intersect( $tax, $taxonomies ) || in_array( $tax, $taxonomies ) ); } /** * Return taxonomies that need to be filtered ( post_format like ) * * @since 1.7 * * @param bool $filter true if we should return only valid registered taxonomies * @return array array of registered taxonomy names */ public function get_filtered_taxonomies( $filter = true ) { if ( did_action( 'after_setup_theme' ) ) { static $taxonomies = null; } if ( empty( $taxonomies ) ) { $taxonomies = array( 'post_format' => 'post_format' ); /** * Filter the list of taxonomies not translatable but filtered by language. * Includes only the post format by default * The filter must be added soon in the WordPress loading process: * in a function hooked to ‘plugins_loaded’ or directly in functions.php for themes. * * @since 1.7 * * @param array $taxonomies list of taxonomy names * @param bool $is_settings true when displaying the list of custom taxonomies in Polylang settings */ $taxonomies = apply_filters( 'pll_filtered_taxonomies', $taxonomies, false ); } return $filter ? array_intersect( $taxonomies, get_taxonomies() ) : $taxonomies; } /** * Returns true if Polylang filters this taxonomy per language * * @since 1.7 * * @param string|array $tax taxonomy name or array of taxonomy names * @return bool */ public function is_filtered_taxonomy( $tax ) { $taxonomies = $this->get_filtered_taxonomies( false ); return ( is_array( $tax ) && array_intersect( $tax, $taxonomies ) || in_array( $tax, $taxonomies ) ); } /** * Returns the query vars of all filtered taxonomies * * @since 1.7 * * @return array */ public function get_filtered_taxonomies_query_vars() { $query_vars = array(); foreach ( $this->get_filtered_taxonomies() as $filtered_tax ) { $tax = get_taxonomy( $filtered_tax ); $query_vars[] = $tax->query_var; } return $query_vars; } /** * Create a default category for a language * * @since 1.2 * * @param object|string|int $lang language */ public function create_default_category( $lang ) { $lang = $this->get_language( $lang ); // create a new category // FIXME this is translated in admin language when we would like it in $lang $cat_name = __( 'Uncategorized' ); $cat_slug = sanitize_title( $cat_name . '-' . $lang->slug ); $cat = wp_insert_term( $cat_name, 'category', array( 'slug' => $cat_slug ) ); // check that the category was not previously created ( in case the language was deleted and recreated ) $cat = isset( $cat->error_data['term_exists'] ) ? $cat->error_data['term_exists'] : $cat['term_id']; // set language $this->term->set_language( (int) $cat, $lang ); // this is a translation of the default category $default = (int) get_option( 'default_category' ); $translations = $this->term->get_translations( $default ); if ( empty( $translations ) ) { if ( $lg = $this->term->get_language( $default ) ) { $translations[ $lg->slug ] = $default; } else { $translations = array(); } } $this->term->save_translations( (int) $cat, $translations ); } /** * It is possible to have several terms with the same name in the same taxonomy ( one per language ) * but the native term_exists will return true even if only one exists * so here the function adds the language parameter * * @since 1.4 * * @param string $term_name the term name * @param string $taxonomy taxonomy name * @param int $parent parent term id * @param string|object $language the language slug or object * @return null|int the term_id of the found term */ public function term_exists( $term_name, $taxonomy, $parent, $language ) { global $wpdb; $term_name = trim( wp_unslash( $term_name ) ); $select = "SELECT t.term_id FROM $wpdb->terms AS t"; $join = " INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id"; $join .= $this->term->join_clause(); $where = $wpdb->prepare( ' WHERE tt.taxonomy = %s AND t.name = %s', $taxonomy, $term_name ); $where .= $this->term->where_clause( $this->get_language( $language ) ); if ( $parent > 0 ) { $where .= $wpdb->prepare( ' AND tt.parent = %d', $parent ); } return $wpdb->get_var( $select . $join . $where ); } /** * Gets the number of posts per language in a date, author or post type archive * * @since 1.2 * * @param object $lang * @param array $q WP_Query arguments ( accepted: post_type, m, year, monthnum, day, author, author_name, post_format ) * @return int */ public function count_posts( $lang, $q = array() ) { global $wpdb; $q = wp_parse_args( $q, array( 'post_type' => 'post' ) ); if ( ! is_array( $q['post_type'] ) ) { $q['post_type'] = array( $q['post_type'] ); } foreach ( $q['post_type'] as $key => $type ) { if ( ! post_type_exists( $type ) ) { unset( $q['post_type'][ $key ] ); } } if ( empty( $q['post_type'] ) ) { $q['post_type'] = array( 'post' ); // we *need* a post type } $cache_key = md5( serialize( $q ) ); $counts = wp_cache_get( $cache_key, 'pll_count_posts' ); if ( false === $counts ) { $select = "SELECT pll_tr.term_taxonomy_id, COUNT( * ) AS num_posts FROM {$wpdb->posts}"; $join = $this->post->join_clause(); $where = " WHERE post_status = 'publish'"; $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_type IN ( '%s' )", join( "', '", $q['post_type'] ) ); $where .= $this->post->where_clause( $this->get_languages_list() ); $groupby = ' GROUP BY pll_tr.term_taxonomy_id'; if ( ! empty( $q['m'] ) ) { $q['m'] = '' . preg_replace( '|[^0-9]|', '', $q['m'] ); $where .= $wpdb->prepare( " AND YEAR( {$wpdb->posts}.post_date ) = %d", substr( $q['m'], 0, 4 ) ); if ( strlen( $q['m'] ) > 5 ) { $where .= $wpdb->prepare( " AND MONTH( {$wpdb->posts}.post_date ) = %d", substr( $q['m'], 4, 2 ) ); } if ( strlen( $q['m'] ) > 7 ) { $where .= $wpdb->prepare( " AND DAYOFMONTH( {$wpdb->posts}.post_date ) = %d", substr( $q['m'], 6, 2 ) ); } } if ( ! empty( $q['year'] ) ) { $where .= $wpdb->prepare( " AND YEAR( {$wpdb->posts}.post_date ) = %d", $q['year'] ); } if ( ! empty( $q['monthnum'] ) ) { $where .= $wpdb->prepare( " AND MONTH( {$wpdb->posts}.post_date ) = %d", $q['monthnum'] ); } if ( ! empty( $q['day'] ) ) { $where .= $wpdb->prepare( " AND DAYOFMONTH( {$wpdb->posts}.post_date ) = %d", $q['day'] ); } if ( ! empty( $q['author_name'] ) ) { $author = get_user_by( 'slug', sanitize_title_for_query( $q['author_name'] ) ); if ( $author ) { $q['author'] = $author->ID; } } if ( ! empty( $q['author'] ) ) { $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_author = %d", $q['author'] ); } // filtered taxonomies ( post_format ) foreach ( $this->get_filtered_taxonomies_query_vars() as $tax_qv ) { if ( ! empty( $q[ $tax_qv ] ) ) { $join .= " INNER JOIN {$wpdb->term_relationships} AS tr ON tr.object_id = {$wpdb->posts}.ID"; $join .= " INNER JOIN {$wpdb->term_taxonomy} AS tt ON tt.term_taxonomy_id = tr.term_taxonomy_id"; $join .= " INNER JOIN {$wpdb->terms} AS t ON t.term_id = tt.term_id"; $where .= $wpdb->prepare( ' AND t.slug = %s', $q[ $tax_qv ] ); } } $res = $wpdb->get_results( $select . $join . $where . $groupby, ARRAY_A ); foreach ( (array) $res as $row ) { $counts[ $row['term_taxonomy_id'] ] = $row['num_posts']; } wp_cache_set( $cache_key, $counts, 'pll_count_posts' ); } return empty( $counts[ $lang->term_taxonomy_id ] ) ? 0 : $counts[ $lang->term_taxonomy_id ]; } /** * Setup the links model based on options * * @since 1.2 * * @return object implementing "links_model interface" */ public function get_links_model() { $c = array( 'Directory', 'Directory', 'Subdomain', 'Domain' ); $class = get_option( 'permalink_structure' ) ? 'PLL_Links_' . $c[ $this->options['force_lang'] ] : 'PLL_Links_Default'; /** * Filter the links model class to use * /!\ this filter is fired *before* the $polylang object is available * * @since 2.1.1 * * @param string $class A class name: PLL_Links_Default, PLL_Links_Directory, PLL_Links_Subdomain, PLL_Links_Domain */ $class = apply_filters( 'pll_links_model', $class ); return new $class( $this ); } /** * Some backward compatibility with Polylang < 1.8 * allows for example to call $polylang->model->get_post_languages( $post_id ) instead of $polylang->model->post->get_language( $post_id ) * this works but should be slower than the direct call, thus an error is triggered in debug mode * * @since 1.8 * * @param string $func Function name * @param array $args Function arguments */ public function __call( $func, $args ) { $f = $func; switch ( $func ) { case 'get_object_term': $o = ( false === strpos( $args[1], 'term' ) ) ? 'post' : 'term'; break; case 'save_translations': case 'delete_translation': case 'get_translations': case 'get_translation': case 'join_clause': $o = ( 'post' == $args[0] || $this->is_translated_post_type( $args[0] ) ) ? 'post' : ( 'term' == $args[0] || $this->is_translated_taxonomy( $args[0] ) ? 'term' : false ); unset( $args[0] ); break; case 'set_post_language': case 'get_post_language': case 'set_term_language': case 'get_term_language': case 'delete_term_language': case 'get_post': case 'get_term': $str = explode( '_', $func ); $f = empty( $str[2] ) ? $str[0] : $str[0] . '_' . $str[2]; $o = $str[1]; break; case 'where_clause': case 'get_objects_in_language': $o = $args[1]; unset( $args[1] ); break; } if ( ! empty( $o ) && is_object( $this->$o ) && method_exists( $this->$o, $f ) ) { if ( WP_DEBUG ) { $debug = debug_backtrace(); $i = 1 + empty( $debug[1]['line'] ); // the file and line are in $debug[2] if the function was called using call_user_func trigger_error( sprintf( '%1$s was called incorrectly in %4$s on line %5$s: the call to $polylang->model->%1$s() has been deprecated in Polylang 1.8, use PLL()->model->%2$s->%3$s() instead.' . "\nError handler", $func, $o, $f, $debug[ $i ]['file'], $debug[ $i ]['line'] ) ); } return call_user_func_array( array( $this->$o, $f ), $args ); } $debug = debug_backtrace(); trigger_error( sprintf( 'Call to undefined function PLL()->model->%1$s() in %2$s on line %3$s' . "\nError handler", $func, $debug[0]['file'], $debug[0]['line'] ), E_USER_ERROR ); } } include/base.php000066600000007716152100561500007624 0ustar00links_model = &$links_model; $this->model = &$links_model->model; $this->options = &$this->model->options; $GLOBALS['l10n_unloaded']['pll_string'] = true; // Short-circuit _load_textdomain_just_in_time() for 'pll_string' domain in WP 4.6+ add_action( 'widgets_init', array( $this, 'widgets_init' ) ); // User defined strings translations add_action( 'pll_language_defined', array( $this, 'load_strings_translations' ), 5 ); add_action( 'change_locale', array( $this, 'load_strings_translations' ) ); // Since WP 4.7 // Switch_to_blog add_action( 'switch_blog', array( $this, 'switch_blog' ), 10, 2 ); } /** * Registers our widgets * * @since 0.1 */ public function widgets_init() { register_widget( 'PLL_Widget_Languages' ); // Overwrites the calendar widget to filter posts by language if ( ! defined( 'PLL_WIDGET_CALENDAR' ) || PLL_WIDGET_CALENDAR ) { unregister_widget( 'WP_Widget_Calendar' ); register_widget( 'PLL_Widget_Calendar' ); } } /** * Loads user defined strings translations * * @since 1.2 * @since 2.1.3 $locale parameter added. * * @param string $locale Locale. Defaults to current locale. */ public function load_strings_translations( $locale = '' ) { if ( empty( $locale ) ) { $locale = get_locale(); } $language = $this->model->get_language( $locale ); if ( ! empty( $language ) ) { $mo = new PLL_MO(); $mo->import_from_db( $language ); $GLOBALS['l10n']['pll_string'] = &$mo; } else { unset( $GLOBALS['l10n']['pll_string'] ); } } /** * Resets some variables when switching blog * Applies only if Polylang is active on the new blog * * @since 1.5.1 * * @param int $new_blog * @param int $old_blog * @return bool not used by WP but by child class */ public function switch_blog( $new_blog, $old_blog ) { $plugins = ( $sitewide_plugins = get_site_option( 'active_sitewide_plugins' ) ) && is_array( $sitewide_plugins ) ? array_keys( $sitewide_plugins ) : array(); $plugins = array_merge( $plugins, get_option( 'active_plugins', array() ) ); // 2nd test needed when Polylang is not networked activated // 3rd test needed when Polylang is networked activated and a new site is created if ( $new_blog != $old_blog && in_array( POLYLANG_BASENAME, $plugins ) && get_option( 'polylang' ) ) { $this->options = get_option( 'polylang' ); // Needed for menus $this->links_model = $this->model->get_links_model(); return true; } return false; } /** * Some backward compatibility with Polylang < 1.2 * Allows for example to call $polylang->get_languages_list() instead of $polylang->model->get_languages_list() * This works but should be slower than the direct call, thus an error is triggered in debug mode * * @since 1.2 * * @param string $func function name * @param array $args function arguments */ public function __call( $func, $args ) { foreach ( $this as $prop => &$obj ) { if ( is_object( $obj ) && method_exists( $obj, $func ) ) { if ( WP_DEBUG ) { $debug = debug_backtrace(); $i = 1 + empty( $debug[1]['line'] ); // The file and line are in $debug[2] if the function was called using call_user_func trigger_error( sprintf( '%1$s was called incorrectly in %3$s on line %4$s: the call to $polylang->%1$s() has been deprecated in Polylang 1.2, use PLL()->%2$s->%1$s() instead.' . "\nError handler", $func, $prop, $debug[ $i ]['file'], $debug[ $i ]['line'] ) ); } return call_user_func_array( array( $obj, $func ), $args ); } } $debug = debug_backtrace(); trigger_error( sprintf( 'Call to undefined function PLL()->%1$s() in %2$s on line %3$s' . "\nError handler", $func, $debug[0]['file'], $debug[0]['line'] ), E_USER_ERROR ); } } include/olt-manager.php000066600000021350152100561500011106 0ustar00default_locale = get_locale(); // Filters for text domain management add_filter( 'load_textdomain_mofile', array( $this, 'load_textdomain_mofile' ), 10, 2 ); add_filter( 'gettext', array( $this, 'gettext' ), 10, 3 ); add_filter( 'gettext_with_context', array( $this, 'gettext_with_context' ), 10, 4 ); // Loads text domains add_action( 'pll_language_defined', array( $this, 'load_textdomains' ), 2 ); // After PLL_Frontend::pll_language_defined add_action( 'pll_no_language_defined', array( $this, 'load_textdomains' ) ); } /** * Access to the single instance of the class * * @since 1.7 * * @return object */ static public function instance() { if ( empty( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * Loads text domains * * @since 0.1 */ public function load_textdomains() { // Our load_textdomain_mofile filter has done its job. let's remove it before calling load_textdomain remove_filter( 'load_textdomain_mofile', array( $this, 'load_textdomain_mofile' ), 10, 2 ); remove_filter( 'gettext', array( $this, 'gettext' ), 10, 3 ); remove_filter( 'gettext_with_context', array( $this, 'gettext_with_context' ), 10, 4 ); $new_locale = get_locale(); // Don't try to save time for en_US as some users have theme written in another language // Now we can load all overriden text domains with the right language if ( ! empty( $this->list_textdomains ) ) { // Since WP 4.7 we need to reset the internal cache of _get_path_to_translation when switching from any locale to en_US // See WP_Locale_Switcher::changle_locale() // FIXME test _get_path_to_translation for backward compatibility with WP < 4.7 if ( function_exists( '_get_path_to_translation' ) ) { _get_path_to_translation( null, true ); } foreach ( $this->list_textdomains as $textdomain ) { // Since WP 4.6, plugins translations are first loaded from wp-content/languages if ( ! load_textdomain( $textdomain['domain'], str_replace( "{$this->default_locale}.mo", "$new_locale.mo", $textdomain['mo'] ) ) ) { // Since WP 3.5 themes may store languages files in /wp-content/languages/themes if ( ! load_textdomain( $textdomain['domain'], WP_LANG_DIR . "/themes/{$textdomain['domain']}-$new_locale.mo" ) ) { // Since WP 3.7 plugins may store languages files in /wp-content/languages/plugins load_textdomain( $textdomain['domain'], WP_LANG_DIR . "/plugins/{$textdomain['domain']}-$new_locale.mo" ); } } } } // First remove taxonomies and post_types labels that we don't need to translate $taxonomies = get_taxonomies( array( '_pll' => true ) ); $post_types = get_post_types( array( '_pll' => true ) ); // We don't need to translate core taxonomies and post types labels when setting the language from the url // As they will be translated when registered the second time if ( ! did_action( 'setup_theme' ) ) { $taxonomies = array_merge( get_taxonomies( array( '_builtin' => true ) ), $taxonomies ); $post_types = array_merge( get_post_types( array( '_builtin' => true ) ), $post_types ); } // Translate labels of post types and taxonomies foreach ( array_diff_key( $GLOBALS['wp_taxonomies'], array_flip( $taxonomies ) ) as $tax ) { $this->translate_labels( $tax ); } foreach ( array_diff_key( $GLOBALS['wp_post_types'], array_flip( $post_types ) ) as $pt ) { $this->translate_labels( $pt ); } // Act only if the language has not been set early ( before default textdomain loading and $wp_locale creation ) if ( did_action( 'after_setup_theme' ) ) { // Reinitializes wp_locale for weekdays and months unset( $GLOBALS['wp_locale'] ); $GLOBALS['wp_locale'] = new WP_Locale(); } /** * Fires after the post types and taxonomies labels have been translated * This allows plugins to translate text the same way we do for post types and taxonomies labels * * @since 1.2 * * @param array $labels list of strings to trnaslate */ do_action_ref_array( 'pll_translate_labels', array( &$this->labels ) ); // Free memory unset( $this->default_locale, $this->list_textdomains, $this->labels ); } /** * FIXME: Backward compatibility with Polylang for WooCommerce < 0.3.4 * To remove in Polylang 2.1 * * @since 0.1 * * @param bool $bool not used * @param string $domain text domain name * @param string $mofile translation file name * @return bool */ public function mofile( $bool, $domain, $mofile ) { return $bool; } /** * Saves all text domains in a table for later usage * It replaces the 'override_load_textdomain' filter used since 0.1 * * @since 2.0.4 * * @param string $mofile translation file name * @param string $domain text domain name * @return bool */ public function load_textdomain_mofile( $mofile, $domain ) { // On multisite, 2 files are sharing the same domain so we need to distinguish them if ( 'default' === $domain && false !== strpos( $mofile, '/ms-' ) ) { $this->list_textdomains['ms-default'] = array( 'mo' => $mofile, 'domain' => $domain ); } else { $this->list_textdomains[ $domain ] = array( 'mo' => $mofile, 'domain' => $domain ); } return ''; // Hack to prevent WP loading text domains as we will load them all later } /** * Saves post types and taxonomies labels for a later usage * * @since 0.9 * * @param string $translation not used * @param string $text string to translate * @param string $domain text domain * @return string unmodified $translation */ public function gettext( $translation, $text, $domain ) { if ( is_string( $text ) ) { // Avoid a warning with some buggy plugins which pass an array $this->labels[ $text ] = array( 'domain' => $domain ); } return $translation; } /** * Saves post types and taxonomies labels for a later usage * * @since 0.9 * * @param string $translation not used * @param string $text string to translate * @param string $context some comment to describe the context of string to translate * @param string $domain text domain * @return string unmodified $translation */ public function gettext_with_context( $translation, $text, $context, $domain ) { $this->labels[ $text ] = array( 'domain' => $domain, 'context' => $context ); return $translation; } /** * Translates post types and taxonomies labels once the language is known * * @since 0.9 * * @param object $type either a post type or a taxonomy */ public function translate_labels( $type ) { // Use static array to avoid translating several times the same ( default ) labels static $translated = array(); foreach ( $type->labels as $key => $label ) { if ( is_string( $label ) && isset( $this->labels[ $label ] ) ) { if ( empty( $translated[ $label ] ) ) { $type->labels->$key = $translated[ $label ] = isset( $this->labels[ $label ]['context'] ) ? _x( $label, $this->labels[ $label ]['context'], $this->labels[ $label ]['domain'] ) : __( $label, $this->labels[ $label ]['domain'] ); } else { $type->labels->$key = $translated[ $label ]; } } } } /** * Allows Polylang to be the first plugin loaded ;- ) * * @since 1.2 * * @param array $plugins list of active plugins * @return array list of active plugins */ public function make_polylang_first( $plugins ) { if ( $key = array_search( POLYLANG_BASENAME, $plugins ) ) { unset( $plugins[ $key ] ); array_unshift( $plugins, POLYLANG_BASENAME ); } return $plugins; } } frontend/frontend-filters.php000066600000032601152100561500012362 0ustar00options['media_support'] ) { foreach ( array( 'audio', 'image', 'video' ) as $media ) { add_filter( "widget_media_{$media}_instance", array( $this, 'widget_media_instance' ), 1 ); // Since WP 4.8 } } // Strings translation ( must be applied before WordPress applies its default formatting filters ) foreach ( array( 'widget_text', 'widget_title', 'option_blogname', 'option_blogdescription', 'option_date_format', 'option_time_format' ) as $filter ) { add_filter( $filter, 'pll__', 1 ); } // Translates biography add_filter( 'get_user_metadata', array( $this, 'get_user_metadata' ), 10, 4 ); // Set posts and terms language when created from frontend ( ex with P2 theme ) add_action( 'save_post', array( $this, 'save_post' ), 200, 2 ); add_action( 'create_term', array( $this, 'save_term' ), 10, 3 ); add_action( 'edit_term', array( $this, 'save_term' ), 10, 3 ); if ( $this->options['media_support'] ) { add_action( 'add_attachment', array( $this, 'set_default_language' ) ); } // Support theme customizer // FIXME of course does not work if 'transport' is set to 'postMessage' if ( isset( $_POST['wp_customize'], $_POST['customized'] ) ) { add_filter( 'pre_option_blogname', 'pll__', 20 ); add_filter( 'pre_option_blogdescription', 'pll__', 20 ); } } /** * Returns the locale based on current language * * @since 0.1 * * @param string $locale * @return string */ public function get_locale( $locale ) { return $this->curlang->locale; } /** * Filters sticky posts by current language * * @since 0.8 * * @param array $posts list of sticky posts ids * @return array modified list of sticky posts ids */ public function option_sticky_posts( $posts ) { global $wpdb; if ( $this->curlang && ! empty( $posts ) ) { $_posts = wp_cache_get( 'sticky_posts', 'options' ); // This option is usually cached in 'all_options' by WP if ( empty( $_posts ) || ! is_array( $_posts[ $this->curlang->term_taxonomy_id ] ) ) { $posts = array_map( 'intval', $posts ); $posts = implode( ',', $posts ); $languages = $this->model->get_languages_list( array( 'fields' => 'term_taxonomy_id' ) ); $_posts = array_fill_keys( $languages, array() ); // Init with empty arrays $languages = implode( ',', $languages ); $relations = $wpdb->get_results( "SELECT object_id, term_taxonomy_id FROM {$wpdb->term_relationships} WHERE object_id IN ({$posts}) AND term_taxonomy_id IN ({$languages})" ); foreach ( $relations as $relation ) { $_posts[ $relation->term_taxonomy_id ][] = $relation->object_id; } wp_cache_add( 'sticky_posts', $_posts, 'options' ); } $posts = $_posts[ $this->curlang->term_taxonomy_id ]; } return $posts; } /** * Adds language dependent cache domain when querying terms * useful as the 'lang' parameter is not included in cache key by WordPress * * @since 1.3 * * @param array $args * @return array */ public function get_terms_args( $args ) { $lang = isset( $args['lang'] ) ? $args['lang'] : $this->curlang->slug; $key = '_' . ( is_array( $lang ) ? implode( ',', $lang ) : $lang ); $args['cache_domain'] = empty( $args['cache_domain'] ) ? 'pll' . $key : $args['cache_domain'] . $key; return $args; } /** * Filters categories and post tags by language when needed * * @since 0.2 * * @param array $clauses sql clauses * @param array $taxonomies * @param array $args get_terms arguments * @return array modified sql clauses */ public function terms_clauses( $clauses, $taxonomies, $args ) { // Does nothing except on taxonomies which are filterable // Since WP 4.7, make sure not to filter wp_get_object_terms() if ( ! $this->model->is_translated_taxonomy( $taxonomies ) || ! empty( $args['object_ids'] ) ) { return $clauses; } // Adds our clauses to filter by language return $this->model->terms_clauses( $clauses, isset( $args['lang'] ) ? $args['lang'] : $this->curlang ); } /** * Modifies the sql request for wp_get_archives to filter by the current language * * @since 1.9 * * @param string $sql JOIN clause * @param array $r wp_get_archives arguments * @return string modified JOIN clause */ public function getarchives_join( $sql, $r ) { return ! empty( $r['post_type'] ) && $this->model->is_translated_post_type( $r['post_type'] ) ? $sql . $this->model->post->join_clause() : $sql; } /** * Modifies the sql request for wp_get_archives to filter by the current language * * @since 1.9 * * @param string $sql WHERE clause * @param array $r wp_get_archives arguments * @return string modified WHERE clause */ public function getarchives_where( $sql, $r ) { return ! empty( $r['post_type'] ) && $this->model->is_translated_post_type( $r['post_type'] ) ? $sql . $this->model->post->where_clause( $this->curlang ) : $sql; } /** * Modifies the sql request for get_adjacent_post to filter by the current language * * @since 0.1 * * @param string $sql The JOIN clause in the SQL. * @param bool $in_same_term Whether post should be in a same taxonomy term. * @param array $excluded_terms Array of excluded term IDs. * @param string $taxonomy Taxonomy. Used to identify the term used when `$in_same_term` is true. * @param WP_Post $post WP_Post object. * @return string modified JOIN clause */ public function posts_join( $sql, $in_same_term, $excluded_terms, $taxonomy = '', $post = null ) { return $this->model->is_translated_post_type( $post->post_type ) ? $sql . $this->model->post->join_clause( 'p' ) : $sql; } /** * Modifies the sql request for wp_get_archives and get_adjacent_post to filter by the current language * * @since 0.1 * * @param string $sql The WHERE clause in the SQL. * @param bool $in_same_term Whether post should be in a same taxonomy term. * @param array $excluded_terms Array of excluded term IDs. * @param string $taxonomy Taxonomy. Used to identify the term used when `$in_same_term` is true. * @param WP_Post $post WP_Post object. * @return string modified WHERE clause */ public function posts_where( $sql, $in_same_term, $excluded_terms, $taxonomy = '', $post = null ) { return $this->model->is_translated_post_type( $post->post_type ) ? $sql . $this->model->post->where_clause( $this->curlang ) : $sql; } /** * Filters the widgets according to the current language * Don't display if a language filter is set and this is not the current one * * @since 0.3 * * @param array $instance widget settings * @param object $widget WP_Widget object * @return bool|array false if we hide the widget, unmodified $instance otherwise */ public function widget_display_callback( $instance, $widget ) { return ! empty( $instance['pll_lang'] ) && $instance['pll_lang'] != $this->curlang->slug ? false : $instance; } /** * Remove widgets from sidebars if they are not visible in the current language * Needed to allow is_active_sidebar() to return false if all widgets are not for the current language. See #54 * * @since 2.1 * * @param array $sidebars_widgets An associative array of sidebars and their widgets * @return array */ public function sidebars_widgets( $sidebars_widgets ) { global $wp_registered_widgets; foreach ( $sidebars_widgets as $sidebar => $widgets ) { if ( 'wp_inactive_widgets' == $sidebar || empty( $widgets ) ) { continue; } foreach ( $widgets as $key => $widget ) { // Nothing can be done if the widget is created using pre WP2.8 API :( // There is no object, so we can't access it to get the widget options if ( ! isset( $wp_registered_widgets[ $widget ]['callback'] ) || ! is_array( $wp_registered_widgets[ $widget ]['callback'] ) || ! isset( $wp_registered_widgets[ $widget ]['callback'][0] ) || ! is_object( $wp_registered_widgets[ $widget ]['callback'][0] ) || ! method_exists( $wp_registered_widgets[ $widget ]['callback'][0], 'get_settings' ) ) { continue; } $widget_settings = $wp_registered_widgets[ $widget ]['callback'][0]->get_settings(); $number = $wp_registered_widgets[ $widget ]['params'][0]['number']; // Remove the widget if not visible in the current language if ( ! empty( $widget_settings[ $number ]['pll_lang'] ) && $widget_settings[ $number ]['pll_lang'] !== $this->curlang->slug ) { unset( $sidebars_widgets[ $sidebar ][ $key ] ); } } } return $sidebars_widgets; } /** * Translates media in media widgets * * @since 2.1.5 * * @param array $instance Widget instance data * @return array */ public function widget_media_instance( $instance ) { if ( empty( $instance['pll_lang'] ) && $instance['attachment_id'] && $tr_id = pll_get_post( $instance['attachment_id'] ) ) { $instance['attachment_id'] = $tr_id; $attachment = get_post( $tr_id ); if ( $instance['caption'] && ! empty( $attachment->post_excerpt ) ) { $instance['caption'] = $attachment->post_excerpt; } if ( $instance['alt'] && $alt_text = get_post_meta( $tr_id, '_wp_attachment_image_alt', true ) ) { $instance['alt'] = $alt_text; } if ( $instance['image_title'] && ! empty( $attachment->post_title ) ) { $instance['image_title'] = $attachment->post_title; } } return $instance; } /** * Translates biography * Makes sure that the correct locale is used for ajax calls when the user is logged in * * @since 0.9 * * @param null $return * @param int $id User id * @param string $meta_key * @param bool $single Whether to return only the first value of the specified $meta_key * @return null|string */ public function get_user_metadata( $return, $id, $meta_key, $single ) { switch ( $meta_key ) { case 'description': if ( $this->curlang->slug !== $this->options['default_lang'] ) { $return = get_user_meta( $id, 'description_' . $this->curlang->slug, $single ); } break; case 'locale': if ( Polylang::is_ajax_on_front() ) { $return = get_locale(); } break; } return $return; } /** * Allows to set a language by default for posts if it has no language yet * * @since 1.5.4 * * @param int $post_id */ public function set_default_language( $post_id ) { if ( ! $this->model->post->get_language( $post_id ) ) { if ( isset( $_REQUEST['lang'] ) ) { $this->model->post->set_language( $post_id, $_REQUEST['lang'] ); } elseif ( ( $parent_id = wp_get_post_parent_id( $post_id ) ) && $parent_lang = $this->model->post->get_language( $parent_id ) ) { $this->model->post->set_language( $post_id, $parent_lang ); } else { $this->model->post->set_language( $post_id, $this->curlang ); } } } /** * Called when a post ( or page ) is saved, published or updated * Does nothing except on post types which are filterable * Sets the language but does not allow to modify it * * @since 1.1 * * @param int $post_id * @param object $post */ public function save_post( $post_id, $post ) { if ( $this->model->is_translated_post_type( $post->post_type ) ) { $this->set_default_language( $post_id ); } } /** * Called when a category or post tag is created or edited * Does nothing except on taxonomies which are filterable * Sets the language but does not allow to modify it * * @since 1.1 * * @param int $term_id * @param int $tt_id Term taxonomy id * @param string $taxonomy */ public function save_term( $term_id, $tt_id, $taxonomy ) { if ( $this->model->is_translated_taxonomy( $taxonomy ) && ! $this->model->term->get_language( $term_id ) ) { if ( isset( $_REQUEST['lang'] ) ) { $this->model->term->set_language( $term_id, $_REQUEST['lang'] ); } elseif ( ( $term = get_term( $term_id, $taxonomy ) ) && ! empty( $term->parent ) && $parent_lang = $this->model->term->get_language( $term->parent ) ) { $this->model->term->set_language( $term_id, $parent_lang ); } else { $this->model->term->set_language( $term_id, $this->curlang ); } } } } frontend/choose-lang-domain.php000066600000001375152100561500012545 0ustar00model->get_language( $this->links_model->get_language_from_url() ); } /** * Adds query vars to query for home pages in all languages * * @since 1.5 */ public function home_requested() { $this->set_curlang_in_query( $GLOBALS['wp_query'] ); /** This action is documented in include/choose-lang.php */ do_action( 'pll_home_requested' ); } } frontend/choose-lang-content.php000066600000010616152100561500012746 0ustar00options['media_support'] ) ) { return $this->get_preferred_language(); } if ( $var = get_query_var( 'lang' ) ) { $lang = explode( ',',$var ); $lang = $this->model->get_language( reset( $lang ) ); // choose the first queried language } elseif ( ( is_single() || is_page() || ( is_attachment() && $this->options['media_support'] ) ) && ( ( $var = get_queried_object_id() ) || ( $var = get_query_var( 'p' ) ) || ( $var = get_query_var( 'page_id' ) ) || ( $var = get_query_var( 'attachment_id' ) ) ) ) { $lang = $this->model->post->get_language( $var ); } else { foreach ( $this->model->get_translated_taxonomies() as $taxonomy ) { if ( $var = get_query_var( get_taxonomy( $taxonomy )->query_var ) ) { $lang = $this->model->term->get_language( $var, $taxonomy ); } } } /** * Filter the language before it is set from the content * * @since 0.9 * * @param bool|object $lang language object or false if none was found */ return apply_filters( 'pll_get_current_language', isset( $lang ) ? $lang : false ); } /** * sets the language for home page * add the lang query var when querying archives with no language code * * @since 1.2 * * @param object $query instance of WP_Query */ public function parse_main_query( $query ) { if ( $query !== $GLOBALS['wp_the_query'] ) { return; } $qv = $query->query_vars; // homepage is requested, let's set the language // take care to avoid posts page for which is_home = 1 if ( empty( $query->query ) && ( is_home() || is_page() ) ) { $this->home_language(); $this->home_requested(); } parent::parse_main_query( $query ); $is_archive = ( count( $query->query ) == 1 && ! empty( $qv['paged'] ) ) || $query->is_date || $query->is_author || ( ! empty( $qv['post_type'] ) && $query->is_post_type_archive && $this->model->is_translated_post_type( $qv['post_type'] ) ); // sets the language in case we hide the default language // use $query->query['s'] as is_search is not set when search is empty // http://wordpress.org/support/topic/search-for-empty-string-in-default-language if ( $this->options['hide_default'] && ! isset( $qv['lang'] ) && ( $is_archive || isset( $query->query['s'] ) || ( count( $query->query ) == 1 && ! empty( $qv['feed'] ) ) ) ) { $this->set_language( $this->model->get_language( $this->options['default_lang'] ) ); $this->set_curlang_in_query( $query ); } } /** * sets the language from content * * @since 1.2 */ public function wp() { // nothing to do if the language has already been set ( although normally the filter has been removed ) if ( ! $this->curlang && $curlang = $this->get_language_from_content() ) { parent::set_language( $curlang ); } } /** * if no language found by get_language_from_content, return the preferred one * * @since 0.9 * * @param object|bool $lang Language found in get_language_from_content * @return object Language */ public function pll_get_current_language( $lang ) { return ! $lang ? $this->get_preferred_language() : $lang; } } frontend/frontend-filters-links.php000066600000032255152100561500013505 0ustar00curlang = &$polylang->curlang; $this->cache = new PLL_Cache(); // Rewrites author and date links to filter them by language foreach ( array( 'feed_link', 'author_link', 'search_link', 'year_link', 'month_link', 'day_link' ) as $filter ) { add_filter( $filter, array( $this, 'archive_link' ), 20 ); } // Meta in the html head section add_action( 'wp_head', array( $this, 'wp_head' ) ); // Modifies the home url if ( ! defined( 'PLL_FILTER_HOME_URL' ) || PLL_FILTER_HOME_URL ) { add_filter( 'home_url', array( $this, 'home_url' ), 10, 2 ); } if ( $this->options['force_lang'] > 1 ) { // Rewrites next and previous post links when not automatically done by WordPress add_filter( 'get_pagenum_link', array( $this, 'archive_link' ), 20 ); // Rewrites ajax url add_filter( 'admin_url', array( $this, 'admin_url' ), 10, 2 ); } // Redirects to canonical url before WordPress redirect_canonical // but after Nextgen Gallery which hacks $_SERVER['REQUEST_URI'] !!! and restores it in 'template_redirect' with priority 1 add_action( 'template_redirect', array( $this, 'check_canonical_url' ), 4 ); } /** * Modifies the author and date links to add the language parameter ( as well as feed link ) * * @since 0.4 * * @param string $link * @return string modified link */ public function archive_link( $link ) { return $this->links_model->switch_language_in_link( $link, $this->curlang ); } /** * Modifies page links * and caches the result * * @since 1.7 * * @param string $link post link * @param int $post_id post ID * @return string modified post link */ public function _get_page_link( $link, $post_id ) { $sample = false !== strpos( $link, '%pagename%' ); // To avoid a conflict with plugin Custom Permalinks $cache_key = "post:{$post_id}:{$sample}"; if ( false === $_link = $this->cache->get( $cache_key ) ) { $_link = parent::_get_page_link( $link, $post_id ); $this->cache->set( $cache_key, $_link ); } return $_link; } /** * Modifies attachment links * and caches the result * * @since 1.6.2 * * @param string $link attachment link * @param int $post_id attachment link * @return string modified attachment link */ public function attachment_link( $link, $post_id ) { $cache_key = 'post:' . $post_id; if ( false === $_link = $this->cache->get( $cache_key ) ) { $_link = parent::attachment_link( $link, $post_id ); $this->cache->set( $cache_key, $_link ); } return $_link; } /** * Modifies custom posts links * and caches the result * * @since 1.6 * * @param string $link post link * @param object $post post object * @return string modified post link */ public function post_type_link( $link, $post ) { $sample = false !== strpos( $link, '%postname%' ); // To avoid a conflict with plugin Custom Permalinks $cache_key = "post:{$post->ID}:{$sample}"; if ( false === $_link = $this->cache->get( $cache_key ) ) { $_link = parent::post_type_link( $link, $post ); $this->cache->set( $cache_key, $_link ); } return $_link; } /** * Modifies filtered taxonomies ( post format like ) and translated taxonomies links * and caches the result * * @since 0.7 * * @param string $link * @param object $term term object * @param string $tax taxonomy name * @return string modified link */ public function term_link( $link, $term, $tax ) { $cache_key = 'term:' . $term->term_id; if ( false === $_link = $this->cache->get( $cache_key ) ) { if ( in_array( $tax, $this->model->get_filtered_taxonomies() ) ) { $_link = $this->links_model->switch_language_in_link( $link, $this->curlang ); /** This filter is documented in include/filters-links.php */ $_link = apply_filters( 'pll_term_link', $_link, $this->curlang, $term ); } else { $_link = parent::term_link( $link, $term, $tax ); } $this->cache->set( $cache_key, $_link ); } return $_link; } /** * Outputs references to translated pages ( if exists ) in the html head section * * @since 0.1 */ public function wp_head() { // Don't output anything on paged archives: see https://wordpress.org/support/topic/hreflang-on-page2 // Don't output anything on paged pages and paged posts if ( is_paged() || ( is_singular() && ( $page = get_query_var( 'page' ) ) && $page > 1 ) ) { return; } // Google recommends to include self link https://support.google.com/webmasters/answer/189077?hl=en foreach ( $this->model->get_languages_list() as $language ) { if ( $url = $this->links->get_translation_url( $language ) ) { $urls[ $language->get_locale( 'display' ) ] = $url; } } // Ouptputs the section only if there are translations ( $urls always contains self link ) if ( ! empty( $urls ) && count( $urls ) > 1 ) { // Prepare the list of languages to remove the country code foreach ( array_keys( $urls ) as $locale ) { $split = explode( '-', $locale ); $languages[ $locale ] = reset( $split ); } $count = array_count_values( $languages ); foreach ( $urls as $locale => $url ) { $lang = $count[ $languages[ $locale ] ] > 1 ? $locale : $languages[ $locale ]; // Output the country code only when necessary $hreflangs[ $lang ] = $url; } // Adds the site root url when the default language code is not hidden // See https://wordpress.org/support/topic/implementation-of-hreflangx-default if ( is_front_page() && ! $this->options['hide_default'] && $this->options['force_lang'] < 3 ) { $hreflangs['x-default'] = home_url( '/' ); } /** * Filters the list of rel hreflang attributes * * @since 2.1 * * @param array $hreflangs Array of urls with language codes as keys */ $hreflangs = apply_filters( 'pll_rel_hreflang_attributes', $hreflangs ); foreach ( $hreflangs as $lang => $url ) { printf( '' . "\n", esc_url( $url ), esc_attr( $lang ) ); } } } /** * Filters the home url to get the right language * * @since 0.4 * * @param string $url * @param string $path * @return string */ public function home_url( $url, $path ) { if ( ! ( did_action( 'template_redirect' ) || did_action( 'login_init' ) ) || rtrim( $url,'/' ) != $this->links_model->home ) { return $url; } static $white_list, $black_list; // Avoid evaluating this at each function call // We *want* to filter the home url in these cases if ( empty( $white_list ) ) { // On Windows get_theme_root() mixes / and \ // We want only \ for the comparison with debug_backtrace $theme_root = get_theme_root(); $theme_root = ( false === strpos( $theme_root, '\\' ) ) ? $theme_root : str_replace( '/', '\\', $theme_root ); /** * Filter the white list of the Polylang 'home_url' filter * The $args contains an array of arrays each of them having * a 'file' key and/or a 'function' key to decide which functions in * which files using home_url() calls must be filtered * * @since 1.1.2 * * @param array $args */ $white_list = apply_filters( 'pll_home_url_white_list', array( array( 'file' => $theme_root ), array( 'function' => 'wp_nav_menu' ), array( 'function' => 'login_footer' ), array( 'function' => 'get_custom_logo' ), ) ); } // We don't want to filter the home url in these cases if ( empty( $black_list ) ) { /** * Filter the black list of the Polylang 'home_url' filter * The $args contains an array of arrays each of them having * a 'file' key and/or a 'function' key to decide which functions in * which files using home_url() calls must be filtered * * @since 1.1.2 * * @param array $args */ $black_list = apply_filters( 'pll_home_url_black_list', array( array( 'file' => 'searchform.php' ), // Since WP 3.6 searchform.php is passed through get_search_form array( 'function' => 'get_search_form' ), ) ); } $traces = version_compare( PHP_VERSION, '5.2.5', '>=' ) ? debug_backtrace( false ) : debug_backtrace(); unset( $traces[0], $traces[1] ); // We don't need the last 2 calls: this function + call_user_func_array (or apply_filters on PHP7+) foreach ( $traces as $trace ) { // Black list first foreach ( $black_list as $v ) { if ( ( isset( $trace['file'], $v['file'] ) && false !== strpos( $trace['file'], $v['file'] ) ) || ( isset( $trace['function'], $v['function'] ) && $trace['function'] == $v['function'] ) ) { return $url; } } foreach ( $white_list as $v ) { if ( ( isset( $trace['function'], $v['function'] ) && $trace['function'] == $v['function'] ) || ( isset( $trace['file'], $v['file'] ) && false !== strpos( $trace['file'], $v['file'] ) && in_array( $trace['function'], array( 'home_url', 'get_home_url', 'bloginfo', 'get_bloginfo' ) ) ) ) { $ok = true; } } } return empty( $ok ) ? $url : ( empty( $path ) ? rtrim( $this->links->get_home_url( $this->curlang ), '/' ) : $this->links->get_home_url( $this->curlang ) ); } /** * Rewrites ajax url when using domains or subdomains * * @since 1.5 * * @param string $url admin url with path evaluated by WordPress * @param string $path admin path * @return string */ public function admin_url( $url, $path ) { return 'admin-ajax.php' === $path ? $this->links_model->switch_language_in_link( $url, $this->curlang ) : $url; } /** * If the language code is not in agreement with the language of the content * redirects incoming links to the proper URL to avoid duplicate content * * @since 0.9.6 * * @param string $requested_url optional * @param bool $do_redirect optional, whether to perform the redirection or not * @return string if redirect is not performed */ public function check_canonical_url( $requested_url = '', $do_redirect = true ) { global $wp_query, $post, $is_IIS; // Don't redirect in same cases as WP if ( is_trackback() || is_search() || is_admin() || is_preview() || is_robots() || ( $is_IIS && ! iis7_supports_permalinks() ) ) { return; } // Don't redirect mysite.com/?attachment_id= to mysite.com/en/?attachment_id= if ( 1 == $this->options['force_lang'] && is_attachment() && isset( $_GET['attachment_id'] ) ) { return; } // If the default language code is not hidden and the static front page url contains the page name // the customizer lands here and the code below would redirect to the list of posts if ( is_customize_preview() ) { return; } if ( empty( $requested_url ) ) { $requested_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; } if ( is_single() || is_page() ) { if ( isset( $post->ID ) && $this->model->is_translated_post_type( $post->post_type ) ) { $language = $this->model->post->get_language( (int) $post->ID ); } } elseif ( is_category() || is_tag() || is_tax() ) { $obj = $wp_query->get_queried_object(); if ( $this->model->is_translated_taxonomy( $obj->taxonomy ) ) { $language = $this->model->term->get_language( (int) $obj->term_id ); } } elseif ( $wp_query->is_posts_page ) { $obj = $wp_query->get_queried_object(); $language = $this->model->post->get_language( (int) $obj->ID ); } elseif ( is_404() && ! empty( $wp_query->query['page_id'] ) && $id = get_query_var( 'page_id' ) ) { // Special case for page shortlinks when using subdomains or multiple domains // Needed because redirect_canonical doesn't accept to change the domain name $language = $this->model->post->get_language( (int) $id ); } if ( empty( $language ) ) { $language = $this->curlang; $redirect_url = $requested_url; } else { // First get the canonical url evaluated by WP // Workaround a WP bug wich removes the port for some urls and get it back at second call to redirect_canonical $_redirect_url = ( ! $_redirect_url = redirect_canonical( $requested_url, false ) ) ? $requested_url : $_redirect_url; $redirect_url = ( ! $redirect_url = redirect_canonical( $_redirect_url, false ) ) ? $_redirect_url : $redirect_url; // Then get the right language code in url $redirect_url = $this->options['force_lang'] ? $this->links_model->switch_language_in_link( $redirect_url, $language ) : $this->links_model->remove_language_from_link( $redirect_url ); // Works only for default permalinks } /** * Filters the canonical url detected by Polylang * * @since 1.6 * * @param bool|string $redirect_url false or the url to redirect to * @param object $language the language detected */ $redirect_url = apply_filters( 'pll_check_canonical_url', $redirect_url, $language ); // The language is not correctly set so let's redirect to the correct url for this object if ( $do_redirect && $redirect_url && $requested_url != $redirect_url ) { wp_redirect( $redirect_url, 301 ); exit; } return $redirect_url; } } frontend/frontend-static-pages.php000066600000021576152100561500013307 0ustar00links_model = &$polylang->links_model; $this->links = &$polylang->links; add_action( 'pll_language_defined', array( $this, 'pll_language_defined' ) ); add_action( 'pll_home_requested', array( $this, 'pll_home_requested' ) ); // Manages the redirection of the homepage add_filter( 'redirect_canonical', array( $this, 'redirect_canonical' ), 10, 2 ); add_filter( 'pll_pre_translation_url', array( $this, 'pll_pre_translation_url' ), 10, 3 ); add_filter( 'pll_check_canonical_url', array( $this, 'pll_check_canonical_url' ) ); add_filter( 'pll_set_language_from_query', array( $this, 'page_on_front_query' ), 10, 2 ); add_filter( 'pll_set_language_from_query', array( $this, 'page_for_posts_query' ), 10, 2 ); } /** * Init the filters * * @since 1.8 */ public function pll_language_defined() { // Translates our page on front and page for posts properties $this->init(); // Translates page for posts and page on front add_filter( 'option_page_on_front', array( $this, 'translate_page_on_front' ) ); add_filter( 'option_page_for_posts', array( $this, 'translate_page_for_posts' ) ); // Support theme customizer if ( isset( $_POST['wp_customize'], $_POST['customized'] ) ) { add_filter( 'pre_option_page_on_front', 'pll_get_post', 20 ); add_filter( 'pre_option_page_for_post', 'pll_get_post', 20 ); } } /** * Translates the page_id query var when the site root page is requested * * @since 1.8 */ public function pll_home_requested() { set_query_var( 'page_id', $this->curlang->page_on_front ); } /** * Translates page on front * * @since 1.8 * * @param int $v page on front page id * @return int */ public function translate_page_on_front( $v ) { // returns the current page if there is no translation to avoid ugly notices return isset( $this->curlang->page_on_front ) ? $this->curlang->page_on_front : $v; } /** * Manages canonical redirection of the homepage when using page on front * * @since 0.1 * * @param string $redirect_url * @param string $requested_url * @return bool|string modified url, false if redirection is canceled */ public function redirect_canonical( $redirect_url, $requested_url ) { global $wp_query; if ( is_page() && ! is_feed() && isset( $wp_query->queried_object ) && $wp_query->queried_object->ID == $this->curlang->page_on_front ) { $url = is_paged() ? $this->links_model->add_paged_to_link( $this->links->get_home_url(), $wp_query->query_vars['page'] ) : $this->links->get_home_url(); // Don't forget additional query vars $query = parse_url( $redirect_url, PHP_URL_QUERY ); if ( ! empty( $query ) ) { parse_str( $query, $query_vars ); $query_vars = rawurlencode_deep( $query_vars ); // WP encodes query vars values $url = add_query_arg( $query_vars, $url ); } return $url; } return $redirect_url; } /** * Translates the url of the page on front and page for posts * * @since 1.8 * * @param string $url not used * @param object $language language in which we want the translation * @param int $queried_object_id id of the queried object * @return string */ public function pll_pre_translation_url( $url, $language, $queried_object_id ) { if ( ! empty( $queried_object_id ) ) { // Page for posts if ( $GLOBALS['wp_query']->is_posts_page && ( $id = $this->model->post->get( $queried_object_id, $language ) ) ) { $url = get_permalink( $id ); } // Page on front elseif ( is_front_page() && $language->page_on_front && ( $language->page_on_front == $this->model->post->get( $queried_object_id, $language ) ) ) { $url = $language->home_url; } } return $url; } /** * Handles canonical redirection if we are on a static front page * * @since 1.8 * * @param string $redirect_url * @return bool|string */ public function pll_check_canonical_url( $redirect_url ) { if ( ! empty( $this->curlang->page_on_front ) && is_page( $this->curlang->page_on_front ) ) { // Redirect www.mysite.fr to mysite.fr if ( 3 === $this->options['force_lang'] ) { foreach ( $this->options['domains'] as $lang => $domain ) { $host = parse_url( $domain, PHP_URL_HOST ); if ( 'www.' . $_SERVER['HTTP_HOST'] === $host || 'www.' . $host === $_SERVER['HTTP_HOST'] ) { $language = $this->model->get_language( $lang ); return $language->home_url; } } } // Prevents canonical redirection made by WP from secondary language to main language if ( $this->options['redirect_lang'] ) { return false; } } return $redirect_url; } /** * Setups query vars when requesting a static front page * * @since 1.8 * * @param bool|object $lang * @param object $query * @return bool|object */ public function page_on_front_query( $lang, $query ) { if ( ! empty( $lang ) || ! $this->page_on_front ) { return $lang; } // The home page is requested if ( did_action( 'home_requested' ) ) { $query->set( 'page_id', $lang->page_on_front ); } // Redirect the language page to the homepage when using a static front page elseif ( ( $this->options['redirect_lang'] || $this->options['hide_default'] ) && ( count( $query->query ) == 1 || ( ( is_preview() || is_paged() || ! empty( $query->query['page'] ) ) && count( $query->query ) == 2 ) || ( ( is_preview() && ( is_paged() || ! empty( $query->query['page'] ) ) ) && count( $query->query ) == 3 ) ) && is_tax( 'language' ) ) { $lang = $this->model->get_language( get_query_var( 'lang' ) ); $query->set( 'page_id', $lang->page_on_front ); $query->is_singular = $query->is_page = true; $query->is_archive = $query->is_tax = false; unset( $query->query_vars['lang'], $query->queried_object ); // Reset queried object } // Fix paged static front page in plain permalinks when Settings > Reading doesn't match the default language elseif ( ! $this->links_model->using_permalinks && count( $query->query ) === 1 && ! empty( $query->query['page'] ) ) { $lang = $this->model->get_language( $this->options['default_lang'] ); $query->set( 'page_id', $lang->page_on_front ); $query->is_singular = $query->is_page = true; $query->is_archive = $query->is_tax = false; unset( $query->query_vars['lang'], $query->queried_object ); // Reset queried object } // Set the language when requesting a static front page else { $page_id = $this->get_page_id( $query ); $languages = $this->model->get_languages_list(); $pages = wp_list_pluck( $languages, 'page_on_front' ); if ( ! empty( $page_id ) && false !== $n = array_search( $page_id, $pages ) ) { $lang = $languages[ $n ]; } } // Fix for page_on_front if ( ( $this->options['force_lang'] < 2 || ! $this->options['redirect_lang'] ) && $this->links_model->using_permalinks && ! empty( $lang ) && isset( $query->query['paged'] ) ) { $query->set( 'page', $query->query['paged'] ); unset( $query->query['paged'] ); } elseif ( ! $this->links_model->using_permalinks && ! empty( $query->query['page'] ) ) { $query->is_paged = true; } return $lang; } /** * Setups query vars when requesting a posts page * * @since 1.8 * * @param bool|object $lang * @param object $query * @return bool|object */ public function page_for_posts_query( $lang, $query ) { if ( empty( $lang ) && $this->page_for_posts ) { $page_id = $this->get_page_id( $query ); if ( ! empty( $page_id ) && in_array( $page_id, $pages = $this->model->get_languages_list( array( 'fields' => 'page_for_posts' ) ) ) ) { // Fill the cache with all pages for posts to avoid one query per page later // The posts_per_page limit is a trick to avoid splitting the query get_posts( array( 'posts_per_page' => 999, 'post_type' => 'page', 'post__in' => $pages, 'lang' => '' ) ); $lang = $this->model->post->get_language( $page_id ); $query->is_singular = $query->is_page = false; $query->is_home = $query->is_posts_page = true; } } return $lang; } /** * Get queried page_id ( if exists ) * If permalinks are used, WordPress does set and use $query->queried_object_id and sets $query->query_vars['page_id'] to 0 * and does set and use $query->query_vars['page_id'] if permalinks are not used :( * * @since 1.5 * * @param object $query instance of WP_Query * @return int page_id */ protected function get_page_id( $query ) { if ( ! empty( $query->query_vars['pagename'] ) && isset( $query->queried_object_id ) ) { return $query->queried_object_id; } if ( isset( $query->query_vars['page_id'] ) ) { return $query->query_vars['page_id']; } return 0; // No page queried } } frontend/frontend.php000066600000014267152100561500010724 0ustar00 inherited, reference to Polylang options array * model => inherited, reference to PLL_Model object * links_model => inherited, reference to PLL_Links_Model object * links => reference to PLL_Links object * static_pages => reference to PLL_Frontend_Static_Pages object * filters_links => inherited, reference to PLL_Frontend_Filters_Links object * choose_lang => reference to PLL_Choose_lang object * curlang => current language * filters => reference to PLL_Filters object * filters_search => reference to PLL_Frontend_Filters_Search object * nav_menu => reference to PLL_Frontend_Nav_Menu object * auto_translate => optional, reference to PLL_Auto_Translate object * * @since 1.2 */ class PLL_Frontend extends PLL_Base { public $curlang; public $links, $choose_lang, $filters, $filters_search, $nav_menu, $auto_translate; /** * constructor * * @since 1.2 * * @param object $links_model */ public function __construct( &$links_model ) { parent::__construct( $links_model ); add_action( 'pll_language_defined', array( $this, 'pll_language_defined' ), 1 ); // avoids the language being the queried object when querying multiple taxonomies add_action( 'parse_tax_query', array( $this, 'parse_tax_query' ), 1 ); // filters posts by language add_action( 'parse_query', array( $this, 'parse_query' ), 6 ); // not before 'check_canonical_url' if ( ! defined( 'PLL_AUTO_TRANSLATE' ) || PLL_AUTO_TRANSLATE ) { add_action( 'template_redirect', array( $this, 'auto_translate' ), 7 ); } } /** * setups the language chooser based on options * * @since 1.2 */ public function init() { $this->links = new PLL_Frontend_Links( $this ); // Static front page and page for posts if ( 'page' === get_option( 'show_on_front' ) ) { $this->static_pages = new PLL_Frontend_Static_Pages( $this ); } // setup the language chooser $c = array( 'Content', 'Url', 'Url', 'Domain' ); $class = 'PLL_Choose_Lang_' . $c[ $this->options['force_lang'] ]; $this->choose_lang = new $class( $this ); $this->choose_lang->init(); // need to load nav menu class early to correctly define the locations in the customizer when the language is set from the content $this->nav_menu = new PLL_Frontend_Nav_Menu( $this ); } /** * setups filters and nav menus once the language has been defined * * @since 1.2 */ public function pll_language_defined() { // filters $this->filters_links = new PLL_Frontend_Filters_Links( $this ); $this->filters = new PLL_Frontend_Filters( $this ); $this->filters_search = new PLL_Frontend_Filters_Search( $this ); } /** * when querying multiple taxonomies, makes sure that the language is not the queried object * * @since 1.8 * * @param object $query WP_Query object */ public function parse_tax_query( $query ) { $pll_query = new PLL_Query( $query, $this->model ); $queried_taxonomies = $pll_query->get_queried_taxonomies(); if ( ! empty( $queried_taxonomies ) && 'language' == reset( $queried_taxonomies ) ) { $query->tax_query->queried_terms['language'] = array_shift( $query->tax_query->queried_terms ); } } /** * modifies some query vars to "hide" that the language is a taxonomy and avoid conflicts * * @since 1.2 * * @param object $query WP_Query object */ public function parse_query( $query ) { $qv = $query->query_vars; $pll_query = new PLL_Query( $query, $this->model ); $taxonomies = $pll_query->get_queried_taxonomies(); // Allow filtering recent posts and secondary queries by the current language if ( ! empty( $this->curlang ) ) { $pll_query->filter_query( $this->curlang ); } // modifies query vars when the language is queried if ( ! empty( $qv['lang'] ) || ( ! empty( $taxonomies ) && array( 'language' ) == array_values( $taxonomies ) ) ) { // do we query a custom taxonomy? $taxonomies = array_diff( $taxonomies , array( 'language', 'category', 'post_tag' ) ); // remove pages query when the language is set unless we do a search // take care not to break the single page, attachment and taxonomies queries! if ( empty( $qv['post_type'] ) && ! $query->is_search && ! $query->is_page && ! $query->is_attachment && empty( $taxonomies ) ) { $query->set( 'post_type', 'post' ); } // unset the is_archive flag for language pages to prevent loading the archive template // keep archive flag for comment feed otherwise the language filter does not work if ( empty( $taxonomies ) && ! $query->is_comment_feed && ! $query->is_post_type_archive && ! $query->is_date && ! $query->is_author && ! $query->is_category && ! $query->is_tag ) { $query->is_archive = false; } // unset the is_tax flag except if another custom tax is queried if ( empty( $taxonomies ) && ($query->is_category || $query->is_tag || $query->is_author || $query->is_post_type_archive || $query->is_date || $query->is_search || $query->is_feed ) ) { $query->is_tax = false; unset( $query->queried_object ); // FIXME useless? } } } /** * auto translate posts and terms ids * * @since 1.2 */ public function auto_translate() { $this->auto_translate = new PLL_Frontend_Auto_Translate( $this ); } /** * resets some variables when switching blog * overrides parent method * * @since 1.5.1 * * @param int $new_blog * @param int $old_blog */ public function switch_blog( $new_blog, $old_blog ) { // need to check that some languages are defined when user is logged in, has several blogs, some without any languages if ( parent::switch_blog( $new_blog, $old_blog ) && did_action( 'pll_language_defined' ) && $this->model->get_languages_list() ) { static $restore_curlang; if ( empty( $restore_curlang ) ) { $restore_curlang = $this->curlang->slug; // to always remember the current language through blogs } $lang = $this->model->get_language( $restore_curlang ); $this->curlang = $lang ? $lang : $this->model->get_language( $this->options['default_lang'] ); if ( isset( $this->static_pages ) ) { $this->static_pages->init(); } $this->load_strings_translations(); } } } frontend/frontend-auto-translate.php000066600000016532152100561500013662 0ustar00model = &$polylang->model; $this->curlang = &$polylang->curlang; add_action( 'pre_get_posts', array( $this, 'pre_get_posts' ) ); // after main Polylang filter add_filter( 'get_terms_args', array( $this, 'get_terms_args' ), 10, 2 ); } /** * helper function to get the translated post in the current language * * since 1.8 * * @param int $post_id * @return int */ protected function get_post( $post_id ) { return $this->model->post->get( $post_id, $this->curlang ); } /** * helper function to get the translated term in the current language * * since 1.8 * * @param int $term_id * @return int */ protected function get_term( $term_id ) { return $this->model->term->get( $term_id, $this->curlang ); } /** * filters posts query to automatically translate included ids * * @since 1.1 * * @param object $query WP_Query object */ public function pre_get_posts( $query ) { global $wpdb; $qv = &$query->query_vars; if ( $query->is_main_query() || isset( $qv['lang'] ) || ( ! empty( $qv['post_type'] ) && ! $this->model->is_translated_post_type( $qv['post_type'] ) ) ) { return; } // /!\ always keep untranslated as is // term ids separated by a comma $arr = array(); if ( ! empty( $qv['cat'] ) ) { foreach ( explode( ',', $qv['cat'] ) as $cat ) { $tr = $this->get_term( abs( $cat ) ); $arr[] = $cat < 0 ? -$tr : $tr; } $qv['cat'] = implode( ',', $arr ); } // category_name $arr = array(); if ( ! empty( $qv['category_name'] ) ) { foreach ( explode( ',', $qv['category_name'] ) as $slug ) { $arr[] = ( ( $cat = wpcom_vip_get_category_by_slug( $slug ) ) && ( $tr_id = $this->get_term( $cat->term_id ) ) && ! is_wp_error( $tr = get_category( $tr_id ) ) ) ? $tr->slug : $slug; } $qv['category_name'] = implode( ',', $arr ); } // array of term ids foreach ( array( 'category__and', 'category__in', 'category__not_in', 'tag__and', 'tag__in', 'tag__not_in' ) as $key ) { $arr = array(); if ( ! empty( $qv[ $key ] ) ) { foreach ( $qv[ $key ] as $cat ) { $arr[] = ( $tr = $this->get_term( $cat ) ) ? $tr : $cat; } $qv[ $key ] = $arr; } } // tag $arr = array(); if ( ! empty( $qv['tag'] ) ) { $sep = strpos( $qv['tag'], ',' ) !== false ? ',' : '+'; // two possible separators for tag slugs foreach ( explode( $sep, $qv['tag'] ) as $slug ) { $arr[] = ( ( $tag = wpcom_vip_get_term_by( 'slug', $slug, 'post_tag' ) ) && ( $tr_id = $this->get_term( $tag->term_id ) ) && ! is_wp_error( $tr = get_tag( $tr_id ) ) ) ? $tr->slug : $slug; } $qv['tag'] = implode( $sep, $arr ); } // tag_id can only take one id if ( ! empty( $qv['tag_id'] ) && $tr_id = $this->get_term( $qv['tag_id'] ) ) { $qv['tag_id'] = $tr_id; } // array of tag slugs foreach ( array( 'tag_slug__and', 'tag_slug__in' ) as $key ) { $arr = array(); if ( ! empty( $qv[ $key ] ) ) { foreach ( $qv[ $key ] as $slug ) { $arr[] = ( ( $tag = wpcom_vip_get_term_by( 'slug', $slug, 'post_tag' ) ) && ( $tr_id = $this->get_term( $tag->term_id ) ) && ! is_wp_error( $tr = get_tag( $tr_id ) ) ) ? $tr->slug : $slug; } $qv[ $key ] = $arr; } } // custom taxonomies // according to codex, this type of query is deprecated as of WP 3.1 but it does not appear in WP 3.5 source code foreach ( array_intersect( $this->model->get_translated_taxonomies(), get_taxonomies( array( '_builtin' => false ) ) ) as $taxonomy ) { $tax = get_taxonomy( $taxonomy ); $arr = array(); if ( ! empty( $qv[ $tax->query_var ] ) ) { $sep = strpos( $qv[ $tax->query_var ], ',' ) !== false ? ',' : '+'; // two possible separators foreach ( explode( $sep, $qv[ $tax->query_var ] ) as $slug ) { $arr[] = ( ( $tag = wpcom_vip_get_term_by( 'slug', $slug, $taxonomy ) ) && ( $tr_id = $this->get_term( $tag->term_id ) ) && ! is_wp_error( $tr = get_term( $tr_id, $taxonomy ) ) ) ? $tr->slug : $slug; } $qv[ $tax->query_var ] = implode( $sep, $arr ); } } // tax_query since WP 3.1 if ( ! empty( $qv['tax_query'] ) && is_array( $qv['tax_query'] ) ) { $qv['tax_query'] = $this->translate_tax_query_recursive( $qv['tax_query'] ); } // p, page_id, post_parent can only take one id foreach ( array( 'p', 'page_id', 'post_parent' ) as $key ) { if ( ! empty( $qv[ $key ] ) && $tr_id = $this->get_post( $qv[ $key ] ) ) { $qv[ $key ] = $tr_id; } } // name, pagename can only take one slug foreach ( array( 'name', 'pagename' ) as $key ) { if ( ! empty( $qv[ $key ] ) ) { // no function to get post by name except get_posts itself $post_type = empty( $qv['post_type'] ) ? 'post' : $qv['post_type']; $id = $wpdb->get_var( $wpdb->prepare( "SELECT ID from $wpdb->posts WHERE post_type=%s AND post_name=%s", $post_type, $qv[ $key ] ) ); $qv[ $key ] = ( $id && ( $tr_id = $this->get_post( $id ) ) && $tr = get_post( $tr_id ) ) ? $tr->post_name : $qv[ $key ]; } } // array of post ids // post_parent__in & post_parent__not_in since WP 3.6 foreach ( array( 'post__in', 'post__not_in', 'post_parent__in', 'post_parent__not_in' ) as $key ) { $arr = array(); if ( ! empty( $qv[ $key ] ) ) { // post__in used by the 2 functions below // useless to filter them as output is already in the right language and would result in performance loss foreach ( debug_backtrace() as $trace ) { if ( in_array( $trace['function'], array( 'wp_nav_menu', 'gallery_shortcode' ) ) ) { return; } } foreach ( $qv[ $key ] as $p ) { $arr[] = ( $tr = $this->get_post( $p ) ) ? $tr : $p; } $qv[ $key ] = $arr; } } } /** * filters terms query to automatically translate included ids * * @since 1.1.1 * * @param array $args * @param array $taxonomies * @return array modified $args */ public function get_terms_args( $args, $taxonomies ) { if ( ! empty( $args['include'] ) && $this->model->is_translated_taxonomy( $taxonomies ) ) { foreach ( wp_parse_id_list( $args['include'] ) as $id ) { $arr[] = ( $tr = $this->get_term( $id ) ) ? $tr : $id; } $args['include'] = $arr; } return $args; } /** * translates tax queries * compatible with nested tax queries introduced in WP 4.1 * * @since 1.7 * * @param array $tax_queries * @return array translated tax queries */ protected function translate_tax_query_recursive( $tax_queries ) { foreach ( $tax_queries as $key => $q ) { if ( isset( $q['taxonomy'], $q['terms'] ) && $this->model->is_translated_taxonomy( $q['taxonomy'] ) ) { $arr = array(); $field = isset( $q['field'] ) && in_array( $q['field'], array( 'slug', 'name' ) ) ? $q['field'] : 'term_id'; foreach ( (array) $q['terms'] as $t ) { $arr[] = ( ( $tag = wpcom_vip_get_term_by( $field, $t, $q['taxonomy'] ) ) && ( $tr_id = $this->get_term( $tag->term_id ) ) && ! is_wp_error( $tr = get_term( $tr_id, $q['taxonomy'] ) ) ) ? $tr->$field : $t; } $tax_queries[ $key ]['terms'] = $arr; } // nested queries elseif ( is_array( $q ) ) { $tax_queries[ $key ] = $this->translate_tax_query_recursive( $q ); } } return $tax_queries; } } frontend/frontend-filters-search.php000066600000010274152100561500013627 0ustar00links_model = &$polylang->links_model; $this->curlang = &$polylang->curlang; // adds the language information in the search form // low priority in case the search form is created using the same filter as described in http://codex.wordpress.org/Function_Reference/get_search_form add_filter( 'get_search_form', array( $this, 'get_search_form' ), 99 ); // adds the language information in admin bar search form add_action( 'add_admin_bar_menus', array( $this, 'add_admin_bar_menus' ) ); // adds javascript at the end of the document // was used for WP < 3.6. kept just in case if ( defined( 'PLL_SEARCH_FORM_JS' ) && PLL_SEARCH_FORM_JS ) { add_action( 'wp_footer', array( $this, 'wp_print_footer_scripts' ) ); } } /** * adds the language information in the search form * does not work if searchform.php ( prior to WP 3.6 ) is used or if the search form is hardcoded in another template file * * @since 0.1 * * @param string $form search form * @return string modified search form */ public function get_search_form( $form ) { if ( $form ) { if ( $this->links_model->using_permalinks ) { // take care to modify only the url in the
    tag preg_match( '##', $form, $matches ); $old = reset( $matches ); $new = preg_replace( '#' . esc_url( $this->links_model->home ) . '\/?#', esc_url( $this->curlang->search_url ), $old ); $form = str_replace( $old, $new, $form ); } else { $form = str_replace( '', '', $form ); } } return $form; } /** * adds the language information in admin bar search form * * @since 1.2 */ function add_admin_bar_menus() { remove_action( 'admin_bar_menu', 'wp_admin_bar_search_menu', 4 ); add_action( 'admin_bar_menu', array( $this, 'admin_bar_search_menu' ), 4 ); } /** * rewrites the admin bar search form to pass our get_search form filter. See #21342 * code base is WP 4.3.1 * * @since 0.9 * * @param object $wp_admin_bar */ public function admin_bar_search_menu( $wp_admin_bar ) { $form = '
    '; $form .= ''; $form .= ''; $form .= ''; $form .= '
    '; $wp_admin_bar->add_menu( array( 'parent' => 'top-secondary', 'id' => 'search', 'title' => $this->get_search_form( $form ), // pass the get_search_form filter 'meta' => array( 'class' => 'admin-bar-search', 'tabindex' => -1 ), ) ); } /** * allows modifying the search form if it does not pass get_search_form * * @since 0.1 */ public function wp_print_footer_scripts() { // don't use directly e[0] just in case there is somewhere else an element named 's' // check before if the hidden input has not already been introduced by get_search_form ( FIXME: is there a way to improve this ) ? // thanks to AndyDeGroo for improving the code for compatility with old browsers // http://wordpress.org/support/topic/development-of-polylang-version-08?replies=6#post-2645559 $lang = esc_js( $this->curlang->slug ); $js = "//"; echo ''; } } frontend/choose-lang.php000066600000025306152100561500011300 0ustar00links_model = &$polylang->links_model; $this->model = &$polylang->model; $this->options = &$polylang->options; $this->curlang = &$polylang->curlang; } /** * sets the language for ajax requests * and setup actions * any child class must call this method if it overrides it * * @since 1.8 */ public function init() { if ( PLL_AJAX_ON_FRONT || false === stripos( $_SERVER['SCRIPT_FILENAME'], 'index.php' ) ) { $this->set_language( empty( $_REQUEST['lang'] ) ? $this->get_preferred_language() : $this->model->get_language( $_REQUEST['lang'] ) ); } add_action( 'pre_comment_on_post', array( $this, 'pre_comment_on_post' ) ); // sets the language of comment add_action( 'parse_query', array( $this, 'parse_main_query' ), 2 ); // sets the language in special cases add_action( 'wp', array( $this, 'maybe_setcookie' ), 7 ); } /** * writes language cookie * loads user defined translations * fires the action 'pll_language_defined' * * @since 1.2 * * @param object $curlang current language */ protected function set_language( $curlang ) { // don't set the language a second time if ( isset( $this->curlang ) ) { return; } // final check in case $curlang has an unexpected value // see https://wordpress.org/support/topic/detect-browser-language-sometimes-setting-null-language $this->curlang = ( $curlang instanceof PLL_Language ) ? $curlang : $this->model->get_language( $this->options['default_lang'] ); $GLOBALS['text_direction'] = $this->curlang->is_rtl ? 'rtl' : 'ltr'; /** * Fires when the current language is defined * * @since 0.9.5 * * @param string $slug current language code * @param object $curlang current language object */ do_action( 'pll_language_defined', $this->curlang->slug, $this->curlang ); } /** * set a cookie to remember the language. * possibility to set PLL_COOKIE to false will disable cookie although it will break some functionalities * * @since 1.5 */ public function maybe_setcookie() { // check headers have not been sent to avoid ugly error // cookie domain must be set to false for localhost ( default value for COOKIE_DOMAIN ) thanks to Stephen Harris. if ( ! headers_sent() && PLL_COOKIE !== false && ! empty( $this->curlang ) && ( ! isset( $_COOKIE[ PLL_COOKIE ] ) || $_COOKIE[ PLL_COOKIE ] != $this->curlang->slug ) && ! is_404() ) { /** * Filter the Polylang cookie duration * * @since 1.8 * * @param int $duration cookie duration in seconds */ $expiration = apply_filters( 'pll_cookie_expiration', YEAR_IN_SECONDS ); setcookie( PLL_COOKIE, $this->curlang->slug, time() + $expiration, COOKIEPATH, 2 == $this->options['force_lang'] ? parse_url( $this->links_model->home, PHP_URL_HOST ) : COOKIE_DOMAIN, is_ssl() ); } } /** * get the preferred language according to the browser preferences * code adapted from http://www.thefutureoftheweb.com/blog/use-accept-language-header * * @since 1.8 * * @return string|bool the preferred language slug or false */ public function get_preferred_browser_language() { $accept_langs = array(); if ( isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) ) { // break up string into pieces ( languages and q factors ) preg_match_all( '/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*( 1|0\.[0-9]+))?/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse ); $k = $lang_parse[1]; $v = $lang_parse[4]; if ( $n = count( $k ) ) { // set default to 1 for any without q factor foreach ( $v as $key => $val ) { if ( '' === $val ) { $v[ $key ] = 1; } } // bubble sort ( need a stable sort for Android, so can't use a PHP sort function ) if ( $n > 1 ) { for ( $i = 2; $i <= $n; $i++ ) { for ( $j = 0; $j <= $n - 2; $j++ ) { if ( $v[ $j ] < $v[ $j + 1 ] ) { // swap values $temp = $v[ $j ]; $v[ $j ] = $v[ $j + 1 ]; $v[ $j + 1 ] = $temp; // Swap keys $temp = $k[ $j ]; $k[ $j ] = $k[ $j + 1 ]; $k[ $j + 1 ] = $temp; } } } } $accept_langs = array_combine( $k,$v ); } } $languages = $this->model->get_languages_list( array( 'hide_empty' => true ) ); // hides languages with no post /** * Filter the list of languages to use to match the browser preferences * * @since 1.9.3 * * @param array $languages array of PLL_Language objects */ $languages = apply_filters( 'pll_languages_for_browser_preferences', $languages ); // looks through sorted list and use first one that matches our language list foreach ( array_keys( $accept_langs ) as $accept_lang ) { // first loop to match the exact locale foreach ( $languages as $language ) { if ( 0 === strcasecmp( $accept_lang, $language->get_locale( 'display' ) ) ) { return $language->slug; } } // second loop to match the language set foreach ( $languages as $language ) { if ( 0 === stripos( $accept_lang, $language->slug ) || 0 === stripos( $language->get_locale( 'display' ), $accept_lang ) ) { return $language->slug; } } } return false; } /** * returns the language according to browser preference or the default language * * @since 0.1 * * @return object browser preferred language or default language */ public function get_preferred_language() { // check first if the user was already browsing this site if ( isset( $_COOKIE[ PLL_COOKIE ] ) ) { return $this->model->get_language( $_COOKIE[ PLL_COOKIE ] ); } /** * Filter the visitor's preferred language (normally set first by cookie * if this is not the first visit, then by the browser preferences). * If no preferred language has been found or set by this filter, * Polylang fallbacks to the default language * * @since 1.0 * * @param string $language preferred language code */ $slug = apply_filters( 'pll_preferred_language', $this->options['browser'] ? $this->get_preferred_browser_language() : false ); // return default if there is no preferences in the browser or preferences does not match our languages or it is requested not to use the browser preference return ( $lang = $this->model->get_language( $slug ) ) ? $lang : $this->model->get_language( $this->options['default_lang'] ); } /** * sets the language when home page is resquested * * @since 1.2 */ protected function home_language() { // test referer in case PLL_COOKIE is set to false // thanks to Ov3rfly http://wordpress.org/support/topic/enhance-feature-when-front-page-is-visited-set-language-according-to-browser $language = $this->options['hide_default'] && ( ( isset( $_SERVER['HTTP_REFERER'] ) && in_array( parse_url( $_SERVER['HTTP_REFERER'], PHP_URL_HOST ), $this->links_model->get_hosts() ) ) || ! $this->options['browser'] ) ? $this->model->get_language( $this->options['default_lang'] ) : $this->get_preferred_language(); // sets the language according to browser preference or default language $this->set_language( $language ); } /** * to call when the home page has been requested * make sure to call this after 'setup_theme' has been fired as we need $wp_query * performs a redirection to the home page in the current language if needed * * @since 0.9 */ public function home_requested() { // we are already on the right page if ( $this->options['default_lang'] == $this->curlang->slug && $this->options['hide_default'] ) { $this->set_curlang_in_query( $GLOBALS['wp_query'] ); /** * Fires when the site root page is requested * * @since 1.8 */ do_action( 'pll_home_requested' ); } // redirect to the home page in the right language // test to avoid crash if get_home_url returns something wrong // FIXME why this happens? http://wordpress.org/support/topic/polylang-crashes-1 // don't redirect if $_POST is not empty as it could break other plugins // don't forget the query string which may be added by plugins elseif ( is_string( $redirect = $this->curlang->home_url ) && empty( $_POST ) ) { $redirect = empty( $_SERVER['QUERY_STRING'] ) ? $redirect : $redirect . ( $this->links_model->using_permalinks ? '?' : '&' ) . $_SERVER['QUERY_STRING']; /** * When a visitor reaches the site home, Polylang redirects to the home page in the correct language. * This filter allows plugins to modify the redirected url or prevent this redirection * * @since 1.1.1 * * @param string $redirect the url the visitor will be redirected to */ if ( $redirect = apply_filters( 'pll_redirect_home', $redirect ) ) { wp_redirect( $redirect ); exit; } } } /** * set the language when posting a comment * * @since 0.8.4 * * @param int $post_id the post beeing commented */ public function pre_comment_on_post( $post_id ) { $this->set_language( $this->model->post->get_language( $post_id ) ); } /** * modifies some main query vars for home page and page for posts * to enable one home page ( and one page for posts ) per language * * @since 1.2 * * @param object $query instance of WP_Query */ public function parse_main_query( $query ) { if ( ! $query->is_main_query() ) { return; } /** * This filter allows to set the language based on information contained in the main query * * @since 1.8 * * @param bool|object $lang false or language object * @param object $query WP_Query object */ if ( $lang = apply_filters( 'pll_set_language_from_query', false, $query ) ) { $this->set_language( $lang ); $this->set_curlang_in_query( $query ); } // sets is_home on translated home page when it displays posts // is_home must be true on page 2, 3... too // as well as when searching an empty string: http://wordpress.org/support/topic/plugin-polylang-polylang-breaks-search-in-spun-theme if ( 'posts' == get_option( 'show_on_front' ) && ( count( $query->query ) == 1 || ( is_paged() && count( $query->query ) == 2 ) || ( isset( $query->query['s'] ) && ! $query->query['s'] ) ) && $lang = get_query_var( 'lang' ) ) { $lang = $this->model->get_language( $lang ); $this->set_language( $lang ); // sets the language now otherwise it will be too late to filter sticky posts ! $query->is_home = true; $query->is_archive = $query->is_tax = false; } } /** * Sets the current language in the query * * @since 2.2 * * @param object $query */ protected function set_curlang_in_query( &$query ) { $pll_query = new PLL_Query( $query, $this->model ); $pll_query->set_language( $this->curlang ); } } frontend/frontend-nav-menu.php000066600000023052152100561500012440 0ustar00curlang = &$polylang->curlang; // Split the language switcher menu item in several language menu items add_filter( 'wp_get_nav_menu_items', array( $this, 'wp_get_nav_menu_items' ), 20 ); // after the customizer menus add_filter( 'wp_nav_menu_objects', array( $this, 'wp_nav_menu_objects' ) ); add_filter( 'nav_menu_link_attributes', array( $this, 'nav_menu_link_attributes' ), 10, 2 ); // Filters menus by language add_filter( 'theme_mod_nav_menu_locations', array( $this, 'nav_menu_locations' ), 20 ); add_filter( 'wp_nav_menu_args', array( $this, 'wp_nav_menu_args' ) ); // The customizer if ( isset( $_POST['wp_customize'], $_POST['customized'] ) ) { add_filter( 'wp_nav_menu_args', array( $this, 'filter_args_before_customizer' ) ); add_filter( 'wp_nav_menu_args', array( $this, 'filter_args_after_customizer' ), 2000 ); } } /** * Sort menu items by menu order * * @since 1.7.9 * * @param object $a The first object to compare * @param object $b The second object to compare * @return int -1 or 1 if $a is considered to be respectively less than or greater than $b. */ protected function usort_menu_items( $a, $b ) { return ( $a->menu_order < $b->menu_order ) ? -1 : 1; } /** * Splits the one item of backend in several items on frontend * take care to menu_order as it is used later in wp_nav_menu * * @since 1.1.1 * * @param array $items menu items * @return array modified items */ public function wp_get_nav_menu_items( $items ) { if ( doing_action( 'customize_register' ) ) { // needed since WP 4.3, doing_action available since WP 3.9 return $items; } // The customizer menus does not sort the items and we need them to be sorted before splitting the language switcher usort( $items, array( $this, 'usort_menu_items' ) ); $new_items = array(); $offset = 0; foreach ( $items as $key => $item ) { if ( $options = get_post_meta( $item->ID, '_pll_menu_item', true ) ) { $i = 0; $switcher = new PLL_Switcher; $args = array_merge( array( 'raw' => 1 ), $options ); $the_languages = $switcher->the_languages( PLL()->links, $args ); // parent item for dropdown if ( ! empty( $options['dropdown'] ) ) { $item->title = $options['show_flags'] && $options['show_names'] ? $this->curlang->flag . ' ' . esc_html( $this->curlang->name ) : ( $options['show_flags'] ? $this->curlang->flag : esc_html( $this->curlang->name ) ); $item->attr_title = ''; $item->classes = array( 'pll-parent-menu-item' ); $new_items[] = $item; $offset++; } foreach ( $the_languages as $lang ) { $lang_item = clone $item; $lang_item->ID = $lang_item->ID . '-' . $lang['slug']; // A unique ID $lang_item->title = $options['show_flags'] && $options['show_names'] ? $lang['flag'] . '' . esc_html( $lang['name'] ) . '' : ( $options['show_flags'] ? $lang['flag'] : esc_html( $lang['name'] ) ); $lang_item->attr_title = ''; $lang_item->url = $lang['url']; $lang_item->lang = $lang['locale']; // Save this for use in nav_menu_link_attributes $lang_item->classes = $lang['classes']; $lang_item->menu_order += $offset + $i++; if ( ! empty( $options['dropdown'] ) ) { $lang_item->menu_item_parent = $item->db_id; $lang_item->db_id = 0; // to avoid recursion } $new_items[] = $lang_item; } $offset += $i - 1; } else { $item->menu_order += $offset; $new_items[] = $item; } } return $new_items; } /** * Returns the ancestors of a menu item * * @since 1.1.1 * * @param object $item * @return array ancestors ids */ public function get_ancestors( $item ) { $ids = array(); $_anc_id = (int) $item->db_id; while ( ( $_anc_id = get_post_meta( $_anc_id, '_menu_item_menu_item_parent', true ) ) && ! in_array( $_anc_id, $ids ) ) { $ids[] = $_anc_id; } return $ids; } /** * Removes current-menu and current-menu-ancestor classes to lang switcher when not on the home page * * @since 1.1.1 * * @param array $items * @return array modified menu items */ public function wp_nav_menu_objects( $items ) { $r_ids = $k_ids = array(); foreach ( $items as $item ) { if ( ! empty( $item->classes ) && is_array( $item->classes ) ) { if ( in_array( 'current-lang', $item->classes ) ) { $item->current = false; $item->classes = array_diff( $item->classes, array( 'current-menu-item' ) ); $r_ids = array_merge( $r_ids, $this->get_ancestors( $item ) ); // Remove the classes for these ancestors } elseif ( in_array( 'current-menu-item', $item->classes ) ) { $k_ids = array_merge( $k_ids, $this->get_ancestors( $item ) ); // Keep the classes for these ancestors } } } $r_ids = array_diff( $r_ids, $k_ids ); foreach ( $items as $item ) { if ( ! empty( $item->db_id ) && in_array( $item->db_id, $r_ids ) ) { $item->classes = array_diff( $item->classes, array( 'current-menu-ancestor', 'current-menu-parent', 'current_page_parent', 'current_page_ancestor' ) ); } } return $items; } /** * Adds hreflang attribute for the language switcher menu items * available since WP 3.6 * * @since 1.1 * * @param array $atts * @param object $item * @return array modified $atts */ public function nav_menu_link_attributes( $atts, $item ) { if ( isset( $item->lang ) ) { $atts['lang'] = $atts['hreflang'] = esc_attr( $item->lang ); } return $atts; } /** * Fills the theme nav menus locations with the right menu in the right language * Needs to wait for the language to be defined * * @since 1.2 * * @param array|bool $menus list of nav menus locations, false if menu locations have not been filled yet * @return array|bool modified list of nav menus locations */ public function nav_menu_locations( $menus ) { if ( is_array( $menus ) && ! empty( $this->curlang ) ) { // First get multilingual menu locations from DB $theme = get_option( 'stylesheet' ); foreach ( $menus as $loc => $menu ) { $menus[ $loc ] = empty( $this->options['nav_menus'][ $theme ][ $loc ][ $this->curlang->slug ] ) ? 0 : $this->options['nav_menus'][ $theme ][ $loc ][ $this->curlang->slug ]; } // Support for theme customizer // Let's look for multilingual menu locations directly in $_POST as there are not in customizer object if ( isset( $_POST['wp_customize'], $_POST['customized'] ) ) { $customized = json_decode( wp_unslash( $_POST['customized'] ) ); if ( is_object( $customized ) ) { foreach ( $customized as $key => $c ) { if ( false !== strpos( $key, 'nav_menu_locations[' ) ) { $loc = substr( trim( $key, ']' ), 19 ); $infos = $this->explode_location( $loc ); if ( $infos['lang'] == $this->curlang->slug ) { $menus[ $infos['location'] ] = $c; } elseif ( $this->curlang->slug == $this->options['default_lang'] ) { $menus[ $loc ] = $c; } } } } } } return $menus; } /** * Attempt to translate the nav menu when it is hardcoded or when no location is defined in wp_nav_menu * * @since 1.7.10 * * @param array $args * @return array modified $args */ public function wp_nav_menu_args( $args ) { $theme = get_option( 'stylesheet' ); if ( empty( $this->curlang ) || empty( $this->options['nav_menus'][ $theme ] ) ) { return $args; } // Get the nav menu based on the requested menu $menu = wp_get_nav_menu_object( $args['menu'] ); // Attempt to find a translation of this menu // This obviously does not work if the nav menu has no associated theme location if ( $menu ) { foreach ( $this->options['nav_menus'][ $theme ] as $menus ) { if ( in_array( $menu->term_id, $menus ) && ! empty( $menus[ $this->curlang->slug ] ) ) { $args['menu'] = $menus[ $this->curlang->slug ]; return $args; } } } // Get the first menu that has items and and is in the current language if we still can't find a menu if ( ! $menu && ! $args['theme_location'] ) { $menus = wp_get_nav_menus(); foreach ( $menus as $menu_maybe ) { if ( $menu_items = wp_get_nav_menu_items( $menu_maybe->term_id, array( 'update_post_term_cache' => false ) ) ) { foreach ( $this->options['nav_menus'][ $theme ] as $menus ) { if ( in_array( $menu_maybe->term_id, $menus ) && ! empty( $menus[ $this->curlang->slug ] ) ) { $args['menu'] = $menus[ $this->curlang->slug ]; return $args; } } } } } return $args; } /** * Filters the nav menu location before the customizer so that it matches the temporary location in the customizer * * @since 1.8 * * @param array $args wp_nav_menu $args * @return array modified $args */ public function filter_args_before_customizer( $args ) { if ( ! empty( $this->curlang ) ) { $args['theme_location'] = $this->combine_location( $args['theme_location'], $this->curlang ); } return $args; } /** * Filters the nav menu location after the customizer to get back the true nav menu location for the theme * * @since 1.8 * * @param array $args wp_nav_menu $args * @return array modified $args */ public function filter_args_after_customizer( $args ) { $infos = $this->explode_location( $args['theme_location'] ); $args['theme_location'] = $infos['location']; return $args; } } frontend/choose-lang-url.php000066600000006724152100561500012103 0ustar00set_language_from_url(); } add_action( 'request', array( $this, 'request' ) ); } /** * finds the language according to information found in the url * * @since 1.2 */ public function set_language_from_url() { $host = str_replace( 'www.', '', parse_url( $this->links_model->home, PHP_URL_HOST ) ); $home_path = parse_url( $this->links_model->home, PHP_URL_PATH ); $requested_host = str_replace( 'www.', '', $_SERVER['HTTP_HOST'] ); $requested_uri = rtrim( str_replace( $this->index, '', $_SERVER['REQUEST_URI'] ), '/' ); // some PHP setups turn requests for / into /index.php in REQUEST_URI // home is resquested if ( $requested_host == $host && $requested_uri == $home_path && empty( $_SERVER['QUERY_STRING'] ) ) { $this->home_language(); add_action( 'setup_theme', array( $this, 'home_requested' ) ); } // take care to post & page preview http://wordpress.org/support/topic/static-frontpage-url-parameter-url-language-information elseif ( isset( $_GET['preview'] ) && ( ( isset( $_GET['p'] ) && $id = (int) $_GET['p'] ) || ( isset( $_GET['page_id'] ) && $id = (int) $_GET['page_id'] ) ) ) { $curlang = ( $lg = $this->model->post->get_language( $id ) ) ? $lg : $this->model->get_language( $this->options['default_lang'] ); } // take care to ( unattached ) attachments elseif ( isset( $_GET['attachment_id'] ) && $id = (int) $_GET['attachment_id'] ) { $curlang = ( $lg = $this->model->post->get_language( $id ) ) ? $lg : $this->get_preferred_language(); } elseif ( $slug = $this->links_model->get_language_from_url() ) { $curlang = $this->model->get_language( $slug ); } elseif ( $this->options['hide_default'] ) { $curlang = $this->model->get_language( $this->options['default_lang'] ); } // if no language found, check_language_code_in_url will attempt to find one and redirect to the correct url // otherwise 404 will be fired in the preferred language $this->set_language( empty( $curlang ) ? $this->get_preferred_language() : $curlang ); } /** * adds the current language in query vars * useful for subdomains and multiple domains * * @since 1.8 * * @param array $qv main request query vars * @return array modified query vars */ public function request( $qv ) { // FIXME take care not to break untranslated content // FIXME media ? // untranslated post types if ( isset( $qv['post_type'] ) && ! $this->model->is_translated_post_type( $qv['post_type'] ) ) { return $qv; } // untranslated taxonomies $tax_qv = array_filter( wp_list_pluck( get_taxonomies( array(), 'objects' ), 'query_var' ) ); // get all taxonomies query vars $tax_qv = array_intersect( $tax_qv, array_keys( $qv ) ); // get all queried taxonomies query vars if ( ! $this->model->is_translated_taxonomy( array_keys( $tax_qv ) ) ) { return $qv; } if ( isset( $this->curlang ) && empty( $qv['lang'] ) ) { $qv['lang'] = $this->curlang->slug; } return $qv; } } frontend/frontend-links.php000066600000014623152100561500012036 0ustar00curlang = &$polylang->curlang; $this->cache = new PLL_Cache(); } /** * returns the url of the translation ( if exists ) of the current page * * @since 0.1 * * @param object $language * @return string */ public function get_translation_url( $language ) { global $wp_query; if ( false !== $translation_url = $this->cache->get( 'translation_url:' . $language->slug ) ) { return $translation_url; } // make sure that we have the queried object // see https://wordpress.org/support/topic/patch-for-fixing-a-notice $queried_object_id = $wp_query->get_queried_object_id(); /** * Filter the translation url before Polylang attempts to find one * Internally used by Polylang for the static front page and posts page * * @since 1.8 * * @param string $url empty or the url of the translation of teh current page * @param object $language language of the translation * @param int $queried_object_id queried object id */ if ( ! $url = apply_filters( 'pll_pre_translation_url', '', $language, $queried_object_id ) ) { $qv = $wp_query->query_vars; $hide = $this->options['default_lang'] == $language->slug && $this->options['hide_default']; // post and attachment if ( is_single() && ( $this->options['media_support'] || ! is_attachment() ) && ( $id = $this->model->post->get( $queried_object_id, $language ) ) && $this->current_user_can_read( $id ) ) { $url = get_permalink( $id ); } // page elseif ( is_page() && ( $id = $this->model->post->get( $queried_object_id, $language ) ) && $this->current_user_can_read( $id ) ) { $url = get_page_link( $id ); } elseif ( is_search() ) { $url = $this->get_archive_url( $language ); // special case for search filtered by translated taxonomies: taxonomy terms are translated in the translation url if ( ! empty( $wp_query->tax_query->queries ) ) { foreach ( $wp_query->tax_query->queries as $tax_query ) { if ( ! empty( $tax_query['taxonomy'] ) && $this->model->is_translated_taxonomy( $tax_query['taxonomy'] ) ) { $tax = get_taxonomy( $tax_query['taxonomy'] ); $terms = get_terms( $tax->name, array( 'fields' => 'id=>slug' ) ); // filtered by current language foreach ( $tax_query['terms'] as $slug ) { $term_id = array_search( $slug, $terms ); // what is the term_id corresponding to taxonomy term? if ( $term_id && $term_id = $this->model->term->get_translation( $term_id, $language ) ) { // get the translated term_id $term = get_term( $term_id, $tax->name ); $url = str_replace( $slug, $term->slug, $url ); } } } } } } // translated taxonomy // take care that is_tax() is false for categories and tags elseif ( ( is_category() || is_tag() || is_tax() ) && ( $term = get_queried_object() ) && $this->model->is_translated_taxonomy( $term->taxonomy ) ) { $lang = $this->model->term->get_language( $term->term_id ); if ( ! $lang || $language->slug == $lang->slug ) { $url = wpcom_vip_get_term_link( $term, $term->taxonomy ); // self link } elseif ( $tr_id = $this->model->term->get_translation( $term->term_id, $language ) ) { $tr_term = get_term( $tr_id, $term->taxonomy ); // check if translated term ( or children ) have posts if ( $tr_term && ( $tr_term->count || ( is_taxonomy_hierarchical( $term->taxonomy ) && array_sum( wp_list_pluck( get_terms( $term->taxonomy, array( 'child_of' => $tr_term->term_id, 'lang' => $language->slug ) ), 'count' ) ) ) ) ) { $url = wpcom_vip_get_term_link( $tr_term, $term->taxonomy ); } } } // post type archive elseif ( is_post_type_archive() ) { if ( $this->model->is_translated_post_type( $qv['post_type'] ) && $this->model->count_posts( $language, array( 'post_type' => $qv['post_type'] ) ) ) { $url = $this->get_archive_url( $language ); } } elseif ( is_archive() ) { $keys = array( 'post_type', 'm', 'year', 'monthnum', 'day', 'author', 'author_name' ); $keys = array_merge( $keys, $this->model->get_filtered_taxonomies_query_vars() ); // check if there are existing translations before creating the url if ( $this->model->count_posts( $language, array_intersect_key( $qv, array_flip( $keys ) ) ) ) { $url = $this->get_archive_url( $language ); } } // front page when it is the list of posts elseif ( is_front_page() ) { $url = $this->get_home_url( $language ); } } /** * Filter the translation url of the current page before Polylang caches it * * @since 1.1.2 * * @param null|string $url the translation url, null if none was found * @param string $language the language code of the translation */ $translation_url = apply_filters( 'pll_translation_url', ( isset( $url ) && ! is_wp_error( $url ) ? $url : null ), $language->slug ); $this->cache->set( 'translation_url:' . $language->slug, $translation_url ); return $translation_url; } /** * get the translation of the current archive url * used also for search * * @since 1.2 * * @param object $language * @return string */ public function get_archive_url( $language ) { $url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $url = $this->links_model->switch_language_in_link( $url, $language ); $url = $this->links_model->remove_paged_from_link( $url ); /** * Filter the archive url * * @since 1.6 * * @param string $url url of the archive * @param object $language language of the archive */ return apply_filters( 'pll_get_archive_url', $url, $language ); } /** * returns the home url in the right language * * @since 0.1 * * @param object $language Optional, defaults to current language * @param bool $is_search Optional, whether we need the home url for a search form, defaults to false */ public function get_home_url( $language = '', $is_search = false ) { if ( empty( $language ) ) { $language = $this->curlang; } return parent::get_home_url( $language, $is_search ); } } changelog.txt000066600000243033152100561500007240 0ustar00== Changelog == This file contains only old changelog. See readme.txt for newer versions. = 2.1.6 (2017-07-17) = * Pro: fix duplicate post button not working in PHP 7.1 * Pro: fix CPTUI untranslated labels on admin * Adapt related posts filter to use slug instead of name to follow changes made on Jetpack server ( Props Steve Kaeser ) * Fix PHP notices when translating CPT and custom tax titles in Yoast SEO * Fix PHP warning when all plugins are networked activated = 2.1.5 (2017-05-31) = * Add compatibility with new media widgets introduced in WP 4.8 * Removing the language information in URL for the default language is now default * Update plugin updater class to 1.6.12 * Pro: fix PHP notices when duplicating the content * Fix: test existence of `twentyseventeen_panel_count` instead of relying only on the active template * Fix: set current property to false when removing the current-menu-item class #134 props @mowar * Fix PHP notice when editing a term without language * Fix possible PHP notice when deleting a category * Fix fatal error with Gantry 5 = 2.1.4 (2017-05-16) = * Pro: fix user not logged in on secondary domain when previewing changes * Pro: fix archive links without language code in ACF link field (ACF 5.4.0+) * Fix redirection from www subdomain to wrong language domain. * Fix: selecting "Front page displays latest posts" in the customizer not cleaning the languages cache * Fix accessibility of the admin language switcher = 2.1.3 (2017-04-11) = * Pro: Fix translated slug of 'page' if it is translated to an empty string * Update plugin updater class to 1.6.11 * Strings registered with a wpml-config.xml file or WPML functions are now multiline by default * Translate the site title in emails sent to the user * Fix sanitize_user for specific locales * Fix deprecation notice in Yoast SEO integration * Fix: Clean term cache after the language has been set in mass #119 = 2.1.2 (2017-03-09) = * Pro: Add filter 'pll_xdata_nonce_life' * Pro: Fix translation of WooCommerce product attribute slug * Pro: Fix product synchronization in WooCommerce 2.7 * Pro: Fix error message when bulk trashing synchronized posts * Add option to discard item spacing in the output of pll_the_languages() ( Props Ceslav Przywara ) #93 #95 * Add as, dzo, kab, km, ml_IN, nl_BE, pa_IN, rhg, sah, ta_IN, tah, te, tt_RU to the predefined list of languages * Update plugin updater class to 1.6.10 * Fix: Remove the dependency to is_ssl() to detect the language in the url ( language set from the directory name ) * Fix issue with secondary level domains * Fix strings not translated in emails * Fix incorrect usage of add_action() ( Props Peter J. Herrel ) #103 * Fix wrong redirect in customizer in WP 4.7 = 2.1.1 (2017-02-15) = * Pro: Add filter 'pll_enable_duplicate_media' for a fine control of automatic media duplication * Add filter 'pll_links_model' for the links model class name * Trim any starting ^ from modified rewrite rules * Pro: Fix wrong count of plugins to udpate * Fix slashed strings translations not saved #94 = 2.1 (2017-01-25) = * Minimum WordPress version is now 4.4 * Pro: Add support for synchronized posts (same post in multiple languages) * Pro: Add support for custom post type UI and the Divi Builder * Improve support of Yoast SEO (no category base and post type archive breadcrumb title) * Move Languages menu at top level instead of submenu of the WordPress settings * Copy the original post date when creating a translation and when the date is synchronized (Props Jory Hogeveen) #32 * Remove hreflang attributes on paged pages and paged posts * Add label to widget language dropdown for better accessibility (Props Lawrence Francell) #53 #56 * Remove constants POLYLANG_URL and PLL_LOCAL_URL * wp_get_sidebars_widgets() and is_active_sidebar() are now filtered according to widgets languages #54 * Add functions pll_esc_html__(), pll_esc_html_e(), pll_esc_attr__() and pll_esc_attr_e() to the API (Props jegbagus) #83 * Pro: Fix conflict between WooCommerce shop on front and translated shop base slug * Pro: Fix $wp_rewrite search base and author_base not translated #68 * Pro: Fix page preview does not log in the user when using sudomains * Fix: avoid setting the language cookie on 404 pages * Fix: rewrite rules order modified for custom post types archives * Fix: conflict with WP All Import causing our filters to fail in "Add Media" modal when editing a post * Fix: auto add pages not working for nav menus assigned to several locations * Fix: Jetpack infinite scroll for multiple domains #58 #74 * Fix: serialize error in Strings translations when balanceTags option is active #63 * Fix: static front page preview when redirected from the languages page #49 * Fix: Auto add pages not working for nav menus assigned to several locations * Fix: Conflict with Woocommerce Show Single Variation * Fix: Parent page not synchronized in Quick edit (introduced in 2.0.8) * Fix: WPML API wpml_element_has_translations and wpml_post_language_details * Fix: unattached media translations not in language switcher * Fix: Conflict with WP Residence advanced search = 2.0.12 (2016-12-19) = * Fix plugin not loaded first (introduced in 2.0.11) * Fix wrong translations files loaded when the language is set from the content in WP 4.7 #76 * Fix notice when a tax query has no terms (using EXISTS or NOT EXISTS) = 2.0.11 (2016-12-12) = * Pro: Fix shared term slugs broken by a late change in WP 4.7 #73 * Pro: Fix media taxonomies lost when creating a media translation when taxonomies sync is activated #72 * Fix fatal error in customizer when Twenty Seventen is activated and another theme is previewed #71 * Fix wrong plugin language on admin if user locale is different from site locale in WP 4.7 = 2.0.10 (2016-12-05) = * Add support for front page panels of Twenty Seventeen * Remove draft posts from the language switcher even when the user is logged in * Fix: Make argument 2 of icl_object_id optional * Fix a conflict with the Divi theme (#67) = 2.0.9 (2016-11-15) = * Fix javascript error in some ajax requests = 2.0.8 (2016-11-14) = * Disable admin language feature in WP 4.7+ * Pro: fix case where a media could lose its parent post when translated on the fly by the content duplication * Pro: fix on the fly media created at content duplication attached to parent page instead of child page * Fix translations input fields not populated in languages metabox when creating a new translation in WP 4.7 * Fix possibility to delete the translations of the default category in WP 4.7 * Fix tag search not filtered per language in Quick edit in WP 4.7 * Fix dropdown language switcher not working for untranslated pages = 2.0.7 (2016-10-18) = * Fix issues with static front pages introduced in version 2.0.6 = 2.0.6 (2016-10-17) = * Pro: Fix translated paged slug not working on paged static front page * Add support for WPML filter 'wpml_language_form_input_field' * Fix PHP notice when using the WPML filter 'wpml_current_language' * Fix cases where the admin language filter is not correctly taken into account * Fix paged static front pages in plain permalinks * Fix paged static front pages for multiple domains (#43) * Fix warning occuring when a 3rd party plugin attempts to register anything but a string in the strings translations panel * Fix cross domain http request for media when using multiple domains or subdomains * Fix error 404 on pages when no language has been created yet = 2.0.5 (2016-09-22) Five years after! = * Pro: Fix conflict with WPBakery Visual Composer * Pro: Fix conflict between multiple domains SSO and FORCE_SSL_ADMIN * Pro: Fix duplicated fields not displayed in new translation in ACF Pro 5.4+ * Add Tibetan and Silesian to the predefined languages list * Remove duplicated strings from the strings translations (even when they have a different name or group) * The languages and translations of custom post types and taxonomies are no more activated by default at activation * Allow to deactivate auto translation in secondary by setting 'lang' to an empty value * Fix: invalidate the cache of PLL_MO ids when adding a new language * Fix: don't filter secondary queries when editing a post in an untranslated post type = 2.0.4 (2016-09-06) = * Add Gujarati to the predefined languages list * Fix conflict with Page Builder. Other parts of the conflict are fixed in Page Builder 2.4.14 * Fix plugins translations incorrectly loaded in WP 4.6 * Fix error 404 on paged urls when using a non standard port = 2.0.3 (2016-08-16) = * Pro: Fix PHP notice when hiding the language code in url and the language is set from subdomains * Pro: Fix one more media being created when the duplicate media in all languages is activated (introduced in 2.0) * Pro: Fix shared term slugs not working on PHP 7 * Pro: Fix Polylang storing integers in some ACF Pro fields where ACF Pro stores strings * Pro: Fix ACF Pro custom fields synchronized even when the custom fields synchronization option is deactivated (#40) * Fix PHP notice: Undefined variable: original_value in /modules/wpml/wpml-api.php on line 168 * Fix translations loaded too soon by plugins not correctly reloaded since WP 4.6 (#39) * Fix: Remove the delete link for translations of the default category on PHP 7 * Fix unescaped i18n strings in Lingotek presentation = 2.0.2 (2016-08-03) = * Avoid fatal error when a 3rd party theme or plugin has a malformed wpml-config.xml file: the malformed wpml-config.xml file is simply ignored = 2.0.1 (2016-08-02) = * Fix fatal error on PHP < 5.4 (introduced in 2.0) * Fix custom flags not being loaded (introduced in 2.0) = 2.0 (2016-08-02) = * Pro: Improve integration with ACF Pro * Pro: Add support for single sign on across multiple domains or subdomains * Pro: Add support for browser language detection when using multiple domains * Pro: Add support for translation of the static portion of the post permalink structure * Pro: Fix deactivated languages appearing in Yoast SEO sitemaps * Pro: Fix impossibility to visit a deactivated language when using subdomains or multiple domains (#10) * Pro: Fix when sharing slug on the page for posts, only one of them is accessible (#33) * Add the possibility to use the language switcher as dropdown in menu * Add support for custom logo introduced in WP 4.5 (#6) * The backend current language ( PLL()->curlang ) is now equal to the language of current post or term being edited (#19) * The sample permalink is now updated when changing the language in the Languages metabox * Revamp the wpml-config.xml reader to use simplexml instead of our custom xml parser * Improve support for the WPML API (including Hook API introduced in WPML 3.2) * Add support for translation of meta titles and descriptions of custom post types and custom taxonomies in Yoast SEO * Replace uncached functions by WPCOM VIP functions when available * Improve compatibility with WP 4.6 * Fix parent category wrongly assigned to post when synchronizing children categories (#21) * Fix custom fonts not loaded when using multiple domains or subdomains * Fix remove_accents() not working for German and Danish (#24) * Fix incorrect static front pages urls on backend * Fix impossible to directly enter the page number in strings translation table (introduced in 1.9.3) * Fix conflict with WP Sweep (needs WP Sweep 1.0.8+) * Fix potential performance issue by querying only taxonomies to show in quick edit to filter the category checklist * Fix conflict (database error) with ReOrder-posts-within-categories plugin * Fix languages per page option not saved = 1.9.3 (2016-06-28) = * Pro: Allow to add slashes in url slugs translations * Pro: Fix archive links not using translated slugs * Pro: Fix visitor being redirected to 404 if his browser preference is set to an inactive language * Fix strings translations table always back to page 1 when submitting the form (#14) * Fix get_pages( array( 'lang' => '' ) ) not querying all the languages * Fix switching the admin language filter can override the static front page settings (#16) = 1.9.2 (2016-06-06) = * Pro: fix unreachable hierarchical custom post type posts when they are sharing slugs across languages * Fix missing argument 3 in icl_t * Fix conflict with WooCommerce product variations = 1.9.1 (2016-05-23) = * Pro: add compatibility with Beaver Builder * Pro: fix media wrongly created when adding a new media translation * Add azb, ceb, de_CH_informal, es_GT, mr, nl_NL_formal to the predefined list of languages * Fix the language switcher not linking to media translations for anonymous visitors = 1.9 (2016-04-27) = * Pro: add the possibility to translate custom post types slugs, taxonomies slugs and more * Pro: add the possibility to share the same post or term slug across languages * Pro: add the possibility to duplicate the content when creating a new translation * Pro: add the possibility to create all translations at once when uploading a media * Pro: add the possibility to disable a language * Add license and update management * Add inline docs for all filters and actions * When possible, the rel alternate hreflang now display only the language code (without the country code) * When combined with flags in the language switcher, wrap the language name inside tags * Add customizer selective refresh support for the language switcher widget ( needs WP 4.5+ ) * Fix dynamic options of the language switcher widget not working in the customizer * Fix possible error 404 on page shortlink when using subdomains or multiple domains * Fix get_adjacent_post() and wp_get_archives() for untranslated post types ( needs WP 4.4+ ) * Fix language homepage urls not present in Yoast SEO sitemap (when the homepages display posts) = 1.8.5 (2016-04-03) = * Revert from $_SERVER['PHP_SELF'] to $_SERVER['SCRIPT_FILENAME'] to detect if the user is on login/register/signup page * Fix incompatibility introduced by WP 4.5 in Edit single taxonomy term screen * Fix existing post overriden when creating a language and a conflicting plugin sets the global $post on languages pages = 1.8.4 (2016-03-06) = * Revert canonical redirection of static front page when combining plain permalinks + default language hidden in url (introduced in 1.8.2) = 1.8.3 (2016-03-04) = * fix: All pages are redirected to the home page on some installations (introduced in 1.8.2) = 1.8.2 (2016-03-02) = * Add support for the 'wpml_get_default_language()' function from the WPML API * Stop blocking saving settings when errors are detected (invalid domains) * Use publicly_queryable => true instead of public => true for the language taxonomy (WP 4.5+) * fix: PHP notice when pll_default_language() is called before a language is created * fix: PHP notice undefined property PLL_Language::$page_on_front * fix: canonical redirection of static front page when combining plain permalinks + default language hidden in url * fix: YARPP compatibility broken in v1.8 * fix: Remove the delete link for translations of the default category (introduced back by WP 4.3) * fix: settings not displayed with WP 4.1 or older = 1.8.1 (2016-01-31) = * Update the list of Facebook locales used for Opengraph support with Yoast SEO and Jetpack * fix: secondary query with translated post type and untranslated taxonomy mixes languages (introduced in 1.8) * fix: issue with paged static front page when hiding the default language in url * fix: potential issue with cache after synchronizations * fix: trailing slash added to canonical home url outputed by Yoast SEO when using default permalinks = 1.8 (2016-01-19) = * Minimum WordPress version is now 4.0 * Add ary, bn_BD, en_ZA, es_AR, fr_CA and fr_BE to the predefined languages list * Adopt WordPress coding standards * New structure for translated posts and terms (=> several methods of PLL_Model are deprecated). * Revamp the management of the static front page and page for posts * Improve performance for navigation menus with a lot of pages * The Polylang and WPML API are now loaded when 'plugins_loaded' is fired (on frontend only if at least one language has been defined) * Add 'pll_get_post_translations()' and 'pll_get_term_translations()' to the API * Add filter 'pll_cookie_expiration' to change the cookie expiration time * Add support for 'wpml_get_language_information()' function from the WPML API * The default language is now managed directly from the languages list table * Various accessibility improvements * It is now possible to choose the languages flags from the available list (custom flags on frontend still work as previously) * Revamp the settings page (now a list table with inline configuration) * Add an option to remove all data when uninstalling the plugin * Add test of subdomains and domains accessibility * Add post state for translations of the front page and posts page * Add better support of the customizer menus introduced in WP 4.3 * Media taxonomies (created by 3rd party plugins) are now filtered by language when editing a media * Synchronization of taxonomies (created by 3rd party plugins) and meta are now enabled for media * The 'hreflang' tag now refers to the locale instead of the 2-letters language code * Workaround for WordPress locales not being W3C valid (see #33511) * Workaround a bug in Nextgen Gallery causing redirect on album * Add compatibility with Duplicate Post plugin to avoid duplicated post keeping the link to translations * Add compatibility with Jetpack Related Posts * fix: incorrect rewrite rules after changing how the language is set (need to flush rewrite rules after this) * fix: password protected pages don't work on multiple domains * fix: ensure that the page parent is in the correct language when using bulk edit * fix: is_tax set on category and post tags archives when it should not * fix: automatically added new top-level pages to menus are not filtered by language * fix: nav menus locations are messed when changing the default language * fix: error 404 for untranslated taxonomies pages * fix: single posts and pages links do not include the language code when using the default permalinks and forcing the language code in url * fix: missing trailing slash on home url when using default permalinks or a static front page * fix: sticky visibility is copied to new translation only if the synchronization is activated * fix: remove "» Languages » [language name]" from the feed title * fix: spaces are not honored when searching strings translations * fix: default language not set and terms translations not correctly imported when using WordPress Importer * fix: the browser language detection does not differentiate 'en_US' and 'en_GB' * fix: non alphanumeric characters query vars values lead to an infinite redirection loop on static front pages * fix: user profile not saved for a language when the language code contains a "-" * fix: non translated posts page always link to the static front page even when they should not * fix: remove hreflang="x-default" when using one domain per language * fix: deprecated function notice in WP 4.5 alpha * fix: wrong url for attachments when media are translated and using subdomains * fix: wrong url for unattached attachments when using subdirectories (since WP 4.4) * fix: wrong url scheme for custom flags = 1.7.12 (2015-11-13) = * The language taxonomy is now public for compatibility with WP 4.4 * fix: nav menus locations are not correctly populated in customizer in WP 4.4 * fix: the termmeta table was still deleted at upgrade * fix: fatal error when using the argument 'post_id' in 'pll_the_languages()' (introduced in 1.7.11) [props EKesty](https://wordpress.org/support/topic/bug-on) * fix: potential notice in 'pll_the_languages()' [props mattkeys](https://wordpress.org/support/topic/bug-on) = 1.7.11 (2015-10-15) = * fix: conflict with GET ajax requests sent by the jquery method load * fix: notice in frontend-nav-menu.php at line 211 (introduced in 1.7.10) [props Jesse Graupmann](https://wordpress.org/support/topic/warning-and-notice-on-upgrade) * fix: the parent list in page attributes metabox is not in the correct language (introduced in 1.7.10) * fix: error 404 for attachments * fix: the language switcher is not displayed when combining "Forces link to front page" and "Hides languages with no translation" = 1.7.10 (2015-09-28) = * Add Occitan translation contributed by [Cédric Valmary](http://www.totenoc.eu/) * Add de_DE_formal, en_NZ, es_CO, hy, oci, ps and tl to the predefined languages list * Add the filter 'pll_predefined_languages' and the actions 'pll_language_edit_form_fields' and 'pll_language_add_form_fields' * the termmeta table (used in Polylang < 1.2) is no more deleted when uninstalling the plugin (as it will soon be included in WP) * fix: prevent creating a media translation if one already exists * fix: Attempt to translate the nav menus for themes registering a theme location but not using it in wp_nav_menu() * fix: Jetpack infinite scroll * fix: issue with terms languages when two languages have the same name * fix: notices when deleting a tag and Lingotek is active * fix: the languages cache is not cleaned when updating the site home url * fix: conflict with the theme Ambition * fix: front page canonical url displayed by Yoast SEO * fix: typo in options definition at install [props null.bit](https://wordpress.org/support/topic/suggestions-for-two-new-filters?replies=5#post-7466159) * fix: error when adding a term in a non-translated taxonomy = 1.7.9 (2015-08-17) = * Minimum WordPress version is now v3.9 * Add: hreflang="x-default" on front page when the default language code is not hidden in urls * fix: remove hreflang links in html head section of paged archives to please Google * fix: conflict with WPSEO sitemap caching when using multiple domains. [props Junaid Bhura](https://wordpress.org/support/topic/wp-seo-sitemap-and-translation-subdomain-issue?replies=8#post-7113817) * fix: change the order of strings translations columns for better display on mobile devices in WP 4.3 * fix: various issues with nav menus and customizer in WP 4.3 * fix: correctly disallow unchecking both show names and show flags in the language switcher form = 1.7.8 (2015-07-21) = * fix: conflict with PHP < 5.4 introduced in 1.7.7 = 1.7.7 (2015-07-20) = * Add Romanian translation contributed by uskro * Add Japanese translation contributed by [Eiko Toda](http://www.eikotoda.com) * Update French translation contributed by [fxbenard](http://fxbenard.com/) * The language locale is now validated with the same pattern as in WP 4.3. See #28303 * fix: make sure that the language switcher never finds translations for untranslated post types (could occur when the post type was previously translated) * fix: display the default category according to the admin language filter in settings->writing * fix: flushing rewrite rules at network activation and de-activation is back. [props RavanH](https://polylang.wordpress.com/2015/06/10/polylang-1-7-6-and-multisite/comment-page-1/#comment-1138) * fix: avoid a conflict with WP Super Cache preloading (loading 'polylang_mo' posts which are 404). [props ecdltf](https://wordpress.org/support/topic/polylang_mo-and-404s-take-2) * fix: customizer menus issues introduced by changes in WP 4.1 * fix: strings translations are not saved when pressing enter * fix: it is not possible to de-activate the translation for custom post types and taxonomies from wpml-config.xml * fix: conflict whith plugins using stringified json in ajax requests = 1.7.6 (2015-06-10) = * Add Galician translation contributed by [Toño Calo](http://fedellar.wordpress.com/) * fix: incorrect post type archive link for untranslated post types * fix: notices in wp-import.php * fix: avoid flushing rewrite rules at network activation and de-activation * fix: the note below the category list table displays the default category according to the admin language filter * fix: wrong future posts permalinks * fix: deleting a media translation deletes the file too * fix: when using persistent object cache, get_terms is not always filtered by the correct language on admin side * fix: it is possible to create two categories having the same translation * fix: fatal error when using the dropdown language switcher in WP < 4.1 = 1.7.5 (2015-05-11) = * Add 'pll_languages_list' filter * fix: warning when a plugin calls 'icl_object_id' with an untranslated post type (seen in ACF 4.4.1) * fix: the language is not correctly set from the url when using PATHINFO permalinks (introduced in 1.6!) * fix: notice when a search is filtered by a taxonomy term in a different language = 1.7.4 (2015-05-03) = * fix: translated taxonomies and post types from wpml-config.xml are not filtered on frontend (introduced in 1.7.2) * fix: WPML strings translations not always loaded (introduced in 1.7) * fix: $.ajaxPrefilter() may not work as expected [props ScreenfeedFr](https://wordpress.org/support/topic/ajaxprefilter-may-not-work-as-expected) * fix: can't hide the language code for the default language when using subdomains * fix: incorrect static front page url when hiding the default language information * fix: an untranslated posts page may display posts in all languages * fix: javascript error when changing the language of a hierarchical post type from the languages metabox in WP 4.2 * fix: subdomains urls are malformed when the main site uses www. * fix: suggest tags are not filtered in quick edit * fix: parent page dropdown list not filtered in quick edit = 1.7.3 (2015-04-11) = * the transient 'pll_languages_list' now stores an array of arrays instead of an array of PLL_Language objects * fix: fatal error for users hosted at GoDaddy (due to PLL_Language objects stored in a transient) * fix: additional query vars are removed from home page * fix: categories are not filtered by the admin language switcher in posts list table (introduced in 1.7) * fix: when using multiple domains, the domain url is lost when modifying the language slug * fix: the queried object is incorrectly set for author archives (introduced in 1.6.5) * fix: notice when a nav menu assigned to a translated nav menu location has been deleted * fix: no canonical redirection when using pretty permalinks and querying default permalinks = 1.7.2 (2015-03-23) = * fix: comments are filtered for posts in a post type not managed by Polylang * fix: translated static front page don't work when setting PLL_CACHE_HOME_URL to false (introduced in 1.7) * fix: the query for taxonomies on custom post types is broken (when adding the language code to the url) = 1.7.1 (2015-03-20) = * fix: wrong redirection when using a static front page and replacing the page name by the language code (introduced in 1.7) = 1.7 (2015-03-19) = * Minimum WordPress version is now v3.8 * Add new languages to the predefined languages list: Swiss German, Hazaragi * Add compatibility with nested tax queries introduced in WP 4.1 * Add compatibility with splitting shared terms to be introduced in WP 4.2 * Add the possibility to change the domain in the default language when using multiple domains (avoids a conflict with the domain mapping plugin) * Add the possibility to set the language from the code in url when using default permalinks * Adding the language code in url is now default at first activation (should improve the out of the box compatibility with other plugins and themes) * Add new language switcher option to hide a language with no translation * pll_the_languages() now outputs the js code to handle language change in dropdown list (as done by the widget) * Improve performance by using base64 encoded flags + various slight optimizations * Improve protection against chained redirects * The find posts list is now filtered per media language when clicking on attach link in Media library * Copy alternative text when creating a media translation * The category checklist in quick edit is now filtered per post language instead of admin language filter * Quick and bulk language edit don't break translations anymore if the new language is free * Make it impossible to change the language of the default categories * Make sure that a default category defined in settings->writing is translated in all languages * Tweak css for mobiles in add and edit term form * Tweak the query getting the list of available posts in the autocomplete input field in the post languages metabox * fix: after adding a term translation, need to refresh the page before adding a new term * fix: term translations rows are not modified in list table when a term is added / deleted or inline edited * fix: post translations rows are not modified in list table when a post is inline edited * fix: using brackets in language name breaks strings translations * fix: quick edit may conflict with other plugins * fix: impossible to use several dropdown languages widgets * fix: pll_the_languages() may display a dropdown with empty options * fix: the categories widget does not work correctly with dropdown * fix: autosave post always created after manual save * fix: tax query not filtered by language when using 'NOT IN' operator on a translated taxonomy * fix: incorrect translation url for searches filtered by taxonomy * fix: backward incompatibility for edited_term_taxonomy action introduced in WP 4.2 * fix: the home link may be incorrect on MS Windows * fix: tags in wrong language may be assigned when bulk editing posts in several languages * fix: tags created when bulk editing posts are not assigned any language * fix: Illegal string offset 'taxonomy' introduced in v1.6.5 * fix: Undefined property: WP_Query::$queried_object_id when calling pll_the_languages(array('raw' => 1)) in a function hooked to 'wp'. props [KLicheR](https://wordpress.org/support/profile/klicher) * fix: Notice in admin.php when used with MailPoet plugin = 1.6.5 (2015-02-18) = * Add new correspondances between WordPress locales and Facebook locales (for WPSEO and Jetpack users) * fix: quick draft posts are always assigned the default category in the default language * fix: Notice: Undefined offset: 0 in wp-includes/query.php introduced in WP 4.1 * fix: is_tax and is_archive are not correctly set when a custom taxonomy term is queried * fix: conflict introduced by WPSEO 1.7.2+ = 1.6.4 (2015-02-01) = * Add es_MX to predefined languages list * Add compatibility with WordPress SEO sitemaps for multiple domains and subdomains * fix: a new post is assigned the wrong (untranslated) default category if no category is assigned by the user * fix: the home links now have the right scheme even if PLL_CACHE_HOME_URL is not set to false * fix: fatal error when using old versions of WPSEO (I should do what I tell other to do!) * fix: strings translations are not switched when using switch_to_blog = 1.6.3 (2015-01-09) = * Add Georgian translation contributed by [Tours in Georgia](http://www.georgia-tours.eu/) * fix: WXR export does not include the language of untranslated terms (will now work only for newly saved terms) * fix: better cleaning of DB when translated objects are deleted * fix: incorrect (ajax) translations links when modifying a term language * fix: warning: Illegal string offset 'taxonomy' introduced by the combination of WP 4.1 and some plugins. = 1.6.2 (2014-12-14) = * fix: bugs and inconsistencies compared to WPML in 'icl_get_languages' (should fix a conflict with Avada) * fix: https issue * fix: stop displaying an error when adding en_US as new language (translation not downloaded) * fix: infinite redirect loop on (unattached) attachment links * fix: impossible to add tags in post quick edit (introduced in 1.5) * fix: the customizer does not land to the right page when cumulating: static front page + page name in url + default language code not hidden * fix: read parent theme wpml-config.xml before child theme * fix: add protection to avoid empty language * fix: page preview link again = 1.6.1 (2014-11-19) = * Add Brazilian Portuguese translation contributed by [Henrique Vianna](http://henriquevianna.com/) * Improve compatibility with Types: allow custom fields to be populated when creating a new translation * Make it impossible to remove the translations of the default category * Fix: possibility to add a path when using multiple domains (same path for all languages) broken since v1.5.6 * Fix: preview link for non default language when using multiple domains * Fix: error displayed when setting the static front page and only one language has been defined * Fix: revert changes on rewrite rules with front introduced in 1.6 * Fix: conflict with WordPress SEO when no language has been created = 1.6 (2014-10-27) = * Add Croatian translation contributed by Bajro * Add new languages to predefined languages list: Azerbaijani, English (Australia), English (UK), Basque * Add flag in front of the language select dropdown for posts and terms * Add widget text translation * Add opengraph support for locale and translations when WordPress SEO or Jetpack are activated * Add error message if attempting to assign an untranslated page as static front page * Add 'pll_sanitize_string_translation' filter to sanitize registered strings translations when saved * Fix: change the en_US flag to US flag. The UK flag is now associated to en_GB * Fix: change Belarussian locale from be_BY to bel to in agreement with translate.wordpress.org * Fix home pages duplicate urls when using domains or subdomains * Fix rewrite rules with front * Fix: terms are always in default language when created from post bulk edit = 1.5.6 (2014-10-11) = * Fix: the admin language filter is not active for paginated taxonomy in nav menu admin panel * Fix: wrong redirection if a domain is a substring of another domain (ex: mysite.com and mysite.co) * Fix: impossible to translate numeric values in options defined in wpml-config.xml * Fix: call to undefined method PLL_Links::get_translation_url() with Avada theme * Fix: manage_{$this->screen->taxonomy}_custom_icolumn is a filter and not an action = 1.5.5 (2014-09-10) = * Fix: missing argument 4 in icl_translate * Fix: conflict with Vantage theme * Fix: possible issue with cookie domain on 'localhost' * Fix: filtering string translations does not work when the group name contains a space * Fix: Possible 404 error for attachments * Fix: PHP notice when a shared term is not translated in all taxonomies = 1.5.4 (2014-08-13) = * Add new API functions: pll_get_post_language, pll_get_term_language, pll_translate_string * Add better compatibility with Jetpack 3 * Fix: attachments don't get any language when uploaded from frontend * Fix: authors cannot create tags * Fix: too restrictive capability checks for some edge cases * Fix: conflict with WPSEO: taxonomy metas cannot be saved = 1.5.3 (2014-07-12) = * Add: Capability check before creating links in post list table * Add: Possibility not to cache languages objects with option PLL_CACHE_LANGUAGES (for GoDaddy users) * Fix: Saving a header or a background in menu Appearance resets nav menus locations (introduced in 1.5) * Fix: sub-sub-options and deeper levels defined in wpml-config.xml are not translated * Fix: Fatal error when creating a new site when Polylang is network activated (introduced in v1.5.1) * Fix: Admin language forced to English when activating Polylang (before creating any new language) * Fix: 'pll_count_posts' second parameter not taken into account * Fix: 'edit-post' and 'create-posts' capabilities are not differentiated when saving a post = 1.5.2 (2014-06-24) = * Fix: Revert post translations terms cleaning introduced in 1.5 as it seems to cause problems * Fix: Impossible to delete a biographical info (introduced in 1.5) * Fix: Security issue reported by [Gregory Viguier](http://www.screenfeed.fr/) = 1.5.1 (2014-06-19) = * Add: filter 'pll_settings_tabs' and action 'pll_settings_active_tab_{$tab}' * Add: possibility to add a path when using multiple domains (same path for all languages) * Fix: Bad redirection if /language/ is added to urls (introduced in 1.5) * Fix: Nav menu locations are not saved in customizer (introduced in 1.4) * Fix: Unable to unset nav menu locations * Fix: Incorrect link for date archives in language switcher (introduced in 1.5) * Fix: Fatal error when using featured content in Twenty Fourteen * Fix: Posts bulk edit broken (introduced in 1.5) * Fix: Polylang does not play nice with switch_to_blog * Fix: Warning: reset() expects parameter 1 to be array, null given in admin-filters-columns.php on line 81 = 1.5 (2014-05-29) = * Add Ukrainian translation contributed by [http://getvoip.com/](http://getvoip.com/) * Refresh translation metaboxes (again): now translated posts are chosen from an autocomplete input field * Categories and post tags translations are also chosen in an automplete input field * Better error management on languages pages * Use Dashicons instead of Icomoon icons for WP 3.8+ * Check if translated post is readable by the current user before displaying the language switcher * Minimum Twenty Fourteen version is now 1.1 * Code cleaning * Add support for Quick draft introduced in WP 3.8 * Add support for object cache plugins for recent posts and recent comments widgets * Add support for pages with modified query in the language switcher (ex: when multiple post types queried on the same page) * Add new API functions: pll_languages_list, pll_set_post_language, pll_set_term_language, pll_save_post_translations, pll_save_term_translations, pll_count_posts * Add new filter pll_the_languages_args * Add support for ICL_LANGUAGE_CODE == 'all' on admin side * Fix: Galician flag * Fix: static page on front pagination is broken * Fix: search url may be broken * Fix: PHP notice in icl_get_languages * Fix: more robust way of detecting language in url when using directory * Fix: delete translations terms orphans in database * Fix: inconsistent behavior when setting page on front from customizer * Fix: deleting a category assigns posts to wrong default category * Fix: quick edit breaks synchronization * Fix: some security issues = 1.4.5 (2014-04-19) = * Fix: Notice when combined with WPSEO 1.5+ * Fix: Impossible to disable a widget language filter once set (introduced in 1.4.4) * Fix: Unexpected redirection of the homepage with language code when permalink structure has no trailing slash (introduced in 1.4.4) * Fix: Some installs lead to wrong redirection when using domains (introduced in 1.4.4) * Fix: Possible infinite redirection while previewing posts (introduced in 1.4.4) * Fix: Uploaded medias don't get a language since WP 3.9 * Fix: Compatibility with Twenty Fourteen Ephemera widget in the version shipped with WP 3.9 = 1.4.4 (2014-04-09) = * Add: Compatibility with widgets customizer introduced in WP 3.9 * Fix: No post in translation dropdown after switching the language in edit post (introduced in 1.4.3) * Fix: No canonical redirection when there is no language code in url and the language code is not hidden for the default language * Fix: Suppress language cookie when using multiple domains = 1.4.3 (2014-03-22) = * Add: Serbian translation contributed by Sinisa * Add: Myanmar translation contributed by Sithu Thwin * Fix: comment form redirects to wp-admin when using multiple domains or subdomains. * Fix: fatal error with old versions of PHP (tested on PHP 5.2.4) * Fix: Bad gateway experienced by users hosted by wpengine.com * Fix: links got from tiny MCE link button are filtered with admin language filter instead of current post language * Fix: possibly wrong redirection in check_language_code_in_url when using multiple domains or subdomains = 1.4.2 (2014-02-24) = * Add: check multiple post types in PLL_Model::count_posts * Fix: error 404 on category links when setting the language by content (introduced in 1.4.1) * Fix: PHP notices in frontend-nav-menu.php with Artisteer themes * Fix: decrease the memory usage of untranslated posts list * Fix: home page not correctly redirected to canonical when using page on front and page name is kept in url = 1.4.1 (2014-02-16) = * Add: Czech translation contributed by [Přemysl Karbula](http://www.premyslkarbula.cz) * Fix: the displayed language is not correct in quick edit for categories and post tags * Fix: the language switcher does not display the correct link for translated parent categories if only children have posts * Fix: 3rd parameter of icl_object_id is not optional * Fix: issue when combining multiple domains and browser detection -> the combination is now forbidden * Fix: conflict Shiba Media Library: link between media translations is lost when using media quick edit * Fix: notice when using taxonomies in wpml-config.xml * Fix: incorrect post format link * Fix: Twenty Fourteen Ephemera widget strings are not translated = 1.4 (2014-01-22) = * Add Traditionial Chinese translation contributed by [香腸](http://sofree.cc/) * Minimum WordPress version is now v3.5 * Refresh translations metaboxes: now translated posts are chosen in a dropdown list * Check if translated archives for category, tag and post format are empty before displaying the language switcher * Add specific management of translated featured tag in Twenty Fourteen * Add the possibility not to cache homepage urls with option PLL_CACHE_HOME_URL (for users having several domains). * The function get_pages is now filtered by language * Ajax requests on frontend are now automatically detected. It is no more necessary to set 'pll_load_front' :) * Various performance improvements * 'pll_get_post_types' and 'pll_get_taxonomies' filters must be added *before* 'after_setup_theme' is fired * Pre 1.2 data will be removed from DB at first upgrade at least 60 days after upgrade to 1.4 * Removed some duplicate code between admin and frontend * Bug correction: incorrect pagination when using domains or subdomains * Bug correction: post format link not translated * Bug correction: impossible to use child terms with same name in hierarchical taxonomies * Bug correction: the terms list table is filtered according to new translation language instead of admin language filter = 1.3.1 (2013-12-13) = * Bug correction: fatal error on settings page if a static front page without language is set * Bug correction: wrong home url when using different domains per language = 1.3 (2013-12-11) = * Refresh admin UI for better look in WP 3.8 and more dynamic comportment * The "Detect browser language" option does now also controls returning visits (based on cookie). * Improved performance by optimizing some queries for WP 3.5+ * The user biography in default language is now stored in default WordPress usermeta * Add language parameter in API function pll_home_url and allow to call it on admin side * Calling 'get_terms' with the 'lang' parameter now uses a cache object per language * Bug correction: conflict with unstranslated taxonomies * Bug correction: possible malformed translation archive url in language switcher * Bug correction: a wrong language may be displayed in quick edit dropdown * Bug correction: it is possible to add multiple translations (in the same language) for a single taxonomy term * Bug correction: non public post types and taxonomies are visible in Polylang settings * Bug correction: the language is always chosen from cookie (or browser preferences) in some installations * Bug correction: Firefox language preference is not recognized when comparison is made on locale (instead of ISO 639-1 language code) * Bug correction: incorrect tax_query in PLL_Auto_Translate = 1.2.4 (2013-11-28) = * Better support for theme customizer * Bug correction: admin bar search does not filter by language * Bug correction: possible conflict on secondary query when querying taxonomies or single page * Bug correction: post type is not included in url when editing or adding a term translation * Bug correction: various warnings and PHP notices = 1.2.3 (2013-11-17) = * Avoid fatal error when ugrading with Nextgen Gallery active * Bug correction: menus locations of non default language are lost at theme deactivation * Bug correction: impossible to set menus locations of non default language in some specific cases * Bug correction: bbpress admin is broken = 1.2.2 (2013-11-14) = * Updated Polish translation thanks to [Bartosz](http://www.dfactory.eu/) * Delay strings translations upgrade from 'wp_loaded' to 'admin_init' to avoid fatal error when wp-ecommerce is active * Remove Jetpack infinite scroll compatibility code as it seems useless with new Polylang 1.2 code structure * Bug correction: fatal error when doing ajax on frontend * Bug correction: ICL_LANGUAGE_CODE incorrectly defined when doing ajax on frontend * Bug correction: ['current_lang'] and ['no-translation'] indexes disappeared from pll_the_languages raw output * Bug correction: invalid argument supplied for foreach() in /polylang/include/mo.php on line 57 * Bug correction: cookie may not be correctly set * Bug correction: languages columns may not be displayed in custom post types and custom taxonomies tables = 1.2.1 (2013-11-11) = * Update badly encoded Latvian translation * Suppress one query in PLL_WPML_Config when not in multisite * Bug correction: strings translations are not correctly upgraded * Bug correction: nav menus locations are not correctly upgraded for non default language = 1.2 (2013-11-10) = This version does include important changes in database. More than ever, make a database backup before upgrading * Add Arabic translation contributed by [Anas Sulaiman](http://ahs.pw/) * Major rewrite with new structure * Change the language and translations model from meta to taxonomy (no extra termmeta table created anymore) * Move the strings translations from option to a custom post type * Add support for language code in subdomain and for one different domain per language (experimental) * Add support of WordPress Importer plugin. Export must have been done with Polylang 1.2+ (experimental) * Add support for theme navigation customizer (was de-activated by Polylang since WP 3.4) * Request confirmation for deleting a language * Better management of default category for each language * Now check if date and post type archives are translated before displaying the language switcher * Update management of the 'copy' action of the custom fields section in wpml-config.xml * Add support for ICL_LANGUAGE_CODE and ICL_LANGUAGE_NAME of the WPML API on admin side * Add support of WPSEO custom strings translations when the language is set from content * Modify admin language filter for valid html and better visibility * Synchronization is now disabled by default (due to too much conflicts / questions on the forum) * Include rel="alternate" hreflang="x" selflink per google recommendation * Improve inline documentation * Bug correction: wrong datatype for second argument in polylang/include/auto-translate.php (introduced in 1.1.6) * Bug correction: same id is used for all language items in menu * Bug correction: wpml-config.xml file not loaded for sitewide active plugins on network installations * Bug correction: page parent dropdown list (in page attributes metabox) not correctly displayed when switching from a language with empty list = 1.1.6 (2013-10-13) = * Add the possibility to display the upgrade notice on plugins page * Bug correction: Illegal string offset 'taxonomy' in polylang/include/auto-translate.php * Bug correction: user defined strings translations are not loaded on admin side * Bug correction: untranslated post types are auto translated * Bug correction: tags are not added to post when the name exists in several languages and they are not translations of each other = 1.1.5 (2013-09-15) = * Add compatibility with Aqua Resizer (often used in porfolio themes) * Add support of 'icl_get_default_language' function from the WPML API * Remove the 3 characters limitation for the language code * Change default names for zh_CN, zh_HK, zh_TW * Bug correction: urls are modified in search forms = 1.1.4 (2013-08-16) = * Add simplified Chinese language contributed by [Changmeng Hu](http://www.wpdaxue.com) * Add Indonesian language contributed by [ajoull](http://www.ajoull.com/) * Bug correction: nav menu locations are lost when using the admin language filter * Bug correction: the cookie is not set when adding the language code to all urls (introduced in 1.1.3) = 1.1.3 (2013-07-21) = * Add Venetian language contributed by Michele Brunelli * Bug correction: wrong rewrite rules for non translated custom post type archives * Bug correction: 'post_id' parameter of pll_the_languages does not work * Bug correction: warning in wp_nav_menu_objects with Artisteer generated themes * Bug correction: warning when used together with theme my login plugin * Bug correction: language slug is modified and translations are lost when creating a nav menu with the same name as a language = 1.1.2 (2013-06-18) = * Posts and terms now inherit parent's language if created outside the standard WordPress ui * Improve the compatibility with the plugins Types and The Events Calendar, and again with WordPress SEO * Improve performance * Improve html validation * Add 'raw' argument to 'pll_the_languages' * Add the filter 'pll_translation_url' * Bug correction: no language is set for a (translated custom taxonomy) term when added from a (non tranlated) custom post type edit page * Bug correction: warning if 'get_terms' is called with a non-array 'include' argument (introduced in 1.1.1) * Bug correction: warning if the menu language switcher has nothing to display = 1.1.1 (2013-05-20) = * Move nav menu language switcher split from 'wp_nav_menu_objects' to 'wp_get_nav_menu_items' filter * Add the filter 'pll_redirect_home' * Automatically translate ids in 'include' argument of 'get_terms' (useful for the menus in the Suffusion theme) * Add compatibility with Jetpack infinite scroll * Bug correction: rtl text direction not set when adding the language code to all urls (introduced in 1.1) * Bug correction: hide again navigation panel in theme customizer as it still doesn't work * Bug correction: is_home not set on translated page when searching an empty string * Bug correction: fatal error when creating a post or term from frontend (introduced in 1.1) * Bug correction: attachments may load a wrong language when media translation was enabled then disabled * Bug correction: warning when querying posts before the action 'wp_loaded' has been fired (in auto-translate.php) * Bug correction: potential issue if other plugins use the filter 'get_nav_menu' * Bug correction: interference between language inline edit and search in admin list tables * Bug correction: auto-translate breaks queries tax_query when the 'field' is set to 'id' * Bug correction: search is not filtered by language for default permalinks (introduced in 1.1) * Tests done with WP 3.6 beta 3 and Twenty thirteen = 1.1 (2013-05-10) = * When adding the language to all urls, the language is now defined in (plugins_loaded, 1) for better compatibility with some plugins (WordPress SEO) * When querying posts and terms, ids are now automatically translated * Add the possibility to group string translations * Add the possibility to delete strings registered with 'icl_register_string' * Move the option 'polylang_widgets' in general polylang options * Better integration of the multilingual nav menus (everything is now integrated in the menus page of WordPress * The language switcher is now a menu item which can be placed everywhere in a nav menu * Posts or terms created from frontend are now assigned the current language (or another one if specified in the variable 'lang') * Bug correction: continents-cities-xx_XX.mo not downloaded * Bug correction: a gzipped 404 page is downloaded when a mo file does not exist on WordPress languages files repository * Bug correction: post_date_gmt not synchronized together with post_date * Tests done with WP 3.6 beta 2 and Twenty thirteen = 1.0.4 (2013-04-08) = * Add Estonian translation contributed by [Ahto Naris](http://profiles.wordpress.org/ahtonaris/) * Now compatible with languages files stored in wp-content/languages/themes * Bug correction: page preview does not work when adding the language code to all urls * Bug correction: error when a post type or taxonomy label is not a string * Bug correction: admin text section of wpml-config.xml (introduced in 1.0.3) * Bug correction: infinite redirect loop when querying an unattached media and the language code is added to all urls * Bug correction: the text direction is not set from Polylang options when the language code is added to all urls * Bug correction: get_adjacent_post is filtered by language even for post types without language * Bug correction: the home url is not not in the correct language in wp-login.php * Bug correction: the language is not correctly set when using date and name permalinks (introduced in 1.0.3) = 1.0.3 (2013-03-17) = * Add Catalan translation contributed by [Núria Martínez Berenguer](http://nuriamb.capa.webfactional.com) * Add Ukrainian translation contributed by [cmd soft](http://www.cmd-soft.com/) * Improve compatibility with WordPress SEO (sitemap for categories and tags) * A query is no more filtered by language when setting the parameter 'lang' to an empty value * Add the possibility to create a custom wpml-config.xml file in wp-content/polylang/ * Bug correction: custom menus are not displayed on search page (introduced in 1.0.2) * Bug correction: sql error when filtering terms by language (introduced in 1.0.2) * Bug correction: SSL doesn't work properly * Bug correction: php notice on IIS servers * Bug correction: clicking on the radio buttons in the admin language switcher does not work in Chrome * Bug correction: on multisite, the signup page is redirected to the home page * Bug correction: date archives are not correctly filtered for the default language when hiding the language code and using date and name permalinks * Bug correction: only one wpml-config.xml file is parsed = 1.0.2 (2013-02-26) = * Add the possibility to query comments by language * Add the possibility not to set a cookie by defining PLL_COOKIE to false (Polylang may not work as expected on some pages) * Now a returning visitor is redirected to its preferred language when visiting the front page in the default language * Add compatibility with the plugin Custom field template (copy and synchronize custom fields) * Improve compatibility with plugins or themes which overwrite columns in posts list table * Add the filter 'pll_get_flag' * Add support of 'icl_unregister_string' function from the WPML API * Bug correction: synchronizing custom fields breaks the plugin Advanced Custom Fields * Bug correction: 'pll_default_language' broken * Bug correction: rewrite rules are not flushed when re-activating the plugin * Bug correction: feed urls are not correctly escaped when using default permalinks * Bug correction: notice Undefined index: media_support * Bug correction: custom post types and taxonomies set in wpml-config.xml are not hidden * Bug correction: get_terms cannot query multiple languages * Bug correction: 'icl_register_string' is now persistant as in WPML (fixes Nextgen gallery translations which were not working) = 1.0.1 (2013-01-28) = * Add Swedish translation contributed by [matsii](http://wordpress.org/support/profile/matsii) * Add 2 new API functions : 'pll_is_translated_post_type' and 'pll_is_translated_taxonomy' * Bug correction: when using a static front page, the posts page is not filtered by language (introduced in 1.0) * Bug correction: disable translation for hard coded menu as it creates more problems than it solves (introduced in 1.0) = 1.0 (2013-01-24) = * Add Hungarian translation contributed by Csaba Erdei * Add Norwegian translation contributed by [Tom Boersma](http://www.oransje.com/) * Add Slovak translation contributed by [Branco (WebHostingGeeks.com)](http://webhostinggeeks.com/user-reviews/) * Code cleaning -> remove compatibility with versions older than 0.8 * Add search in the string translations list table * Add options to better control the synchronization of various metas for posts * It is now possible to synchronize sticky posts and publication dates * Add option to disable the multilingual support of media * Add options to better control the multilingual capability of custom post types and taxonomies * Better integration with new media management in WP 3.5 * Improve menu translation for themes which register a theme location but don't use it in wp_nav_menu (hard coded menu) * Add the pll_preferred_language filter allowing plugins to modify the language set by browser preferences detection * Add support of the WPML config file * Add support of 'icl_get_languages' and 'icl_link_to_element' functions from the WPML API * Add compatibility with YARPP and improve compatibility with WordPress SEO * Change cookie name which conflicts with Quick cache and allow users to overwrite it by defining the constant PLL_COOKIE * Bug correction: again the canonical redirection * Bug correction: the languages are not correctly displayed after they have been modified using quick edit * Bug correction: undefined index notice when saving strings translation when the admin language filter is active * Bug correction: rewrite rules are not correctly flushed when adding / deleting a language (introduced in 0.9.2) * Bug correction: the list of pages is displayed when a static font page translation is not translated (now replaced by the list of posts) * Bug correction: permalinks are not modified when doing cron and the language code is added to all urls * Bug correction: creating a new term with the same name as a language may modify the language code (slug) = 0.9.8 (2012-12-05) = * Bug correction: ajax on frontend does not work when adding the language code to all urls * Bug correction: search forms using the get_search_form filter do not work = 0.9.7 (2012-12-04) = * Bug correction: the admin language filter does filter non translatable post types * Bug correction: again the canonical redirection * Bug correction: fatal error when Polylang is used together with 'Author Avatars List' * Bug correction: widget titles uselessly appear in the strings translations table when the widget is set for only one language * Tests done with WordPress 3.5 RC3 and Twenty Twelve = 0.9.6 (2012-11-26) = * It is now possible to query the terms by language using the WordPress function 'get_terms' * Bug correction: search for empty string in default language displays posts in all languages when hiding the URL language information for default language * Bug correction: completely reworked the canonical redirection introduced in 0.9.5 which created more problems than it solved * Bug correction: ajax for media translations does not work * Started tests with WordPress 3.5 RC1 and Twenty Twelve = 0.9.5 (2012-11-13) = * The user can now choose the number of languages and strings translations to display * Add compatibility with the 'icl_object_id' function and ICL_LANGUAGE_CODE and ICL_LANGUAGE_NAME constants from the WPML API * Add 17 languages to the predefined list (automatic download and update of language files won't work) * Bug correction: post preview does not work when adding the language code to all urls * Bug correction: redirect to front page in default language when posting a comment on static front page * Bug correction: impossible to create terms with the same name in different languages * Bug correction: query string added by other plugins is erased when adding the language code to all urls * Bug correction: redirect erase 'POST' variables on homepage when adding the language code to all urls * Bug correction: English (en_US) loads rtl style when using a localized WordPress package with an rtl language * Bug correction: on some installation strings translations do not work with some special characters * Bug correction: incoming links are not redirected to canonical url when adding the language code to all urls and hiding the code for the default language * Bug correction: search form does not work in non default language when using permalinks without trailing slash = 0.9.4 (2012-10-23) = * Add Afrikaans translation contributed by [Kobus Joubert](http://translate3d.com/) * Add Belarusian translation contributed by [Alexander Markevitch](http://fourfeathers.by/) * Add Afrikaans (af) and Belarusian (be_BY) to predefined languages list (automatic download and update of language files won't work) * Add the possibility to translate the date format and time format * Add compatibility with the 'icl_get_home_url' function from the WPML API * Bug correction: still some issues with string translations * Bug correction: search is not filtered by the (default) language when the language is set by content and the language code is hidden for the default language * Bug correction: posts & pages preview urls are broken when adding the language code to all urls * Bug correction: automatically added new top-level pages to menus are not filtered by language * Bug correction: the admin language filter messes the categories languages when editing a post and the parent dropdown list when editing a category * Bug correction: search form does not work when using a static front page (introduced in 0.9.2) * Bug correction: can't set languages for categories and post tags on blogs created after polylang has been activated at network level * Bug correction: menus don't work with catch box theme ('has_nav_menu' not correctly filtered) = 0.9.3 (2012-10-08) = * Add Bulgarian translation contributed by [pavelsof](http://wordpress.org/support/profile/pavelsof) * Add compatibility with WPML API for strings translations * Bug correction: dates are not translated (introduced in 0.9.2) * Bug correction: the language is lost when keeping - No change - for language in bulk edit * Bug correction: categories and tags are duplicate (when default language is set automatically to existing content and categories and tags share the same name) = 0.9.2 (2012-09-30) = * Support new WordPress (WP 3.5+) convention for js and css files naming * Improve performance, mainly on frontend * Bug correction: the category language is not set when creating it in the post editor (introduced in 0.9) * Bug correction: unable to add a query string when using a static front page * Bug correction: ajax tag suggestion in "edit post" conflicts with the admin content language filter * Bug correction: ugly notices when trying to access a static front page which has not been translated * Bug correction: the language code is added to custom post types and taxonomies permalinks even if they are not translatable * Bug correction: some arrays in wp_locale mix English and other language * Bug correction: the media language is not correctly set when uploading from post if the post has not been saved after choosing the language = 0.9.1 (2012-09-20) = * Add Finnish translation contributed by [Jani Alha](http://www.wysiwyg.fi) * Bug correction: improve the robustness of the admin content language filter * Bug correction: the language switcher displays languages which have no posts or pages (introduced in 0.9) * Bug correction: wrong default language when adding a new media * Bug correction: the dropdown language switcher does not switch language when there is no post translation * Bug correction: issue with translations when using category quick edit * Bug correction: home redirects to 404 when combining static front page + force_lang = 1 + hide_default = 0 = 0.9 (2012-09-12) = * Add Turkish translation contributed by [darchws](http://darch.ws/) * Add media translation support * Add a persistant content language filter on admin side (WP 3.2+ required) * Add biographical info translation * Add multiline support for string translations * Add the possibility to clean the strings translation database * Add quick edit and bulk edit support for posts and pages * Add quick edit support for categories and tags * The language is now loaded with 'setup_theme' action instead of 'wp' action when always adding language information url * Search form now does use javascript only for searchform.php when pretty permalinks are not used * Add the option PLL_SEARCH_FORM_JS to disable the js code used to modify the search form * Suppress the option PLL_SYNC, replaced by an option in the language settings ui * Suppress the PLL_DISPLAY_ALL option * Suppress the template tag 'the_languages' (replaced by 'pll_the_languages' since v0.5) * Suppress the function 'pll_is_front_page' (useless since 0.8.2) * Bug correction: the browser language is sometimes not correctly detected by Android * Bug correction: the rtl text direction is not correct when editing an existing language * Bug correction: rss feed does not work if translated site title or tagline contains special characters * Bug correction: post types and taxonomies labels are not translated on frontend * Bug correction: the filter 'pll_copy_post_metas' does not work for metas with multiple values * Bug correction: translations table for post and terms are uselessly serialized two times * Bug correction: attempt to suppress conflict with themes which hardcode the name of nav menus (but do define a theme location) * Bug correction: homepage displays all posts when the front page displays a static page and no page is selected for front page (but one is selected for posts page) * Bug correction: widgets disappear when Polylang is enabled = 0.8.10 (2012-08-06) = * Add Lithuanian (lt_LT) to predefined languages list (automatic download and update of language files won't work) * Add Lithuanian translation contributed by [Naglis Jonaitis](http://najo.lt/) * Bug correction: empty string translation issue * Bug correction: 'wp_list_pages' does not filter custom post types * Bug correction: warning if posts are queried before the action 'wp_loaded' has been fired * Bug correction: notice in twentyten when resquesting a date archive with no posts = 0.8.9 (2012-07-20) = * Add Portuguese translation contributed by [Vitor Carvalho](http://vcarvalho.com/) = 0.8.8 (2012-07-18) = * Validation improvement thanks to kg69design * Bug correction: custom post types rewrite rules are broken when registered with query_var=>false * Bug correction: user admin language not deleted when uninstalling the plugin * Bug correction: pll_current_language('name') returns locale instead of language name * Bug correction: ajax on frontend does not work * Bug correction: homepage pagination broken when redirecting the language page to a static front page * Bug correction: taxonomies conflicts on custom post types * Bug correction: the admin language is not updated when edited by other users = 0.8.7 (2012-06-10) = * Add the possibility to load Polylang API for ajax requests on frontend * Bug correction: search form is broken when using a static front page * Bug correction: admin bar search does not work * Tests done with WordPress 3.4 RC2 = 0.8.6 (2012-05-23) = * Add the possibility to use a local config file to set options * Improve robustness (less PHP notices) * Bug correction: Menus not showing in preview mode * Bug correction: fatal error when customizing a theme in WP 3.4 beta 4 * Bug correction: second page of search results returns 404 when using pretty permalinks = 0.8.5 (2012-05-14) = * Bug correction : sites using static front page are messed in v0.8.4 = 0.8.4 (2012-05-13) = * Add a new argument 'post_id' to the function pll_the_languages to display posts translations within the loop * Bug correction: every posts in every languages are shown on the homepage when requesting the wrong one with or without 'www.' * Bug correction: every posts in every languages are shown when requesting /?p=string * Bug correction: the language is not correctly set for wp-signup.php and wp-activate.php * Bug correction: wrong home links when using permalinks with front with WP 3.3 and older * Bug correction: wrong redirection after posting a comment when adding the language information to all urls * Bug correction: term language may be lost in some situations * Bug correction: post language is set to default if updated outside the edit post page * Bug correction: javascript error in WP 3.1 * Bug correction: can't toggle visibility of tags metabox in edit post panel * Tests done with WordPress 3.4 beta 4 = 0.8.3 (2012-04-10) = * Add Danish translation contributed by [Compute](http://wordpress.org/support/profile/compute) * Add Spanish translation contributed by Curro * Add the possibility to add a content in a different language than the current one by setting explicitely the lang parameter in the secondary query * Add support of PATHINFO permalinks * Bug correction: secondary queries not correctly filtered by language * Bug correction: wrong archives links when using permalinks with front * Bug correction: wrong homepage link when keeping 'language' in permalinks with front * Bug correction: flush_rewrite_rules notice when setting up a static front page (introduced in 0.8.2) * Bug correction: every posts in every languages are shown when hitting the homepage with a query string unknown to WP (thanks to Gonçalo Peres) * Bug correction: every posts in every languages are shown on the homepage when PHP adds index.php to the url * Tests done with WordPress 3.4 beta 1 = 0.8.2 (2012-03-20) = * Add Italian translation contributed by [Luca Barbetti](http://wordpress.org/support/profile/lucabarbetti) * Improve performance on admin side * Comment status and ping status are now copied when adding a new translation * Deprecated API function 'pll_is_front_page' as it is now useless * Bug correction: Wrong translation url for taxonomies when adding the language information to all urls * Bug correction: "translation" of search page does not work if the site is only made of pages * Bug correction: wrong language permalink structure introduced in 0.8.1 * Bug correction: wrong language set when clicking on "add new" translation in edit category and edit tags panels * Bug correction: site does not display if no languages are set * Bug correction: get_author_posts_url is 404 * Bug correction: homepage is 404 when using a static front page and adding the language information to all urls = 0.8.1 (2012-03-11) = * Add Latvian translation contributed by [@AndyDeGroo](http://twitter.com/AndyDeGroo) * It is now possible to synchronize multiple values for custom fields * Add new API function pll_current_language * Add the pll_rewrite_rules filter allowing plugins to filter rewrite rules by language * WP 3.4 preparation: disable the menu section in the customize theme admin panel (unusable with Polylang) * Bug correction: removing 'language' in permalinks does not work in WP 3.4 alpha * Bug correction: problems with custom post type archives when 'has_archive' is set (thanks to AndyDeGroo) * Bug correction: 404 error when combining %postname% permastructure with "Add language information to all URL" option * Bug correction: translated custom strings are duplicated if registered several times * Bug correction: queries with an array of post types are not correctly filtered * Bug correction: wp-login.php always in English = 0.8 (2012-02-29) = * Sticky posts are now filtered by language * It is now possible to use the language page as home page * Add an "About Polylang" metabox on the languages admin page * Add the pll_the_languages filter allowing to filter the whole output of the language switcher * Add a new argument 'display_names_as' to the function pll_the_languages * Add pll_get_post_types & pll_get_taxonomies filters allowing to enable / disable the language filter for post types & taxonomies * Add ckb to predefined languages list * Completely reworked the string translation storage in the database * Some performance improvements on admin side * Improve compatibility with other plugins broken by the home url filter * Add an option to disable the home url filter * Add an option to disable synchronization of metas between translations * Bug correction: body class 'home' is not set on translated homepage * Bug correction: robots.txt is broken when adding the language code to all urls (including default language) * Bug correction: bad name for the Czech flag * Bug correction: bad language information in rss feed for WP < 3.4 * Bug correction: signup broken on multisite * Bug correction: the translation url is set to self when using a static front page and no page for posts and there is no translation * Bug correction: problems with custom post type archive titles * Bug correction: problems with custom post type if rewrite slug is different from post_type (thanks to AndyDeGroo) * Bug correction: quick edit still breaks translation linking of pages (thanks to AndyDeGroo) * Bug correction: bad rewrite rules for feeds (introduced in 0.7.2) * Bug correction: the order is not saved when creating a language * Bug correction: the categories list is not updated when adding a new category (ajax broken) = 0.7.2 (2012-02-15) = * Add Polish translation contributed by [Peter Paciorkiewicz](http://www.paciorkiewicz.pl) * Add 5 new languages to predefined list * completely reworked rewrite rules * WP 3.4 preparation: add new WordPress languages files to download when creating a new language * Bug correction: custom nav menus do not work in Artisteer generated themes * Bug correction: having a single language causes multiple warnings while saving post/page. * Bug correction: custom nav menu broken on archives pages * Bug correction: the language switcher does not link to translated post type archive when using pretty permalinks * Bug correction: the tags are not saved in the right language when translated tags have the same name * Bug correction: bad link in post preview when adding language code to all urls * Bug correction: feed not filtered by language when adding language code to all urls * Bug correction: duplicate canonical link when used together with WordPress SEO by Yoast * Bug correction: the all posts admin page is messed if another plugin adds a column * Bug correction: 404 error on static front page when adding language code to all urls (including default language) = 0.7.1 (2012-02-06) = * Allow using 3 characters languages codes (ISO 639-2 or 639-3) * The predefined languages dropdown list now displays the locale to help differentiate some languages * Add 5 new languages to predefined list * Bug correction: the filter 'pll_copy_post_metas' does not work * Bug correction: impossible to add a tag in the edit post panel * Bug correction: rewrite rules not correct * Bug correction: cache issue with css and js files = 0.7 (2012-01-30) = * Add Hebrew translation contributed by [ArielK](http://www.arielk.net) * Add support for RTL languages for both frontend and admin * Twenty Ten and Twenty Eleven languages files are now automatically downloaded when creating a new langage * Improve filtering tags by language in the edit post panel * Category parent dropdown list is now filtered by language * Category parents are now synchronized between translations * Add the possibility to have the language information in all URL * Add support for post formats * Add option allowing not to show the current language in the language switcher (for both menu and widget) * Add a title attribute (and the possibility to personalize it with a filter) to flags * pll_get_post and pll_get_term second parameter is now optional and defaults to current language * Add pll_the_language_link filter allowing to filter translation links outputed by the language switcher * The option PLL_DISPLAY_ALL is no longer supported * Bug correction: Autosave reset to default language * Bug correction: blog info not translated in feeds * Bug correction: post comments feed always in default language * Bug correction: undefined index notice when setting up a custom menu widget * Bug correction: rewrite rules are not correctly reset when deactivating the plugin * Bug correction: is_home not correctly set on pages 2, 3... * Bug correction: avoid naming conflicts (in sql queries) with other themes / plugins * Bug correction: bad language detection and url rewriting of custom post types archives = 0.6.1 (2012-01-12) = * Add Dutch translation contributed by [AlbertGn](http://wordpress.org/support/profile/albertgn) * Disable everything except the languages management panel while no language has been created * Bug correction: can't have the same featured image in translated posts * Bug correction: parent page dropdown does appear only after the page has been saved * Bug correction: archives widget not working anymore * Bug correction: string translations does not work for WP < 3.3 * Bug correction: fix fatal error in string translations caused by widgets using the old API * Bug correction: the strings translation panel is unable to translate strings with special characters * Bug correction: Polylang "is_front_page" returns true on archives pages = 0.6 (2012-01-07) = * Add Greek translation contributed by [theodotos](http://www.ubuntucy.org) * WordPress languages files are now automatically downloaded when creating a new langage (and updated when updating WordPress) * Add the possibility to change the order of the languages in the language switcher * Add the possibility to translate the site title, tagline and widgets titles * Categories, post tags, featured image, page parent, page template and menu order are now copied when adding a new translation * Translations are now accessibles in the "Posts", "Pages", "Categories" and "Post tags" admin panels * Improve the dropdown language switcher widget (sends now to translated page or home page based on options) * Move custom flags from polylang/local_flags to wp_content/polylang * Add two options to "pll_the_languages" ('hide_if_no_translation' and 'hide_current'). *The function does not output ul tag anymore* * Improve API * Bug correction: Twenty eleven custom Header problem with v0.5.1 * Bug correction: front-page.php not loaded for translated front page = 0.5.1 (2011-12-18) = * Improved German translation contributed by [Christian Ries](http://www.singbyfoot.lu) * Bug correction: translated homepage not recognized as home page when it displays posts * Bug correction: predefined language list does not work on IE8 * Bug correction: on some installations, "Add New" post doesn't keep intended language * Bug correction: fatal error when Polylang is used together with the plugin Tabbed Widgets * Bug correction: language Switcher points sometimes to wrong places = 0.5 (2011-12-07) = * Add multisite support * Rework the Polylang admin panel. There is now a set of predefined languages * Improve categories and tags language filter in the edit post panel * Categories and tags created in the edit post panel are now created with the same language as the post * The language switcher can now force the link to the front page instead of the translated page * The nav menus can now display a language switcher * Improved performance * Optimized the calendar widget (less code and sql queries executed) * Added the possibility to display posts and terms with no language set (see the documentation to know how to enable this functionnality) * Started the creation of a small API for theme and plugin programmers * Bug correction: when using a static front page, the page for posts does not work when using the default permalink settings * Bug correction: the search form does not work if a static front page is used * Bug correction: quick edit breaks translations * Bug correction: categories and post tags translations don't work for more than 2 languages * Bug correction: the output of wp_page_menu is not correct for non default languages = 0.4.4 (2011-11-28) = * Bug correction: When using a static front page, the translated home page displays posts instead of the translated page * Bug correction: Automatic language setting of existing categories and post tags does not work correctly = 0.4.3 (2011-11-19) = * Add Russian translation contributed by [yoyurec](http://yoyurec.in.ua) * Bug correction: impossible to suppress the language name in the language switcher widget settings * Bug correction: post's page does not work when using a static front page * Bug correction: flags in local_flags directory are removed after an automatic upgrade (now works for an upgrade from 0.4.3+ to a higher version) * Bug correction: switching to default language displays a 404 Error when hiding the default language in url and displaying the language switcher as dropdown * Other minor bug corrections * Tests done with WordPress 3.3 beta 3 = 0.4.2 (2011-11-16) = * Bug correction: language settings page is broken in v0.4.1 = 0.4.1 (2011-11-16) = * Bug correction: flags shows even when you set doesn't to show * Bug correction: custom taxonomies do not work * Bug correction: some users get the fatal error: call to undefined function wp_get_current_user() in /wp-includes/user.php on line 227 = 0.4 (2011-11-10) = * Add a documentation (in English only) * Add the possibility to hide the url language information for the default language * Add the possibility to set the admin language in the user profile * Add the possibilty to fill existing posts, pages, categories & tags with the default language * Add support for custom post types and custom taxonomies * Add the possibility to display flags in the language switcher * Add CSS classes to customize rendering of the language switcher * Add the possibility to display the language switcher as a dropdown list * Add support for calendar widget * Improve performance: less sql queries * Improve data validation when creating or updating languages * Bug correction: 'wp_list_pages' page order is ignored when the plugin is enabled * Bug correction: when using 'edit' or 'add new' (translation) for posts, the categories appear in the wrong language * Bug correction: pages are not included in language post count * Bug correction: the language switcher does not display languages if there are only pages * Bug correction: the widget filter does not allow to come back to 'all languages' once a language has been set * Other minor bug corrections = 0.3.2 (2011-10-20) = * Bug correction: authors pages are not filtered by language * Bug correction: language pages use the archive template * Bug correction: database error for comments on posts and pages * Bug correction: "Add new" translation for pages creates a post instead of a page * Bug correction: the search query does not look into pages = 0.3.1 (2011-10-16) = * Bug correction: the widget settings cannot be saved when activating Polylang * Bug correction: the archives widget does not display any links * Bug correction: ajax form for translations not working in the 'Categories' and 'Post tags' admin panels = 0.3 (2011-10-07) = * Add language filter for widgets * Improved performance for filtering pages by language * Improved security * Minor bug correction with versions management = 0.2 (2011-10-05) = * Add language filter for nav menus * Add German translation * Add language filter for recent comments * Add ajax to term edit form * Add ajax to post metabox * Improved performance for filtering terms by language * Bugs correction = 0.1 (2011-09-22) = * Initial release settings/settings-url.php000066600000022052152100561500011555 0ustar00 'url', 'title' => __( 'URL modifications', 'polylang' ), 'description' => __( 'Decide how your URLs will look like.', 'polylang' ), 'configure' => true, ) ); $this->links_model = &$polylang->links_model; $this->page_on_front = &$polylang->static_pages->page_on_front; } /** * Displays the fieldset to choose how the language is set * * @since 1.8 */ protected function force_lang() {?>

    ' . esc_html( home_url( $this->links_model->using_permalinks ? 'en/my-post/' : '?lang=en&p=1' ) ) . ''; ?>

    ' . esc_html( str_replace( array( '://', 'www.' ), array( '://en.', '' ), home_url( 'my-post/' ) ) ) . ''; ?>

    options['force_lang'] ? '' : 'style="display: none;"'; ?>> model->get_languages_list() as $lg ) { printf( '' . '', esc_attr( $lg->slug ), esc_attr( $lg->name ), esc_url( isset( $this->options['domains'][ $lg->slug ] ) ? $this->options['domains'][ $lg->slug ] : ( $lg->slug == $this->options['default_lang'] ? $this->links_model->home : '' ) ) ); } ?>

    ' . esc_html( home_url( 'en/' ) ) . ''; ?>

    ' . esc_html( home_url( 'language/en/' ) ) . ''; ?>

    model->post->get_language( $this->page_on_front ); $lang = $lang ? $lang : $this->model->get_language( $this->options['default_lang'] ); printf( /* translators: %s are urls */ esc_html__( 'Example: %s instead of %s', 'polylang' ), '' . esc_html( $this->links_model->home_url( $lang ) ) . '', '' . esc_html( _get_page_link( $this->page_on_front ) ) . '' ); ?>

    force_lang(); ?>
    $this->options['force_lang'] ? '' : 'style="display: none;"'; ?>> hide_default(); ?>
    links_model->using_permalinks ) { ?>
    $this->options['force_lang'] ? '' : 'style="display: none;"'; ?>> rewrite(); ?>
    page_on_front ) { ?>
    $this->options['force_lang'] ? '' : 'style="display: none;"'; ?>> redirect_lang(); ?>
    $domain ) { if ( empty( $domain ) ) { $lang = $this->model->get_language( $key ); add_settings_error( 'general', 'pll_invalid_domain', esc_html( sprintf( /* translators: %s is a native language name */ __( 'Please enter a valid URL for %s.', 'polylang' ), $lang->name ) ) ); } else { $newoptions['domains'][ $key ] = esc_url_raw( trim( $domain ) ); } } } foreach ( array( 'hide_default', 'redirect_lang' ) as $key ) { $newoptions[ $key ] = isset( $options[ $key ] ) ? 1 : 0; } if ( 3 == $options['force_lang'] ) { if ( ! class_exists( 'PLL_Xdata_Domain', true ) ) { $newoptions['browser'] = 0; } $newoptions['hide_default'] = 0; } // Check if domains exist if ( $newoptions['force_lang'] > 1 ) { $this->check_domains( $newoptions ); } return $newoptions; // Take care to return only validated options } /** * Check if subdomains or domains are accessible * * @since 1.8 * * @param array $options new set of options to test */ protected function check_domains( $options ) { $options = array_merge( $this->options, $options ); $model = new PLL_Model( $options ); $links_model = $model->get_links_model(); foreach ( $this->model->get_languages_list() as $lang ) { $url = add_query_arg( 'deactivate-polylang', 1, $links_model->home_url( $lang ) ); // Don't redefine vip_safe_wp_remote_get() as it has not the same signature as wp_remote_get() $response = function_exists( 'vip_safe_wp_remote_get' ) ? vip_safe_wp_remote_get( esc_url_raw( $url ) ) : wp_remote_get( esc_url_raw( $url ) ); $response_code = wp_remote_retrieve_response_code( $response ); if ( 200 != $response_code ) { add_settings_error( 'general', 'pll_invalid_domain', esc_html( sprintf( /* translators: %s is an url */ __( 'Polylang was unable to access the URL %s. Please check that the URL is valid.', 'polylang' ), $url ) ) ); } } } } settings/settings-module.php000066600000014160152100561500012241 0ustar00options = &$polylang->options; $this->model = &$polylang->model; $this->links_model = &$polylang->links_model; $args = wp_parse_args( $args, array( 'title' => '', 'description' => '', 'active_option' => false, ) ); foreach ( $args as $prop => $value ) { $this->$prop = $value; } // All possible action links, even if not always a link ;-) $this->action_links = array( 'configure' => sprintf( '%s', esc_attr__( 'Configure this module', 'polylang' ), '#', esc_html__( 'Settings', 'polylang' ) ), 'deactivate' => sprintf( '%s', esc_attr__( 'Deactivate this module', 'polylang' ), wp_nonce_url( '?page=mlang&tab=modules&pll_action=deactivate&noheader=true&module=' . $this->module, 'pll_deactivate' ), esc_html__( 'Deactivate', 'polylang' ) ), 'activate' => sprintf( '%s', esc_attr__( 'Activate this module', 'polylang' ), wp_nonce_url( '?page=mlang&tab=modules&pll_action=activate&noheader=true&module=' . $this->module, 'pll_activate' ), esc_html__( 'Activate', 'polylang' ) ), 'activated' => esc_html__( 'Activated', 'polylang' ), 'deactivated' => esc_html__( 'Deactivated', 'polylang' ), ); $this->buttons = array( 'cancel' => sprintf( '', esc_html__( 'Cancel' ) ), 'save' => sprintf( '', esc_html__( 'Save Changes' ) ), ); // Ajax action to save options add_action( 'wp_ajax_pll_save_options', array( $this, 'save_options' ) ); } /** * Tells if the module is active * * @since 1.8 * * @return bool */ public function is_active() { return empty( $this->active_option ) || ! empty( $this->options[ $this->active_option ] ); } /** * Activates the module * * @since 1.8 */ public function activate() { if ( ! empty( $this->active_option ) ) { $this->options[ $this->active_option ] = true; update_option( 'polylang', $this->options ); } } /** * Deactivates the module * * @since 1.8 */ public function deactivate() { if ( ! empty( $this->active_option ) ) { $this->options[ $this->active_option ] = false; update_option( 'polylang', $this->options ); } } /** * Protected method to display a configuration form * * @since 1.8 */ protected function form() { // Child classes can provide a form } /** * Public method returning the form if any * * @since 1.8 * * @return string */ public function get_form() { static $form = false; // Read the form only once if ( false === $form ) { ob_start(); $this->form(); $form = ob_get_clean(); } return $form; } /** * Allows child classes to validate their options before saving * * @since 1.8 * * @param array $options Raw options * @return array Options */ protected function update( $options ) { return array(); // It's responsibility of the child class to decide what is saved } /** * Ajax method to save the options * * @since 1.8 */ public function save_options() { check_ajax_referer( 'pll_options', '_pll_nonce' ); if ( ! current_user_can( 'manage_options' ) ) { wp_die( -1 ); } if ( $this->module == $_POST['module'] ) { // It's up to the child class to decide which options are saved, whether there are errors or not $post = array_diff_key( $_POST, array_flip( array( 'action', 'module', 'pll_ajax_backend', '_pll_nonce' ) ) ); $options = $this->update( $post ); $this->options = array_merge( $this->options, $options ); update_option( 'polylang', $this->options ); // Refresh language cache in case home urls have been modified $this->model->clean_languages_cache(); // Refresh rewrite rules in case rewrite, hide_default, post types or taxonomies options have been modified // Don't use flush_rewrite_rules as we don't have the right links model and permastruct delete_option( 'rewrite_rules' ); ob_start(); if ( ! get_settings_errors() ) { // Send update message add_settings_error( 'general', 'settings_updated', __( 'Settings saved.' ), 'updated' ); settings_errors(); $x = new WP_Ajax_Response( array( 'what' => 'success', 'data' => ob_get_clean() ) ); $x->send(); } else { // Send error messages settings_errors(); $x = new WP_Ajax_Response( array( 'what' => 'error', 'data' => ob_get_clean() ) ); $x->send(); } } } /** * Get the row actions * * @since 1.8 * * @return array */ protected function get_actions() { if ( $this->is_active() && $this->get_form() ) { $actions[] = 'configure'; } if ( $this->active_option ) { $actions[] = $this->is_active() ? 'deactivate' : 'activate'; } if ( empty( $actions ) ) { $actions[] = $this->is_active() ? 'activated' : 'deactivated'; } return $actions; } /** * Get the actions links * * @since 1.8 * * @return array */ public function get_action_links() { return array_intersect_key( $this->action_links, array_flip( $this->get_actions() ) ); } /** * Default upgrade message ( to Pro version ) * * @since 1.9 * * @return string */ protected function default_upgrade_message() { return sprintf( '%s %s', __( 'You need Polylang Pro to enable this feature.', 'polylang' ), 'https://polylang.pro', __( 'Upgrade now.', 'polylang' ) ); } /** * Allows child classes to display an upgrade message * * @since 1.9 * * @return string */ public function get_upgrade_message() { return ''; } /** * Get the buttons * * @since 1.9 * * @return array */ public function get_buttons() { return $this->buttons; } } settings/languages.php000066600000017455152100561500011076 0ustar00 ISO 639-1 language code * [1] => WordPress locale * [2] => name * [3] => text direction * [4] => flag code */ $languages = array( 'af' => array( 'af', 'af', 'Afrikaans', 'ltr', 'za' ), 'ar' => array( 'ar', 'ar', 'العربية', 'rtl', 'arab' ), 'ary' => array( 'ar', 'ary', 'العربية المغربية', 'rtl', 'ma' ), 'as' => array( 'as', 'as', 'অসমীয়া', 'ltr', 'in' ), 'az' => array( 'az', 'az', 'Azərbaycan', 'ltr', 'az' ), 'azb' => array( 'az', 'azb', 'گؤنئی آذربایجان', 'rtl', 'az' ), 'bel' => array( 'be', 'bel', 'Беларуская мова', 'ltr', 'by' ), 'bg_BG' => array( 'bg', 'bg_BG', 'български', 'ltr', 'bg' ), 'bn_BD' => array( 'bn', 'bn_BD', 'বাংলা', 'ltr', 'bd' ), 'bo' => array( 'bo', 'bo', 'བོད་ཡིག', 'ltr', 'tibet' ), 'bs_BA' => array( 'bs', 'bs_BA', 'Bosanski', 'ltr', 'ba' ), 'ca' => array( 'ca', 'ca', 'Català', 'ltr', 'catalonia' ), 'ceb' => array( 'ceb', 'ceb', 'Cebuano', 'ltr', 'ph' ), 'cs_CZ' => array( 'cs', 'cs_CZ', 'Čeština', 'ltr', 'cz' ), 'cy' => array( 'cy', 'cy', 'Cymraeg', 'ltr', 'wales' ), 'da_DK' => array( 'da', 'da_DK', 'Dansk', 'ltr', 'dk' ), 'de_CH' => array( 'de', 'de_CH', 'Deutsch', 'ltr', 'ch' ), 'de_CH_informal' => array( 'de', 'de_CH_informal', 'Deutsch', 'ltr', 'ch' ), 'de_DE' => array( 'de', 'de_DE', 'Deutsch', 'ltr', 'de' ), 'de_DE_formal' => array( 'de', 'de_DE_formal', 'Deutsch', 'ltr', 'de' ), 'dzo' => array( 'dz', 'dzo', 'རྫོང་ཁ', 'ltr', 'bt' ), 'el' => array( 'el', 'el', 'Ελληνικά', 'ltr', 'gr' ), 'en_AU' => array( 'en', 'en_AU', 'English', 'ltr', 'au' ), 'en_CA' => array( 'en', 'en_CA', 'English', 'ltr', 'ca' ), 'en_GB' => array( 'en', 'en_GB', 'English', 'ltr', 'gb' ), 'en_NZ' => array( 'en', 'en_NZ', 'English', 'ltr', 'nz' ), 'en_US' => array( 'en', 'en_US', 'English', 'ltr', 'us' ), 'en_ZA' => array( 'en', 'en_ZA', 'English', 'ltr', 'za' ), 'eo' => array( 'eo', 'eo', 'Esperanto', 'ltr', 'esperanto' ), 'es_AR' => array( 'es', 'es_AR', 'Español', 'ltr', 'ar' ), 'es_CL' => array( 'es', 'es_CL', 'Español', 'ltr', 'cl' ), 'es_CO' => array( 'es', 'es_CO', 'Español', 'ltr', 'co' ), 'es_ES' => array( 'es', 'es_ES', 'Español', 'ltr', 'es' ), 'es_GT' => array( 'es', 'es_GT', 'Español', 'ltr', 'gt' ), 'es_MX' => array( 'es', 'es_MX', 'Español', 'ltr', 'mx' ), 'es_PE' => array( 'es', 'es_PE', 'Español', 'ltr', 'pe' ), 'es_VE' => array( 'es', 'es_VE', 'Español', 'ltr', 've' ), 'et' => array( 'et', 'et', 'Eesti', 'ltr', 'ee' ), 'eu' => array( 'eu', 'eu', 'Euskara', 'ltr', 'basque' ), 'fa_AF' => array( 'fa', 'fa_AF', 'فارسی', 'rtl', 'af' ), 'fa_IR' => array( 'fa', 'fa_IR', 'فارسی', 'rtl', 'ir' ), 'fi' => array( 'fi', 'fi', 'Suomi', 'ltr', 'fi' ), 'fo' => array( 'fo', 'fo', 'Føroyskt', 'ltr', 'fo' ), 'fr_BE' => array( 'fr', 'fr_BE', 'Français', 'ltr', 'be' ), 'fr_CA' => array( 'fr', 'fr_CA', 'Français', 'ltr', 'quebec' ), 'fr_FR' => array( 'fr', 'fr_FR', 'Français', 'ltr', 'fr' ), 'fy' => array( 'fy', 'fy', 'Frysk', 'ltr', 'nl' ), 'gd' => array( 'gd', 'gd', 'Gàidhlig', 'ltr', 'scotland' ), 'gl_ES' => array( 'gl', 'gl_ES', 'Galego', 'ltr', 'galicia' ), 'gu' => array( 'gu', 'gu', 'ગુજરાતી', 'ltr', 'in' ), 'haz' => array( 'haz', 'haz', 'هزاره گی', 'rtl', 'af' ), 'he_IL' => array( 'he', 'he_IL', 'עברית', 'rtl', 'il' ), 'hi_IN' => array( 'hi', 'hi_IN', 'हिन्दी', 'ltr', 'in' ), 'hr' => array( 'hr', 'hr', 'Hrvatski', 'ltr', 'hr' ), 'hu_HU' => array( 'hu', 'hu_HU', 'Magyar', 'ltr', 'hu' ), 'hy' => array( 'hy', 'hy', 'Հայերեն', 'ltr', 'am' ), 'id_ID' => array( 'id', 'id_ID', 'Bahasa Indonesia', 'ltr', 'id' ), 'is_IS' => array( 'is', 'is_IS', 'Íslenska', 'ltr', 'is' ), 'it_IT' => array( 'it', 'it_IT', 'Italiano', 'ltr', 'it' ), 'ja' => array( 'ja', 'ja', '日本語', 'ltr', 'jp' ), 'jv_ID' => array( 'jv', 'jv_ID', 'Basa Jawa', 'ltr', 'id' ), 'ka_GE' => array( 'ka', 'ka_GE', 'ქართული', 'ltr', 'ge' ), 'kab' => array( 'kab', 'kab', 'Taqbaylit', 'ltr', 'dz' ), 'kk' => array( 'kk', 'kk', 'Қазақ тілі', 'ltr', 'kz' ), 'km' => array( 'km', 'km', 'ភាសាខ្មែរ', 'ltr', 'kh' ), 'ko_KR' => array( 'ko', 'ko_KR', '한국어', 'ltr', 'kr' ), 'ckb' => array( 'ku', 'ckb', 'کوردی', 'rtl', 'kurdistan' ), 'lo' => array( 'lo', 'lo', 'ພາສາລາວ', 'ltr', 'la' ), 'lt_LT' => array( 'lt', 'lt_LT', 'Lietuviškai', 'ltr', 'lt' ), 'lv' => array( 'lv', 'lv', 'Latviešu valoda', 'ltr', 'lv' ), 'mk_MK' => array( 'mk', 'mk_MK', 'македонски јазик', 'ltr', 'mk' ), 'ml_IN' => array( 'ml', 'ml_IN', 'മലയാളം', 'ltr', 'in' ), 'mn' => array( 'mn', 'mn', 'Монгол хэл', 'ltr', 'mn' ), 'mr' => array( 'mr', 'mr', 'मराठी', 'ltr', 'in' ), 'ms_MY' => array( 'ms', 'ms_MY', 'Bahasa Melayu', 'ltr', 'my' ), 'my_MM' => array( 'my', 'my_MM', 'ဗမာစာ', 'ltr', 'mm' ), 'nb_NO' => array( 'nb', 'nb_NO', 'Norsk Bokmål', 'ltr', 'no' ), 'ne_NP' => array( 'ne', 'ne_NP', 'नेपाली', 'ltr', 'np' ), 'nl_BE' => array( 'nl', 'nl_BE', 'Nederlands', 'ltr', 'be' ), 'nl_NL' => array( 'nl', 'nl_NL', 'Nederlands', 'ltr', 'nl' ), 'nl_NL_formal' => array( 'nl', 'nl_NL_formal', 'Nederlands', 'ltr', 'nl' ), 'nn_NO' => array( 'nn', 'nn_NO', 'Norsk Nynorsk', 'ltr', 'no' ), 'oci' => array( 'oc', 'oci', 'Occitan', 'ltr', 'occitania' ), 'pa_IN' => array( 'pa', 'pa_IN', 'ਪੰਜਾਬੀ', 'ltr', 'in' ), 'pl_PL' => array( 'pl', 'pl_PL', 'Polski', 'ltr', 'pl' ), 'ps' => array( 'ps', 'ps', 'پښتو', 'rtl', 'af' ), 'pt_BR' => array( 'pt', 'pt_BR', 'Português', 'ltr', 'br' ), 'pt_PT' => array( 'pt', 'pt_PT', 'Português', 'ltr', 'pt' ), 'rhg' => array( 'rhg', 'rhg', 'Ruáinga', 'ltr', 'mm' ), 'ro_RO' => array( 'ro', 'ro_RO', 'Română', 'ltr', 'ro' ), 'ru_RU' => array( 'ru', 'ru_RU', 'Русский', 'ltr', 'ru' ), 'sah' => array( 'sah', 'sah', 'Сахалыы', 'ltr', 'ru' ), 'si_LK' => array( 'si', 'si_LK', 'සිංහල', 'ltr', 'lk' ), 'sk_SK' => array( 'sk', 'sk_SK', 'Slovenčina', 'ltr', 'sk' ), 'sl_SI' => array( 'sl', 'sl_SI', 'Slovenščina', 'ltr', 'si' ), 'so_SO' => array( 'so', 'so_SO', 'Af-Soomaali', 'ltr', 'so' ), 'sq' => array( 'sq', 'sq', 'Shqip', 'ltr', 'al' ), 'sr_RS' => array( 'sr', 'sr_RS', 'Српски језик', 'ltr', 'rs' ), 'su_ID' => array( 'su', 'su_ID', 'Basa Sunda', 'ltr', 'id' ), 'sv_SE' => array( 'sv', 'sv_SE', 'Svenska', 'ltr', 'se' ), 'szl' => array( 'szl', 'szl', 'Ślōnskŏ gŏdka', 'ltr', 'pl' ), 'ta_IN' => array( 'ta', 'ta_IN', 'தமிழ்', 'ltr', 'in' ), 'ta_LK' => array( 'ta', 'ta_LK', 'தமிழ்', 'ltr', 'lk' ), 'tah' => array( 'ty', 'tah', 'Reo Tahiti', 'ltr', 'pf' ), 'te' => array( 'te', 'te', 'తెలుగు', 'ltr', 'in' ), 'th' => array( 'th', 'th', 'ไทย', 'ltr', 'th' ), 'tl' => array( 'tl', 'tl', 'Tagalog', 'ltr', 'ph' ), 'tr_TR' => array( 'tr', 'tr_TR', 'Türkçe', 'ltr', 'tr' ), 'tt_RU' => array( 'tt', 'tt_RU', 'Татар теле', 'ltr', 'ru' ), 'ug_CN' => array( 'ug', 'ug_CN', 'Uyƣurqə', 'ltr', 'cn' ), 'uk' => array( 'uk', 'uk', 'Українська', 'ltr', 'ua' ), 'ur' => array( 'ur', 'ur', 'اردو', 'rtl', 'pk' ), 'uz_UZ' => array( 'uz', 'uz_UZ', 'Oʻzbek', 'ltr', 'uz' ), 'vec' => array( 'vec', 'vec', 'Vèneto', 'ltr', 'veneto' ), 'vi' => array( 'vi', 'vi', 'Tiếng Việt', 'ltr', 'vn' ), 'zh_CN' => array( 'zh', 'zh_CN', '中文 (中国)', 'ltr', 'cn' ), 'zh_HK' => array( 'zh', 'zh_HK', '中文 (香港)', 'ltr', 'hk' ), 'zh_TW' => array( 'zh', 'zh_TW', '中文 (台灣)', 'ltr', 'tw' ), ); /** * Filter the list of predefined languages * * @since 1.7.10 * * @param array $languages */ $languages = apply_filters( 'pll_predefined_languages', $languages ); settings/table-languages.php000066600000016724152100561500012161 0ustar00 'Languages', // Do not translate ( used for css class ) 'ajax' => false, ) ); } /** * Generates content for a single row of the table * * @since 1.8 * * @param object $item The current item */ public function single_row( $item ) { /** * Filter the list of classes assigned a row in the languages list table * * @since 1.8 * * @param array $classes list of class names * @param object $item the current item */ $classes = apply_filters( 'pll_languages_row_classes', array(), $item ); echo '' : ' class="' . esc_attr( implode( ' ', $classes ) ) . '">' ); $this->single_row_columns( $item ); echo ''; } /** * Displays the item information in a column ( default case ) * * @since 0.1 * * @param object $item * @param string $column_name * @return string */ function column_default( $item, $column_name ) { switch ( $column_name ) { case 'locale': case 'slug': return esc_html( $item->$column_name ); case 'term_group': case 'count': return (int) $item->$column_name; default: return $item->$column_name; // flag } } /** * Displays the item information in the column 'name' * Displays the edit and delete action links * * @since 0.1 * * @param object $item * @return string */ function column_name( $item ) { return sprintf( '%s', esc_attr__( 'Edit this language', 'polylang' ), esc_url( admin_url( 'admin.php?page=mlang&pll_action=edit&lang=' . $item->term_id ) ), esc_html( $item->name ) ); } /** * Displays the item information in the default language * Displays the 'make default' action link * * @since 1.8 * * @param object $item * @return string */ function column_default_lang( $item ) { $options = get_option( 'polylang' ); if ( $options['default_lang'] != $item->slug ) { $s = sprintf(' ', esc_attr__( 'Select as default language', 'polylang' ), wp_nonce_url( '?page=mlang&pll_action=default-lang&noheader=true&lang=' . $item->term_id, 'default-lang' ), /* translators: accessibility text, %s is a native language name */ esc_html( sprintf( __( 'Choose %s as default language', 'polylang' ), $item->name ) ) ); /** * Filter the default language row action in the languages list table * * @since 1.8 * * @param string $s html markup of the action * @param object $item */ $s = apply_filters( 'pll_default_lang_row_action', $s, $item ); } else { $s = sprintf( '%1$s', /* translators: accessibility text */ esc_html__( 'Default language', 'polylang' ) ); $actions = array(); } return $s; } /** * Gets the list of columns * * @since 0.1 * * @return array the list of column titles */ function get_columns() { return array( 'name' => esc_html__( 'Full name', 'polylang' ), 'locale' => esc_html__( 'Locale', 'polylang' ), 'slug' => esc_html__( 'Code', 'polylang' ), 'default_lang' => sprintf( '%2$s', esc_attr__( 'Default language', 'polylang' ), esc_html__( 'Default language', 'polylang' ) ), 'term_group' => esc_html__( 'Order', 'polylang' ), 'flag' => esc_html__( 'Flag', 'polylang' ), 'count' => esc_html__( 'Posts', 'polylang' ), ); } /** * Gets the list of sortable columns * * @since 0.1 * * @return array */ function get_sortable_columns() { return array( 'name' => array( 'name', true ), // sorted by name by default 'locale' => array( 'locale', false ), 'slug' => array( 'slug', false ), 'term_group' => array( 'term_group', false ), 'count' => array( 'count', false ), ); } /** * Gets the name of the default primary column. * * @since 2.1 * * @return string Name of the default primary column, in this case, 'name'. */ protected function get_default_primary_column_name() { return 'name'; } /** * Generates and display row actions links for the list table. * * @since 1.8 * * @param object $item The item being acted upon. * @param string $column_name Current column name. * @param string $primary Primary column name. * @return string The row actions output. */ protected function handle_row_actions( $item, $column_name, $primary ) { if ( $primary !== $column_name ) { return ''; } $actions = array( 'edit' => sprintf( '%s', esc_attr__( 'Edit this language', 'polylang' ), esc_url( admin_url( 'admin.php?page=mlang&pll_action=edit&lang=' . $item->term_id ) ), esc_html__( 'Edit','polylang' ) ), 'delete' => sprintf( '%s', esc_attr__( 'Delete this language and all its associated data', 'polylang' ), wp_nonce_url( '?page=mlang&pll_action=delete&noheader=true&lang=' . $item->term_id, 'delete-lang' ), esc_js( __( 'You are about to permanently delete this language. Are you sure?', 'polylang' ) ), esc_html__( 'Delete','polylang' ) ), ); /** * Filter the list of row actions in the languages list table * * @since 1.8 * * @param array $actions list of html markup actions * @param object $item */ $actions = apply_filters( 'pll_languages_row_actions', $actions, $item ); return $this->row_actions( $actions ); } /** * Sort items * * @since 0.1 * * @param object $a The first object to compare * @param object $b The second object to compare * @return int -1 or 1 if $a is considered to be respectively less than or greater than $b. */ protected function usort_reorder( $a, $b ) { $orderby = ! empty( $_GET['orderby'] ) ? $_GET['orderby'] : 'name'; // Determine sort order if ( is_numeric( $a->$orderby ) ) { $result = $a->$orderby > $b->$orderby ? 1 : -1; } else { $result = strcmp( $a->$orderby, $b->$orderby ); } // Send final sort direction to usort return ( empty( $_GET['order'] ) || 'asc' == $_GET['order'] ) ? $result : -$result; } /** * Prepares the list of items for displaying * * @since 0.1 * * @param array $data */ function prepare_items( $data = array() ) { $per_page = $this->get_items_per_page( 'pll_lang_per_page' ); $this->_column_headers = array( $this->get_columns(), array(), $this->get_sortable_columns() ); usort( $data, array( $this, 'usort_reorder' ) ); $total_items = count( $data ); $this->items = array_slice( $data, ( $this->get_pagenum() - 1 ) * $per_page, $per_page ); $this->set_pagination_args( array( 'total_items' => $total_items, 'per_page' => $per_page, 'total_pages' => ceil( $total_items / $per_page ), ) ); } } settings/view-about.php000066600000001763152100561500011205 0ustar00

    ', '' ); if ( ! defined( 'POLYLANG_PRO' ) ) { echo ' '; printf( /* translators: %s are html tags */ esc_html__( 'Support and extra features are available to %sPolylang Pro%s users.' ), '', '' ); } ?>

    ', '' ); ?>

    settings/settings-media.php000066600000001033152100561500012026 0ustar00 'media', 'title' => __( 'Media' ), 'description' => __( 'Activate languages and translations for media', 'polylang' ), 'active_option' => 'media_support', ) ); } } settings/view-languages.php000066600000001460152100561500012033 0ustar00

    active_tab ) { case 'lang': // Languages tab case 'strings': // String translations tab case 'settings': // Settings tab include PLL_SETTINGS_INC . '/view-tab-' . $this->active_tab . '.php'; break; default: /** * Fires when loading the active Polylang settings tab * Allows plugins to add their own tab * * @since 1.5.1 */ do_action( 'pll_settings_active_tab_' . $this->active_tab ); break; } ?>
    settings/view-tab-lang.php000066600000014214152100561500011553 0ustar00
    display(); ?>

    ', ! empty( $edit_lang ) ? esc_attr( $edit_lang->name ) : '' ); ?>

    ', ! empty( $edit_lang ) ? esc_attr( $edit_lang->locale ) : '' ); ?>

    ', ! empty( $edit_lang ) ? esc_attr( $edit_lang->slug ) : '' ); ?>

    %s', ! empty( $edit_lang ) && $edit_lang->is_rtl ? '' : 'checked="checked"', esc_html__( 'left to right', 'polylang' ) ); printf( '', ! empty( $edit_lang ) && $edit_lang->is_rtl ? 'checked="checked"' : '', esc_html__( 'right to left', 'polylang' ) ); ?>

    ', ! empty( $edit_lang ) ? esc_attr( $edit_lang->term_group ) : '' ); ?>

    settings/settings-tools.php000066600000002215152100561500012112 0ustar00 'tools', 'title' => __( 'Tools', 'polylang' ), 'description' => __( 'Decide whether to remove all data when deleting Polylang.', 'polylang' ), ) ); } /** * displays the settings form * * @since 1.8 */ protected function form() { printf( '', empty( $this->options['uninstall'] ) ? '' : 'checked="checked"', esc_html__( 'Remove all Polylang data when using the "Delete" link on the plugins screen.', 'polylang' ) ); } /** * sanitizes the settings before saving * * @since 1.8 * * @param array $options */ protected function update( $options ) { $newoptions['uninstall'] = isset( $options['uninstall'] ) ? 1 : 0; return $newoptions; // take care to return only validated options } } settings/view-tab-strings.php000066600000001633152100561500012324 0ustar00
    search_box( __( 'Search translations', 'polylang' ), 'translations' ); wp_nonce_field( 'string-translation', '_wpnonce_string-translation' ); $string_table->display(); printf( '
    ', esc_html__( 'Clean strings translation database', 'polylang' ) ); ?>

    settings/settings-cpt.php000066600000006557152100561510011556 0ustar00 'cpt', 'title' => __( 'Custom post types and Taxonomies', 'polylang' ), 'description' => __( 'Activate the languages and translations management for the custom post types and taxonomies.', 'polylang' ), ) ); // FIXME should be OK when the modules will be loaded from the settings page $post_types = get_post_types( array( 'public' => true, '_builtin' => false ) ); $post_types = array_diff( $post_types, get_post_types( array( '_pll' => true ) ) ); /** This filter is documented in include/model.php */ $this->post_types = array_unique( apply_filters( 'pll_get_post_types', $post_types, true ) ); $taxonomies = get_taxonomies( array( 'public' => true, '_builtin' => false ) ); $taxonomies = array_diff( $taxonomies, get_taxonomies( array( '_pll' => true ) ) ); /** This filter is documented in include/model.php */ $this->taxonomies = array_unique( apply_filters( 'pll_get_taxonomies', $taxonomies , true ) ); } /** * Tells if the module is active * * @since 1.8 * * @return bool */ public function is_active() { return ! empty( $this->post_types ) || ! empty( $this->taxonomies ); } /** * Displays the settings form * * @since 1.8 */ protected function form() { if ( ! empty( $this->post_types ) ) {?>

      post_types as $post_type ) { $pt = get_post_type_object( $post_type ); if ( ! empty( $pt ) ) { printf( '
    • ', esc_attr( $post_type ), in_array( $post_type, $this->options['post_types'] ) ? 'checked="checked"' : '', esc_html( $pt->labels->name ) ); } } ?>

    taxonomies ) ) { ?>

      taxonomies as $taxonomy ) { $tax = get_taxonomy( $taxonomy ); if ( ! empty( $tax ) ) { printf( '
    • ', esc_attr( $taxonomy ), in_array( $taxonomy, $this->options['taxonomies'] ) ? 'checked="checked"' : '', esc_html( $tax->labels->name ) ); } } ?>

    'Strings translations', // Do not translate ( used for css class ) 'ajax' => false, ) ); $this->languages = $languages; $this->strings = PLL_Admin_Strings::get_strings(); $this->groups = array_unique( wp_list_pluck( $this->strings, 'context' ) ); $this->selected_group = empty( $_GET['group'] ) || ! in_array( $_GET['group'], $this->groups ) ? -1 : $_GET['group']; add_action( 'mlang_action_string-translation', array( $this, 'save_translations' ) ); } /** * Displays the item information in a column ( default case ) * * @since 0.6 * * @param array $item * @param string $column_name * @return string */ function column_default( $item, $column_name ) { return $item[ $column_name ]; } /** * Displays the checkbox in first column * * @since 1.1 * * @param array $item * @return string */ function column_cb( $item ) { return sprintf( '', esc_attr( $item['row'] ), /* translators: accessibility text, %s is a string potentially in any language */ sprintf( __( 'Select %s' ), format_to_edit( $item['string'] ) ), empty( $item['icl'] ) ? 'disabled' : '' // Only strings registered with WPML API can be removed ); } /** * Displays the string to translate * * @since 1.0 * * @param array $item * @return string */ function column_string( $item ) { return format_to_edit( $item['string'] ); // Don't interpret special chars for the string column } /** * Displays the translations to edit * * @since 0.6 * * @param array $item * @return string */ function column_translations( $item ) { $languages = array_combine( wp_list_pluck( $this->languages, 'slug' ), wp_list_pluck( $this->languages, 'name' ) ); $out = ''; foreach ( $item['translations'] as $key => $translation ) { $input_type = $item['multiline'] ? '' : ''; $out .= sprintf( '
    ' . $input_type . '
    ' . "\n", esc_attr( $key ), esc_attr( $item['row'] ), esc_html( $languages[ $key ] ), format_to_edit( $translation ) ); // Don't interpret special chars } return $out; } /** * Gets the list of columns * * @since 0.6 * * @return array the list of column titles */ function get_columns() { return array( 'cb' => '', // Checkbox 'string' => esc_html__( 'String', 'polylang' ), 'name' => esc_html__( 'Name', 'polylang' ), 'context' => esc_html__( 'Group', 'polylang' ), 'translations' => esc_html__( 'Translations', 'polylang' ), ); } /** * Gets the list of sortable columns * * @since 0.6 * * @return array */ function get_sortable_columns() { return array( 'string' => array( 'string', false ), 'name' => array( 'name', false ), 'context' => array( 'context', false ), ); } /** * Gets the name of the default primary column. * * @since 2.1 * * @return string Name of the default primary column, in this case, 'string'. */ protected function get_default_primary_column_name() { return 'string'; } /** * Sort items * * @since 0.6 * * @param object $a The first object to compare * @param object $b The second object to compare * @return int -1 or 1 if $a is considered to be respectively less than or greater than $b. */ protected function usort_reorder( $a, $b ) { $result = strcmp( $a[ $_GET['orderby'] ], $b[ $_GET['orderby'] ] ); // determine sort order return ( empty( $_GET['order'] ) || 'asc' === $_GET['order'] ) ? $result : -$result; // send final sort direction to usort } /** * Prepares the list of items for displaying * * @since 0.6 */ function prepare_items() { $data = $this->strings; // Filter for search string $s = empty( $_GET['s'] ) ? '' : wp_unslash( $_GET['s'] ); foreach ( $data as $key => $row ) { if ( ( -1 !== $this->selected_group && $row['context'] !== $this->selected_group ) || ( ! empty( $s ) && stripos( $row['name'], $s ) === false && stripos( $row['string'], $s ) === false ) ) { unset( $data[ $key ] ); } } // Load translations foreach ( $this->languages as $language ) { // Filters by language if requested if ( ( $lg = get_user_meta( get_current_user_id(), 'pll_filter_content', true ) ) && $language->slug !== $lg ) { continue; } $mo = new PLL_MO(); $mo->import_from_db( $language ); foreach ( $data as $key => $row ) { $data[ $key ]['translations'][ $language->slug ] = $mo->translate( $row['string'] ); $data[ $key ]['row'] = $key; // Store the row number for convenience } } $per_page = $this->get_items_per_page( 'pll_strings_per_page' ); $this->_column_headers = array( $this->get_columns(), array(), $this->get_sortable_columns() ); if ( ! empty( $_GET['orderby'] ) ) { // No sort by default usort( $data, array( $this, 'usort_reorder' ) ); } $total_items = count( $data ); $this->items = array_slice( $data, ( $this->get_pagenum() - 1 ) * $per_page, $per_page ); $this->set_pagination_args( array( 'total_items' => $total_items, 'per_page' => $per_page, 'total_pages' => ceil( $total_items / $per_page ), ) ); } /** * Get the list of possible bulk actions * * @since 1.1 * * @return array */ function get_bulk_actions() { return array( 'delete' => __( 'Delete','polylang' ) ); } /** * Get the current action selected from the bulk actions dropdown. * overrides parent function to avoid submit button to trigger bulk actions * * @since 1.8 * * @return string|false The action name or False if no action was selected */ public function current_action() { return empty( $_POST['submit'] ) ? parent::current_action() : false; } /** * Displays the dropdown list to filter strings per group * * @since 1.1 * * @param string $which only 'top' is supported */ function extra_tablenav( $which ) { if ( 'top' !== $which ) { return; } echo '
    '; printf( '', /* translators: accessibility text */ esc_html__( 'Filter by group', 'polylang' ) ); echo '' . "\n"; submit_button( __( 'Filter' ), 'button', 'filter_action', false, array( 'id' => 'post-query-submit' ) ); echo '
    '; } /** * Saves the strings translations in DB * Optionaly clean the DB * * @since 1.9 */ public function save_translations() { check_admin_referer( 'string-translation', '_wpnonce_string-translation' ); if ( ! empty( $_POST['submit'] ) ) { foreach ( $this->languages as $language ) { if ( empty( $_POST['translation'][ $language->slug ] ) ) { // In case the language filter is active ( thanks to John P. Bloch ) continue; } $mo = new PLL_MO(); $mo->import_from_db( $language ); foreach ( $_POST['translation'][ $language->slug ] as $key => $translation ) { /** * Filter the string translation before it is saved in DB * Allows to sanitize strings registered with pll_register_string * * @since 1.6 * * @param string $translation the string translation * @param string $name the name as defined in pll_register_string * @param string $context the context as defined in pll_register_string */ $translation = apply_filters( 'pll_sanitize_string_translation', $translation, $this->strings[ $key ]['name'], $this->strings[ $key ]['context'] ); $mo->add_entry( $mo->make_entry( $this->strings[ $key ]['string'], $translation ) ); } // Clean database ( removes all strings which were registered some day but are no more ) if ( ! empty( $_POST['clean'] ) ) { $new_mo = new PLL_MO(); foreach ( $this->strings as $string ) { $new_mo->add_entry( $mo->make_entry( $string['string'], $mo->translate( $string['string'] ) ) ); } } isset( $new_mo ) ? $new_mo->export_to_db( $language ) : $mo->export_to_db( $language ); } add_settings_error( 'general', 'pll_strings_translations_updated', __( 'Translations updated.', 'polylang' ), 'updated' ); /** * Fires after the strings translations are saved in DB * * @since 1.2 */ do_action( 'pll_save_strings_translations' ); } // Unregisters strings registered through WPML API if ( $this->current_action() === 'delete' && ! empty( $_POST['strings'] ) && function_exists( 'icl_unregister_string' ) ) { foreach ( $_POST['strings'] as $key ) { icl_unregister_string( $this->strings[ $key ]['context'], $this->strings[ $key ]['name'] ); } } // To refresh the page ( possible thanks to the $_GET['noheader']=true ) $args = array_intersect_key( $_REQUEST, array_flip( array( 's', 'paged', 'group' ) ) ); if ( ! empty( $_GET['paged'] ) && ! empty( $_POST['submit'] ) ) { $args['paged'] = (int) $_GET['paged']; // Don't rely on $_REQUEST['paged'] or $_POST['paged']. See #14 } if ( ! empty( $args['s'] ) ) { $args['s'] = urlencode( $args['s'] ); // Searched string needs to be encoded as it comes from $_POST } PLL_Settings::redirect( $args ); } } settings/settings.php000066600000022761152100561510010765 0ustar00 inherited, reference to Polylang options array * model => inherited, reference to PLL_Model object * links_model => inherited, reference to PLL_Links_Model object * links => inherited, reference to PLL_Admin_Links object * static_pages => inherited, reference to PLL_Admin_Static_Pages object * filters_links => inherited, reference to PLL_Filters_Links object * curlang => inherited, optional, current language used to filter admin content * pref_lang => inherited, preferred language used as default when saving posts or terms * * @since 1.2 */ class PLL_Settings extends PLL_Admin_Base { protected $active_tab, $modules; /** * Constructor * * @since 1.2 * * @param object $links_model */ public function __construct( &$links_model ) { parent::__construct( $links_model ); if ( isset( $_GET['page'] ) ) { $this->active_tab = 'mlang' === $_GET['page'] ? 'lang' : substr( $_GET['page'], 6 ); } PLL_Admin_Strings::init(); // FIXME put this as late as possible add_action( 'admin_init', array( $this, 'register_settings_modules' ) ); // adds screen options and the about box in the languages admin panel add_action( 'load-toplevel_page_mlang', array( $this, 'load_page' ) ); add_action( 'load-languages_page_mlang_strings', array( $this, 'load_page_strings' ) ); // saves per-page value in screen option add_filter( 'set-screen-option', array( $this, 'set_screen_option' ), 10, 3 ); } /** * Initializes the modules * * @since 1.8 */ public function register_settings_modules() { $modules = array( 'PLL_Settings_Tools', 'PLL_Settings_Licenses', ); if ( $this->model->get_languages_list() ) { $modules = array_merge( array( 'PLL_Settings_Url', 'PLL_Settings_Browser', 'PLL_Settings_Media', 'PLL_Settings_CPT', 'PLL_Settings_Sync', 'PLL_Settings_WPML', 'PLL_Settings_Share_Slug', 'PLL_Settings_Translate_Slugs', ), $modules ); } /** * Filter the list of setting modules * * @since 1.8 * * @param array $modules the list of module classes */ $modules = apply_filters( 'pll_settings_modules', $modules ); foreach ( $modules as $key => $class ) { $key = is_numeric( $key ) ? strtolower( str_replace( 'PLL_Settings_', '', $class ) ) : $key; $this->modules[ $key ] = new $class( $this ); } } /** * Loads the about metabox * * @since 0.8 */ public function metabox_about() { include PLL_SETTINGS_INC . '/view-about.php'; } /** * Adds screen options and the about box in the languages admin panel * * @since 0.9.5 */ public function load_page() { if ( ! defined( 'PLL_DISPLAY_ABOUT' ) || PLL_DISPLAY_ABOUT ) { add_meta_box( 'pll-about-box', __( 'About Polylang', 'polylang' ), array( $this, 'metabox_about' ), 'settings_page_mlang', // FIXME not shown in screen options 'normal' ); } add_screen_option( 'per_page', array( 'label' => __( 'Languages', 'polylang' ), 'default' => 10, 'option' => 'pll_lang_per_page', ) ); add_action( 'admin_notices', array( $this, 'notice_objects_with_no_lang' ) ); } /** * Adds screen options in the strings translations admin panel * * @since 2.1 */ public function load_page_strings() { add_screen_option( 'per_page', array( 'label' => __( 'Strings translations', 'polylang' ), 'default' => 10, 'option' => 'pll_strings_per_page', ) ); } /** * Save the "Views/Uploads per page" option set by this user * * @since 0.9.5 * * @param mixed $status false or value returned by previous filter * @param string $option Name of the option being changed * @param string $value Value of the option * * @return string New value if this is our option, otherwise nothing */ public function set_screen_option( $status, $option, $value ) { return 'pll_lang_per_page' === $option || 'pll_strings_per_page' === $option ? $value : $status; } /** * Manages the user input for the languages pages * * @since 1.9 * * @param string $action */ public function handle_actions( $action ) { switch ( $action ) { case 'add': check_admin_referer( 'add-lang', '_wpnonce_add-lang' ); if ( $this->model->add_language( $_POST ) && 'en_US' !== $_POST['locale'] ) { // attempts to install the language pack require_once ABSPATH . 'wp-admin/includes/translation-install.php'; if ( ! wp_download_language_pack( $_POST['locale'] ) ) { add_settings_error( 'general', 'pll_download_mo', __( 'The language was created, but the WordPress language file was not downloaded. Please install it manually.', 'polylang' ) ); } // force checking for themes and plugins translations updates wp_clean_themes_cache(); wp_clean_plugins_cache(); } self::redirect(); // to refresh the page ( possible thanks to the $_GET['noheader']=true ) break; case 'delete': check_admin_referer( 'delete-lang' ); if ( ! empty( $_GET['lang'] ) ) { $this->model->delete_language( (int) $_GET['lang'] ); } self::redirect(); // to refresh the page ( possible thanks to the $_GET['noheader']=true ) break; case 'update': check_admin_referer( 'add-lang', '_wpnonce_add-lang' ); $error = $this->model->update_language( $_POST ); self::redirect(); // to refresh the page ( possible thanks to the $_GET['noheader']=true ) break; case 'default-lang': check_admin_referer( 'default-lang' ); if ( $lang = $this->model->get_language( (int) $_GET['lang'] ) ) { $this->model->update_default_lang( $lang->slug ); } self::redirect(); // to refresh the page ( possible thanks to the $_GET['noheader']=true ) break; case 'content-default-lang': check_admin_referer( 'content-default-lang' ); if ( $nolang = $this->model->get_objects_with_no_lang() ) { if ( ! empty( $nolang['posts'] ) ) { $this->model->set_language_in_mass( 'post', $nolang['posts'], $this->options['default_lang'] ); } if ( ! empty( $nolang['terms'] ) ) { $this->model->set_language_in_mass( 'term', $nolang['terms'], $this->options['default_lang'] ); } } self::redirect(); // to refresh the page ( possible thanks to the $_GET['noheader']=true ) break; case 'activate': check_admin_referer( 'pll_activate' ); $this->modules[ $_GET['module'] ]->activate(); self::redirect(); break; case 'deactivate': check_admin_referer( 'pll_deactivate' ); $this->modules[ $_GET['module'] ]->deactivate(); self::redirect(); break; default: /** * Fires when a non default action has been sent to Polylang settings * * @since 1.8 */ do_action( "mlang_action_$action" ); break; } } /** * Displays the 3 tabs pages: languages, strings translations, settings * also manages user input for these pages * * @since 0.1 */ public function languages_page() { switch ( $this->active_tab ) { case 'lang': // prepare the list table of languages $list_table = new PLL_Table_Languages(); $list_table->prepare_items( $this->model->get_languages_list() ); break; case 'strings': $string_table = new PLL_Table_String( $this->model->get_languages_list() ); $string_table->prepare_items(); break; } // handle user input $action = isset( $_REQUEST['pll_action'] ) ? $_REQUEST['pll_action'] : ''; if ( 'edit' === $action && ! empty( $_GET['lang'] ) ) { $edit_lang = $this->model->get_language( (int) $_GET['lang'] ); } else { $this->handle_actions( $action ); } // displays the page include PLL_SETTINGS_INC . '/view-languages.php'; } /** * Enqueues scripts and styles */ public function admin_enqueue_scripts() { parent::admin_enqueue_scripts(); $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; wp_enqueue_script( 'pll_admin', plugins_url( '/js/admin' . $suffix . '.js', POLYLANG_FILE ), array( 'jquery', 'wp-ajax-response', 'postbox', 'jquery-ui-selectmenu' ), POLYLANG_VERSION ); wp_localize_script( 'pll_admin', 'pll_flag_base_url', plugins_url( '/flags/', POLYLANG_FILE ) ); wp_enqueue_style( 'pll_selectmenu', plugins_url( '/css/selectmenu' . $suffix . '.css', POLYLANG_FILE ), array(), POLYLANG_VERSION ); } /** * Displays a notice when there are objects with no language assigned * * @since 1.8 */ public function notice_objects_with_no_lang() { if ( ! empty( $this->options['default_lang'] ) && $this->model->get_objects_with_no_lang() ) { printf( '

    %s %s

    ', esc_html__( 'There are posts, pages, categories or tags without language.', 'polylang' ), wp_nonce_url( '?page=mlang&pll_action=content-default-lang&noheader=true', 'content-default-lang' ), esc_html__( 'You can set them all to the default language.', 'polylang' ) ); } } /** * Redirects to language page ( current active tab ) * saves error messages in a transient for reuse in redirected page * * @since 1.5 * * @param array $args query arguments to add to the url */ static public function redirect( $args = array() ) { if ( $errors = get_settings_errors() ) { set_transient( 'settings_errors', $errors, 30 ); $args['settings-updated'] = 1; } // remove possible 'pll_action' and 'lang' query args from the referer before redirecting wp_safe_redirect( add_query_arg( $args, remove_query_arg( array( 'pll_action', 'lang' ), wp_get_referer() ) ) ); exit; } } settings/table-settings.php000066600000011072152100561510012043 0ustar00 'Settings', // Do not translate ( used for css class ) 'ajax' => false, ) ); } /** * Get the table classes for styling * * @since 1.8 */ protected function get_table_classes() { return array( 'wp-list-table', 'widefat', 'plugins', 'pll-settings' ); // get the style of the plugins list table + one specific class } /** * Displays a single row * * @since 1.8 * * @param object $item PLL_Settings_Module object */ public function single_row( $item ) { // Classes to reuse css from the plugins list table $classes = $item->is_active() ? 'active' : 'inactive'; if ( $message = $item->get_upgrade_message() ) { $classes .= ' update'; } // Display the columns printf( '', esc_attr( $item->module ), esc_attr( $classes ) ); $this->single_row_columns( $item ); echo ''; // Display an upgrade message if there is any, reusing css from the plugins updates if ( $message = $item->get_upgrade_message() ) { printf( ' %s ', sprintf( version_compare( $GLOBALS['wp_version'], '4.6', '<' ) ? '
    %s
    ' : // backward compatibility with WP < 4.6 '

    %s

    ', $message ) ); } // The settings if there are // "inactive" class to reuse css from the plugins list table if ( $form = $item->get_form() ) { printf( ' %s %s

    %s

    ', esc_attr( $item->module ), esc_html( $item->title ), $form, implode( $item->get_buttons() ) ); } } /** * Generates the columns for a single row of the table * * @since 1.8 * * @param object $item The current item */ protected function single_row_columns( $item ) { list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info(); foreach ( $columns as $column_name => $column_display_name ) { $classes = "$column_name column-$column_name"; if ( $primary === $column_name ) { $classes .= ' column-primary'; } if ( in_array( $column_name, $hidden ) ) { $classes .= ' hidden'; } if ( 'cb' == $column_name ) { echo ''; echo $this->column_cb( $item ); echo ''; } else { printf( '', esc_attr( $classes ) ); echo $this->column_default( $item, $column_name ); echo ''; } } } /** * Displays the item information in a column ( default case ) * * @since 1.8 * * @param object $item * @param string $column_name * @return string */ protected function column_default( $item, $column_name ) { if ( 'plugin-title' == $column_name ) { return sprintf( '%s', esc_html( $item->title ) ) . $this->row_actions( $item->get_action_links(), true /*always visible*/ ); } return $item->$column_name; } /** * Gets the list of columns * * @since 1.8 * * @return array the list of column titles */ public function get_columns() { return array( 'cb' => '', // For the 4px border inherited from plugins when the module is activated 'plugin-title' => esc_html__( 'Module', 'polylang' ), // plugin-title for styling 'description' => esc_html__( 'Description', 'polylang' ), ); } /** * Gets the name of the primary column. * * @since 1.8 * * @return string The name of the primary column. */ protected function get_primary_column_name() { return 'plugin-title'; } /** * Prepares the list of items for displaying * * @since 1.8 * * @param array $items */ public function prepare_items( $items = array() ) { $this->_column_headers = array( $this->get_columns(), array(), $this->get_sortable_columns(), $this->get_primary_column_name() ); $this->items = $items; } /** * Avoids displaying an empty tablenav * * @since 2.1 * * @param string $which 'top' or 'bottom' */ protected function display_tablenav( $which ) {} } settings/settings-browser.php000066600000004713152100561510012443 0ustar00 'browser', 'title' => __( 'Detect browser language', 'polylang' ), 'description' => __( 'When the front page is visited, set the language according to the browser preference', 'polylang' ), 'active_option' => $this->is_available() ? 'browser' : false, ) ); if ( ! class_exists( 'PLL_Xdata_Domain', true ) ) { add_action( 'admin_print_footer_scripts', array( $this, 'print_js' ) ); } } /** * Tells if the option is available * * @since 2.0 * * @return bool */ protected function is_available() { return ( 3 > $this->options['force_lang'] ) || class_exists( 'PLL_Xdata_Domain', true ); } /** * Tells if the module is active * * @since 1.8 * * @return bool */ public function is_active() { return $this->is_available() ? parent::is_active() : false; } /** * Displays the javascript to handle dynamically the change in url modifications * as the preferred browser language is not used when the language is set from different domains * * @since 1.8 */ public function print_js() { wp_enqueue_script( 'jquery' ); if ( parent::is_active() && 3 > $this->options['force_lang'] ) { $func = 'removeClass( "inactive" ).addClass( "active" )'; $link = sprintf( '%s', $this->action_links['deactivate'] ); } else { $func = 'removeClass( "active" ).addClass( "inactive" )'; $link = sprintf( '%s', $this->action_links['activate'] ); } $deactivated = sprintf( '%s', $this->action_links['deactivated'] ); ?> __( 'Andorra', 'polylang' ), 'ae' => __( 'United Arab Emirates', 'polylang' ), 'af' => __( 'Afghanistan', 'polylang' ), 'ag' => __( 'Antigua and Barbuda', 'polylang' ), 'ai' => __( 'Anguilla', 'polylang' ), 'al' => __( 'Albania', 'polylang' ), 'am' => __( 'Armenia', 'polylang' ), 'an' => __( 'Netherlands Antilles', 'polylang' ), 'ao' => __( 'Angola', 'polylang' ), 'ar' => __( 'Argentina', 'polylang' ), 'arab' => __( 'Arab league', 'polylang' ), 'as' => __( 'American Samoa', 'polylang' ), 'at' => __( 'Austria', 'polylang' ), 'au' => __( 'Australia', 'polylang' ), 'aw' => __( 'Aruba', 'polylang' ), 'ax' => __( 'Åland Islands', 'polylang' ), 'az' => __( 'Azerbaijan', 'polylang' ), 'ba' => __( 'Bosnia and Herzegovina', 'polylang' ), 'basque' => __( 'Basque Country', 'polylang' ), 'bb' => __( 'Barbados', 'polylang' ), 'bd' => __( 'Bangladesh', 'polylang' ), 'be' => __( 'Belgium', 'polylang' ), 'bf' => __( 'Burkina Faso', 'polylang' ), 'bg' => __( 'Bulgaria', 'polylang' ), 'bh' => __( 'Bahrain', 'polylang' ), 'bi' => __( 'Burundi', 'polylang' ), 'bj' => __( 'Benin', 'polylang' ), 'bm' => __( 'Bermuda', 'polylang' ), 'bn' => __( 'Brunei', 'polylang' ), 'bo' => __( 'Bolivia', 'polylang' ), 'br' => __( 'Brazil', 'polylang' ), 'bs' => __( 'Bahamas', 'polylang' ), 'bt' => __( 'Bhutan', 'polylang' ), 'bw' => __( 'Botswana', 'polylang' ), 'by' => __( 'Belarus', 'polylang' ), 'bz' => __( 'Belize', 'polylang' ), 'ca' => __( 'Canada', 'polylang' ), 'catalonia' => __( 'Catalonia', 'polylang' ), 'cc' => __( 'Cocos', 'polylang' ), 'cd' => __( 'Democratic Republic of the Congo', 'polylang' ), 'cf' => __( 'Central African Republic', 'polylang' ), 'cg' => __( 'Congo', 'polylang' ), 'ch' => __( 'Switzerland', 'polylang' ), 'ci' => __( 'Ivory Coast', 'polylang' ), 'ck' => __( 'Cook Islands', 'polylang' ), 'cl' => __( 'Chile', 'polylang' ), 'cm' => __( 'Cameroon', 'polylang' ), 'cn' => __( 'China', 'polylang' ), 'co' => __( 'Colombia', 'polylang' ), 'cr' => __( 'Costa Rica', 'polylang' ), 'cu' => __( 'Cuba', 'polylang' ), 'cv' => __( 'Cape Verde', 'polylang' ), 'cx' => __( 'Christmas Island', 'polylang' ), 'cy' => __( 'Cyprus', 'polylang' ), 'cz' => __( 'Czech Republic', 'polylang' ), 'de' => __( 'Germany', 'polylang' ), 'dj' => __( 'Djibouti', 'polylang' ), 'dk' => __( 'Denmark', 'polylang' ), 'dm' => __( 'Dominica', 'polylang' ), 'do' => __( 'Dominican Republic', 'polylang' ), 'dz' => __( 'Algeria', 'polylang' ), 'ec' => __( 'Ecuador', 'polylang' ), 'ee' => __( 'Estonia', 'polylang' ), 'eg' => __( 'Egypt', 'polylang' ), 'eh' => __( 'Western Sahara', 'polylang' ), 'england' => __( 'England', 'polylang' ), 'er' => __( 'Eritrea', 'polylang' ), 'es' => __( 'Spain', 'polylang' ), 'esperanto' => __( 'Esperanto', 'polylang' ), 'et' => __( 'Ethiopia', 'polylang' ), 'fi' => __( 'Finland', 'polylang' ), 'fj' => __( 'Fiji', 'polylang' ), 'fk' => __( 'Falkland Islands', 'polylang' ), 'fm' => __( 'Micronesia', 'polylang' ), 'fo' => __( 'Faroe Islands', 'polylang' ), 'fr' => __( 'France', 'polylang' ), 'ga' => __( 'Gabon', 'polylang' ), 'galicia' => __( 'Galicia', 'polylang' ), 'gb' => __( 'United Kingdom', 'polylang' ), 'gd' => __( 'Grenada', 'polylang' ), 'ge' => __( 'Georgia', 'polylang' ), 'gh' => __( 'Ghana', 'polylang' ), 'gi' => __( 'Gibraltar', 'polylang' ), 'gl' => __( 'Greenland', 'polylang' ), 'gm' => __( 'Gambia', 'polylang' ), 'gn' => __( 'Guinea', 'polylang' ), 'gp' => __( 'Guadeloupe', 'polylang' ), 'gq' => __( 'Equatorial Guinea', 'polylang' ), 'gr' => __( 'Greece', 'polylang' ), 'gs' => __( 'South Georgia and the South Sandwich Islands', 'polylang' ), 'gt' => __( 'Guatemala', 'polylang' ), 'gu' => __( 'Guam', 'polylang' ), 'gw' => __( 'Guinea-Bissau', 'polylang' ), 'gy' => __( 'Guyana', 'polylang' ), 'hk' => __( 'Hong Kong', 'polylang' ), 'hm' => __( 'Heard Island and McDonald Islands', 'polylang' ), 'hn' => __( 'Honduras', 'polylang' ), 'hr' => __( 'Croatia', 'polylang' ), 'ht' => __( 'Haiti', 'polylang' ), 'hu' => __( 'Hungary', 'polylang' ), 'id' => __( 'Indonesia', 'polylang' ), 'ie' => __( 'Republic of Ireland', 'polylang' ), 'il' => __( 'Israel', 'polylang' ), 'in' => __( 'India', 'polylang' ), 'io' => __( 'British Indian Ocean Territory', 'polylang' ), 'iq' => __( 'Iraq', 'polylang' ), 'ir' => __( 'Iran', 'polylang' ), 'is' => __( 'Iceland', 'polylang' ), 'it' => __( 'Italy', 'polylang' ), 'jm' => __( 'Jamaica', 'polylang' ), 'jo' => __( 'Jordan', 'polylang' ), 'jp' => __( 'Japan', 'polylang' ), 'ke' => __( 'Kenya', 'polylang' ), 'kg' => __( 'Kyrgyzstan', 'polylang' ), 'kh' => __( 'Cambodia', 'polylang' ), 'ki' => __( 'Kiribati', 'polylang' ), 'km' => __( 'Comoros', 'polylang' ), 'kn' => __( 'Saint Kitts and Nevis', 'polylang' ), 'kp' => __( 'North Korea', 'polylang' ), 'kr' => __( 'South Korea', 'polylang' ), 'kurdistan' => __( 'Kurdistan', 'polylang' ), 'kw' => __( 'Kuwait', 'polylang' ), 'ky' => __( 'Cayman Islands', 'polylang' ), 'kz' => __( 'Kazakhstan', 'polylang' ), 'la' => __( 'Laos', 'polylang' ), 'lb' => __( 'Lebanon', 'polylang' ), 'lc' => __( 'Saint Lucia', 'polylang' ), 'li' => __( 'Liechtenstein', 'polylang' ), 'lk' => __( 'Sri Lanka', 'polylang' ), 'lr' => __( 'Liberia', 'polylang' ), 'ls' => __( 'Lesotho', 'polylang' ), 'lt' => __( 'Lithuania', 'polylang' ), 'lu' => __( 'Luxembourg', 'polylang' ), 'lv' => __( 'Latvia', 'polylang' ), 'ly' => __( 'Libya', 'polylang' ), 'ma' => __( 'Morocco', 'polylang' ), 'mc' => __( 'Monaco', 'polylang' ), 'md' => __( 'Moldova', 'polylang' ), 'me' => __( 'Montenegro', 'polylang' ), 'mg' => __( 'Madagascar', 'polylang' ), 'mh' => __( 'Marshall Islands', 'polylang' ), 'mk' => __( 'Macedonia', 'polylang' ), 'ml' => __( 'Mali', 'polylang' ), 'mm' => __( 'Myanmar', 'polylang' ), 'mn' => __( 'Mongolia', 'polylang' ), 'mo' => __( 'Macao', 'polylang' ), 'mp' => __( 'Northern Mariana Islands', 'polylang' ), 'mq' => __( 'Martinique', 'polylang' ), 'mr' => __( 'Mauritania', 'polylang' ), 'ms' => __( 'Montserrat', 'polylang' ), 'mt' => __( 'Malta', 'polylang' ), 'mu' => __( 'Mauritius', 'polylang' ), 'mv' => __( 'Maldives', 'polylang' ), 'mw' => __( 'Malawi', 'polylang' ), 'mx' => __( 'Mexico', 'polylang' ), 'my' => __( 'Malaysia', 'polylang' ), 'mz' => __( 'Mozambique', 'polylang' ), 'na' => __( 'Namibia', 'polylang' ), 'nc' => __( 'New Caledonia', 'polylang' ), 'ne' => __( 'Niger', 'polylang' ), 'nf' => __( 'Norfolk Island', 'polylang' ), 'ng' => __( 'Nigeria', 'polylang' ), 'ni' => __( 'Nicaragua', 'polylang' ), 'nl' => __( 'Netherlands', 'polylang' ), 'no' => __( 'Norway', 'polylang' ), 'np' => __( 'Nepal', 'polylang' ), 'nr' => __( 'Nauru', 'polylang' ), 'nu' => __( 'Niue', 'polylang' ), 'nz' => __( 'New Zealand', 'polylang' ), 'occitania' => __( 'Occitania', 'polylang' ), 'om' => __( 'Oman', 'polylang' ), 'pa' => __( 'Panama', 'polylang' ), 'pe' => __( 'Peru', 'polylang' ), 'pf' => __( 'French Polynesia', 'polylang' ), 'pg' => __( 'Papua New Guinea', 'polylang' ), 'ph' => __( 'Philippines', 'polylang' ), 'pk' => __( 'Pakistan', 'polylang' ), 'pl' => __( 'Poland', 'polylang' ), 'pm' => __( 'Saint Pierre and Miquelon', 'polylang' ), 'pn' => __( 'Pitcairn', 'polylang' ), 'pr' => __( 'Puerto Rico', 'polylang' ), 'ps' => __( 'Palestinian Territory', 'polylang' ), 'pt' => __( 'Portugal', 'polylang' ), 'pw' => __( 'Belau', 'polylang' ), 'py' => __( 'Paraguay', 'polylang' ), 'qa' => __( 'Qatar', 'polylang' ), 'quebec' => __( 'Quebec', 'polylang' ), 'ro' => __( 'Romania', 'polylang' ), 'rs' => __( 'Serbia', 'polylang' ), 'ru' => __( 'Russia', 'polylang' ), 'rw' => __( 'Rwanda', 'polylang' ), 'sa' => __( 'Saudi Arabia', 'polylang' ), 'sb' => __( 'Solomon Islands', 'polylang' ), 'sc' => __( 'Seychelles', 'polylang' ), 'scotland' => __( 'Scotland', 'polylang' ), 'sd' => __( 'Sudan', 'polylang' ), 'se' => __( 'Sweden', 'polylang' ), 'sg' => __( 'Singapore', 'polylang' ), 'sh' => __( 'Saint Helena', 'polylang' ), 'si' => __( 'Slovenia', 'polylang' ), 'sk' => __( 'Slovakia', 'polylang' ), 'sl' => __( 'Sierra Leone', 'polylang' ), 'sm' => __( 'San Marino', 'polylang' ), 'sn' => __( 'Senegal', 'polylang' ), 'so' => __( 'Somalia', 'polylang' ), 'sr' => __( 'Suriname', 'polylang' ), 'ss' => __( 'South Sudan', 'polylang' ), 'st' => __( 'São Tomé and Príncipe', 'polylang' ), 'sv' => __( 'El Salvador', 'polylang' ), 'sy' => __( 'Syria', 'polylang' ), 'sz' => __( 'Swaziland', 'polylang' ), 'tc' => __( 'Turks and Caicos Islands', 'polylang' ), 'td' => __( 'Chad', 'polylang' ), 'tf' => __( 'French Southern Territories', 'polylang' ), 'tg' => __( 'Togo', 'polylang' ), 'th' => __( 'Thailand', 'polylang' ), 'tibet' => __( 'Tibet', 'polylang' ), 'tj' => __( 'Tajikistan', 'polylang' ), 'tk' => __( 'Tokelau', 'polylang' ), 'tl' => __( 'Timor-Leste', 'polylang' ), 'tm' => __( 'Turkmenistan', 'polylang' ), 'tn' => __( 'Tunisia', 'polylang' ), 'to' => __( 'Tonga', 'polylang' ), 'tr' => __( 'Turkey', 'polylang' ), 'tt' => __( 'Trinidad and Tobago', 'polylang' ), 'tv' => __( 'Tuvalu', 'polylang' ), 'tw' => __( 'Taiwan', 'polylang' ), 'tz' => __( 'Tanzania', 'polylang' ), 'ua' => __( 'Ukraine', 'polylang' ), 'ug' => __( 'Uganda', 'polylang' ), 'us' => __( 'United States', 'polylang' ), 'uy' => __( 'Uruguay', 'polylang' ), 'uz' => __( 'Uzbekistan', 'polylang' ), 'va' => __( 'Vatican', 'polylang' ), 'vc' => __( 'Saint Vincent and the Grenadines', 'polylang' ), 've' => __( 'Venezuela', 'polylang' ), 'veneto' => __( 'Veneto', 'polylang' ), 'vg' => __( 'British Virgin Islands', 'polylang' ), 'vi' => __( 'United States Virgin Islands', 'polylang' ), 'vn' => __( 'Vietnam', 'polylang' ), 'vu' => __( 'Vanuatu', 'polylang' ), 'wales' => __( 'Wales', 'polylang' ), 'wf' => __( 'Wallis and Futuna', 'polylang' ), 'ws' => __( 'Western Samoa', 'polylang' ), 'ye' => __( 'Yemen', 'polylang' ), 'yt' => __( 'Mayotte', 'polylang' ), 'za' => __( 'South Africa', 'polylang' ), 'zm' => __( 'Zambia', 'polylang' ), 'zw' => __( 'Zimbabwe', 'polylang' ), ); /** * Filter the list of predefined flags * * @since 1.8 * * @param array $flags */ $flags = apply_filters( 'pll_predefined_flags', $flags ); settings/settings-licenses.php000066600000015117152100561510012565 0ustar00 'licenses', 'title' => __( 'License keys', 'polylang' ), 'description' => __( 'Manage licenses for Polylang Pro or addons.', 'polylang' ), ) ); $this->buttons['cancel'] = sprintf( '', __( 'Close' ) ); $this->items = apply_filters( 'pll_settings_licenses', array() ); add_action( 'wp_ajax_pll_deactivate_license', array( $this, 'deactivate_license' ) ); } /** * Tells if the module is active * * @since 1.9 * * @return bool */ public function is_active() { return ! empty( $this->items ); } /** * Displays the settings form * * @since 1.9 */ protected function form() { if ( ! empty( $this->items ) ) { ?> items as $item ) { echo $this->get_row( $item ); } ?>
    license_data ) ) { $license = $item->license_data; } $class = 'license-null'; $out = sprintf( '' . '', esc_attr( $item->id ), esc_attr( $item->name ), esc_html( $item->license_key ) ); if ( ! empty( $license ) && is_object( $license ) ) { $now = current_time( 'timestamp' ); $expiration = strtotime( $license->expires, $now ); // Special case: the license expired after the last check if ( $license->success && $expiration < $now ) { $license->success = false; $license->error = 'expired'; } if ( false === $license->success ) { $class = 'notice-error notice-alt'; switch ( $license->error ) { case 'expired': $message = sprintf( /* translators: %1$s is a date, %2$s and %3$s are html tags */ __( 'Your license key expired on %1$s. Please %2$srenew your license key%3$s.', 'polylang' ), date_i18n( get_option( 'date_format' ), strtotime( $license->expires, current_time( 'timestamp' ) ) ), sprintf( '', 'https://polylang.pro/checkout/?edd_license_key=' . $item->license_key ), '' ); break; case 'missing': $message = sprintf( /* translators: %s are html tags */ __( 'Invalid license. Please %svisit your account page%s and verify it.', 'polylang' ), sprintf( '', 'https://polylang.pro/account' ), '' ); break; case 'invalid': case 'site_inactive': $message = sprintf( /* translators: %1$s is a product name, %2$s and %3$s are html tags */ __( 'Your %1$s license key is not active for this URL. Please %2$svisit your account page%3$s to manage your license key URLs.', 'polylang' ), $item->name, sprintf( '', 'https://polylang.pro/account' ), '' ); break; case 'item_name_mismatch': /* translators: %s is a product name */ $message = sprintf( __( 'This is not a %s license key.', 'polylang' ), $item->name ); break; case 'no_activations_left': $message = sprintf( /* translators: %s are html tags */ __( 'Your license key has reached its activation limit. %sView possible upgrades%s now.', 'polylang' ), sprintf( '', 'https://polylang.pro/account' ), '' ); break; } } else { $class = 'license-valid'; $out .= sprintf( '', $item->id, __( 'Deactivate', 'polylang' ) ); if ( 'lifetime' === $license->expires ) { $message = __( 'The license key never expires.', 'polylang' ); } elseif ( $expiration > $now && $expiration - $now < ( DAY_IN_SECONDS * 30 ) ) { $class = 'notice-warning notice-alt'; $message = sprintf( /* translators: %1$s is a date, %2$s and %3$s are html tags */ __( 'Your license key expires soon! It expires on %1$s. %2$sRenew your license key%3$s.', 'polylang' ), date_i18n( get_option( 'date_format' ), strtotime( $license->expires, $now ) ), sprintf( '', 'https://polylang.pro/checkout/?edd_license_key=' . $item->license_key ), '' ); } else { $message = sprintf( /* translators: %s is a date */ __( 'Your license key expires on %s.', 'polylang' ), date_i18n( get_option( 'date_format' ), strtotime( $license->expires, $now ) ) ); } } } if ( ! empty( $message ) ) { $out .= '

    ' . $message . '

    '; } return sprintf( '%s', $item->id, $class, $out ); } /** * Ajax method to save the license keys and activate the licenses at the same time * Overrides parent's method * * @since 1.9 */ public function save_options() { check_ajax_referer( 'pll_options', '_pll_nonce' ); if ( ! current_user_can( 'manage_options' ) ) { wp_die( -1 ); } if ( $this->module === $_POST['module'] && ! empty( $_POST['licenses'] ) ) { $x = new WP_Ajax_Response(); foreach ( $this->items as $item ) { $updated_item = $item->activate_license( sanitize_text_field( $_POST['licenses'][ $item->id ] ) ); $x->Add( array( 'what' => 'license-update', 'data' => $item->id, 'supplemental' => array( 'html' => $this->get_row( $updated_item ) ) ) ); } // Updated message add_settings_error( 'general', 'settings_updated', __( 'Settings saved.' ), 'updated' ); ob_start(); settings_errors(); $x->Add( array( 'what' => 'success', 'data' => ob_get_clean() ) ); $x->send(); } } /** * Ajax method to deactivate a license * * @since 1.9 */ public function deactivate_license() { check_ajax_referer( 'pll_options', '_pll_nonce' ); if ( ! current_user_can( 'manage_options' ) ) { wp_die( -1 ); } $id = sanitize_text_field( substr( $_POST['id'], 11 ) ); wp_send_json( array( 'id' => $id, 'html' => $this->get_row( $this->items[ $id ]->deactivate_license() ), ) ); } } settings/view-tab-settings.php000066600000000523152100561510012471 0ustar00
    prepare_items( $this->modules ); $list_table->display(); ?>