示例#1
0
文件: polylang.php 项目: uoyknaht/kc
 function admin_init()
 {
     $options = get_option('polylang');
     if (version_compare($options['version'], POLYLANG_VERSION, '<')) {
         if (version_compare($options['version'], '0.4', '<')) {
             $options['hide_default'] = 0;
         }
         // option introduced in 0.4
         // translation model changed in V0.5
         if (version_compare($options['version'], '0.5', '<')) {
             $ids = get_posts(array('numberposts' => -1, 'fields' => 'ids', 'post_type' => 'any', 'post_status' => 'any'));
             $this->upgrade_translations('post', $ids);
             $ids = get_terms($this->taxonomies, array('get' => 'all', 'fields' => 'ids'));
             $this->upgrade_translations('term', $ids);
         }
         // translation model changed in V0.5
         // deleting the old one has been delayed in V0.6 (just in case...)
         if (version_compare($options['version'], '0.6', '<')) {
             $listlanguages = $this->get_languages_list();
             $ids = get_posts(array('numberposts' => -1, 'fields' => 'ids', 'post_type' => 'any', 'post_status' => 'any'));
             foreach ($ids as $id) {
                 foreach ($listlanguages as $lang) {
                     delete_post_meta($id, '_lang-' . $lang->slug);
                 }
             }
             $ids = get_terms($this->taxonomies, array('get' => 'all', 'fields' => 'ids'));
             foreach ($ids as $id) {
                 foreach ($listlanguages as $lang) {
                     delete_metadata('term', $id, '_lang-' . $lang->slug);
                 }
             }
         }
         if (version_compare($options['version'], '0.7', '<')) {
             $options['force_lang'] = 0;
         }
         // option introduced in 0.7
         // string translation storage model changed and option added in 0.8
         if (version_compare($options['version'], '0.8dev1', '<')) {
             if (function_exists('base64_decode')) {
                 $mo = new MO();
                 foreach ($this->get_languages_list() as $language) {
                     $reader = new POMO_StringReader(base64_decode(get_option('polylang_mo' . $language->term_id)));
                     $mo->import_from_reader($reader);
                     $this->mo_export($mo, $language);
                 }
             }
             $options['redirect_lang'] = 0;
             // option introduced in 0.8
         }
         if (version_compare($options['version'], '0.8.8', '<')) {
             flush_rewrite_rules();
         }
         // rewrite rules have been modified in 0.8.8
         if (version_compare($options['version'], '0.9', '<')) {
             $options['sync'] = defined('PLL_SYNC') && !PLL_SYNC ? 0 : 1;
         }
         // the option replaces PLL_SYNC in 0.9
         $options['version'] = POLYLANG_VERSION;
         update_option('polylang', $options);
     }
 }
 function get_translations($language, $args = array())
 {
     global $wpdb;
     $translations = array();
     // defaults
     $defaults = array('types' => array('core'));
     extract($defaults);
     extract($args, EXTR_OVERWRITE);
     if (!class_exists('WP_Http')) {
         include_once ABSPATH . WPINC . '/class-http.php';
     }
     $client = new WP_Http();
     foreach ($types as $type) {
         if (isset($this->translation_files[$language][$type]['url'])) {
             $response = $client->request($this->translation_files[$language][$type]['url'], array('timeout' => 15));
             if (is_wp_error($response)) {
                 $err = __('Error getting the translation file. Please go back and try again.', 'wordpress-language');
                 if (isset($response->errors['http_request_failed'][0])) {
                     $err .= '<br />' . $response->errors['http_request_failed'][0];
                 }
                 echo '<div class="error"><p>' . $err . '</p></div>';
                 return false;
             }
             $mo = new MO();
             $pomo_reader = new POMO_StringReader($response['body']);
             $mo->import_from_reader($pomo_reader);
             foreach ($mo->entries as $key => $v) {
                 $tpairs = array();
                 $v->singular = str_replace("\n", '\\n', $v->singular);
                 $tpairs[] = array('string' => $v->singular, 'translation' => $v->translations[0], 'name' => !empty($v->context) ? $v->context . ': ' . $v->singular : md5($v->singular));
                 if ($v->is_plural) {
                     $v->plural = str_replace("\n", '\\n', $v->plural);
                     $tpairs[] = array('string' => $v->plural, 'translation' => !empty($v->translations[1]) ? $v->translations[1] : $v->translations[0], 'name' => !empty($v->context) ? $v->context . ': ' . $v->plural : md5($v->singular));
                 }
                 foreach ($tpairs as $pair) {
                     $existing_translation = $wpdb->get_var($wpdb->prepare("\n                            SELECT st.value \n                            FROM {$wpdb->prefix}icl_string_translations st\n                            JOIN {$wpdb->prefix}icl_strings s ON st.string_id = s.id\n                            WHERE s.context = %s AND s.name = %s AND st.language = %s \n                        ", self::CONTEXT, $pair['name'], $language));
                     if (empty($existing_translation)) {
                         $translations['new'][] = array('string' => $pair['string'], 'translation' => '', 'new' => $pair['translation'], 'name' => $pair['name']);
                     } else {
                         if (strcmp($existing_translation, $pair['translation']) !== 0) {
                             $translations['updated'][] = array('string' => $pair['string'], 'translation' => $existing_translation, 'new' => $pair['translation'], 'name' => $pair['name']);
                         }
                     }
                 }
             }
         }
     }
     return $translations;
 }
 private function load_translations_from_mo($mo_file)
 {
     $translations = array();
     $mo = new MO();
     $pomo_reader = new POMO_CachedFileReader($mo_file);
     $mo->import_from_reader($pomo_reader);
     foreach ($mo->entries as $str => $v) {
         $str = str_replace("\n", '\\n', $v->singular);
         $translations[] = array('orig' => $str, 'trans' => $v->translations[0], 'context' => $v->context);
         if ($v->is_plural) {
             $str = str_replace("\n", '\\n', $v->plural);
             $translation = !empty($v->translations[1]) ? $v->translations[1] : $v->translations[0];
             $translations[] = array('orig' => $str, 'trans' => $translation, 'context' => $v->context);
         }
     }
     return $translations;
 }