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

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