PluginProbe
Bogo / 2.4.3
Bogo v2.4.3
3.9.3 trunk 1.0 1.1 2.0 2.0.1 2.1 2.1.1 2.1.2 2.1.3 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5 2.6 2.6.1 2.7 2.8 2.8.1 2.9 3.0 3.0.1 All 52 releases
bogo / includes / functions.php

functions.php in Bogo 2.4.3, at includes/functions.php

475 lines 12.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 function bogo_languages() {
4 static $languages = array();
5 static $textdomain_loaded = false;
6
7 if ( $languages && $textdomain_loaded ) {
8 return apply_filters( 'bogo_languages', $languages );
9 }
10
11 $languages = array(
12 'af' => __( 'Afrikaans', 'bogo' ),
13 'am' => __( 'Amharic', 'bogo' ),
14 'an' => __( 'Aragonese', 'bogo' ),
15 'ar' => __( 'Arabic', 'bogo' ),
16 'as' => __( 'Assamese', 'bogo' ),
17 'az' => __( 'Azerbaijani', 'bogo' ),
18 'be_BY' => __( 'Belarusian', 'bogo' ),
19 'bg_BG' => __( 'Bulgarian', 'bogo' ),
20 'bn_BD' => __( 'Bangla', 'bogo' ),
21 'bn_IN' => __( 'Indian Bengali', 'bogo' ),
22 'bo' => __( 'Tibetan', 'bogo' ),
23 'bs_BA' => __( 'Bosnian', 'bogo' ),
24 'ca' => __( 'Catalan', 'bogo' ),
25 'ckb' => __( 'Central Kurdish', 'bogo' ),
26 'co' => __( 'Corsican', 'bogo' ),
27 'cs_CZ' => __( 'Czech', 'bogo' ),
28 'cy' => __( 'Welsh', 'bogo' ),
29 'da_DK' => __( 'Danish', 'bogo' ),
30 'de_DE' => __( 'German', 'bogo' ),
31 'de_CH' => __( 'German (Switzerland)', 'bogo' ),
32 'dv' => __( 'Dhivehi', 'bogo' ),
33 'el' => __( 'Greek', 'bogo' ),
34 'en_US' => __( 'English (United States)', 'bogo' ),
35 'en_AU' => __( 'English (Australia)', 'bogo' ),
36 'en_CA' => __( 'English (Canada)', 'bogo' ),
37 'en_GB' => __( 'English (UK)', 'bogo' ),
38 'eo' => __( 'Esperanto', 'bogo' ),
39 'es_ES' => __( 'Spanish (Spain)', 'bogo' ),
40 'es_CL' => __( 'Spanish (Chile)', 'bogo' ),
41 'es_MX' => __( 'Spanish (Mexico)', 'bogo' ),
42 'es_PE' => __( 'Spanish (Peru)', 'bogo' ),
43 'es_VE' => __( 'Spanish (Venezuela)', 'bogo' ),
44 'et' => __( 'Estonian', 'bogo' ),
45 'eu' => __( 'Basque', 'bogo' ),
46 'fa_IR' => __( 'Persian', 'bogo' ),
47 'fi' => __( 'Finnish', 'bogo' ),
48 'fo' => __( 'Faroese', 'bogo' ),
49 'fr_FR' => __( 'French (France)', 'bogo' ),
50 'fy' => __( 'Frisian', 'bogo' ),
51 'ga' => __( 'Irish', 'bogo' ),
52 'gd' => __( 'Scottish Gaelic', 'bogo' ),
53 'gl_ES' => __( 'Galician', 'bogo' ),
54 'gu' => __( 'Gujarati', 'bogo' ),
55 'haz' => __( 'Hazaragi', 'bogo' ),
56 'he_IL' => __( 'Hebrew', 'bogo' ),
57 'hi_IN' => __( 'Hindi', 'bogo' ),
58 'hr' => __( 'Croatian', 'bogo' ),
59 'ht' => __( 'Haitian', 'bogo' ),
60 'hu_HU' => __( 'Hungarian', 'bogo' ),
61 'hy' => __( 'Armenian', 'bogo' ),
62 'id_ID' => __( 'Indonesian', 'bogo' ),
63 'is_IS' => __( 'Icelandic', 'bogo' ),
64 'it_IT' => __( 'Italian', 'bogo' ),
65 'ja' => __( 'Japanese', 'bogo' ),
66 'jv_ID' => __( 'Javanese', 'bogo' ),
67 'ka_GE' => __( 'Georgian', 'bogo' ),
68 'kk' => __( 'Kazakh', 'bogo' ),
69 'km_KH' => __( 'Khmer', 'bogo' ),
70 'kn' => __( 'Kannada', 'bogo' ),
71 'ko_KR' => __( 'Korean', 'bogo' ),
72 'li' => __( 'Limburgish', 'bogo' ),
73 'lo' => __( 'Lao', 'bogo' ),
74 'lt_LT' => __( 'Lithuanian', 'bogo' ),
75 'lv' => __( 'Latvian', 'bogo' ),
76 'mg_MG' => __( 'Malagasy', 'bogo' ),
77 'mk_MK' => __( 'Macedonian', 'bogo' ),
78 'ml_IN' => __( 'Malayalam', 'bogo' ),
79 'mn' => __( 'Mongolian', 'bogo' ),
80 'mr' => __( 'Marathi', 'bogo' ),
81 'ms_MY' => __( 'Malay', 'bogo' ),
82 'mt_MT' => __( 'Maltese', 'bogo' ),
83 'my_MM' => __( 'Burmese', 'bogo' ),
84 'nb_NO' => __( 'Norwegian (Bokmål)', 'bogo' ),
85 'ne_NP' => __( 'Nepali', 'bogo' ),
86 'ni_ID' => __( 'Nias', 'bogo' ),
87 'nl_NL' => __( 'Dutch', 'bogo' ),
88 'os' => __( 'Ossetic', 'bogo' ),
89 'pa_IN' => __( 'Punjabi', 'bogo' ),
90 'pl_PL' => __( 'Polish', 'bogo' ),
91 'pt_BR' => __( 'Portuguese (Brazil)', 'bogo' ),
92 'pt_PT' => __( 'Portuguese (Portugal)', 'bogo' ),
93 'ro_RO' => __( 'Romanian', 'bogo' ),
94 'ru_RU' => __( 'Russian', 'bogo' ),
95 'sa_IN' => __( 'Sanskrit', 'bogo' ),
96 'si_LK' => __( 'Sinhala', 'bogo' ),
97 'sk_SK' => __( 'Slovak', 'bogo' ),
98 'sl_SI' => __( 'Slovenian', 'bogo' ),
99 'so_SO' => __( 'Somali', 'bogo' ),
100 'sq' => __( 'Albanian', 'bogo' ),
101 'sr_RS' => __( 'Serbian', 'bogo' ),
102 'sv_SE' => __( 'Swedish', 'bogo' ),
103 'su_ID' => __( 'Sundanese', 'bogo' ),
104 'sw' => __( 'Swahili', 'bogo' ),
105 'ta_IN' => __( 'Tamil', 'bogo' ),
106 'te' => __( 'Telugu', 'bogo' ),
107 'tg' => __( 'Tajik', 'bogo' ),
108 'th' => __( 'Thai', 'bogo' ),
109 'tl' => __( 'Tagalog', 'bogo' ),
110 'tr_TR' => __( 'Turkish', 'bogo' ),
111 'tt_RU' => __( 'Tatar', 'bogo' ),
112 'ug_CN' => __( 'Uighur', 'bogo' ),
113 'uk' => __( 'Ukrainian', 'bogo' ),
114 'ur' => __( 'Urdu', 'bogo' ),
115 'uz_UZ' => __( 'Uzbek', 'bogo' ),
116 'vi' => __( 'Vietnamese', 'bogo' ),
117 'zh_CN' => __( 'Chinese (China)', 'bogo' ),
118 'zh_TW' => __( 'Chinese (Taiwan)', 'bogo' )
119 );
120
121 if ( is_textdomain_loaded( 'bogo' ) ) {
122 $textdomain_loaded = true;
123 }
124
125 asort( $languages, SORT_STRING );
126
127 return apply_filters( 'bogo_languages', $languages );
128 }
129
130 function bogo_get_language( $locale ) {
131 $languages = bogo_languages();
132
133 if ( isset( $languages[$locale] ) )
134 return $languages[$locale];
135
136 return null;
137 }
138
139 function bogo_get_default_locale() {
140 if ( defined( 'WPLANG' ) ) {
141 $locale = WPLANG;
142 }
143
144 if ( is_multisite() ) {
145 if ( defined( 'WP_INSTALLING' )
146 || ( false === $ms_locale = get_option( 'WPLANG' ) ) ) {
147 $ms_locale = get_site_option( 'WPLANG' );
148 }
149
150 if ( $ms_locale !== false ) {
151 $locale = $ms_locale;
152 }
153 } else {
154 $db_locale = get_option( 'WPLANG' );
155
156 if ( $db_locale !== false ) {
157 $locale = $db_locale;
158 }
159 }
160
161 if ( empty( $locale ) ) {
162 $locale = 'en_US';
163 }
164
165 return $locale;
166 }
167
168 function bogo_is_default_locale( $locale ) {
169 $default_locale = bogo_get_default_locale();
170
171 return ! empty( $locale ) && $locale == bogo_get_default_locale();
172 }
173
174 function bogo_available_locales( $args = '' ) {
175 $defaults = array(
176 'exclude' => array(),
177 'current_user_can_access' => false );
178
179 $args = wp_parse_args( $args, $defaults );
180
181 $installed_locales = get_available_languages();
182 $installed_locales[] = bogo_get_default_locale();
183 $installed_locales[] = 'en_US';
184 $installed_locales = array_unique( $installed_locales );
185 $installed_locales = array_filter( $installed_locales );
186
187 $available_locales = array();
188
189 foreach ( $installed_locales as $locale ) {
190 if ( in_array( $locale, (array) $args['exclude'] ) ) {
191 continue;
192 }
193
194 if ( $args['current_user_can_access']
195 && ! current_user_can( 'bogo_access_locale', $locale ) ) {
196 continue;
197 }
198
199 $available_locales[] = $locale;
200 }
201
202 return $available_locales;
203 }
204
205 function bogo_available_languages( $args = '' ) {
206 $defaults = array(
207 'exclude' => array(),
208 'orderby' => 'key',
209 'order' => 'ASC',
210 'current_user_can_access' => false );
211
212 $args = wp_parse_args( $args, $defaults );
213
214 $langs = array();
215
216 $available_locales = bogo_available_locales( $args );
217
218 foreach ( $available_locales as $locale ) {
219 $lang = bogo_get_language( $locale );
220 $langs[$locale] = empty( $lang ) ? "[$locale]" : $lang;
221 }
222
223 if ( 'value' == $args['orderby'] ) {
224 natcasesort( $langs );
225
226 if ( 'DESC' == $args['order'] ) {
227 $langs = array_reverse( $langs );
228 }
229 } else {
230 if ( 'DESC' == $args['order'] ) {
231 krsort( $langs );
232 } else {
233 ksort( $langs );
234 }
235 }
236
237 $langs = apply_filters( 'bogo_available_languages', $langs, $args );
238
239 return $langs;
240 }
241
242 function bogo_is_available_locale( $locale ) {
243 if ( empty( $locale ) ) {
244 return false;
245 }
246
247 static $available_locales = array();
248
249 if ( empty( $available_locales ) ) {
250 $available_locales = bogo_available_locales();
251 }
252
253 return in_array( $locale, $available_locales );
254 }
255
256 function bogo_filter_locales( $locales, $filter = 'available' ) {
257 return array_intersect( $locales, bogo_available_locales() );
258 }
259
260 function bogo_language_tag( $locale ) {
261 // http://www.ietf.org/rfc/bcp/bcp47.txt
262 $tag = preg_replace( '/[^0-9a-zA-Z]+/', '-', $locale );
263 $tag = trim( $tag, '-' );
264
265 return apply_filters( 'bogo_language_tag', $tag, $locale );
266 }
267
268 function bogo_lang_slug( $locale ) {
269 $tag = bogo_language_tag( $locale );
270 $slug = $tag;
271
272 if ( false !== $pos = strpos( $tag, '-' ) )
273 $slug = substr( $tag, 0, $pos );
274
275 $variations = preg_grep( '/^' . $slug . '/', bogo_available_locales() );
276
277 if ( 1 < count( $variations ) )
278 $slug = $tag;
279
280 return apply_filters( 'bogo_lang_slug', $slug, $locale );
281 }
282
283 function bogo_get_lang_regex() {
284 $langs = array_map( 'bogo_lang_slug', bogo_available_locales() );
285 $langs = array_filter( $langs );
286
287 if ( empty( $langs ) )
288 return '';
289
290 return '(' . implode( '|', $langs ) . ')';
291 }
292
293 function bogo_get_closest_locale( $var ) {
294 $var = strtolower( $var );
295
296 if ( ! preg_match( '/^([a-z]{2})(?:[_-]([a-z]{2}))?/', $var, $matches ) )
297 return false;
298
299 $language_code = $matches[1];
300 $region_code = isset( $matches[2] ) ? $matches[2] : '';
301
302 $locales = bogo_available_locales();
303
304 if ( $region_code ) {
305 $locale = $language_code . '_' . strtoupper( $region_code );
306
307 if ( false !== array_search( $locale, $locales ) )
308 return $locale;
309 }
310
311 $locale = $language_code;
312
313 if ( false !== array_search( $locale, $locales ) )
314 return $locale;
315
316 if ( $matches = preg_grep( "/^{$locale}_/", $locales ) )
317 return array_shift( $matches );
318
319 return false;
320 }
321
322 function bogo_http_accept_languages() {
323 if ( ! isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) )
324 return false;
325
326 $languages = array();
327
328 foreach ( explode( ',', $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) as $lang ) {
329 $lang = trim( strtolower( $lang ) );
330
331 if ( preg_match( '/^([a-z-]+)(?:;q=([0-9.]+))?$/', $lang, $matches ) ) {
332 $language_tag = $matches[1];
333 $qvalue = isset( $matches[2] ) ? 0 + $matches[2] : 1;
334
335 if ( preg_match( '/^([a-z]{2})(?:-([a-z]{2}))?$/', $language_tag, $matches ) ) {
336 $language_tag = $matches[1];
337
338 if ( isset( $matches[2] ) )
339 $language_tag .= '_' . strtoupper( $matches[2] );
340
341 $languages[$language_tag] = $qvalue;
342 }
343 }
344 }
345
346 natsort( $languages );
347
348 return array_reverse( array_keys( $languages ) );
349 }
350
351 function bogo_url( $url = null, $lang = null ) {
352 if ( ! $lang )
353 $lang = get_locale();
354
355 $args = array(
356 'using_permalinks' => (bool) get_option( 'permalink_structure' ) );
357
358 return bogo_get_url_with_lang( $url, $lang, $args );
359 }
360
361 function bogo_get_url_with_lang( $url = null, $lang = null, $args = '' ) {
362 $defaults = array(
363 'using_permalinks' => true );
364
365 $args = wp_parse_args( $args, $defaults );
366
367 if ( ! $url ) {
368 if ( ! $url = redirect_canonical( $url, false ) ) {
369 $url = is_ssl() ? 'https://' : 'http://';
370 $url .= $_SERVER['HTTP_HOST'];
371 $url .= $_SERVER['REQUEST_URI'];
372 }
373
374 if ( $frag = strstr( $url, '#' ) )
375 $url = substr( $url, 0, - strlen( $frag ) );
376
377 if ( $query = @parse_url( $url, PHP_URL_QUERY ) ) {
378 parse_str( $query, $query_vars );
379
380 foreach ( array_keys( $query_vars ) as $qv ) {
381 if ( ! get_query_var( $qv ) )
382 $url = remove_query_arg( $qv, $url );
383 }
384 }
385 }
386
387 $default_locale = bogo_get_default_locale();
388
389 if ( ! $lang )
390 $lang = $default_locale;
391
392 $home = set_url_scheme( get_option( 'home' ) );
393 $home = trailingslashit( $home );
394
395 $url = remove_query_arg( 'lang', $url );
396
397 if ( ! $args['using_permalinks'] ) {
398 if ( $lang != $default_locale )
399 $url = add_query_arg( array( 'lang' => bogo_lang_slug( $lang ) ), $url );
400
401 return $url;
402 }
403
404 $available_languages = array_map( 'bogo_lang_slug', bogo_available_locales() );
405
406 $url = preg_replace(
407 '#^' . preg_quote( $home ) . '((' . implode( '|', $available_languages ) . ')/)?#',
408 $home . ( $lang == $default_locale ? '' : bogo_lang_slug( $lang ) . '/' ),
409 trailingslashit( $url ) );
410
411 return $url;
412 }
413
414 function bogo_get_lang_from_url( $url = '' ) {
415 if ( ! $url ) {
416 $url = is_ssl() ? 'https://' : 'http://';
417 $url .= $_SERVER['HTTP_HOST'];
418 $url .= $_SERVER['REQUEST_URI'];
419 }
420
421 if ( $frag = strstr( $url, '#' ) )
422 $url = substr( $url, 0, - strlen( $frag ) );
423
424 $home = set_url_scheme( get_option( 'home' ) );
425 $home = trailingslashit( $home );
426
427 $available_languages = array_map( 'bogo_lang_slug', bogo_available_locales() );
428
429 $regex = '#^' . preg_quote( $home ) . '(' . implode( '|', $available_languages ) . ')/#';
430
431 if ( preg_match( $regex, trailingslashit( $url ), $matches ) )
432 return $matches[1];
433
434 if ( $query = @parse_url( $url, PHP_URL_QUERY ) ) {
435 parse_str( $query, $query_vars );
436
437 if ( isset( $query_vars['lang'] )
438 && in_array( $query_vars['lang'], $available_languages ) )
439 return $query_vars['lang'];
440 }
441
442 return false;
443 }
444
445 function bogo_get_prop( $prop ) {
446 $option = get_option( 'bogo' );
447
448 if ( ! is_array( $option ) )
449 $option = array();
450
451 return isset( $option[$prop] ) ? $option[$prop] : '';
452 }
453
454 function bogo_set_prop( $prop, $value ) {
455 $option = get_option( 'bogo' );
456
457 if ( ! is_array( $option ) )
458 $option = array();
459
460 $option[$prop] = $value;
461
462 update_option( 'bogo', $option );
463 }
464
465 function bogo_plugin_url( $path = '' ) {
466 $url = plugins_url( $path, BOGO_PLUGIN );
467
468 if ( is_ssl() && 'http:' == substr( $url, 0, 5 ) ) {
469 $url = 'https:' . substr( $url, 5 );
470 }
471
472 return $url;
473 }
474
475 ?>