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

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