Polylang - Version 1.0.3

Version Description

(2013-03-17) =

  • Add Catalan translation contributed by Nria Martnez Berenguer
  • Add Ukrainian translation contributed by cmd soft
  • 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
Download this release

Release Info

Developer Chouby
Plugin Icon 128x128 Polylang
Version 1.0.3
Comparing to
See all releases

Code changes from version 1.0.2 to 1.0.3

include/about.php CHANGED
@@ -20,7 +20,7 @@ printf(
20
  echo ' ';
21
  printf(
22
  __('If you wonder how you can help the project, just %sread this%s.', 'polylang'),
23
- '<a href="http://wordpress.org/extend/plugins/polylang/other_notes/">',
24
  '</a>'
25
  );
26
  echo ' ';
20
  echo ' ';
21
  printf(
22
  __('If you wonder how you can help the project, just %sread this%s.', 'polylang'),
23
+ '<a href="http://polylang.wordpress.com/documentation/contribute/">',
24
  '</a>'
25
  );
26
  echo ' ';
include/admin-base.php CHANGED
@@ -137,7 +137,7 @@ class Polylang_Admin_Base extends Polylang_Base {
137
 
138
  // try to download theme files if exist (will not return false if failed)
139
  // FIXME not updated when the theme is updated outside a core update
140
- foreach (array('twentyten', 'twentyeleven', 'twentytwelve') as $theme)
141
  wp_remote_get($base."$version/messages/$theme/$locale.mo", $args + array('filename' => get_theme_root()."/$theme/languages/$locale.mo"));
142
 
143
  return true;
@@ -179,31 +179,27 @@ class Polylang_Admin_Base extends Polylang_Base {
179
  $selected = !empty($_GET['lang']) && !is_numeric($_GET['lang']) && ($lang = $this->get_language($_GET['lang'])) ? $lang->slug :
180
  (($lg = get_user_meta(get_current_user_id(), 'pll_filter_content', true)) ? $lg : 'all');
181
 
 
 
182
  $wp_admin_bar->add_menu(array(
183
  'id' => 'languages',
184
  'title' => __('Languages', 'polylang'),
185
  'meta' => array('title' => __('Filters content by language', 'polylang')),
186
  ));
187
 
188
- $wp_admin_bar->add_menu(array(
189
- 'parent' => 'languages',
190
- 'id' => 'all',
191
- 'title' => sprintf('<input name="all" type="radio" value="1" %s /> %s',
192
- $selected == 'all' ? 'checked="checked"' : '', __('Show all languages', 'polylang')),
193
- 'href' => add_query_arg('lang', 'all', $url),
194
- ));
195
-
196
- foreach ($this->get_languages_list() as $lang) {
197
  $wp_admin_bar->add_menu(array(
198
  'parent' => 'languages',
199
  'id' => $lang->slug,
200
  'title' => sprintf(
201
- '<input name="%s" type="radio" value="1" %s /> %s',
 
202
  esc_attr($lang->slug),
203
  $selected == $lang->slug ? 'checked="checked"' : '',
204
  esc_html($lang->name)
205
  ),
206
- 'href' => add_query_arg('lang', $lang->slug, $url),
207
  ));
208
  }
209
  }
137
 
138
  // try to download theme files if exist (will not return false if failed)
139
  // FIXME not updated when the theme is updated outside a core update
140
+ foreach (array('twentyten', 'twentyeleven', 'twentytwelve', 'twentythirteen') as $theme)
141
  wp_remote_get($base."$version/messages/$theme/$locale.mo", $args + array('filename' => get_theme_root()."/$theme/languages/$locale.mo"));
142
 
143
  return true;
179
  $selected = !empty($_GET['lang']) && !is_numeric($_GET['lang']) && ($lang = $this->get_language($_GET['lang'])) ? $lang->slug :
180
  (($lg = get_user_meta(get_current_user_id(), 'pll_filter_content', true)) ? $lg : 'all');
181
 
182
+ $all_item = array((object) array('slug' => 'all', 'name' => __('Show all languages', 'polylang')));
183
+
184
  $wp_admin_bar->add_menu(array(
185
  'id' => 'languages',
186
  'title' => __('Languages', 'polylang'),
187
  'meta' => array('title' => __('Filters content by language', 'polylang')),
188
  ));
189
 
190
+ foreach (array_merge($all_item, $this->get_languages_list()) as $lang) {
191
+ $href = add_query_arg('lang', $lang->slug, $url);
 
 
 
 
 
 
 
192
  $wp_admin_bar->add_menu(array(
193
  'parent' => 'languages',
194
  'id' => $lang->slug,
195
  'title' => sprintf(
196
+ '<input name="language" type="radio" onclick="location.href=%s" value="%s" %s /> %s',
197
+ "'" . $href . "'", // onclick is needed for Chrome browser, thanks to RavanH for the bug report and fix
198
  esc_attr($lang->slug),
199
  $selected == $lang->slug ? 'checked="checked"' : '',
200
  esc_html($lang->name)
201
  ),
202
+ 'href' => $href,
203
  ));
204
  }
205
  }
include/admin-filters.php CHANGED
@@ -934,11 +934,12 @@ class Polylang_Admin_Filters extends Polylang_Admin_Base {
934
 
935
  // get all posts associated to this term
936
  $posts = get_posts(array(
937
- 'numberposts'=> -1,
938
- 'post_type' => 'any',
939
- 'post_status'=> 'any',
940
- 'fields' => 'ids',
941
- 'tax_query' => array(array(
 
942
  'taxonomy' => $taxonomy,
943
  'field' => 'id',
944
  'terms' => array_merge(array($term_id), array_values($translations)),
934
 
935
  // get all posts associated to this term
936
  $posts = get_posts(array(
937
+ 'numberposts' => -1,
938
+ 'nopaging' => true,
939
+ 'post_type' => 'any',
940
+ 'post_status' => 'any',
941
+ 'fields' => 'ids',
942
+ 'tax_query' => array(array(
943
  'taxonomy' => $taxonomy,
944
  'field' => 'id',
945
  'terms' => array_merge(array($term_id), array_values($translations)),
include/admin.php CHANGED
@@ -96,7 +96,14 @@ class Polylang_Admin extends Polylang_Admin_Base {
96
  $lang_slug = $lang->slug;
97
 
98
  // update the language slug in posts meta
99
- $posts = get_posts(array('numberposts'=>-1, 'fields' => 'ids', 'meta_key'=>'_translations', 'post_type'=>'any', 'post_status'=>'any'));
 
 
 
 
 
 
 
100
  $this->delete_translations('post', $posts, $lang_slug);
101
 
102
  // update the language slug in categories & post tags meta
@@ -173,6 +180,7 @@ class Polylang_Admin extends Polylang_Admin_Base {
173
  // update the language slug in posts meta
174
  $posts = get_posts(array(
175
  'numberposts' => -1,
 
176
  'fields' => 'ids',
177
  'meta_key' => '_translations',
178
  'post_type' => 'any',
@@ -425,6 +433,7 @@ class Polylang_Admin extends Polylang_Admin_Base {
425
  function get_objects_with_no_lang() {
426
  $posts = get_posts(array(
427
  'numberposts' => -1,
 
428
  'post_type' => $this->post_types,
429
  'post_status' => 'any',
430
  'fields' => 'ids',
96
  $lang_slug = $lang->slug;
97
 
98
  // update the language slug in posts meta
99
+ $posts = get_posts(array(
100
+ 'numberposts' => -1,
101
+ 'nopaging' => true,
102
+ 'fields' => 'ids',
103
+ 'meta_key' => '_translations',
104
+ 'post_type' => 'any',
105
+ 'post_status' => 'any'
106
+ ));
107
  $this->delete_translations('post', $posts, $lang_slug);
108
 
109
  // update the language slug in categories & post tags meta
180
  // update the language slug in posts meta
181
  $posts = get_posts(array(
182
  'numberposts' => -1,
183
+ 'nopaging' => true,
184
  'fields' => 'ids',
185
  'meta_key' => '_translations',
186
  'post_type' => 'any',
433
  function get_objects_with_no_lang() {
434
  $posts = get_posts(array(
435
  'numberposts' => -1,
436
+ 'nopaging' => true,
437
  'post_type' => $this->post_types,
438
  'post_status' => 'any',
439
  'fields' => 'ids',
include/base.php CHANGED
@@ -276,7 +276,7 @@ abstract class Polylang_Base {
276
  global $wpdb;
277
  // the query is coming from Polylang and the $lang is an object
278
  if (is_object($lang))
279
- return $lang->$field;
280
 
281
  // the query is coming from outside with 'lang' parameter and $lang is a comma separated list of slugs (or an array of slugs)
282
  $languages = is_array($lang) ? $lang : explode(',', $lang);
@@ -286,6 +286,10 @@ abstract class Polylang_Base {
286
  INNER JOIN $wpdb->terms USING (term_id)
287
  WHERE taxonomy = 'language' AND $wpdb->terms.slug IN ($languages)
288
  "); // get ids from slugs
 
 
 
 
289
  return implode(',', $languages);
290
  }
291
 
@@ -315,14 +319,14 @@ abstract class Polylang_Base {
315
 
316
  // returns all page ids *not in* language defined by $lang_id
317
  function exclude_pages($lang_id) {
318
- // 'suppress_filter' is true by default so this query is not filtered by our pre_get_post filter in core.php
319
  return get_posts(array(
 
320
  'numberposts' => -1,
 
321
  'post_type' => array_intersect(get_post_types(array('hierarchical' => 1)), $this->post_types),
322
  'fields' => 'ids',
323
  'tax_query' => array(array(
324
  'taxonomy' => 'language',
325
- 'fields' => 'id',
326
  'terms' => $lang_id,
327
  'operator' => 'NOT IN'
328
  ))
276
  global $wpdb;
277
  // the query is coming from Polylang and the $lang is an object
278
  if (is_object($lang))
279
+ return $field == 'term_id' ? "'" . $lang->$field . "'" : $lang->$field;
280
 
281
  // the query is coming from outside with 'lang' parameter and $lang is a comma separated list of slugs (or an array of slugs)
282
  $languages = is_array($lang) ? $lang : explode(',', $lang);
286
  INNER JOIN $wpdb->terms USING (term_id)
287
  WHERE taxonomy = 'language' AND $wpdb->terms.slug IN ($languages)
288
  "); // get ids from slugs
289
+
290
+ if ($field == 'term_id')
291
+ $languages = array_map(create_function('$v', 'return "\'" . $v . "\'";'), $languages);
292
+
293
  return implode(',', $languages);
294
  }
295
 
319
 
320
  // returns all page ids *not in* language defined by $lang_id
321
  function exclude_pages($lang_id) {
 
322
  return get_posts(array(
323
+ 'lang' => 0, // so this query is not filtered by our pre_get_post filter in core.php
324
  'numberposts' => -1,
325
+ 'nopaging' => true,
326
  'post_type' => array_intersect(get_post_types(array('hierarchical' => 1)), $this->post_types),
327
  'fields' => 'ids',
328
  'tax_query' => array(array(
329
  'taxonomy' => 'language',
 
330
  'terms' => $lang_id,
331
  'operator' => 'NOT IN'
332
  ))
include/core.php CHANGED
@@ -416,7 +416,7 @@ class Polylang_Core extends Polylang_base {
416
  // don't redirect if $_POST is not empty as it could break other plugins
417
  // don't forget the query string which may be added by plugins
418
  elseif (is_string($redirect = $this->get_home_url($this->curlang)) && empty($_POST)) {
419
- wp_redirect($_SERVER['QUERY_STRING'] ? $redirect . ($wp_rewrite->using_permalinks() ? '?' : '&') . $_SERVER['QUERY_STRING'] : $redirect);
420
  exit;
421
  }
422
  }
@@ -425,20 +425,27 @@ class Polylang_Core extends Polylang_base {
425
  function pre_get_posts($query) {
426
  // don't make anything if no language has been defined yet
427
  // $this->post_types & $this->taxonomies are defined only once the action 'wp_loaded' has been fired
428
- // FIXME honoring suppress_filters breaks adjacent_image_link when post_parent == 0
429
- if (!$this->get_languages_list() || !did_action('wp_loaded') /*|| $query->get('suppress_filters')*/)
430
  return;
431
 
432
  $qv = $query->query_vars;
433
 
 
 
 
 
434
  // users may want to display content in a different language than the current one by setting it explicitely in the query
435
  if (!$this->first_query && $this->curlang && !empty($qv['lang']))
436
  return;
437
 
438
- // detect our exclude pages query and returns to avoid conflicts
439
- // this test should be sufficient
440
- if (isset($qv['tax_query'][0]['taxonomy']) && $qv['tax_query'][0]['taxonomy'] == 'language' &&
441
- isset($qv['tax_query'][0]['operator']) && $qv['tax_query'][0]['operator'] == 'NOT IN')
 
 
 
442
  return;
443
 
444
  global $wp_rewrite;
@@ -446,7 +453,7 @@ class Polylang_Core extends Polylang_base {
446
 
447
  // special case for wp-signup.php & wp-activate.php
448
  // stripos for case insensitive file systems
449
- if (is_home() && false === stripos($_SERVER['SCRIPT_NAME'], $wp_rewrite->index)) {
450
  $this->curlang = $this->get_preferred_language();
451
  return;
452
  }
@@ -497,14 +504,9 @@ class Polylang_Core extends Polylang_base {
497
  }
498
  }
499
 
500
- $is_post_type = isset($qv['post_type']) && (
501
- in_array($qv['post_type'], $this->post_types) ||
502
- (is_array($qv['post_type']) && array_intersect($qv['post_type'], $this->post_types))
503
- );
504
-
505
  // FIXME to generalize as I probably forget things
506
  $is_archive = (count($query->query) == 1 && !empty($qv['paged'])) ||
507
- !empty($qv['m']) ||
508
  !empty($qv['author']) ||
509
  (isset($qv['post_type']) && is_post_type_archive() && $is_post_type);
510
 
@@ -513,7 +515,7 @@ class Polylang_Core extends Polylang_base {
513
  $query->set_404();
514
 
515
  // sets the language in case we hide the default language
516
- if ($this->options['hide_default'] && !isset($qv['lang']) && ($is_archive || is_search() || (count($query->query) == 1 && !empty($qv['feed'])) ))
517
  $query->set('lang', $this->options['default_lang']);
518
 
519
  // allow filtering recent posts and secondary queries by the current language
@@ -577,7 +579,7 @@ class Polylang_Core extends Polylang_base {
577
  }
578
 
579
  // adds our clauses to filter by language
580
- return $this->_terms_clauses($clauses, !empty($args['lang']) ? $args['lang'] : $this->curlang);
581
  }
582
 
583
  // meta in the html head section
@@ -717,7 +719,7 @@ class Polylang_Core extends Polylang_base {
717
 
718
  // filters the comments according to the current language mainly for the recent comments widget
719
  function comments_clauses($clauses, $query) {
720
- return $this->_comments_clauses($clauses, !empty($query->query_vars['lang']) ? $query->query_vars['lang'] : $this->curlang);
721
  }
722
 
723
  // modifies the sql request for wp_get_archives an get_adjacent_post to filter by the current language
416
  // don't redirect if $_POST is not empty as it could break other plugins
417
  // don't forget the query string which may be added by plugins
418
  elseif (is_string($redirect = $this->get_home_url($this->curlang)) && empty($_POST)) {
419
+ wp_redirect(empty($_SERVER['QUERY_STRING']) ? $redirect : $redirect . ($wp_rewrite->using_permalinks() ? '?' : '&') . $_SERVER['QUERY_STRING']);
420
  exit;
421
  }
422
  }
425
  function pre_get_posts($query) {
426
  // don't make anything if no language has been defined yet
427
  // $this->post_types & $this->taxonomies are defined only once the action 'wp_loaded' has been fired
428
+ // don't honor suppress_filters as it breaks adjacent_image_link when post_parent == 0
429
+ if (!$this->get_languages_list() || !did_action('wp_loaded'))
430
  return;
431
 
432
  $qv = $query->query_vars;
433
 
434
+ // do not filter if lang is set to an empty value
435
+ if (isset($qv['lang']) && !$qv['lang'])
436
+ return;
437
+
438
  // users may want to display content in a different language than the current one by setting it explicitely in the query
439
  if (!$this->first_query && $this->curlang && !empty($qv['lang']))
440
  return;
441
 
442
+ $is_post_type = isset($qv['post_type']) && (
443
+ in_array($qv['post_type'], $this->post_types) ||
444
+ (is_array($qv['post_type']) && array_intersect($qv['post_type'], $this->post_types))
445
+ );
446
+
447
+ // don't filters post types not in our list
448
+ if (isset($qv['post_type']) && !$is_post_type)
449
  return;
450
 
451
  global $wp_rewrite;
453
 
454
  // special case for wp-signup.php & wp-activate.php
455
  // stripos for case insensitive file systems
456
+ if (false === stripos($_SERVER['SCRIPT_NAME'], $wp_rewrite->index)) {
457
  $this->curlang = $this->get_preferred_language();
458
  return;
459
  }
504
  }
505
  }
506
 
 
 
 
 
 
507
  // FIXME to generalize as I probably forget things
508
  $is_archive = (count($query->query) == 1 && !empty($qv['paged'])) ||
509
+ !empty($qv['m']) || !empty($qv['year']) || // need to test year due to post rewrite rule conflict when using date and name permalinks
510
  !empty($qv['author']) ||
511
  (isset($qv['post_type']) && is_post_type_archive() && $is_post_type);
512
 
515
  $query->set_404();
516
 
517
  // sets the language in case we hide the default language
518
+ if ($this->options['hide_default'] && !isset($qv['lang']) && ($is_archive || $query->is_search || (count($query->query) == 1 && !empty($qv['feed'])) ))
519
  $query->set('lang', $this->options['default_lang']);
520
 
521
  // allow filtering recent posts and secondary queries by the current language
579
  }
580
 
581
  // adds our clauses to filter by language
582
+ return $this->_terms_clauses($clauses, isset($args['lang']) ? $args['lang'] : $this->curlang);
583
  }
584
 
585
  // meta in the html head section
719
 
720
  // filters the comments according to the current language mainly for the recent comments widget
721
  function comments_clauses($clauses, $query) {
722
+ return $this->_comments_clauses($clauses, isset($query->query_vars['lang']) ? $query->query_vars['lang'] : $this->curlang);
723
  }
724
 
725
  // modifies the sql request for wp_get_archives an get_adjacent_post to filter by the current language
include/plugins-compat.php CHANGED
@@ -1,23 +1,25 @@
1
  <?php
2
 
3
- class Polylang_Plugins_Compat{
4
  function __construct() {
5
  // YARPP
6
  // just makes YARPP aware of the language taxonomy (after Polylang registered it)
7
  add_action('init', create_function('',"\$GLOBALS['wp_taxonomies']['language']->yarpp_support = 1;"), 20);
8
 
9
  // WordPress SEO by Yoast
10
- // Unfortunately this plugin loads the text domain before Polylang is able to modify the locale
11
  if (is_admin())
12
- add_filter('override_load_textdomain', array(&$this, 'wp_seo_override_load_textdomain'), 10, 2);
 
 
13
 
14
  // Custom field template
15
- // This plugin does check $_REQUEST['post'] to populate the custom fields values
16
  add_action('dbx_post_advanced', array(&$this, 'cft_copy'));
17
 
18
  }
19
 
20
- function wp_seo_override_load_textdomain( $return, $domain ) {
 
 
21
  if ($domain == 'wordpress-seo' && !did_action('plugins_loaded')) {
22
  add_filter('plugins_loaded', create_function('', "load_plugin_textdomain('wordpress-seo', false, dirname(WPSEO_BASENAME).'/languages');"));
23
  return true;
@@ -25,6 +27,14 @@ class Polylang_Plugins_Compat{
25
  return $return;
26
  }
27
 
 
 
 
 
 
 
 
 
28
  function cft_copy() {
29
  global $post, $custom_field_template;
30
  if (isset($custom_field_template) && !empty($post) && isset($_REQUEST['from_post']) && isset($_REQUEST['new_lang']))
1
  <?php
2
 
3
+ class Polylang_Plugins_Compat {
4
  function __construct() {
5
  // YARPP
6
  // just makes YARPP aware of the language taxonomy (after Polylang registered it)
7
  add_action('init', create_function('',"\$GLOBALS['wp_taxonomies']['language']->yarpp_support = 1;"), 20);
8
 
9
  // WordPress SEO by Yoast
 
10
  if (is_admin())
11
+ add_filter('override_load_textdomain', array(&$this, 'wpseo_override_load_textdomain'), 10, 2);
12
+
13
+ add_filter('get_terms_args', array(&$this, 'wpseo_remove_terms_filter'));
14
 
15
  // Custom field template
 
16
  add_action('dbx_post_advanced', array(&$this, 'cft_copy'));
17
 
18
  }
19
 
20
+ // Unfortunately WPSEO loads the text domain before Polylang is able to modify the locale
21
+ // this hack works because Polylang is loaded before WPSEO...
22
+ function wpseo_override_load_textdomain( $return, $domain ) {
23
  if ($domain == 'wordpress-seo' && !did_action('plugins_loaded')) {
24
  add_filter('plugins_loaded', create_function('', "load_plugin_textdomain('wordpress-seo', false, dirname(WPSEO_BASENAME).'/languages');"));
25
  return true;
27
  return $return;
28
  }
29
 
30
+ // removes the language filter for the taxonomy sitemaps
31
+ function wpseo_remove_terms_filter($args) {
32
+ if (defined('WPSEO_VERSION') && isset($GLOBALS['wp_query']->query['sitemap']))
33
+ $args['lang'] = 0;
34
+ return $args;
35
+ }
36
+
37
+ // Custom field template does check $_REQUEST['post'] to populate the custom fields values
38
  function cft_copy() {
39
  global $post, $custom_field_template;
40
  if (isset($custom_field_template) && !empty($post) && isset($_REQUEST['from_post']) && isset($_REQUEST['new_lang']))
include/wpml-compat.php CHANGED
@@ -164,13 +164,12 @@ class Polylang_WPML_Compat {
164
  add_action('pll_get_strings', array(&$this, 'get_strings'));
165
  }
166
 
167
- // the persistant register_string function
 
 
168
  function register_string($context, $name, $string) {
169
  if (empty($this->strings))
170
- $this->strings = get_option('polylang_wpml_strings');
171
-
172
- if (empty($this->strings))
173
- $this->strings = array();
174
 
175
  // registers the string if it does not exist yet
176
  // $context not used today but save it just in case
@@ -184,10 +183,7 @@ class Polylang_WPML_Compat {
184
  // removes a string from the registered strings list
185
  function unregister_string($context, $name) {
186
  if (empty($this->strings))
187
- $this->strings = get_option('polylang_wpml_strings');
188
-
189
- if (empty($this->strings))
190
- $this->strings = array();
191
 
192
  foreach ($this->strings as $key=>$string) {
193
  if ($string['context'] == $context && $string['name'] == $name) {
@@ -226,7 +222,7 @@ class Polylang_WPML_Config {
226
  add_action('plugins_loaded', array(&$this, 'init'));
227
  }
228
 
229
- function xml_parse($xml) {
230
  $parser = xml_parser_create();
231
  xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
232
  xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
@@ -241,18 +237,20 @@ class Polylang_WPML_Config {
241
  array('custom-fields', 'custom-field'),
242
  array('custom-types','custom-type'),
243
  array('taxonomies','taxonomy'),
244
- array('admin_texts','key')
245
  );
246
 
247
  foreach ($keys as $k) {
248
- if (isset($arr[$k[0]]) && !isset($arr[$k[0]][$k[1]][0])) {
249
- $elem = $arr[$k[0]][$k[1]];
250
- unset($arr[$k[0]][$k[1]]);
251
- $arr[$k[0]][$k[1]][0] = $elem;
 
 
 
 
252
  }
253
  }
254
-
255
- $this->wpml_config = array_merge_recursive($this->wpml_config, $arr);
256
  }
257
 
258
  function xml_parse_recursive() {
@@ -291,7 +289,8 @@ class Polylang_WPML_Config {
291
  }
292
  if (isset($value))
293
  $tagRef = $value;
294
- } }
 
295
 
296
  return $found;
297
  }
@@ -301,18 +300,22 @@ class Polylang_WPML_Config {
301
 
302
  // child theme
303
  if (($template = get_template_directory()) != ($stylesheet = get_stylesheet_directory()) && file_exists($file = $stylesheet.'/wpml-config.xml'))
304
- $this->xml_parse(file_get_contents($file)); // FIXME fopen + fread + fclose quicker ?
305
 
306
  // theme
307
  if (file_exists($file = $template.'/wpml-config.xml'))
308
- $this->xml_parse(file_get_contents($file));
309
 
310
  // plugins
311
  foreach (get_option('active_plugins') as $plugin) {
312
- if (file_exists($file = WP_PLUGIN_DIR.'/'.dirname($plugin).'/wpml-config.xml'))
313
- $this->xml_parse(file_get_contents($file));
314
  }
315
 
 
 
 
 
316
  if (isset($this->wpml_config['custom-fields']))
317
  add_filter('pll_copy_post_metas', array(&$this, 'copy_post_metas'), 10, 2);
318
 
@@ -325,22 +328,27 @@ class Polylang_WPML_Config {
325
  if (!isset($this->wpml_config['admin-texts']))
326
  return;
327
 
328
- foreach ($this->wpml_config['admin-texts'] as $keys)
329
- $this->strings = $this->admin_texts_recursive($keys);
330
-
331
- foreach ($this->strings as $option_name=>$value) {
332
- if (is_admin()) {
333
- $option = get_option($option_name);
334
- if (is_string($option) && $value == 1)
335
- pll_register_string($option_name, $option);
336
- if (is_array($option) && is_array($value))
337
- $this->register_string_recursive($value, $option);
 
 
 
 
 
 
338
  }
339
- else
340
- add_filter('option_'.$option_name, array(&$this, 'translate_strings'));
341
  }
342
  }
343
 
 
344
  function admin_texts_recursive($keys) {
345
  if (!isset($keys[0])) {
346
  $elem = $keys;
@@ -353,61 +361,76 @@ class Polylang_WPML_Config {
353
  return $strings;
354
  }
355
 
356
- function register_string_recursive($strings, $options) {
 
357
  foreach ($options as $name=>$value) {
358
  if (isset($strings[$name])) {
359
  if (is_string($value) && $strings[$name] == 1)
360
- pll_register_string($name, $value);
361
- if (is_array($value) && is_array($strings[$name]))
362
- $this->register_string_recursive($strings[$name], $value);
363
  }
364
  }
365
  }
366
 
367
  function copy_post_metas($metas, $sync) {
368
- foreach ($this->wpml_config['custom-fields']['custom-field'] as $cf) {
369
- if (!$sync || $cf['attributes']['action'] == 'copy')
370
- $metas[] = $cf['value'];
371
- elseif ($sync && $cf['attributes']['action'] == 'translate')
372
- $metas = array_diff($metas, array($cf)); // do not synchronize
 
 
373
  }
374
  return $metas;
375
  }
376
 
377
  // language and translation management for custom post types
378
  function translate_types($types, $hide) {
379
- foreach ($this->wpml_config['custom-types']['custom-type'] as $pt) {
380
- if ($pt['attributes']['translate'] == 1 && !$hide)
381
- $types[$pt['value']] = $pt['value'];
382
- elseif ($hide)
383
- unset ($types[$pt['value']]); // the author decided what to do with the post type so don't allow the user to change this
 
 
384
  }
385
  return $types;
386
  }
387
 
388
  // language and translation management for custom taxonomies
389
  function translate_taxonomies($taxonomies, $hide) {
390
- foreach ($this->wpml_config['taxonomies']['taxonomy'] as $tax) {
391
- if ($tax['attributes']['translate'] == 1 && !$hide)
392
- $taxonomies[$tax['value']] = $tax['value'];
393
- elseif ($hide)
394
- unset ($types[$tax['value']]); // the author decided what to do with the taxonomy so don't allow the user to change this
 
 
395
  }
396
 
397
  return $taxonomies;
398
  }
399
 
 
400
  function translate_strings($value) {
401
- $option = substr(current_filter(), 7);
402
- return is_array($value) ? $this->translate_strings_recursive($this->strings[$option], $value) : pll__($value);
 
 
 
 
 
 
403
  }
404
 
 
405
  function translate_strings_recursive($strings, $values) {
406
  foreach ($values as $name=>$value) {
407
  if (isset($strings[$name])) {
408
  if (is_string($value) && $strings[$name] == 1)
409
  $values[$name] = pll__($value);
410
- if (is_array($value) && is_array($strings[$name]))
411
  $value = $this->translate_strings_recursive($strings[$name], $value);
412
  }
413
  }
164
  add_action('pll_get_strings', array(&$this, 'get_strings'));
165
  }
166
 
167
+ // unlike pll_register_string, icl_register_string stores the sting in database
168
+ // so we need to do the same as some plugins or themes may expect this
169
+ // we use a serialized option to do this
170
  function register_string($context, $name, $string) {
171
  if (empty($this->strings))
172
+ $this->strings = get_option('polylang_wpml_strings', array());
 
 
 
173
 
174
  // registers the string if it does not exist yet
175
  // $context not used today but save it just in case
183
  // removes a string from the registered strings list
184
  function unregister_string($context, $name) {
185
  if (empty($this->strings))
186
+ $this->strings = get_option('polylang_wpml_strings', array());
 
 
 
187
 
188
  foreach ($this->strings as $key=>$string) {
189
  if ($string['context'] == $context && $string['name'] == $name) {
222
  add_action('plugins_loaded', array(&$this, 'init'));
223
  }
224
 
225
+ function xml_parse($xml, $context) {
226
  $parser = xml_parser_create();
227
  xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
228
  xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
237
  array('custom-fields', 'custom-field'),
238
  array('custom-types','custom-type'),
239
  array('taxonomies','taxonomy'),
240
+ array('admin-texts','key')
241
  );
242
 
243
  foreach ($keys as $k) {
244
+ if (isset($arr[$k[0]])) {
245
+ if (!isset($arr[$k[0]][$k[1]][0])) {
246
+ $elem = $arr[$k[0]][$k[1]];
247
+ unset($arr[$k[0]][$k[1]]);
248
+ $arr[$k[0]][$k[1]][0] = $elem;
249
+ }
250
+
251
+ $this->wpml_config[$k[0]][$context] = $arr[$k[0]];
252
  }
253
  }
 
 
254
  }
255
 
256
  function xml_parse_recursive() {
289
  }
290
  if (isset($value))
291
  $tagRef = $value;
292
+ }
293
+ }
294
 
295
  return $found;
296
  }
300
 
301
  // child theme
302
  if (($template = get_template_directory()) != ($stylesheet = get_stylesheet_directory()) && file_exists($file = $stylesheet.'/wpml-config.xml'))
303
+ $this->xml_parse(file_get_contents($file), get_stylesheet()); // FIXME fopen + fread + fclose quicker ?
304
 
305
  // theme
306
  if (file_exists($file = $template.'/wpml-config.xml'))
307
+ $this->xml_parse(file_get_contents($file), get_template());
308
 
309
  // plugins
310
  foreach (get_option('active_plugins') as $plugin) {
311
+ if (file_exists($file = dirname(POLYLANG_DIR).'/'.dirname($plugin).'/wpml-config.xml'))
312
+ $this->xml_parse(file_get_contents($file), dirname($plugin));
313
  }
314
 
315
+ // custom
316
+ if (file_exists($file = PLL_LOCAL_DIR.'/wpml-config.xml'))
317
+ $this->xml_parse(file_get_contents($file), 'polylang');
318
+
319
  if (isset($this->wpml_config['custom-fields']))
320
  add_filter('pll_copy_post_metas', array(&$this, 'copy_post_metas'), 10, 2);
321
 
328
  if (!isset($this->wpml_config['admin-texts']))
329
  return;
330
 
331
+ // get a cleaner array for easy manipulation
332
+ foreach ($this->wpml_config['admin-texts'] as $context => $arr)
333
+ foreach ($arr as $keys)
334
+ $this->strings[$context] = $this->admin_texts_recursive($keys);
335
+
336
+ foreach ($this->strings as $context=>$options) {
337
+ foreach ($options as $option_name=>$value) {
338
+ if (defined('DOING_CRON') || (is_admin() && !(defined('DOING_AJAX') && isset($_REQUEST['pll_load_front'])))) { // backend
339
+ $option = get_option($option_name);
340
+ if (is_string($option) && $value == 1)
341
+ pll_register_string($option_name, $option); // FIXME ready to use $context
342
+ elseif (is_array($option) && is_array($value))
343
+ $this->register_string_recursive($context, $value, $option); // for a serialized option
344
+ }
345
+ else
346
+ add_filter('option_'.$option_name, array(&$this, 'translate_strings'));
347
  }
 
 
348
  }
349
  }
350
 
351
+ // arranges strings in a cleaner way
352
  function admin_texts_recursive($keys) {
353
  if (!isset($keys[0])) {
354
  $elem = $keys;
361
  return $strings;
362
  }
363
 
364
+ // recursively registers strings for a serialized option
365
+ function register_string_recursive($context, $strings, $options) {
366
  foreach ($options as $name=>$value) {
367
  if (isset($strings[$name])) {
368
  if (is_string($value) && $strings[$name] == 1)
369
+ pll_register_string($option_name, $option); // FIXME ready to use $context
370
+ elseif (is_array($value) && is_array($strings[$name]))
371
+ $this->register_string_recursive($context, $strings[$name], $value);
372
  }
373
  }
374
  }
375
 
376
  function copy_post_metas($metas, $sync) {
377
+ foreach ($this->wpml_config['custom-fields'] as $context) {
378
+ foreach ($context['custom-field'] as $cf) {
379
+ if (!$sync && in_array($cf['attributes']['action'], array('copy', 'translate')))
380
+ $metas[] = $cf['value'];
381
+ elseif ($sync && $cf['attributes']['action'] != 'copy')
382
+ $metas = array_diff($metas, array($cf['value'])); // do not synchronize
383
+ }
384
  }
385
  return $metas;
386
  }
387
 
388
  // language and translation management for custom post types
389
  function translate_types($types, $hide) {
390
+ foreach ($this->wpml_config['custom-types'] as $context) {
391
+ foreach ($context['custom-type'] as $pt) {
392
+ if ($pt['attributes']['translate'] == 1 && !$hide)
393
+ $types[$pt['value']] = $pt['value'];
394
+ elseif ($hide)
395
+ unset ($types[$pt['value']]); // the author decided what to do with the post type so don't allow the user to change this
396
+ }
397
  }
398
  return $types;
399
  }
400
 
401
  // language and translation management for custom taxonomies
402
  function translate_taxonomies($taxonomies, $hide) {
403
+ foreach ($this->wpml_config['taxonomies'] as $context) {
404
+ foreach ($context['taxonomy'] as $tax) {
405
+ if ($tax['attributes']['translate'] == 1 && !$hide)
406
+ $taxonomies[$tax['value']] = $tax['value'];
407
+ elseif ($hide)
408
+ unset ($types[$tax['value']]); // the author decided what to do with the taxonomy so don't allow the user to change this
409
+ }
410
  }
411
 
412
  return $taxonomies;
413
  }
414
 
415
+ // translates the strings for an option
416
  function translate_strings($value) {
417
+ if (is_array($value)) {
418
+ $option = substr(current_filter(), 7);
419
+ foreach ($this->strings as $context=>$options) {
420
+ if (array_key_exists($option, $options))
421
+ return $this->translate_strings_recursive($options[$option], $value); // for a serialized option
422
+ }
423
+ }
424
+ return pll__($value);
425
  }
426
 
427
+ // recursively translates strings for a serialized option
428
  function translate_strings_recursive($strings, $values) {
429
  foreach ($values as $name=>$value) {
430
  if (isset($strings[$name])) {
431
  if (is_string($value) && $strings[$name] == 1)
432
  $values[$name] = pll__($value);
433
+ elseif (is_array($value) && is_array($strings[$name]))
434
  $value = $this->translate_strings_recursive($strings[$name], $value);
435
  }
436
  }
languages/polylang-ca.mo ADDED
Binary file
languages/polylang-ca.po ADDED
@@ -0,0 +1,582 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: polylang\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2012-08-19 20:12+0100\n"
6
+ "PO-Revision-Date: \n"
7
+ "Last-Translator: Pau Moreno <pau.moreno@gmail.com>\n"
8
+ "Language-Team: \n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "Plural-Forms: nplurals=2: nplural=n>1;\n"
13
+ "X-Poedit-SourceCharset: utf-8\n"
14
+ "X-Poedit-KeywordsList: _e;__;_x\n"
15
+ "X-Poedit-Basepath: .\n"
16
+ "X-Generator: Poedit 1.5.4\n"
17
+ "X-Poedit-SearchPath-0: ..\n"
18
+ "X-Poedit-SearchPath-1: ../include\n"
19
+
20
+ #: include/about.php:3
21
+ #, php-format
22
+ msgid ""
23
+ "Polylang is provided with an extensive %sdocumentation%s (in English only). "
24
+ "It includes information on how to set up your multilingual site and use it "
25
+ "on a daily basis, a FAQ, as well as a documentation for programmers to adapt "
26
+ "their plugins and themes."
27
+ msgstr ""
28
+ "Polylang es distribueix amb una %sdocumentació%s extensa (només en anglès). "
29
+ "Inclou informació de com crear un lloc web multilingüe i com fer-ne un ús "
30
+ "diari, una pàgina de preguntes freqüents, així com informació per tal que "
31
+ "els programadors puguin adaptar-ne els plugins i temes."
32
+
33
+ #: include/about.php:9
34
+ #, php-format
35
+ msgid ""
36
+ "You will also find useful information in the %ssupport forum%s. However "
37
+ "don't forget to make a search before posting a new topic."
38
+ msgstr ""
39
+ "També trobaràs informació d'interès als %sfòrums de suport%s. Però abans de "
40
+ "crear un nou tema, no oblidis fer-ne una cerca."
41
+
42
+ #: include/about.php:16
43
+ #, php-format
44
+ msgid ""
45
+ "Polylang is free of charge and is released under the same license as "
46
+ "WordPress, the %sGPL%s."
47
+ msgstr ""
48
+ "Polylang és gratuit i es distribueix sota la mateixa llicència que "
49
+ "WordPress, %sGPL%s."
50
+
51
+ #: include/about.php:22
52
+ #, php-format
53
+ msgid "If you wonder how you can help the project, just %sread this%s."
54
+ msgstr "Si vols saber com ajudar al projecte, llegeix %saixò%s."
55
+
56
+ #: include/about.php:27
57
+ msgid ""
58
+ "Finally if you like this plugin or if it helps your business, donations to "
59
+ "the author are greatly appreciated."
60
+ msgstr ""
61
+ "Finalment, si t'agrada aquest plugin i el trobes útil per al teu negoci, "
62
+ "pots fer-ne un donatiu. L'autor t'ho agrairà enormement."
63
+
64
+ #: include/admin-base.php:55 include/admin-base.php:185
65
+ #: include/admin-filters.php:250 include/admin.php:23 include/admin.php:318
66
+ #: include/list-table.php:46 polylang.php:270
67
+ msgid "Languages"
68
+ msgstr "Idiomes"
69
+
70
+ #: include/admin-base.php:154
71
+ msgid "Displays language names"
72
+ msgstr "Mostra els noms dels idiomes"
73
+
74
+ #: include/admin-base.php:155
75
+ msgid "Displays flags"
76
+ msgstr "Mostra les banderes"
77
+
78
+ #: include/admin-base.php:156
79
+ msgid "Forces link to front page"
80
+ msgstr "Força un enllaç cap a la pàgina principal"
81
+
82
+ #: include/admin-base.php:157
83
+ msgid "Hides the current language"
84
+ msgstr "Oculta l'idioma actual"
85
+
86
+ #: include/admin-base.php:161
87
+ msgid "Displays a language switcher at the end of the menu"
88
+ msgstr "Mostra un selector d'idioma al final del menú"
89
+
90
+ #: include/admin-base.php:162
91
+ msgid "Displays as dropdown"
92
+ msgstr "Mostra com a menú desplegable"
93
+
94
+ #: include/admin-base.php:186
95
+ msgid "Filters content by language"
96
+ msgstr "Filtra el contingut per idioma"
97
+
98
+ #: include/admin-base.php:193
99
+ msgid "Show all languages"
100
+ msgstr "Mostra tots els idiomes"
101
+
102
+ #: include/admin-filters.php:188 include/admin-filters.php:884
103
+ msgid "Add new translation"
104
+ msgstr "Afegeix traducció nova"
105
+
106
+ #: include/admin-filters.php:216 include/admin-filters.php:274
107
+ #: include/admin-filters.php:608 include/admin-filters.php:824
108
+ #: include/admin-filters.php:842 include/list-table.php:45
109
+ #: include/media-translations.php:5 include/media-translations.php:43
110
+ #: include/post-translations.php:8 include/term-translations.php:15
111
+ #: polylang.php:271
112
+ msgid "Language"
113
+ msgstr "Idioma"
114
+
115
+ #: include/admin-filters.php:623 include/admin-filters.php:658
116
+ #: include/list-table.php:120 include/media-translations.php:40
117
+ #: include/term-translations.php:6 include/term-translations.php:11
118
+ msgid "Translations"
119
+ msgstr "Traduccions"
120
+
121
+ #: include/admin-filters.php:826 include/admin-filters.php:845
122
+ msgid "Sets the language"
123
+ msgstr "Estableix l'idioma"
124
+
125
+ #: include/admin-filters.php:1078
126
+ msgid "Theme locations and languages"
127
+ msgstr "Idiomes i localitzacions del tema"
128
+
129
+ #: include/admin-filters.php:1084
130
+ #, php-format
131
+ msgid ""
132
+ "Please go to the %slanguages page%s to set theme locations and languages"
133
+ msgstr ""
134
+ "Ves a %spàgina d'idiomes%s per establir els idiomes i localitzacions del tema"
135
+
136
+ #: include/admin-filters.php:1102
137
+ msgid "The widget is displayed for:"
138
+ msgstr "El widget es mostra per a:"
139
+
140
+ #: include/admin-filters.php:1106 polylang.php:272
141
+ msgid "All languages"
142
+ msgstr "Tots els idiomes"
143
+
144
+ #: include/admin-filters.php:1130
145
+ msgid "Admin language"
146
+ msgstr "Idioma de l'administrador"
147
+
148
+ #: include/admin-filters.php:1135
149
+ msgid "Wordpress default"
150
+ msgstr "Opció per defecte de Wordpress"
151
+
152
+ #: include/admin-filters.php:1161 include/admin.php:326
153
+ msgid "Settings"
154
+ msgstr "Paràmetres"
155
+
156
+ #: include/admin-filters.php:1167
157
+ msgid "Upgrading language files&#8230;"
158
+ msgstr "S'estan actualitzant els arxius d'idioma&#8230;"
159
+
160
+ #: include/admin.php:22
161
+ msgid "About Polylang"
162
+ msgstr "Sobre Polylang"
163
+
164
+ #: include/admin.php:27 include/list-table.php:92
165
+ msgid "Strings translations"
166
+ msgstr "Traduccions de cadenes"
167
+
168
+ #: include/admin.php:323
169
+ msgid "Menus"
170
+ msgstr "Menús"
171
+
172
+ #: include/admin.php:325 include/list-table.php:91
173
+ msgid "Strings translation"
174
+ msgstr "Traducció de cadenes"
175
+
176
+ #: include/admin.php:345
177
+ msgid "Enter a valid WorPress locale"
178
+ msgstr "Introdueix un codi d'idioma i regió vàlid de WordPress"
179
+
180
+ #: include/admin.php:346
181
+ msgid "The language code must be 2 characters long"
182
+ msgstr "El codi d'idioma ha de ser de 2 caràcters"
183
+
184
+ #: include/admin.php:347
185
+ msgid "The language code must be unique"
186
+ msgstr "El codi d'idioma ha de ser únic"
187
+
188
+ #: include/admin.php:348
189
+ msgid "The language must have a name"
190
+ msgstr "L'idioma ha de tenir un nom"
191
+
192
+ #: include/admin.php:349
193
+ msgid ""
194
+ "The language was created, but the WordPress language file was not "
195
+ "downloaded. Please install it manually."
196
+ msgstr ""
197
+ "S'ha creat l'idioma, però l'arxiu d'aquest idioma de WordPress no s'ha "
198
+ "descarregat. Si us plau, instal·la'l manualment."
199
+
200
+ #: include/admin.php:468
201
+ msgid "Widget title"
202
+ msgstr "Títol del widget"
203
+
204
+ # @ polylang
205
+ #: include/base.php:339
206
+ msgid "Taxonomies"
207
+ msgstr "Taxonomies"
208
+
209
+ # @ polylang
210
+ #: include/base.php:340
211
+ msgid "Custom fields"
212
+ msgstr "Camps personalitzats"
213
+
214
+ # @ polylang
215
+ #: include/base.php:341
216
+ msgid "Comment status"
217
+ msgstr "Estat del comentari"
218
+
219
+ # @ polylang
220
+ #: include/base.php:342
221
+ msgid "Ping status"
222
+ msgstr "Estat dels pings"
223
+
224
+ # @ polylang
225
+ #: include/base.php:343
226
+ msgid "Sticky posts"
227
+ msgstr "Entrades adherides (sticky)"
228
+
229
+ # @ polylang
230
+ #: include/base.php:344
231
+ msgid "Published date"
232
+ msgstr "Data de publicació"
233
+
234
+ # @ polylang
235
+ #: include/base.php:345
236
+ msgid "Post format"
237
+ msgstr "Format de l'entrada"
238
+
239
+ #: include/base.php:346
240
+ msgid "Page parent"
241
+ msgstr "Pàgina mare"
242
+
243
+ # @ polylang
244
+ #: include/base.php:347
245
+ msgid "Page template"
246
+ msgstr "Plantilla de la pàgina"
247
+
248
+ #: include/base.php:348
249
+ msgid "Page order"
250
+ msgstr "Ordre de la pàgina"
251
+
252
+ # @ polylang
253
+ #: include/base.php:349
254
+ msgid "Featured image"
255
+ msgstr "Imatge destacada"
256
+
257
+ #: include/languages-form.php:43
258
+ msgid "Edit language"
259
+ msgstr "Edita idioma"
260
+
261
+ #: include/languages-form.php:43 include/languages-form.php:124
262
+ msgid "Add new language"
263
+ msgstr "Afegeix idioma"
264
+
265
+ #: include/languages-form.php:65
266
+ msgid "Choose a language"
267
+ msgstr "Tria idioma"
268
+
269
+ #: include/languages-form.php:79
270
+ msgid "You can choose a language in the list or directly edit it below."
271
+ msgstr "Pots triar un idioma de la llista o editar-lo directament a sota"
272
+
273
+ #: include/languages-form.php:83 include/list-table.php:63
274
+ msgid "Full name"
275
+ msgstr "Nom complet"
276
+
277
+ #: include/languages-form.php:85
278
+ msgid "The name is how it is displayed on your site (for example: English)."
279
+ msgstr "El nom és el que apareix al teu lloc web (per exemple: català)"
280
+
281
+ #: include/languages-form.php:89 include/list-table.php:64
282
+ msgid "Locale"
283
+ msgstr "Codi d'idioma i regió (locale)"
284
+
285
+ #: include/languages-form.php:94
286
+ msgid ""
287
+ "Wordpress Locale for the language (for example: en_US). You will need to "
288
+ "install the .mo file for this language."
289
+ msgstr ""
290
+ "Codi d'idioma i regió de Wordpress (per exemple: ca_ES). Hauràs d'instal·lar "
291
+ "l'arxiu .mo per a aquest idioma"
292
+
293
+ #: include/languages-form.php:98
294
+ msgid "Language code"
295
+ msgstr "Codi d'idioma"
296
+
297
+ #: include/languages-form.php:100
298
+ msgid "2-letters ISO 639-1 language code (for example: en)"
299
+ msgstr "Codi d'idioma ISO 639-1 de 2 lletres (per exemple: ca)"
300
+
301
+ #: include/languages-form.php:104
302
+ msgid "Text direction"
303
+ msgstr "Direcció del text"
304
+
305
+ #: include/languages-form.php:108
306
+ msgid "left to right"
307
+ msgstr "d'esquerra a dreta"
308
+
309
+ #: include/languages-form.php:113
310
+ msgid "right to left"
311
+ msgstr "de dreta a esquerra"
312
+
313
+ #: include/languages-form.php:115
314
+ msgid "Choose the text direction for the language"
315
+ msgstr "Tria la direcció del text de l'idioma "
316
+
317
+ #: include/languages-form.php:119 include/list-table.php:66
318
+ msgid "Order"
319
+ msgstr "Ordre"
320
+
321
+ #: include/languages-form.php:121
322
+ msgid "Position of the language in the language switcher"
323
+ msgstr "Posició al selector d'idioma"
324
+
325
+ #: include/languages-form.php:180
326
+ msgid "Language switcher"
327
+ msgstr "Selector d'idioma"
328
+
329
+ #: include/languages-form.php:206
330
+ msgid "Search translations"
331
+ msgstr "Cerca traduccions"
332
+
333
+ #: include/languages-form.php:215
334
+ msgid "Clean strings translation database"
335
+ msgstr "Neteja la base de dades de traduccions de cadenes"
336
+
337
+ #: include/languages-form.php:231
338
+ msgid "Default language"
339
+ msgstr "Idioma predeterminat"
340
+
341
+ #: include/languages-form.php:243
342
+ msgid ""
343
+ "There are posts, pages, categories or tags without language set. Do you want "
344
+ "to set them all to default language ?"
345
+ msgstr ""
346
+ "Hi ha entrades, pàgines, categories o etiquetes sense idioma establert. Per "
347
+ "establir-hi l'idioma predeterminat, marca aquesta casella."
348
+
349
+ #: include/languages-form.php:251
350
+ msgid "Detect browser language"
351
+ msgstr "Detecta l'idioma del navegador"
352
+
353
+ #: include/languages-form.php:257
354
+ msgid ""
355
+ "When the front page is visited, set the language according to the browser "
356
+ "preference"
357
+ msgstr ""
358
+ "Estableix l'idioma d'acord amb les preferències del navegador quan es visita "
359
+ "la pàgina principal"
360
+
361
+ #: include/languages-form.php:264
362
+ msgid "URL modifications"
363
+ msgstr "Modificacions d'URL"
364
+
365
+ #: include/languages-form.php:270
366
+ msgid ""
367
+ "The language is set from content. Posts, pages, categories and tags urls are "
368
+ "not modified."
369
+ msgstr ""
370
+ "L'idioma s'estableix per al contingut. Les URL de les entrades, pàgines, "
371
+ "categories i etiquetes no seran modificades"
372
+
373
+ #: include/languages-form.php:278
374
+ msgid ""
375
+ "The language code, for example /en/, is added to all urls when using pretty "
376
+ "permalinks."
377
+ msgstr ""
378
+ "El codi d'idioma, per exemple /ca/, s'afegeix a totes les URLs en fer "
379
+ "enllaços permanents"
380
+
381
+ #: include/languages-form.php:287
382
+ msgid "Remove /language/ in pretty permalinks. Example:"
383
+ msgstr "Treu /idioma/ als enllaços permanents amigables. Exemple:"
384
+
385
+ #: include/languages-form.php:296
386
+ msgid "Keep /language/ in pretty permalinks. Example:"
387
+ msgstr "Mantén /idioma/ als enllaços permanents amigables: Exemple:"
388
+
389
+ #: include/languages-form.php:305
390
+ msgid "Hide URL language information for default language"
391
+ msgstr "Oculta la informació d'idioma de l'URL a l'idioma predeterminat"
392
+
393
+ #: include/languages-form.php:315
394
+ #, php-format
395
+ msgid ""
396
+ "When using static front page, redirect the language page (example: %s) to "
397
+ "the front page in the right language"
398
+ msgstr ""
399
+ "En fer servir una pàgina principal estàtica, redirigeix la pàgina d'idioma "
400
+ "(per exemple: %s) a la pàgina d'inici en l'idioma correcte"
401
+
402
+ # @ polylang
403
+ #: include/languages-form.php:324
404
+ msgid "Media"
405
+ msgstr "Mitjans"
406
+
407
+ # @ polylang
408
+ #: include/languages-form.php:330
409
+ msgid "Activate languages and translations for media"
410
+ msgstr "Activa idiomes i traduccions per als mitjans"
411
+
412
+ #: include/languages-form.php:337
413
+ msgid "Synchronization"
414
+ msgstr "Sincronització"
415
+
416
+ # @ polylang
417
+ #: include/languages-form.php:351
418
+ msgid "Custom post types"
419
+ msgstr "Tipus d'entrada personalitzats"
420
+
421
+ # @ polylang
422
+ #: include/languages-form.php:364
423
+ msgid "Activate languages and translations for custom post types."
424
+ msgstr "Activa idiomes i traduccions per a tipus d'entrada personalitzats."
425
+
426
+ # @ polylang
427
+ #: include/languages-form.php:372
428
+ msgid "Custom taxonomies"
429
+ msgstr "Taxonomies personalitzades"
430
+
431
+ # @ polylang
432
+ #: include/languages-form.php:385
433
+ msgid "Activate languages and translations for custom taxonomies."
434
+ msgstr "Activa idiomes i traduccions per a taxonomies personalitzades."
435
+
436
+ #: include/list-table.php:55 include/media-translations.php:22
437
+ #: include/media-translations.php:60 include/post-translations.php:10
438
+ #: include/post-translations.php:33 include/term-translations.php:18
439
+ #: include/term-translations.php:80
440
+ msgid "Edit"
441
+ msgstr "Edita"
442
+
443
+ #: include/list-table.php:56
444
+ msgid "Delete"
445
+ msgstr "Elimina"
446
+
447
+ #: include/list-table.php:65
448
+ msgid "Code"
449
+ msgstr "Codi"
450
+
451
+ #: include/list-table.php:67
452
+ msgid "Flag"
453
+ msgstr "Bandera"
454
+
455
+ #: include/list-table.php:68
456
+ msgid "Posts"
457
+ msgstr "Entrades"
458
+
459
+ #: include/list-table.php:118
460
+ msgid "Name"
461
+ msgstr "Nom"
462
+
463
+ #: include/list-table.php:119
464
+ msgid "String"
465
+ msgstr "Cadena"
466
+
467
+ #: include/media-translations.php:6 include/media-translations.php:44
468
+ #: include/term-translations.php:16
469
+ msgid "Translation"
470
+ msgstr "Traducció"
471
+
472
+ #: include/media-translations.php:31 include/media-translations.php:68
473
+ #: include/post-translations.php:38 include/term-translations.php:60
474
+ msgid "Add new"
475
+ msgstr "Afegeix"
476
+
477
+ #: include/post-translations.php:5
478
+ msgid "ID of pages in other languages:"
479
+ msgstr "ID de pàgines en altres idiomes:"
480
+
481
+ #: include/post-translations.php:5
482
+ msgid "ID of posts in other languages:"
483
+ msgstr "ID d'entrades en altres idiomes:"
484
+
485
+ #: include/post-translations.php:9
486
+ msgid "Page ID"
487
+ msgstr "ID de pàgina"
488
+
489
+ #: include/post-translations.php:9
490
+ msgid "Post ID"
491
+ msgstr "ID d'entrada"
492
+
493
+ #: include/term-translations.php:48
494
+ msgid "No untranslated term"
495
+ msgstr "No hi ha termes sense traduir"
496
+
497
+ #: include/widget.php:6
498
+ msgid "Language Switcher"
499
+ msgstr "Selector d'idioma"
500
+
501
+ #: include/widget.php:6
502
+ msgid "Displays a language switcher"
503
+ msgstr "Mostra un selector d'idioma"
504
+
505
+ #: include/widget.php:69
506
+ msgid "Title:"
507
+ msgstr "Títol:"
508
+
509
+ # @ polylang
510
+ #. translators: plugin header field 'Description'
511
+ #: polylang.php:0
512
+ msgid "Adds multilingual capability to WordPress"
513
+ msgstr "Afegeix capacitat multilingüística a Wordpress"
514
+
515
+ #: polylang.php:118
516
+ #, php-format
517
+ msgid "You are using WordPress %s. Polylang requires at least WordPress %s."
518
+ msgstr ""
519
+ "Estàs fent servir WordPress %s. Polylang requereix, com a mínim, WordPress "
520
+ "%s."
521
+
522
+ #: polylang.php:159
523
+ msgid "For some reasons, Polylang could not create a table in your database."
524
+ msgstr ""
525
+ "Per alguna raó, Polylang no ha pogut crear una taula a la teva base de dades."
526
+
527
+ # @ polylang
528
+ #: polylang.php:220
529
+ msgid ""
530
+ "Polylang has been deactivated because you upgraded from a too old version."
531
+ msgstr ""
532
+ "S'ha desactivat Polylang perquè l'has actualitzat des d'una versió massa "
533
+ "antiga."
534
+
535
+ # @ polylang
536
+ #: polylang.php:222
537
+ #, php-format
538
+ msgid "Please upgrade first to %s before ugrading to %s."
539
+ msgstr "Actualitza'l primer a %s abans d'actualizar-lo a %s."
540
+
541
+ #~ msgid "Error: Restore of local flags failed!"
542
+ #~ msgstr "Error: ha fallat el restabliment de les banderes d'idioma!"
543
+
544
+ #~ msgid "Please move your local flags from %s to %s"
545
+ #~ msgstr "Mou les banderes d'idioma de %s a %s"
546
+
547
+ #~ msgid "%1$s %2$s"
548
+ #~ msgstr "%1$s %2$s"
549
+
550
+ #~ msgid "View posts for %1$s %2$s"
551
+ #~ msgstr "Mostra entrades per a %1$s %2$s"
552
+
553
+ #~ msgid "Site Title"
554
+ #~ msgstr "Títol del lloc web"
555
+
556
+ #~ msgid "Tagline"
557
+ #~ msgstr "Descripció"
558
+
559
+ #~ msgid "&mdash; No Change &mdash;"
560
+ #~ msgstr "&mdash; Sense canvis &mdash;"
561
+
562
+ #~ msgid "Page's language:"
563
+ #~ msgstr "Idioma de la pàgina:"
564
+
565
+ #~ msgid "Post's language:"
566
+ #~ msgstr "Idioma de l'entrada:"
567
+
568
+ #~ msgid "None"
569
+ #~ msgstr "Cap"
570
+
571
+ #~ msgid "Update"
572
+ #~ msgstr "Actualitza"
573
+
574
+ #~ msgid ""
575
+ #~ "Allow to synchronize categories, tags, featured image and other metas "
576
+ #~ "between translations of a post or page"
577
+ #~ msgstr ""
578
+ #~ "Permet sincronitzar categories, etiquetes, imatges destacades i altres "
579
+ #~ "metas entre traduccions d'una entrada o pàgina"
580
+
581
+ #~ msgid "Search"
582
+ #~ msgstr "Cerca"
languages/polylang-uk.mo ADDED
Binary file
languages/polylang-uk.po ADDED
@@ -0,0 +1,660 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: polylang\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2013-01-29 15:29+0300\n"
6
+ "PO-Revision-Date: \n"
7
+ "Language-Team: cmd-soft.com <tmosbyd@gmail.com>\n"
8
+ "Language: uk\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
13
+ "X-Poedit-SourceCharset: UTF-8\n"
14
+ "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;"
15
+ "_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"
16
+ "X-Poedit-Basepath: .\n"
17
+ "X-Textdomain-Support: yes\n"
18
+ "X-Generator: Poedit 1.5.5\n"
19
+ "X-Poedit-SearchPath-0: ..\n"
20
+
21
+ # @ polylang
22
+ #: ../polylang.php:124
23
+ #, php-format
24
+ msgid "You are using WordPress %s. Polylang requires at least WordPress %s."
25
+ msgstr ""
26
+ "Ви використовуєте WordPress %s. Polylang потрібно принаймні WordPress %s."
27
+
28
+ # @ polylang
29
+ #: ../polylang.php:165
30
+ msgid "For some reasons, Polylang could not create a table in your database."
31
+ msgstr "З деяких причин, Polylang не може створити таблицю в базі даних."
32
+
33
+ # @ polylang
34
+ #: ../polylang.php:226
35
+ msgid ""
36
+ "Polylang has been deactivated because you upgraded from a too old version."
37
+ msgstr "Polylang була відключена, тому що ви оновили занадто старої версії."
38
+
39
+ # @ polylang
40
+ #: ../polylang.php:228
41
+ #, php-format
42
+ msgid "Please upgrade first to %s before ugrading to %s."
43
+ msgstr "Будь ласка, поновіть перший %s Перед оновленням до %s."
44
+
45
+ # @ polylang
46
+ #: ../polylang.php:276 ../include/admin-base.php:55
47
+ #: ../include/admin-base.php:184 ../include/admin-filters.php:250
48
+ #: ../include/admin.php:23 ../include/admin.php:318
49
+ #: ../include/list-table.php:13
50
+ msgid "Languages"
51
+ msgstr "Мови"
52
+
53
+ # @ polylang
54
+ #: ../polylang.php:277 ../include/admin-filters.php:216
55
+ #: ../include/admin-filters.php:274 ../include/admin-filters.php:608
56
+ #: ../include/admin-filters.php:824 ../include/admin-filters.php:842
57
+ #: ../include/list-table.php:12 ../include/media-translations.php:5
58
+ #: ../include/media-translations.php:43 ../include/post-translations.php:8
59
+ #: ../include/term-translations.php:15
60
+ msgid "Language"
61
+ msgstr "Мова"
62
+
63
+ # @ polylang
64
+ #: ../polylang.php:278 ../include/admin-filters.php:1113
65
+ msgid "All languages"
66
+ msgstr "Всі мови"
67
+
68
+ # @ polylang
69
+ #: ../include/about.php:3
70
+ #, php-format
71
+ msgid ""
72
+ "Polylang is provided with an extensive %sdocumentation%s (in English only). "
73
+ "It includes information on how to set up your multilingual site and use it "
74
+ "on a daily basis, a FAQ, as well as a documentation for programmers to adapt "
75
+ "their plugins and themes."
76
+ msgstr ""
77
+ "Polylang забезпечена обширним %sдокументація%s (тільки на англійській мові)."
78
+ "Вона включає в себе інформацію про те, як налаштувати багатомовний сайт і "
79
+ "використовувати його на щоденній основі, запитання та відповіді, а також "
80
+ "документацію для програмістів, щоб адаптувати свої плагіни і теми."
81
+
82
+ # @ polylang
83
+ #: ../include/about.php:9
84
+ #, php-format
85
+ msgid ""
86
+ "You will also find useful information in the %ssupport forum%s. However "
87
+ "don't forget to make a search before posting a new topic."
88
+ msgstr ""
89
+ "Ви також знайдете корисну інформацію в %sфорум підтримки%s. Однак не "
90
+ "забувайте, щоб зробити пошук, перш ніж відправляти нову тему."
91
+
92
+ # @ polylang
93
+ #: ../include/about.php:16
94
+ #, php-format
95
+ msgid ""
96
+ "Polylang is free of charge and is released under the same license as "
97
+ "WordPress, the %sGPL%s."
98
+ msgstr ""
99
+ "Polylang є безкоштовним і поширюється по тій же ліцензії, як WordPress, %sGPL"
100
+ "%s."
101
+
102
+ # @ polylang
103
+ #: ../include/about.php:22
104
+ #, php-format
105
+ msgid "If you wonder how you can help the project, just %sread this%s."
106
+ msgstr ""
107
+ "Якщо вам цікаво, як Ви можете допомогти проекту, просто %sпрочитайте це%s."
108
+
109
+ # @ polylang
110
+ #: ../include/about.php:27
111
+ msgid ""
112
+ "Finally if you like this plugin or if it helps your business, donations to "
113
+ "the author are greatly appreciated."
114
+ msgstr ""
115
+ "Нарешті, якщо вам подобається цей плагін або, якщо це допоможе вашому "
116
+ "бізнесу, пожертвування автору з вдячністю."
117
+
118
+ # @ polylang
119
+ #: ../include/admin-base.php:154
120
+ msgid "Displays language names"
121
+ msgstr "Відображення назви мов"
122
+
123
+ # @ polylang
124
+ #: ../include/admin-base.php:155
125
+ msgid "Displays flags"
126
+ msgstr "Відображає прапор"
127
+
128
+ # @ polylang
129
+ #: ../include/admin-base.php:156
130
+ msgid "Forces link to front page"
131
+ msgstr "Сили посилання на головну сторінку"
132
+
133
+ # @ polylang
134
+ #: ../include/admin-base.php:157
135
+ msgid "Hides the current language"
136
+ msgstr "Приховує поточну мову"
137
+
138
+ # @ polylang
139
+ #: ../include/admin-base.php:161
140
+ msgid "Displays a language switcher at the end of the menu"
141
+ msgstr "Відображає мову перемикач в кінці меню"
142
+
143
+ # @ polylang
144
+ #: ../include/admin-base.php:162
145
+ msgid "Displays as dropdown"
146
+ msgstr "Дисплеї як випадний"
147
+
148
+ # @ polylang
149
+ #: ../include/admin-base.php:185
150
+ msgid "Filters content by language"
151
+ msgstr "Фільтри змісту з мови"
152
+
153
+ # @ polylang
154
+ #: ../include/admin-base.php:192
155
+ msgid "Show all languages"
156
+ msgstr "Показати всі мови"
157
+
158
+ # @ polylang
159
+ #: ../include/admin-filters.php:188 ../include/admin-filters.php:884
160
+ msgid "Add new translation"
161
+ msgstr "Додати новий переклад"
162
+
163
+ #: ../include/admin-filters.php:202
164
+ msgid "&mdash; No Change &mdash;"
165
+ msgstr "&mdash; Без змін &mdash;"
166
+
167
+ #: ../include/admin-filters.php:341
168
+ msgid "(no parent)"
169
+ msgstr "(Без батьків)"
170
+
171
+ # @ polylang
172
+ #: ../include/admin-filters.php:623 ../include/admin-filters.php:658
173
+ #: ../include/list-table.php:112 ../include/media-translations.php:40
174
+ #: ../include/term-translations.php:6 ../include/term-translations.php:11
175
+ msgid "Translations"
176
+ msgstr "Переклади"
177
+
178
+ # @ polylang
179
+ #: ../include/admin-filters.php:826 ../include/admin-filters.php:845
180
+ msgid "Sets the language"
181
+ msgstr "Встановлює мову"
182
+
183
+ #: ../include/admin-filters.php:1032
184
+ msgid "None"
185
+ msgstr "Жоден"
186
+
187
+ # @ polylang
188
+ #: ../include/admin-filters.php:1085
189
+ msgid "Theme locations and languages"
190
+ msgstr "Тема місць і мови"
191
+
192
+ # @ polylang
193
+ #: ../include/admin-filters.php:1091
194
+ #, php-format
195
+ msgid ""
196
+ "Please go to the %slanguages page%s to set theme locations and languages"
197
+ msgstr ""
198
+ "Будь ласка, перейдіть на %slanguages page%s встановити тему місцеположення і "
199
+ "мови"
200
+
201
+ # @ polylang
202
+ #: ../include/admin-filters.php:1109
203
+ msgid "The widget is displayed for:"
204
+ msgstr "Віджет відображається:"
205
+
206
+ # @ polylang
207
+ #: ../include/admin-filters.php:1137
208
+ msgid "Admin language"
209
+ msgstr "Адміністратор мовою"
210
+
211
+ #: ../include/admin-filters.php:1142
212
+ msgid "Wordpress default"
213
+ msgstr "Wordpress за замовчуванням"
214
+
215
+ # @ default
216
+ # @ polylang
217
+ #: ../include/admin-filters.php:1168 ../include/admin.php:326
218
+ msgid "Settings"
219
+ msgstr "Налаштування"
220
+
221
+ # @ polylang
222
+ #: ../include/admin-filters.php:1174
223
+ msgid "Upgrading language files&#8230;"
224
+ msgstr "Оновлення мовних файлів&#8230;"
225
+
226
+ # @ polylang
227
+ #: ../include/admin.php:22
228
+ msgid "About Polylang"
229
+ msgstr "Про Polylang"
230
+
231
+ # @ polylang
232
+ #: ../include/admin.php:27 ../include/list-table.php:80
233
+ msgid "Strings translations"
234
+ msgstr "Струни переклади"
235
+
236
+ # @ polylang
237
+ #: ../include/admin.php:323
238
+ msgid "Menus"
239
+ msgstr "Меню"
240
+
241
+ # @ polylang
242
+ #: ../include/admin.php:325 ../include/list-table.php:79
243
+ msgid "Strings translation"
244
+ msgstr "Струни перекладу"
245
+
246
+ # @ polylang
247
+ #: ../include/admin.php:347
248
+ msgid "The language code must be 2 characters long"
249
+ msgstr "Код мови повинно бути 2 символів"
250
+
251
+ # @ polylang
252
+ #: ../include/admin.php:348
253
+ msgid "The language code must be unique"
254
+ msgstr "Код мови повинно бути унікальним"
255
+
256
+ # @ polylang
257
+ #: ../include/admin.php:349
258
+ msgid "The language must have a name"
259
+ msgstr "Мова повинна мати ім'я"
260
+
261
+ # @ polylang
262
+ #: ../include/admin.php:350
263
+ msgid ""
264
+ "The language was created, but the WordPress language file was not "
265
+ "downloaded. Please install it manually."
266
+ msgstr ""
267
+ "Мова була створена, але файл WordPress мову не був завантажений. Будь ласка, "
268
+ "встановіть його вручну."
269
+
270
+ # @ polylang
271
+ #: ../include/admin.php:451
272
+ msgid "Site Title"
273
+ msgstr "Назва сайту"
274
+
275
+ #: ../include/admin.php:452
276
+ msgid "Tagline"
277
+ msgstr "Слоган"
278
+
279
+ #: ../include/admin.php:453
280
+ msgid "Date Format"
281
+ msgstr "Формат дати"
282
+
283
+ #: ../include/admin.php:454
284
+ msgid "Time Format"
285
+ msgstr "Формат часу"
286
+
287
+ # @ polylang
288
+ #: ../include/admin.php:472
289
+ msgid "Widget title"
290
+ msgstr "Віджет назву"
291
+
292
+ # @ polylang
293
+ #: ../include/base.php:352
294
+ msgid "Taxonomies"
295
+ msgstr "Таксономії"
296
+
297
+ # @ polylang
298
+ #: ../include/base.php:353
299
+ msgid "Custom fields"
300
+ msgstr "Користувальницькі поля"
301
+
302
+ # @ polylang
303
+ #: ../include/base.php:354
304
+ msgid "Comment status"
305
+ msgstr "Коментар статус"
306
+
307
+ # @ polylang
308
+ #: ../include/base.php:355
309
+ msgid "Ping status"
310
+ msgstr "Ping статус"
311
+
312
+ # @ polylang
313
+ #: ../include/base.php:356
314
+ msgid "Sticky posts"
315
+ msgstr "Важливо повідомлень"
316
+
317
+ # @ polylang
318
+ #: ../include/base.php:357
319
+ msgid "Published date"
320
+ msgstr "Дата публікації"
321
+
322
+ #: ../include/base.php:358
323
+ msgid "Post format"
324
+ msgstr "Повідомлення форматі"
325
+
326
+ # @ default
327
+ #: ../include/base.php:359
328
+ msgid "Page parent"
329
+ msgstr "Page батьків"
330
+
331
+ # @ polylang
332
+ #: ../include/base.php:360
333
+ msgid "Page template"
334
+ msgstr "Шаблон сторінки"
335
+
336
+ # @ polylang
337
+ #: ../include/base.php:361
338
+ msgid "Page order"
339
+ msgstr "Сторінка порядку"
340
+
341
+ # @ polylang
342
+ #: ../include/base.php:362
343
+ msgid "Featured image"
344
+ msgstr "Вибрані зображення"
345
+
346
+ #: ../include/calendar.php:106
347
+ #, php-format
348
+ msgctxt "calendar caption"
349
+ msgid "%1$s %2$s"
350
+ msgstr "%1$s %2$s"
351
+
352
+ #: ../include/calendar.php:132 ../include/calendar.php:140
353
+ #, php-format
354
+ msgid "View posts for %1$s %2$s"
355
+ msgstr "Знайти повідомлення для %1$s %2$s"
356
+
357
+ #: ../include/core.php:691
358
+ msgid "Search"
359
+ msgstr "Шукати серед"
360
+
361
+ # @ polylang
362
+ #: ../include/languages-form.php:43
363
+ msgid "Edit language"
364
+ msgstr "Змінити мову"
365
+
366
+ # @ polylang
367
+ #: ../include/languages-form.php:43 ../include/languages-form.php:124
368
+ msgid "Add new language"
369
+ msgstr "Додати нову мову"
370
+
371
+ # @ polylang
372
+ #: ../include/languages-form.php:65
373
+ msgid "Choose a language"
374
+ msgstr "Вибрати мову"
375
+
376
+ # @ polylang
377
+ #: ../include/languages-form.php:79
378
+ msgid "You can choose a language in the list or directly edit it below."
379
+ msgstr ""
380
+ "Ви можете вибрати мову зі списку або безпосередньо редагувати його нижче."
381
+
382
+ # @ polylang
383
+ #: ../include/languages-form.php:83 ../include/list-table.php:34
384
+ msgid "Full name"
385
+ msgstr "Повне ім'я"
386
+
387
+ # @ polylang
388
+ #: ../include/languages-form.php:85
389
+ msgid "The name is how it is displayed on your site (for example: English)."
390
+ msgstr ""
391
+ "Це ім'я, як воно відображається на вашому сайті (наприклад, англійської)."
392
+
393
+ # @ polylang
394
+ #: ../include/languages-form.php:89 ../include/list-table.php:35
395
+ msgid "Locale"
396
+ msgstr "Льокаль"
397
+
398
+ # @ polylang
399
+ #: ../include/languages-form.php:94
400
+ msgid ""
401
+ "Wordpress Locale for the language (for example: en_US). You will need to "
402
+ "install the .mo file for this language."
403
+ msgstr ""
404
+ "Wordpress Locale для мови (наприклад, en_US). Вам потрібно буде встановити. "
405
+ "Рухи файл для даної мови."
406
+
407
+ # @ polylang
408
+ #: ../include/languages-form.php:98
409
+ msgid "Language code"
410
+ msgstr "Код мови"
411
+
412
+ # @ polylang
413
+ #: ../include/languages-form.php:100
414
+ msgid "2-letters ISO 639-1 language code (for example: en)"
415
+ msgstr "2-букв ISO 639-1 коду мови (наприклад, RU)"
416
+
417
+ # @ polylang
418
+ #: ../include/languages-form.php:104
419
+ msgid "Text direction"
420
+ msgstr "Напрямок тексту"
421
+
422
+ # @ polylang
423
+ #: ../include/languages-form.php:108
424
+ msgid "left to right"
425
+ msgstr "зліва направо"
426
+
427
+ # @ polylang
428
+ #: ../include/languages-form.php:113
429
+ msgid "right to left"
430
+ msgstr "Справа наліво"
431
+
432
+ # @ polylang
433
+ #: ../include/languages-form.php:115
434
+ msgid "Choose the text direction for the language"
435
+ msgstr "Виберіть напрямок тексту для мови"
436
+
437
+ # @ polylang
438
+ #: ../include/languages-form.php:119 ../include/list-table.php:37
439
+ msgid "Order"
440
+ msgstr "Порядок"
441
+
442
+ # @ polylang
443
+ #: ../include/languages-form.php:121
444
+ msgid "Position of the language in the language switcher"
445
+ msgstr "Положення мови в мову перемикач"
446
+
447
+ #: ../include/languages-form.php:124
448
+ msgid "Update"
449
+ msgstr "Оновіть"
450
+
451
+ # @ polylang
452
+ #: ../include/languages-form.php:180
453
+ msgid "Language switcher"
454
+ msgstr "Мова перемикач"
455
+
456
+ # @ polylang
457
+ #: ../include/languages-form.php:207
458
+ msgid "Search translations"
459
+ msgstr "Пошук переказів"
460
+
461
+ #: ../include/languages-form.php:220
462
+ msgid "Clean strings translation database"
463
+ msgstr "Чистий переклад рядка бази даних"
464
+
465
+ # @ polylang
466
+ #: ../include/languages-form.php:236
467
+ msgid "Default language"
468
+ msgstr "Мова за замовчуванням"
469
+
470
+ # @ polylang
471
+ #: ../include/languages-form.php:248
472
+ msgid ""
473
+ "There are posts, pages, categories or tags without language set. Do you want "
474
+ "to set them all to default language ?"
475
+ msgstr ""
476
+ "Є повідомлення, сторінок, категорій та тегів без мови безліч. Ви хочете, щоб "
477
+ "встановити їх все за замовчуванням мову?"
478
+
479
+ # @ polylang
480
+ #: ../include/languages-form.php:256
481
+ msgid "Detect browser language"
482
+ msgstr "Визначити мову браузера"
483
+
484
+ # @ polylang
485
+ #: ../include/languages-form.php:262
486
+ msgid ""
487
+ "When the front page is visited, set the language according to the browser "
488
+ "preference"
489
+ msgstr ""
490
+ "Коли передні відвідуванні сторінки, встановіть мову відповідно до уподобань "
491
+ "браузера"
492
+
493
+ # @ polylang
494
+ #: ../include/languages-form.php:269
495
+ msgid "URL modifications"
496
+ msgstr "URL модифікацій"
497
+
498
+ #: ../include/languages-form.php:275
499
+ msgid ""
500
+ "The language is set from content. Posts, pages, categories and tags urls are "
501
+ "not modified."
502
+ msgstr ""
503
+ "Мова встановлюється від змісту. Повідомлення, сторінок, категорій та тегів "
504
+ "URL-адреси не змінюються."
505
+
506
+ #: ../include/languages-form.php:283
507
+ msgid ""
508
+ "The language code, for example /en/, is added to all urls when using pretty "
509
+ "permalinks."
510
+ msgstr ""
511
+ "Код мови, наприклад /en/, додається до всіх URL-адрес при використанні "
512
+ "досить постійні."
513
+
514
+ # @ polylang
515
+ #: ../include/languages-form.php:292
516
+ msgid "Remove /language/ in pretty permalinks. Example:"
517
+ msgstr "Видалити /language/ в досить постійні. Приклад:"
518
+
519
+ # @ polylang
520
+ #: ../include/languages-form.php:301
521
+ msgid "Keep /language/ in pretty permalinks. Example:"
522
+ msgstr "Тримати /language/ в досить постійні. Приклад:"
523
+
524
+ # @ polylang
525
+ #: ../include/languages-form.php:310
526
+ msgid "Hide URL language information for default language"
527
+ msgstr "Приховати URL мову інформація для мови за замовчуванням"
528
+
529
+ #: ../include/languages-form.php:320
530
+ #, php-format
531
+ msgid ""
532
+ "When using static front page, redirect the language page (example: %s) to "
533
+ "the front page in the right language"
534
+ msgstr ""
535
+ "При використанні статичних сторінок фронт, перенаправити мовою сторінку "
536
+ "(приклад: %s) на першій сторінці в правому мову"
537
+
538
+ # @ polylang
539
+ #: ../include/languages-form.php:329
540
+ msgid "Media"
541
+ msgstr "Медіа"
542
+
543
+ # @ polylang
544
+ #: ../include/languages-form.php:335
545
+ msgid "Activate languages and translations for media"
546
+ msgstr "Активувати мов та переклади для ЗМІ"
547
+
548
+ #: ../include/languages-form.php:342
549
+ msgid "Synchronization"
550
+ msgstr "Синхронізація"
551
+
552
+ # @ polylang
553
+ #: ../include/languages-form.php:356
554
+ msgid "Custom post types"
555
+ msgstr "Користувальницькі типи повідомлення"
556
+
557
+ # @ polylang
558
+ #: ../include/languages-form.php:369
559
+ msgid "Activate languages and translations for custom post types."
560
+ msgstr "Активувати мов та переклади для користувача типів пост."
561
+
562
+ # @ polylang
563
+ #: ../include/languages-form.php:377
564
+ msgid "Custom taxonomies"
565
+ msgstr "Користувальницькі таксономії"
566
+
567
+ # @ polylang
568
+ #: ../include/languages-form.php:390
569
+ msgid "Activate languages and translations for custom taxonomies."
570
+ msgstr "Активувати мов та переклади для користувальницького таксономії."
571
+
572
+ # @ polylang
573
+ #: ../include/list-table.php:26 ../include/media-translations.php:22
574
+ #: ../include/media-translations.php:60 ../include/post-translations.php:10
575
+ #: ../include/post-translations.php:33 ../include/term-translations.php:18
576
+ #: ../include/term-translations.php:80
577
+ msgid "Edit"
578
+ msgstr "Редагувати"
579
+
580
+ # @ polylang
581
+ #: ../include/list-table.php:27
582
+ msgid "Delete"
583
+ msgstr "Видалити"
584
+
585
+ # @ polylang
586
+ #: ../include/list-table.php:36
587
+ msgid "Code"
588
+ msgstr "Код"
589
+
590
+ # @ polylang
591
+ #: ../include/list-table.php:38
592
+ msgid "Flag"
593
+ msgstr "Прапор"
594
+
595
+ # @ polylang
596
+ #: ../include/list-table.php:39
597
+ msgid "Posts"
598
+ msgstr "Повідомлень"
599
+
600
+ # @ polylang
601
+ #: ../include/list-table.php:110
602
+ msgid "Name"
603
+ msgstr "Назва"
604
+
605
+ # @ polylang
606
+ #: ../include/list-table.php:111
607
+ msgid "String"
608
+ msgstr "Рядок"
609
+
610
+ # @ polylang
611
+ #: ../include/media-translations.php:6 ../include/media-translations.php:44
612
+ #: ../include/term-translations.php:16
613
+ msgid "Translation"
614
+ msgstr "Переклад"
615
+
616
+ # @ polylang
617
+ #: ../include/media-translations.php:31 ../include/media-translations.php:68
618
+ #: ../include/post-translations.php:38 ../include/term-translations.php:60
619
+ msgid "Add new"
620
+ msgstr "Додати нову"
621
+
622
+ # @ polylang
623
+ #: ../include/post-translations.php:5
624
+ msgid "ID of pages in other languages:"
625
+ msgstr "ID сторінок на інших мовах:"
626
+
627
+ # @ polylang
628
+ #: ../include/post-translations.php:5
629
+ msgid "ID of posts in other languages:"
630
+ msgstr "Ідентифікатор повідомлення на інших мовах:"
631
+
632
+ # @ polylang
633
+ #: ../include/post-translations.php:9
634
+ msgid "Page ID"
635
+ msgstr "ID Сторінка"
636
+
637
+ # @ polylang
638
+ #: ../include/post-translations.php:9
639
+ msgid "Post ID"
640
+ msgstr "Повідомлення ID"
641
+
642
+ # @ polylang
643
+ #: ../include/term-translations.php:48
644
+ msgid "No untranslated term"
645
+ msgstr "Ні нетрансліруемой термін"
646
+
647
+ # @ polylang
648
+ #: ../include/widget.php:6
649
+ msgid "Language Switcher"
650
+ msgstr "Мова Перемикач"
651
+
652
+ # @ polylang
653
+ #: ../include/widget.php:6
654
+ msgid "Displays a language switcher"
655
+ msgstr "Відображає Мова Перемикач"
656
+
657
+ # @ polylang
658
+ #: ../include/widget.php:69
659
+ msgid "Title:"
660
+ msgstr "Назва:"
polylang.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  Plugin Name: Polylang
4
  Plugin URI: http://polylang.wordpress.com/
5
- Version: 1.0.2
6
  Author: F. Demarle
7
  Description: Adds multilingual capability to WordPress
8
  Text Domain: polylang
@@ -29,7 +29,7 @@ Domain Path: /languages
29
  *
30
  */
31
 
32
- define('POLYLANG_VERSION', '1.0.2');
33
  define('PLL_MIN_WP_VERSION', '3.1');
34
 
35
  define('POLYLANG_DIR', dirname(__FILE__)); // our directory
@@ -41,10 +41,10 @@ if (!defined('PLL_LOCAL_DIR'))
41
  if (file_exists(PLL_LOCAL_DIR.'/pll-config.php'))
42
  include_once(PLL_LOCAL_DIR.'/pll-config.php'); // includes local config file if exists
43
 
44
- define('POLYLANG_URL', WP_PLUGIN_URL.'/'.basename(POLYLANG_DIR)); // our url
45
 
46
  if (!defined('PLL_LOCAL_URL'))
47
- define('PLL_LOCAL_URL', WP_CONTENT_URL.'/polylang'); // default url to access user data such as custom flags
48
 
49
  if (!defined('PLL_COOKIE'))
50
  define('PLL_COOKIE', 'pll_language'); // cookie name. no cookie will be used if set to false
@@ -169,8 +169,7 @@ class Polylang extends Polylang_Base {
169
  register_taxonomy('language', null , array('label' => false, 'query_var'=>'lang'));
170
 
171
  // defines default values for options in case this is the first installation
172
- $options = get_option('polylang');
173
- if (!$options) {
174
  $options['browser'] = 1; // default language for the front page is set by browser preference
175
  $options['rewrite'] = 1; // remove /language/ in permalinks (was the opposite before 0.7.2)
176
  $options['hide_default'] = 0; // do not remove URL language information for default language
@@ -180,9 +179,10 @@ class Polylang extends Polylang_Base {
180
  $options['sync'] = array_keys($this->list_metas_to_sync()); // synchronisation is enabled by default
181
  $options['post_types'] = array_values(get_post_types(array('_builtin' => false, 'show_ui => true')));
182
  $options['taxonomies'] = array_values(get_taxonomies(array('_builtin' => false, 'show_ui => true')));
 
 
 
183
  }
184
- $options['version'] = POLYLANG_VERSION;
185
- update_option('polylang', $options);
186
 
187
  // add our rewrite rules
188
  $this->add_post_types_taxonomies();
@@ -282,7 +282,7 @@ class Polylang extends Polylang_Base {
282
  'all_items' => __('All languages', 'polylang'),
283
  ),
284
  'public' => false, // avoid displaying the 'like post tags text box' in the quick edit
285
- 'query_var'=>'lang',
286
  'update_count_callback' => '_update_post_term_count'
287
  ));
288
 
2
  /*
3
  Plugin Name: Polylang
4
  Plugin URI: http://polylang.wordpress.com/
5
+ Version: 1.0.3
6
  Author: F. Demarle
7
  Description: Adds multilingual capability to WordPress
8
  Text Domain: polylang
29
  *
30
  */
31
 
32
+ define('POLYLANG_VERSION', '1.0.3');
33
  define('PLL_MIN_WP_VERSION', '3.1');
34
 
35
  define('POLYLANG_DIR', dirname(__FILE__)); // our directory
41
  if (file_exists(PLL_LOCAL_DIR.'/pll-config.php'))
42
  include_once(PLL_LOCAL_DIR.'/pll-config.php'); // includes local config file if exists
43
 
44
+ define('POLYLANG_URL', plugins_url('/'.basename(POLYLANG_DIR))); // our url. Don't use WP_PLUGIN_URL http://wordpress.org/support/topic/ssl-doesnt-work-properly
45
 
46
  if (!defined('PLL_LOCAL_URL'))
47
+ define('PLL_LOCAL_URL', content_url('/polylang')); // default url to access user data such as custom flags
48
 
49
  if (!defined('PLL_COOKIE'))
50
  define('PLL_COOKIE', 'pll_language'); // cookie name. no cookie will be used if set to false
169
  register_taxonomy('language', null , array('label' => false, 'query_var'=>'lang'));
170
 
171
  // defines default values for options in case this is the first installation
172
+ if (!get_option('polylang')) {
 
173
  $options['browser'] = 1; // default language for the front page is set by browser preference
174
  $options['rewrite'] = 1; // remove /language/ in permalinks (was the opposite before 0.7.2)
175
  $options['hide_default'] = 0; // do not remove URL language information for default language
179
  $options['sync'] = array_keys($this->list_metas_to_sync()); // synchronisation is enabled by default
180
  $options['post_types'] = array_values(get_post_types(array('_builtin' => false, 'show_ui => true')));
181
  $options['taxonomies'] = array_values(get_taxonomies(array('_builtin' => false, 'show_ui => true')));
182
+ $options['version'] = POLYLANG_VERSION;
183
+
184
+ update_option('polylang', $options);
185
  }
 
 
186
 
187
  // add our rewrite rules
188
  $this->add_post_types_taxonomies();
282
  'all_items' => __('All languages', 'polylang'),
283
  ),
284
  'public' => false, // avoid displaying the 'like post tags text box' in the quick edit
285
+ 'query_var' => 'lang',
286
  'update_count_callback' => '_update_post_term_count'
287
  ));
288
 
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_i
4
  Tags: multilingual, bilingual, translate, translation, language, multilanguage, i18n, international, l10n, localization
5
  Requires at least: 3.1
6
  Tested up to: 3.5
7
- Stable tag: 1.0.2
8
  License: GPLv2 or later
9
 
10
  Polylang adds multilingual content management support to WordPress.
@@ -24,10 +24,10 @@ You write posts, pages and create categories and post tags as usual, and then de
24
 
25
  = Translators =
26
 
27
- The plugin admin interface is currently available in 24 languages: English, French, German contributed by [Christian Ries](http://www.singbyfoot.lu), Russian contributed by [yoyurec](http://yoyurec.in.ua) and unostar, Greek contributed by [theodotos](http://www.ubuntucy.org), Dutch contributed by [AlbertGn](http://wordpress.org/support/profile/albertgn), Hebrew contributed by [ArielK](http://www.arielk.net), Polish contributed by [Peter Paciorkiewicz](http://www.paciorkiewicz.pl), Latvian contributed by [@AndyDeGroo](http://twitter.com/AndyDeGroo), Italian contributed by [Luca Barbetti](http://wordpress.org/support/profile/lucabarbetti), Danish contributed by [Compute](http://wordpress.org/support/profile/compute), Spanish contributed by Curro, Portuguese contributed by [Vitor Carvalho](http://vcarvalho.com/), Lithuanian contributed by [Naglis Jonaitis](http://najo.lt/), Turkish contributed by [darchws](http://darch.ws/), Finnish contributed by [Jani Alha](http://www.wysiwyg.fi), Bulgarian contributed by [pavelsof](http://wordpress.org/support/profile/pavelsof), Belarusian contributed by [Alexander Markevitch](http://fourfeathers.by/), Afrikaans contributed by [Kobus Joubert](http://translate3d.com/), Hungarian contributed by Csaba Erdei, Norwegian contributed by [Tom Boersma](http://www.oransje.com/), Slovak contributed by [Branco (WebHostingGeeks.com)](http://webhostinggeeks.com/user-reviews/), Swedish contributed by [matsii](http://wordpress.org/support/profile/matsii), Catalan contributed by [Núria Martínez Berenguer](http://nuriamb.capa.webfactional.com)
28
 
29
 
30
- Other [contributions](http://wordpress.org/extend/plugins/polylang/other_notes/) are welcome !
31
 
32
  = Feedback or ideas =
33
 
@@ -71,11 +71,11 @@ Don't hesitate to report bugs on the [support forum](http://wordpress.org/suppor
71
 
72
  = Test new versions =
73
 
74
- You can subscribe to the tag ['polylang-dev'](http://wordpress.org/tags/polylang-dev) that I use to announce development versions and then, test the new versions and report bugs before the final release. It helps a lot!
75
 
76
  = Translate the admin interface =
77
 
78
- Polylang is already available in 24 languages. It's very easy to add a new one! Download [poedit](http://www.poedit.net/download.php) (available for Windows, Mac OS X and Linux). Rename the file polylang.pot found in the polylang/languages directory into something like polylang-your_locale.po. Open the file with poedit and start translating (keeping strange codes such as %s, %1$s as is). Once done, just save and you will get two files polylang-your_locale.po and polylang-your_locale.mo that you can send to the author. The translation will be included with the next release and will be covered by the same license as Polylang (GPLv2 or later).
79
 
80
  = Communicate =
81
 
@@ -92,9 +92,24 @@ If you are using a version older than 0.8, please ugrade to 0.9.8 before ugradin
92
 
93
  == Changelog ==
94
 
95
- = 1.0.2 (2013-02-26) =
96
 
97
  * Add Catalan translation contributed by [Núria Martínez Berenguer](http://nuriamb.capa.webfactional.com)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  * Add the possibility to query comments by language
99
  * Add the possibility not to set a cookie by defining PLL_COOKIE to false (Polylang may not work as expected on some pages)
100
  * Now a returning visitor is redirected to its preferred language when visiting the front page in the default language
4
  Tags: multilingual, bilingual, translate, translation, language, multilanguage, i18n, international, l10n, localization
5
  Requires at least: 3.1
6
  Tested up to: 3.5
7
+ Stable tag: 1.0.3
8
  License: GPLv2 or later
9
 
10
  Polylang adds multilingual content management support to WordPress.
24
 
25
  = Translators =
26
 
27
+ The plugin admin interface is currently available in 25 languages: English, French, German contributed by [Christian Ries](http://www.singbyfoot.lu), Russian contributed by [yoyurec](http://yoyurec.in.ua) and unostar, Greek contributed by [theodotos](http://www.ubuntucy.org), Dutch contributed by [AlbertGn](http://wordpress.org/support/profile/albertgn), Hebrew contributed by [ArielK](http://www.arielk.net), Polish contributed by [Peter Paciorkiewicz](http://www.paciorkiewicz.pl), Latvian contributed by [@AndyDeGroo](http://twitter.com/AndyDeGroo), Italian contributed by [Luca Barbetti](http://wordpress.org/support/profile/lucabarbetti), Danish contributed by [Compute](http://wordpress.org/support/profile/compute), Spanish contributed by Curro, Portuguese contributed by [Vitor Carvalho](http://vcarvalho.com/), Lithuanian contributed by [Naglis Jonaitis](http://najo.lt/), Turkish contributed by [darchws](http://darch.ws/), Finnish contributed by [Jani Alha](http://www.wysiwyg.fi), Bulgarian contributed by [pavelsof](http://wordpress.org/support/profile/pavelsof), Belarusian contributed by [Alexander Markevitch](http://fourfeathers.by/), Afrikaans contributed by [Kobus Joubert](http://translate3d.com/), Hungarian contributed by Csaba Erdei, Norwegian contributed by [Tom Boersma](http://www.oransje.com/), Slovak contributed by [Branco (WebHostingGeeks.com)](http://webhostinggeeks.com/user-reviews/), Swedish contributed by [matsii](http://wordpress.org/support/profile/matsii), Catalan contributed by [Núria Martínez Berenguer](http://nuriamb.capa.webfactional.com), Ukrainian contributed by [cmd soft](http://www.cmd-soft.com/)
28
 
29
 
30
+ Other [contributions](http://polylang.wordpress.com/documentation/contribute/) are welcome !
31
 
32
  = Feedback or ideas =
33
 
71
 
72
  = Test new versions =
73
 
74
+ You can subscribe to the [blog](http://polylang.wordpress.com/) that I use to announce development versions and then, test the new versions and report bugs before the final release. It helps a lot!
75
 
76
  = Translate the admin interface =
77
 
78
+ Polylang is already available in 25 languages. It's very easy to add a new one! Download [poedit](http://www.poedit.net/download.php) (available for Windows, Mac OS X and Linux). Rename the file polylang.pot found in the polylang/languages directory into something like polylang-your_locale.po. Open the file with poedit and start translating (keeping strange codes such as %s, %1$s as is). Once done, just save and you will get two files polylang-your_locale.po and polylang-your_locale.mo that you can send to the author. The translation will be included with the next release and will be covered by the same license as Polylang (GPLv2 or later).
79
 
80
  = Communicate =
81
 
92
 
93
  == Changelog ==
94
 
95
+ = 1.0.3 (2013-03-17) =
96
 
97
  * Add Catalan translation contributed by [Núria Martínez Berenguer](http://nuriamb.capa.webfactional.com)
98
+ * Add Ukrainian translation contributed by [cmd soft](http://www.cmd-soft.com/)
99
+ * Improve compatibility with WordPress SEO (sitemap for categories and tags)
100
+ * A query is no more filtered by language when setting the parameter 'lang' to an empty value
101
+ * Add the possibility to create a custom wpml-config.xml file in wp-content/polylang/
102
+ * Bug correction: custom menus are not displayed on search page (introduced in 1.0.2)
103
+ * Bug correction: sql error when filtering terms by language (introduced in 1.0.2)
104
+ * Bug correction: SSL doesn't work properly
105
+ * Bug correction: php notice on IIS servers
106
+ * Bug correction: clicking on the radio buttons in the admin language switcher does not work in Chrome
107
+ * Bug correction: on multisite, the signup page is redirected to the home page
108
+ * Bug correction: date archives are not correctly filtered for the default language when hiding the language code and using date and name permalinks
109
+ * Bug correction: only one wpml-config.xml file is parsed
110
+
111
+ = 1.0.2 (2013-02-26) =
112
+
113
  * Add the possibility to query comments by language
114
  * Add the possibility not to set a cookie by defining PLL_COOKIE to false (Polylang may not work as expected on some pages)
115
  * Now a returning visitor is redirected to its preferred language when visiting the front page in the default language
uninstall.php CHANGED
@@ -38,12 +38,13 @@ class Polylang_Uninstall {
38
 
39
  // delete posts translations
40
  $ids = get_posts(array(
41
- 'numberposts'=> -1,
42
- 'fields' => 'ids',
43
- 'meta_key'=>'_translations',
44
- 'post_type'=>'any',
45
- 'post_status'=>'any'
46
- ));
 
47
 
48
  foreach ($ids as $id)
49
  delete_post_meta($id, '_translations');
@@ -73,7 +74,7 @@ class Polylang_Uninstall {
73
  delete_option('polylang_nav_menus');
74
  delete_option('polylang_widgets');
75
  delete_option('widget_polylang'); // automatically created by WP
76
- delete_option('polylang_wpml_strings');
77
  }
78
  }
79
 
38
 
39
  // delete posts translations
40
  $ids = get_posts(array(
41
+ 'numberposts' => -1,
42
+ 'nopaging' => true,
43
+ 'fields' => 'ids',
44
+ 'meta_key' => '_translations',
45
+ 'post_type' => 'any',
46
+ 'post_status' => 'any'
47
+ ));
48
 
49
  foreach ($ids as $id)
50
  delete_post_meta($id, '_translations');
74
  delete_option('polylang_nav_menus');
75
  delete_option('polylang_widgets');
76
  delete_option('widget_polylang'); // automatically created by WP
77
+ delete_option('polylang_wpml_strings'); // strings registered with icl_register_string
78
  }
79
  }
80