| @@ -5,14 +5,14 @@ | ||
| 5 | 5 | return apply_filters( __METHOD__, trim( get_option( 'wpdeepl_api_key' ) ) ); |
| 6 | 6 | } |
| 7 | 7 | static function getAPIServer() { |
| 8 | 8 | $choice = get_option( 'wpdeepl_api_server'); |
| 9 | - if( !$choice ) { | |
| 9 | + if ( !$choice ) { | |
| 10 | 10 | $choice = 'paid_api'; |
| 11 | 11 | } |
| 12 | 12 | $possibilities = self::getDeepLAPIServers(); |
| 13 | 13 | |
| 14 | - if( isset( $possibilities[$choice] ) ) { | |
| 14 | + if ( isset( $possibilities[$choice] ) ) { | |
| 15 | 15 | return apply_filters( __METHOD__, $possibilities[$choice]['server'], $choice, $possibilities ); |
| 16 | 16 | } |
| 17 | 17 | else { |
| 18 | 18 | return apply_filters( __METHOD__, false, $choice, $possibilities ); |
| @@ -20,28 +20,66 @@ | ||
| 20 | 20 | } |
| 21 | 21 | |
| 22 | 22 | static function getDeeplAPIServers() { |
| 23 | 23 | $array = array( |
| 24 | - 'paid_api' => array( | |
| 25 | - 'server' => 'https://api.deepl.com/v2/', | |
| 24 | + 'paid_api' => array( | |
| 25 | + 'server' => 'https://api.deepl.com/v2/', | |
| 26 | 26 | 'description' => __('Regular paid API Plan (https://api.deepl.com/v2/)', 'wpdeepl') |
| 27 | 27 | ), |
| 28 | 28 | 'free_plan' => array( |
| 29 | 29 | 'server' => 'https://api-free.deepl.com/v2/', |
| 30 | - 'description' => __('New (2021) free API plan (https://api-free.deepl.com)', 'wpdeepl' ) | |
| 30 | + 'description' => __('Free API plan (https://api-free.deepl.com)', 'wpdeepl' ) | |
| 31 | 31 | ), |
| 32 | 32 | ); |
| 33 | 33 | return $array; |
| 34 | 34 | } |
| 35 | 35 | |
| 36 | + static function getLocaleNameForLn( $ln, $type = 'source ' ) { | |
| 37 | + $wp_locale = get_locale(); | |
| 38 | + $languages_data = self::DefaultsAllLanguages(); | |
| 39 | + foreach( $languages_data as $locale => $locale_data ) { | |
| 40 | + $compare = $type == 'target' ? 'astarget' : 'assource'; | |
| 41 | + if( strtolower( $locale_data[$compare] ) == $ln ) { | |
| 42 | + return $locale_data['labels'][$wp_locale]; | |
| 43 | + } | |
| 44 | + } | |
| 45 | + return false; | |
| 46 | + } | |
| 47 | + | |
| 48 | + static function usingGlossaries() { | |
| 49 | + return get_option('wpdeepl_glossaries') && is_array( get_option('wpdeepl_glossaries') ); | |
| 50 | + } | |
| 51 | + | |
| 52 | + static function getLocaleNameForIsoCode2( $isocode2, $type = 'source ' ) { | |
| 53 | + $wp_locale = get_locale(); | |
| 54 | + $languages_data = self::DefaultsAllLanguages(); | |
| 55 | + foreach( $languages_data as $locale => $locale_data ) { | |
| 56 | + if( strtolower( $locale_data['isocode'] ) == $isocode2 ) { | |
| 57 | + $label = $locale_data['labels'][$wp_locale]; | |
| 58 | + $label = preg_replace('#\(.*?\)#ism', '', $label ); | |
| 59 | + return trim( $label ); | |
| 60 | + } | |
| 61 | + } | |
| 62 | + return false; | |
| 63 | + } | |
| 64 | + | |
| 36 | 65 | static function getLogLevel() { |
| 37 | 66 | return apply_filters( __METHOD__, get_option( 'wpdeepl_log_level') ); |
| 38 | 67 | } |
| 39 | - | |
| 68 | + | |
| 69 | + static function getActivePostTypes() { | |
| 70 | + $return = get_option( 'wpdeepl_metabox_post_types' ) ? get_option( 'wpdeepl_metabox_post_types' ) : array(); | |
| 71 | + $return = get_option( 'wpdeepl_pro_post_types' ) ? array_merge( $return, get_option( 'wpdeepl_pro_post_types' ) ) : $return; | |
| 72 | + | |
| 73 | + $return = array_unique( $return ); | |
| 74 | + return apply_filters( __METHOD__, $return ); | |
| 75 | + | |
| 76 | + } | |
| 40 | 77 | static function getMetaBoxPostTypes() { |
| 41 | 78 | return apply_filters( __METHOD__, get_option( 'wpdeepl_metabox_post_types' ) ); |
| 42 | 79 | } |
| 43 | 80 | static function getMetaBoxDefaultBehaviour() { |
| 81 | + return 'replace'; | |
| 44 | 82 | return apply_filters( __METHOD__, get_option( 'wpdeepl_metabox_behaviour' ) ); |
| 45 | 83 | } |
| 46 | 84 | static function getDefaultTargetLanguage() { |
| 47 | 85 | return apply_filters( __METHOD__, get_option( 'wpdeepl_default_language' ) ); |
| @@ -61,24 +99,33 @@ | ||
| 61 | 99 | static function usingMultilingualPlugins() { |
| 62 | 100 | return false; |
| 63 | 101 | } |
| 64 | 102 | |
| 103 | + static function getNonceAction() { | |
| 104 | + return apply_filters( __METHOD__, 'deepl_translate_post' ); | |
| 105 | + } | |
| 65 | 106 | |
| 107 | + static function getActiveGlossaryFor( $source_language, $target_language) { | |
| 108 | + $source = !empty( $source_language ) ? strtolower( substr( $source_language, 0, 2 ) ) : false; | |
| 109 | + $target = !empty( $target_language ) ? strtolower( substr( $target_language, 0, 2 ) ) : false; | |
| 110 | + $active_glossary_id = false; | |
| 111 | + if( $source && $target) $active_glossary_id = get_option( 'wpdeepl_glossary_' . $source. '_' . $target ); | |
| 112 | + return apply_filters( __METHOD__, $active_glossary_id ); | |
| 113 | + } | |
| 66 | 114 | |
| 67 | 115 | |
| 68 | 116 | |
| 117 | + | |
| 69 | 118 | /** |
| 70 | 119 | * 0 = activated |
| 71 | 120 | * 1 = activated and setup |
| 72 | 121 | */ |
| 73 | 122 | static function isPluginInstalled() { |
| 74 | - | |
| 75 | - | |
| 76 | 123 | return get_option( 'wpdeepl_plugin_installed' ); |
| 77 | 124 | } |
| 78 | 125 | |
| 79 | 126 | static function execWorks() { |
| 80 | - if( exec( 'echo EXEC' ) == 'EXEC' ){ | |
| 127 | + if ( exec( 'echo EXEC' ) == 'EXEC' ){ | |
| 81 | 128 | return true; |
| 82 | 129 | } |
| 83 | 130 | return false; |
| 84 | 131 | } |
| @@ -86,51 +133,76 @@ | ||
| 86 | 133 | static function validateLang( $language_string, $output = 'assource' ) { |
| 87 | 134 | // output source will return 2 characters |
| 88 | 135 | // output source will return AA(-AA) |
| 89 | 136 | |
| 90 | - $language_string = filter_var( $language_string, FILTER_SANITIZE_STRING ); | |
| 137 | + $language_string = htmlspecialchars( $language_string ); | |
| 91 | 138 | $language_string = str_replace( '-', '_', $language_string ); |
| 92 | 139 | |
| 140 | + if( $language_string == 'NB' ) { | |
| 141 | + $language_string = 'NO'; | |
| 142 | + } | |
| 143 | + | |
| 93 | 144 | $all_languages = DeepLConfiguration::DefaultsAllLanguages(); |
| 94 | 145 | $locale = get_locale(); |
| 146 | + //plouf( $locale, "\n locale" ); | |
| 95 | 147 | |
| 148 | + | |
| 149 | + //if( $language_string == 'nn_NO' ) $language_string = 'no_NO'; | |
| 150 | + | |
| 151 | + if( strpos( $locale, '_formal' ) != false ) { | |
| 152 | + $locale = str_replace( '_formal', '', $locale ); | |
| 153 | + } | |
| 154 | + if( strpos( $locale, '_informal' ) != false ) { | |
| 155 | + $locale = str_replace( '_informal', '', $locale ); | |
| 156 | + } | |
| 157 | + | |
| 96 | 158 | $language = false; |
| 97 | - if( isset( $all_languages[$language_string] ) ) { | |
| 159 | + if( $output == 'astarget' ) { | |
| 160 | + //plouf( $all_languages[$language_string]," lang $language_string locale $locale"); plouf( $all_languages); | |
| 161 | + } | |
| 162 | + if ( isset( $all_languages[$language_string] ) ) { | |
| 98 | 163 | $language = $all_languages[$language_string]; |
| 99 | 164 | } |
| 100 | 165 | else { |
| 101 | - foreach( $all_languages as $locale => $try_language ) { | |
| 102 | - if( $try_language['allcaps'] == strtoupper( $language_string ) ) { | |
| 166 | + foreach ( $all_languages as $try_locale => $try_language ) { | |
| 167 | + if ( $try_language['allcaps'] == strtoupper( $language_string ) ) { | |
| 103 | 168 | $language = $try_language; |
| 104 | 169 | break; |
| 105 | 170 | } |
| 106 | - if( $try_language['isocode'] == strtoupper( $language_string ) ) { | |
| 171 | + if ( $try_language['isocode'] == strtoupper( $language_string ) ) { | |
| 107 | 172 | $language = $try_language; |
| 108 | 173 | break; |
| 109 | 174 | } |
| 175 | + if( $output == 'astarget' && $try_language['astarget'] == strtoupper( $language_string ) ) { | |
| 176 | + $language = $try_language; | |
| 177 | + break; | |
| 178 | + } | |
| 110 | 179 | } |
| 111 | 180 | } |
| 112 | 181 | |
| 113 | - if( !$language ) { | |
| 182 | + if ( !$language ) { | |
| 114 | 183 | return false; |
| 115 | 184 | } |
| 116 | 185 | |
| 117 | - $language['label'] = $language['labels'][$locale]; | |
| 186 | + if( $output == 'astarget' ) { | |
| 187 | + //plouf( $language, "language, locale $locale"); | |
| 188 | + } | |
| 189 | + $language['label'] = isset( $language['labels'][$locale] ) ? $language['labels'][$locale] : false; | |
| 118 | 190 | |
| 119 | - if( $output == 'assource' ) { | |
| 191 | + if ( $output == 'assource' ) { | |
| 120 | 192 | return $language['assource']; |
| 121 | 193 | } |
| 122 | - elseif( $output == 'astarget' ) { | |
| 194 | + elseif ( $output == 'astarget' ) { | |
| 123 | 195 | return $language['astarget']; |
| 124 | 196 | } |
| 125 | - elseif( $output == 'isocode' ) { | |
| 197 | + elseif ( $output == 'isocode' ) { | |
| 126 | 198 | return $language['isocode']; |
| 127 | 199 | } |
| 128 | - elseif( $output == 'full' ) { | |
| 200 | + elseif ( $output == 'full' ) { | |
| 129 | 201 | return $language; |
| 130 | 202 | } |
| 131 | - elseif( $output == 'label' ) { | |
| 132 | - | |
| 203 | + elseif ( $output == 'label' ) { | |
| 204 | + | |
| 133 | 205 | return $language['label']; |
| 134 | 206 | } |
| 135 | 207 | else { |
| 136 | 208 | return $language['isocode']; |
| @@ -143,80 +215,99 @@ | ||
| 143 | 215 | ); |
| 144 | 216 | return apply_filters( __METHOD__ , $array ); |
| 145 | 217 | } |
| 146 | 218 | |
| 147 | - static function getFormalityLevel() { | |
| 148 | - return apply_filters( __METHOD__, get_option( 'wpdeepl_default_formality' ) ); | |
| 219 | + static function getFormalityLevel( $target_lang = false ) { | |
| 220 | + if ( $target_lang ) { | |
| 221 | + $formality_level = get_option('wpdeepl_formality_' . $target_lang ); | |
| 222 | + } | |
| 223 | + if( !$formality_level || $formality_level == 'default' ) { | |
| 224 | + $formality_level = get_option( 'wpdeepl_default_formality' ); | |
| 225 | + } | |
| 226 | + | |
| 227 | + /** | |
| 228 | + * . This feature currently only works for target languages DE (German), FR (French), IT (Italian), ES (Spanish), NL (Dutch), PL (Polish), PT-PT, PT-BR (Portuguese) and RU (Russian). Setting this parameter with a target language that does not support formality will fail, unless one of the prefer_... options are used. Possible options are: | |
| 229 | + * default (default) | |
| 230 | +more - for a more formal language | |
| 231 | +less - for a more informal language | |
| 232 | +prefer_more - for a more formal language if available, otherwise fallback to default formality | |
| 233 | +prefer_less - for a more informal language if available, otherwise fallback to default formality | |
| 234 | + * */ | |
| 235 | + | |
| 236 | + if( $formality_level != 'default' ) { | |
| 237 | + $formality_level = 'prefer_' . $formality_level; | |
| 238 | + } | |
| 239 | + | |
| 240 | + return apply_filters( __METHOD__, $formality_level, $target_lang ); | |
| 149 | 241 | } |
| 150 | 242 | |
| 243 | + static function getLanguagesAllowingFormality() { | |
| 244 | + // This feature currently only works for target languages DE (German), FR (French), IT (Italian), ES (Spanish), NL (Dutch), PL (Polish), PT-PT, PT-BR (Portuguese) and RU (Russian). | |
| 245 | + return array('de_DE', 'fr_FR', 'it_IT', 'es_SP', 'nl_NL', 'pt_PT', 'pt_BR', 'ru_RU' ); | |
| 246 | + } | |
| 247 | + | |
| 151 | 248 | static function DefaultsISOCodes() { |
| 152 | 249 | $locale = get_locale(); |
| 250 | + $locale = str_replace( '_formal', '', $locale ); | |
| 251 | + $locale = str_replace( '_informal', '', $locale ); | |
| 153 | 252 | $all_languages = DeepLConfiguration::DefaultsAllLanguages(); |
| 154 | 253 | $languages = array(); |
| 155 | - foreach( $all_languages as $isocode => $labels ) { | |
| 254 | + foreach ( $all_languages as $isocode => $labels ) { | |
| 156 | 255 | $languages[$isocode] = isset( $labels['labels']) && isset( $labels['labels'][$locale] ) ? $labels['labels'][$locale] : false; |
| 157 | 256 | } |
| 158 | 257 | return apply_filters( __METHOD__ , $languages ); |
| 159 | 258 | } |
| 160 | 259 | |
| 260 | + static function getLanguageFromIsoCode2( $isocode2, $context = 'target' ) { | |
| 261 | + $isocode2 = strtolower( $isocode2 ); | |
| 262 | + $all_languages = self::DefaultsAllLanguages(); | |
| 263 | + $key = ( $context == 'source' ) ? 'assource' : 'astarget'; | |
| 264 | + foreach( $all_languages as $lang => $language ) { | |
| 265 | + $short = substr( strtolower( $language[$key] ), 0, 2 ); | |
| 266 | + if( $short == $isocode2 ) { | |
| 267 | + return $lang; | |
| 268 | + } | |
| 269 | + } | |
| 270 | + return false; | |
| 271 | + } | |
| 272 | + | |
| 161 | 273 | static function DefaultsAllLanguages() { |
| 162 | 274 | $languages = array(); |
| 163 | 275 | |
| 164 | - $csv_labels = 'locale,allcaps,isocode,assource,astarget,bg_BG,cs_CZ,da_DA,de_DE,el_GR,en_US,en_GB,es_ES,et_EE,fi_FI,fr_FR,hu_HU,it_IT,ja_JP,lt_LT,lv_LV,nl_NL,pl_PL,pt_PT,pt_BR,ro_RO,ru_RU,sk_SK,sl_SI,sv_SE,zh_CN | |
| 165 | -bg_BG,BG_BG,BG,BG,BG,Български,Bulharský,Bulgarsk,Bulgarisch,Βουλγαρική,Bulgarian,Bulgarian,Búlgaro,Bulgaaria,Bulgarian,Bulgare,Bolgár,Bulgaro,ブルガリア語,Bulgarų,Bulgāru,Bulgaars,Bułgarski,Búlgaro,Búlgaro,Bulgară,Болгарский,Bulharský,Bolgarski,Bulgariska,保加利亚人 | |
| 166 | -cs_CZ,CS_CZ,CS,CS,CS,Чешки,Čeština,Tjekkisk,Tschechisch,Τσεχική,Czech,Czech,Checo,Tšehhi,Tšekki,Tchèque,Cseh,Ceco,チェコ語,čekų kalba,Čehu,Tsjechisch,czeski,Checo,Tcheco,Cehă,чешский,Český,Češčina,Tjeckiska,捷克 | |
| 167 | -da_DA,DA_DA,DA,DA,DA,Датски,Dánština,dansk,Dänisch,Δανικά,Danish,Danish,Danés,Taani,tanska,Danois,dán,Danese,デンマーク語,Danų kalba,Dāņu,Deens,duński,Dinamarquês,Dinamarquês,Daneză,датский,Dánsky,danski,Danska,丹麦语 | |
| 168 | -de_DE,DE_DE,DE,DE,DE,Немски,Němčina,tysk,Deutsch,Γερμανικά,German,German,Alemán,Saksa,saksa,Allemand,német,Tedesco,ドイツ語,Vokiečių kalba,Vācu,Duits,Niemiecki,Alemão,Alemão,Germană,немецкий язык,Nemčina,nemščina,Tyska,德国 | |
| 169 | -el_GR,EL_GR,EL,EL,EL,Гръцки,Řečtina,Græsk,Griechisch,Ελληνικά,Greek,Greek,Griego,Kreeka,kreikka,Grec,görög,Greco,ギリシャ語,Graikų kalba,grieķu,Grieks,grecki,Grego,Grego,Greacă,греческий,Gréčtina,grščina,Grekiska,希腊语 | |
| 170 | -en_US,EN_US,EN,EN,EN-US,Английски,Angličtina,engelsk,Englisch,Αγγλικά,English,English,Inglés,inglise,Englanti,Anglais,angol,Inglese,英語,Anglų,Angļu,Engels,angielski,Inglês,Inglês,Engleză,английский язык,Angličtina,angleščina,Engelska,英文 | |
| 171 | -en_GB,EN_GB,EN,EN,EN-GB,Английски,Angličtina,engelsk,Englisch,Αγγλικά,English,English,Inglés,inglise,Englanti,Anglais,angol,Inglese,英語,Anglų,Angļu,Engels,angielski,Inglês,Inglês,Engleză,английский язык,Angličtina,angleščina,Engelska,英文 | |
| 172 | -es_ES,ES_ES,ES,ES,ES,Испански,Španělština,spansk,Spanisch,Ισπανικά,Spanish,Spanish,Español,Hispaania,Espanja,Espagnol,Spanyol,Spagnolo,スペイン語,Ispanų kalba,Spāņu,Spaans,hiszpański,Espanhol,Espanhol,Spaniolă,испанский,Španielčina,Španščina,Spanska,西班牙语 | |
| 173 | -et_EE,ET_EE,ET,ET,ET,Естонски,Estonština,Estisk,Estnisch,Εσθονικά,Estonian,Estonian,Estonio,Eesti keel,Viro,Estonien,Észt,Estone,エストニア語,Estų kalba,Igauņu,Ests,estoński,Estónio,Estoniano,Estoniană,эстонский,Estónčina,Estonščina,Estniska,爱沙尼亚语 | |
| 174 | -fi_FI,FI_FI,FI,FI,FI,Финландски,Finština,finsk,Finnisch,Φινλανδικά,Finnish,Finnish,Finlandés,Soome,suomi,Finnois,finn,Finlandese,フィンランド語,Suomių kalba,Somu,Fins,fiński,Finlandês,Finlandês,Finlandeză,финский,Fínsky,finščina,Finska,芬兰 | |
| 175 | -fr_FR,FR_FR,FR,FR,FR,Френски,Francouzština,Fransk,Französisch,Γαλλικά,French,French,Francés,prantsuse,ranska,Français,francia,Francese,フランス語,Prancūzų,Franču,Frans,Francuski,Francês,Francês,Franceză,французский,Francúzština,Francoski,Franska,法国人 | |
| 176 | -hu_HU,HU_HU,HU,HU,HU,Унгарски,Maďarština,Ungarsk,Ungarisch,Ουγγρικά,Hungarian,Hungarian,Húngaro,Ungari,unkari,Hongrois,Magyar,Ungherese,ハンガリー語,vengrų,Ungāru,Hongaars,Węgierski,Húngaro,Húngaro,Maghiară,венгерский,Maďarčina,madžarski,Ungerska,匈牙利语 | |
| 177 | -it_IT,IT_IT,IT,IT,IT,Италиански,italština,Italiensk,Italienisch,Ιταλικά,Italian,Italian,Italiano,Itaalia,italia,Italien,olasz,Italiano,イタリア語,italų kalba,Itāļu,Italiaans,włoski,Italiano,Italiano,Italiană,итальянский,taliansky,italijanščina,Italienska,意大利 | |
| 178 | -ja_JP,JA_JP,JA,JA,JA,Японски,japonština,japansk,Japanisch,Ιαπωνικά,Japanese,Japanese,Japonés,jaapani,japani,Japonais,japán,Giapponese,日本語,japonų,japāņu,Japans,japoński,Japonês,Japonês,Japoneză,Японский,Japončina,japonščina,Japanska,日文 | |
| 179 | -lt_LT,LT_LT,LT,LT,LT,Литовски,Litevština,Litauisk,Litauisch,Λιθουανικά,Lithuanian,Lithuanian,Lituano,Leedu,liettuan kieli,Lituanien,litván,Lituano,リトアニア語,Lietuvių,Lietuviešu,Litouws,Litewski,Lituano,Lituano,lituaniană,литовский,Litovčina,litovščina,Litauiska,立陶宛语 | |
| 180 | -lv_LV,LV_LV,LV,LV,LV,Латвийски,lotyština,lettisk,Lettisch,Λετονία,Latvian,Latvian,Letón,Läti,Latvian,Letton,lett,Lettone,ラトビア語,Latvių,Latviešu,Lets,łotewski,Letão,Letão,Letonă,латышский язык,lotyština,latvijski,Lettiska,拉脱维亚人 | |
| 181 | -nl_NL,NL_NL,NL,NL,NL,Нидерландски,nizozemština,hollandsk,Niederländisch,Ολλανδικά,Dutch,Dutch,Holandés,Hollandi,Hollanti,Néerlandais,holland,Olandese,オランダ語,Olandų,Holandiešu,Nederlands,niderlandzki,Holandês,Holandês,olandeză,голландский,Holandský,nizozemščina,Nederländska,荷兰语 | |
| 182 | -pl_PL,PL_PL,PL,PL,PL,Полски,Polština,polsk,Polnisch,Πολωνικά,Polish,Polish,Polaco,Poola,Puola,Polonais,Lengyel,Polacco,ポーランド語,Lenkų kalba,Poļu,Pools,Polski,Polaco,Polonês,Poloneză,польский,Poľština,poljščina,Polska,波兰语 | |
| 183 | -pt_PT,PT_PT,PT,PT,PT-PT,Португалски,Portugalština,portugisisk,Portugiesisch,Πορτογαλικά,Portuguese,Portuguese,Portugués,Portugali,Portugali,Portugais,Portugál,Portoghese,ポルトガル語,Portugalų,Portugāļu,Portugees,portugalski,Português,Português,Portugheză,Португальский,Portugalčina,portugalščina,Portugisiska,葡萄牙语 | |
| 184 | -pt_BR,PT_BR,PT,PT,PT-BR,Португалски,Portugalština,portugisisk,Portugiesisch,Πορτογαλικά,Portuguese,Portuguese,Portugués,Portugali,Portugali,Portugais,Portugál,Portoghese,ポルトガル語,Portugalų,Portugāļu,Portugees,portugalski,Português,Português,Portugheză,Португальский,Portugalčina,portugalščina,Portugisiska,葡萄牙语 | |
| 185 | -ro_RO,RO_RO,RO,RO,RO,Румънски,Rumunština,rumænsk,Rumänisch,Ρουμανικά,Romanian,Romanian,Rumano,Rumeenia,Romanian,Roumain,Román,Rumeno,ルーマニア語,Rumunų,Rumāņu,Roemeens,rumuński,Romeno,Romeno,Română,румынский язык,Rumunčina,romunščina,Rumänska,罗马尼亚语 | |
| 186 | -ru_RU,RU_RU,RU,RU,RU,Руски,ruština,russisk,Russisch,Ρωσικά,Russian,Russian,Ruso,Vene,Venäjä,Russe,orosz,Russo,ロシア語,rusų,Krievu,Russisch,rosyjski,Russo,Russo,Rusă,русский,Ruský,ruščina,Ryska,俄语 | |
| 187 | -sk_SK,SK_SK,SK,SK,SK,Словашки,Slovenština,Slovakisk,Slowakisch,Σλοβάκικα,Slovak,Slovak,Eslovaco,slovaki keel,slovakki,Slovaque,szlovák,Slovacco,スロバキア語,Slovakų,slovāku,Slowaaks,słowacki,Eslovaco,Eslovaco,Slovacă,словацкий,Slovensky,slovaščina,Slovakiska,斯洛伐克 | |
| 188 | -sl_SI,SL_SI,SL,SL,SL,Словенски,slovinština,slovensk,Slowenisch,Σλοβένικα,Slovenian,Slovenian,Esloveno,Sloveenia,Slovenian,Slovène,szlovén,Sloveno,スロベニア語,slovėnų,slovēņu,Sloveens,słoweński,Esloveno,Esloveno,Slovenă,словенский,slovinčina,slovenski,Slovenska,斯洛文尼亚语 | |
| 189 | -sv_SE,SV_SE,SV,SV,SV,Шведски,švédština,svensk,Schwedisch,Σουηδικά,Swedish,Swedish,Sueco,Rootsi,Ruotsi,Suédois,Svéd,Svedese,スウェーデン語,švedų,zviedru,Zweeds,szwedzki,Sueco,Sueco,Suedeză,шведский язык,švédsky,švedski,Svenska,瑞典语 | |
| 190 | -zh_CN,ZH_CN,ZH,ZH,ZH,Китайски,Čínština,Kinesisk,Chinesisch,Κινέζικα,Chinese,Chinese,Chino,Hiina,Kiina,Chinois,Kínai,Cinese,中国語,Kinų kalba,Ķīniešu,Chinees,chiński,Chinês,Chinês,Chineză,китайский язык,Čínština,kitajščina,Kinesiska,中文'; | |
| 191 | - $csv_labels = explode( "\n", $csv_labels ); | |
| 192 | - $headers = explode(',', array_shift( $csv_labels ) ); | |
| 193 | - foreach( $csv_labels as $ligne ) { | |
| 194 | - $labels = explode(',', $ligne ); | |
| 276 | + $handle = fopen( trailingslashit( WPDEEPL_PATH ) . 'languages.csv', 'r' ); | |
| 277 | + $csv_data = array(); | |
| 278 | + if ( $handle ) { | |
| 279 | + while( $data = fgetcsv( $handle, null, ',', '"' ) ) { | |
| 280 | + $csv_data[] = $data; | |
| 281 | + } | |
| 282 | + } | |
| 283 | + //plouf( $csv_data, " alors data"); | |
| 284 | + $headers = array_shift( $csv_data ); | |
| 285 | + if( $csv_data ) foreach ( $csv_data as $labels ) { | |
| 195 | 286 | $labels = array_combine( $headers, $labels ); |
| 196 | - | |
| 287 | + | |
| 197 | 288 | $locale = $labels['locale']; |
| 198 | 289 | unset( $labels['locale'] ); |
| 199 | - | |
| 290 | + | |
| 200 | 291 | $extra_country = false; |
| 201 | - if( strlen( $labels['astarget'] ) > 2 ) { | |
| 292 | + if ( strlen( $labels['astarget'] ) > 2 ) { | |
| 202 | 293 | $extra_country = substr( $labels['astarget'], 3, 2 ); |
| 203 | 294 | } |
| 204 | 295 | |
| 205 | 296 | $languages[$locale] = array(); |
| 206 | - foreach( array('allcaps', 'assource', 'astarget', 'isocode' ) as $key ) { | |
| 297 | + foreach ( array('allcaps', 'assource', 'astarget', 'isocode' ) as $key ) { | |
| 207 | 298 | $languages[$locale][$key] = $labels[$key]; |
| 208 | 299 | unset( $labels[$key] ); |
| 209 | 300 | } |
| 210 | 301 | |
| 211 | 302 | |
| 212 | - if( $extra_country ) { | |
| 213 | - foreach( $labels as $code => $label ) { | |
| 303 | + if ( $extra_country ) { | |
| 304 | + foreach ( $labels as $code => $label ) { | |
| 214 | 305 | $labels[$code] = $label . ' (' . $extra_country . ')'; |
| 215 | 306 | } |
| 216 | 307 | } |
| 217 | 308 | $languages[$locale]['labels'] = $labels; |
| 218 | - } | |
| 309 | + } | |
| 219 | 310 | |
| 220 | 311 | return apply_filters( __METHOD__, $languages ); |
| 221 | 312 | |
| 222 | 313 | // used for.. something else |
| @@ -243,7 +334,7 @@ | ||
| 243 | 334 | } |
| 244 | 335 | |
| 245 | 336 | static function getBulkTargetLanguages() { |
| 246 | 337 | return apply_filters( __METHOD__, get_option( 'wpdeepl_bulk_target_locales' ) ); |
| 247 | - } | |
| 338 | + } | |
| 248 | 339 | } |
| 249 | 340 | |