';
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.php 0000666 00000007761 15210056146 0007454 0 ustar 00 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.php 0000666 00000014102 15210056146 0012162 0 ustar 00 ID;
$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.po 0000666 00000045520 15210056146 0011311 0 ustar 00 msgid ""
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.po 0000666 00000054701 15210056146 0011503 0 ustar 00 # 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.mo 0000666 00000026313 15210056146 0011653 0 ustar 00 u l l m : | : - ( 9 ) M w
* "
. @ Q X p
-
n I
2
# > ? Y $
A Y k }
1 J
\ _
1 8 7 F &