PluginProbe
Bogo / 2.2
Bogo v2.2
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.2, at includes/functions.php

372 lines 9.5 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
6 if ( ! empty( $languages ) ) {
7 return $languages;
8 }
9
10 $languages = array(
11 'af' => __( 'Afrikaans', 'bogo' ),
12 'ar' => __( 'Arabic', 'bogo' ),
13 'be_BY' => __( 'Belarusian', 'bogo' ),
14 'bg_BG' => __( 'Bulgarian', 'bogo' ),
15 'bn_BD' => __( 'Bangla', 'bogo' ),
16 'ca' => __( 'Catalan', 'bogo' ),
17 'cs_CZ' => __( 'Czech', 'bogo' ),
18 'cy' => __( 'Welsh', 'bogo' ),
19 'da_DK' => __( 'Danish', 'bogo' ),
20 'de_DE' => __( 'German', 'bogo' ),
21 'el' => __( 'Greek', 'bogo' ),
22 'en_GB' => __( 'British English', 'bogo' ),
23 'en_US' => __( 'English', 'bogo' ),
24 'eo' => __( 'Esperanto', 'bogo' ),
25 'es_ES' => __( 'Spanish', 'bogo' ),
26 'et' => __( 'Estonian', 'bogo' ),
27 'eu' => __( 'Basque', 'bogo' ),
28 'fa_IR' => __( 'Persian', 'bogo' ),
29 'fi' => __( 'Finnish', 'bogo' ),
30 'fo' => __( 'Faroese', 'bogo' ),
31 'fr_FR' => __( 'French', 'bogo' ),
32 'ge_GE' => __( 'Georgian', 'bogo' ),
33 'gl_ES' => __( 'Galician', 'bogo' ),
34 'ht' => __( 'Haitian', 'bogo' ),
35 'he_IL' => __( 'Hebrew', 'bogo' ),
36 'hr' => __( 'Croatian', 'bogo' ),
37 'hu_HU' => __( 'Hungarian', 'bogo' ),
38 'id_ID' => __( 'Indonesian', 'bogo' ),
39 'ga_IE' => __( 'Irish', 'bogo' ),
40 'is_IS' => __( 'Icelandic', 'bogo' ),
41 'it_IT' => __( 'Italian', 'bogo' ),
42 'ja' => __( 'Japanese', 'bogo' ),
43 'km_KH' => __( 'Khmer', 'bogo' ),
44 'ko_KR' => __( 'Korean', 'bogo' ),
45 'lt_LT' => __( 'Lithuanian', 'bogo' ),
46 'lv' => __( 'Latvian', 'bogo' ),
47 'mg_MG' => __( 'Malagasy', 'bogo' ),
48 'mk_MK' => __( 'Macedonian', 'bogo' ),
49 'mn_MN' => __( 'Mongolian', 'bogo' ),
50 'ms_MY' => __( 'Malay', 'bogo' ),
51 'nb_NO' => __( 'Norwegian', 'bogo' ),
52 'ni_ID' => __( 'Nias', 'bogo' ),
53 'nl_NL' => __( 'Dutch', 'bogo' ),
54 'pl_PL' => __( 'Polish', 'bogo' ),
55 'pt_BR' => __( 'Brazilian Portuguese', 'bogo' ),
56 'pt_PT' => __( 'Portuguese', 'bogo' ),
57 'ro_RO' => __( 'Romanian', 'bogo' ),
58 'ru_RU' => __( 'Russian', 'bogo' ),
59 'si_LK' => __( 'Sinhala', 'bogo' ),
60 'sk_SK' => __( 'Slovak', 'bogo' ),
61 'sl_SI' => __( 'Slovenian', 'bogo' ),
62 'sq' => __( 'Albanian', 'bogo' ),
63 'sr_RS' => __( 'Serbian', 'bogo' ),
64 'sv_SE' => __( 'Swedish', 'bogo' ),
65 'su_ID' => __( 'Sundanese', 'bogo' ),
66 'tg' => __( 'Tajik', 'bogo' ),
67 'th' => __( 'Thai', 'bogo' ),
68 'tl' => __( 'Tagalog', 'bogo' ),
69 'tr' => __( 'Turkish', 'bogo' ),
70 'uk' => __( 'Ukrainian', 'bogo' ),
71 'uz_UZ' => __( 'Uzbek', 'bogo' ),
72 'vi' => __( 'Vietnamese', 'bogo' ),
73 'zh_CN' => __( 'Chinese', 'bogo' ),
74 'zh_TW' => __( 'Traditional Chinese', 'bogo' )
75 );
76
77 $languages = apply_filters( 'bogo_languages', $languages );
78
79 return $languages;
80 }
81
82 function bogo_get_language( $locale ) {
83 $languages = bogo_languages();
84
85 if ( isset( $languages[$locale] ) )
86 return $languages[$locale];
87
88 return null;
89 }
90
91 function bogo_get_default_locale() {
92 if ( defined( 'WPLANG' ) )
93 $locale = WPLANG;
94
95 if ( is_multisite() ) {
96 if ( defined( 'WP_INSTALLING' ) || ( false === $ms_locale = get_option( 'WPLANG' ) ) )
97 $ms_locale = get_site_option( 'WPLANG' );
98
99 if ( $ms_locale !== false )
100 $locale = $ms_locale;
101 }
102
103 if ( empty( $locale ) )
104 $locale = 'en_US';
105
106 return $locale;
107 }
108
109 function bogo_is_default_locale( $locale ) {
110 $default_locale = bogo_get_default_locale();
111
112 return ! empty( $locale ) && $locale == bogo_get_default_locale();
113 }
114
115 function bogo_available_languages( $args = '' ) {
116 $defaults = array(
117 'exclude' => array(),
118 'orderby' => 'key',
119 'order' => 'ASC' );
120
121 $args = wp_parse_args( $args, $defaults );
122
123 $langs = array();
124
125 $installed_locales = get_available_languages();
126 $installed_locales[] = bogo_get_default_locale();
127 $installed_locales[] = 'en_US';
128 $installed_locales = array_unique( $installed_locales );
129 $installed_locales = array_filter( $installed_locales );
130
131 foreach ( $installed_locales as $locale ) {
132 if ( in_array( $locale, (array) $args['exclude'] ) )
133 continue;
134
135 $lang = bogo_get_language( $locale );
136
137 if ( empty( $lang ) )
138 $lang = "[$locale]";
139
140 $langs[$locale] = $lang;
141 }
142
143 if ( 'value' == $args['orderby'] ) {
144 natcasesort( $langs );
145
146 if ( 'DESC' == $args['order'] )
147 $langs = array_reverse( $langs );
148 } else {
149 if ( 'DESC' == $args['order'] )
150 krsort( $langs );
151 else
152 ksort( $langs );
153 }
154
155 $langs = apply_filters( 'bogo_available_languages', $langs, $args );
156
157 return $langs;
158 }
159
160 function bogo_is_available_locale( $locale ) {
161 return ! empty( $locale ) && array_key_exists( $locale, (array) bogo_available_languages() );
162 }
163
164 function bogo_language_tag( $locale ) {
165 // http://www.ietf.org/rfc/bcp/bcp47.txt
166 $tag = preg_replace( '/[^0-9a-zA-Z]+/', '-', $locale );
167 $tag = trim( $tag, '-' );
168
169 return apply_filters( 'bogo_language_tag', $tag, $locale );
170 }
171
172 function bogo_lang_slug( $locale ) {
173 $tag = bogo_language_tag( $locale );
174 $slug = $tag;
175
176 if ( false !== $pos = strpos( $tag, '-' ) )
177 $slug = substr( $tag, 0, $pos );
178
179 $variations = preg_grep( '/^' . $slug . '/', array_keys( bogo_available_languages() ) );
180
181 if ( 1 < count( $variations ) )
182 $slug = $tag;
183
184 return apply_filters( 'bogo_lang_slug', $slug, $locale );
185 }
186
187 function bogo_get_lang_regex() {
188 $langs = array_keys( bogo_available_languages() );
189 $langs = array_map( 'bogo_lang_slug', $langs );
190 $langs = array_filter( $langs );
191
192 if ( empty( $langs ) )
193 return '';
194
195 return '(' . implode( '|', $langs ) . ')';
196 }
197
198 function bogo_get_closest_locale( $var ) {
199 $var = strtolower( $var );
200
201 if ( ! preg_match( '/^([a-z]{2})(?:[_-]([a-z]{2}))?/', $var, $matches ) )
202 return false;
203
204 $language_code = $matches[1];
205 $region_code = isset( $matches[2] ) ? $matches[2] : '';
206
207 $locales = array_keys( bogo_available_languages() );
208
209 if ( $region_code ) {
210 $locale = $language_code . '_' . strtoupper( $region_code );
211
212 if ( false !== array_search( $locale, $locales ) )
213 return $locale;
214 }
215
216 $locale = $language_code;
217
218 if ( false !== array_search( $locale, $locales ) )
219 return $locale;
220
221 if ( $matches = preg_grep( "/^{$locale}_/", $locales ) )
222 return array_shift( $matches );
223
224 return false;
225 }
226
227 function bogo_http_accept_languages() {
228 if ( ! isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) )
229 return false;
230
231 $languages = array();
232
233 foreach ( explode( ',', $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) as $lang ) {
234 $lang = trim( strtolower( $lang ) );
235
236 if ( preg_match( '/^([a-z-]+)(?:;q=([0-9.]+))?$/', $lang, $matches ) ) {
237 $language_tag = $matches[1];
238 $qvalue = isset( $matches[2] ) ? 0 + $matches[2] : 1;
239
240 if ( preg_match( '/^([a-z]{2})(?:-([a-z]{2}))?$/', $language_tag, $matches ) ) {
241 $language_tag = $matches[1];
242
243 if ( isset( $matches[2] ) )
244 $language_tag .= '_' . strtoupper( $matches[2] );
245
246 $languages[$language_tag] = $qvalue;
247 }
248 }
249 }
250
251 natsort( $languages );
252
253 return array_reverse( array_keys( $languages ) );
254 }
255
256 function bogo_url( $url = null, $lang = null ) {
257 if ( ! $lang )
258 $lang = get_locale();
259
260 $args = array(
261 'using_permalinks' => (bool) get_option( 'permalink_structure' ) );
262
263 return bogo_get_url_with_lang( $url, $lang, $args );
264 }
265
266 function bogo_get_url_with_lang( $url = null, $lang = null, $args = '' ) {
267 $defaults = array(
268 'using_permalinks' => true );
269
270 $args = wp_parse_args( $args, $defaults );
271
272 if ( ! $url ) {
273 if ( ! $url = redirect_canonical( $url, false ) ) {
274 $url = is_ssl() ? 'https://' : 'http://';
275 $url .= $_SERVER['HTTP_HOST'];
276 $url .= $_SERVER['REQUEST_URI'];
277 }
278
279 if ( $frag = strstr( $url, '#' ) )
280 $url = substr( $url, 0, - strlen( $frag ) );
281
282 if ( $query = @parse_url( $url, PHP_URL_QUERY ) ) {
283 parse_str( $query, $query_vars );
284
285 foreach ( array_keys( $query_vars ) as $qv ) {
286 if ( ! get_query_var( $qv ) )
287 $url = remove_query_arg( $qv, $url );
288 }
289 }
290 }
291
292 $default_locale = bogo_get_default_locale();
293
294 if ( ! $lang )
295 $lang = $default_locale;
296
297 $home = set_url_scheme( get_option( 'home' ) );
298 $home = trailingslashit( $home );
299
300 $url = remove_query_arg( 'lang', $url );
301
302 if ( ! $args['using_permalinks'] ) {
303 if ( $lang != $default_locale )
304 $url = add_query_arg( array( 'lang' => bogo_lang_slug( $lang ) ), $url );
305
306 return $url;
307 }
308
309 $available_languages = array_keys( bogo_available_languages() );
310 $available_languages = array_map( 'bogo_lang_slug', $available_languages );
311
312 $url = preg_replace(
313 '#^' . preg_quote( $home ) . '((' . implode( '|', $available_languages ) . ')/)?#',
314 $home . ( $lang == $default_locale ? '' : bogo_lang_slug( $lang ) . '/' ),
315 trailingslashit( $url ) );
316
317 return $url;
318 }
319
320 function bogo_get_lang_from_url( $url = '' ) {
321 if ( ! $url ) {
322 $url = is_ssl() ? 'https://' : 'http://';
323 $url .= $_SERVER['HTTP_HOST'];
324 $url .= $_SERVER['REQUEST_URI'];
325 }
326
327 if ( $frag = strstr( $url, '#' ) )
328 $url = substr( $url, 0, - strlen( $frag ) );
329
330 $home = set_url_scheme( get_option( 'home' ) );
331 $home = trailingslashit( $home );
332
333 $available_languages = array_keys( bogo_available_languages() );
334 $available_languages = array_map( 'bogo_lang_slug', $available_languages );
335
336 $regex = '#^' . preg_quote( $home ) . '(' . implode( '|', $available_languages ) . ')/#';
337
338 if ( preg_match( $regex, trailingslashit( $url ), $matches ) )
339 return $matches[1];
340
341 if ( $query = @parse_url( $url, PHP_URL_QUERY ) ) {
342 parse_str( $query, $query_vars );
343
344 if ( isset( $query_vars['lang'] )
345 && in_array( $query_vars['lang'], $available_languages ) )
346 return $query_vars['lang'];
347 }
348
349 return false;
350 }
351
352 function bogo_get_prop( $prop ) {
353 $option = get_option( 'bogo' );
354
355 if ( ! is_array( $option ) )
356 $option = array();
357
358 return isset( $option[$prop] ) ? $option[$prop] : '';
359 }
360
361 function bogo_set_prop( $prop, $value ) {
362 $option = get_option( 'bogo' );
363
364 if ( ! is_array( $option ) )
365 $option = array();
366
367 $option[$prop] = $value;
368
369 update_option( 'bogo', $option );
370 }
371
372 ?>