aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorArthur <arthur@hoa.ro>2016-02-24 19:26:57 +0100
committerArthur <arthur@hoa.ro>2016-02-24 19:26:57 +0100
commitfa40b43f60c5367fc28a22d05c3f344ce39340c6 (patch)
tree5398143a2b92e365b20667822335d330723c1646
parent6c3d6a31f413862941fe514e7167c04fe71ba1a7 (diff)
parent7eb0a832018621b3662f9fb5c45c0a67f5936088 (diff)
downloadShaarli-fa40b43f60c5367fc28a22d05c3f344ce39340c6.tar.gz
Shaarli-fa40b43f60c5367fc28a22d05c3f344ce39340c6.tar.zst
Shaarli-fa40b43f60c5367fc28a22d05c3f344ce39340c6.zip
Merge pull request #492 from ArthurHoaro/locale-sort-fix
Fixes #481: tag cloud fatal error
-rw-r--r--application/Utils.php25
-rw-r--r--index.php31
2 files changed, 31 insertions, 25 deletions
diff --git a/application/Utils.php b/application/Utils.php
index 10d60698..91e28a68 100644
--- a/application/Utils.php
+++ b/application/Utils.php
@@ -213,3 +213,28 @@ function space2nbsp($text)
213function format_description($description, $redirector) { 213function format_description($description, $redirector) {
214 return nl2br(space2nbsp(text2clickable($description, $redirector))); 214 return nl2br(space2nbsp(text2clickable($description, $redirector)));
215} 215}
216
217/**
218 * Sniff browser language to set the locale automatically.
219 * Note that is may not work on your server if the corresponding locale is not installed.
220 *
221 * @param string $headerLocale Locale send in HTTP headers (e.g. "fr,fr-fr;q=0.8,en;q=0.5,en-us;q=0.3").
222 **/
223function autoLocale($headerLocale)
224{
225 // Default if browser does not send HTTP_ACCEPT_LANGUAGE
226 $attempts = array('en_US');
227 if (isset($headerLocale)) {
228 // (It's a bit crude, but it works very well. Preferred language is always presented first.)
229 if (preg_match('/([a-z]{2})-?([a-z]{2})?/i', $headerLocale, $matches)) {
230 $loc = $matches[1] . (!empty($matches[2]) ? '_' . strtoupper($matches[2]) : '');
231 $attempts = array(
232 $loc.'.UTF-8', $loc, str_replace('_', '-', $loc).'.UTF-8', str_replace('_', '-', $loc),
233 $loc . '_' . strtoupper($loc).'.UTF-8', $loc . '_' . strtoupper($loc),
234 $loc . '_' . $loc.'.UTF-8', $loc . '_' . $loc, $loc . '-' . strtoupper($loc).'.UTF-8',
235 $loc . '-' . strtoupper($loc), $loc . '-' . $loc.'.UTF-8', $loc . '-' . $loc
236 );
237 }
238 }
239 setlocale(LC_ALL, $attempts);
240} \ No newline at end of file
diff --git a/index.php b/index.php
index 5bd9cac4..a9264cbb 100644
--- a/index.php
+++ b/index.php
@@ -268,7 +268,7 @@ $GLOBALS['redirector'] = !empty($GLOBALS['redirector']) ? escape($GLOBALS['redir
268// a token depending of deployment salt, user password, and the current ip 268// a token depending of deployment salt, user password, and the current ip
269define('STAY_SIGNED_IN_TOKEN', sha1($GLOBALS['hash'].$_SERVER["REMOTE_ADDR"].$GLOBALS['salt'])); 269define('STAY_SIGNED_IN_TOKEN', sha1($GLOBALS['hash'].$_SERVER["REMOTE_ADDR"].$GLOBALS['salt']));
270 270
271autoLocale(); // Sniff browser language and set date format accordingly. 271autoLocale($_SERVER['HTTP_ACCEPT_LANGUAGE']); // Sniff browser language and set date format accordingly.
272header('Content-Type: text/html; charset=utf-8'); // We use UTF-8 for proper international characters handling. 272header('Content-Type: text/html; charset=utf-8'); // We use UTF-8 for proper international characters handling.
273 273
274//================================================================================================== 274//==================================================================================================
@@ -315,26 +315,6 @@ function setup_login_state() {
315} 315}
316$userIsLoggedIn = setup_login_state(); 316$userIsLoggedIn = setup_login_state();
317 317
318
319// ------------------------------------------------------------------------------------------
320// Sniff browser language to display dates in the right format automatically.
321// (Note that is may not work on your server if the corresponding local is not installed.)
322function autoLocale()
323{
324 $attempts = array('en_US'); // Default if browser does not send HTTP_ACCEPT_LANGUAGE
325 if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) // e.g. "fr,fr-fr;q=0.8,en;q=0.5,en-us;q=0.3"
326 { // (It's a bit crude, but it works very well. Preferred language is always presented first.)
327 if (preg_match('/([a-z]{2})-?([a-z]{2})?/i',$_SERVER['HTTP_ACCEPT_LANGUAGE'],$matches)) {
328 $loc = $matches[1] . (!empty($matches[2]) ? '_' . strtoupper($matches[2]) : '');
329 $attempts = array($loc.'.UTF-8', $loc, str_replace('_', '-', $loc).'.UTF-8', str_replace('_', '-', $loc),
330 $loc . '_' . strtoupper($loc).'.UTF-8', $loc . '_' . strtoupper($loc),
331 $loc . '_' . $loc.'.UTF-8', $loc . '_' . $loc, $loc . '-' . strtoupper($loc).'.UTF-8',
332 $loc . '-' . strtoupper($loc), $loc . '-' . $loc.'.UTF-8', $loc . '-' . $loc);
333 }
334 }
335 setlocale(LC_TIME, $attempts); // LC_TIME = Set local for date/time format only.
336}
337
338// ------------------------------------------------------------------------------------------ 318// ------------------------------------------------------------------------------------------
339// PubSubHubbub protocol support (if enabled) [UNTESTED] 319// PubSubHubbub protocol support (if enabled) [UNTESTED]
340// (Source: http://aldarone.fr/les-flux-rss-shaarli-et-pubsubhubbub/ ) 320// (Source: http://aldarone.fr/les-flux-rss-shaarli-et-pubsubhubbub/ )
@@ -1219,11 +1199,12 @@ function renderPage()
1219 uksort($tags, function($a, $b) { 1199 uksort($tags, function($a, $b) {
1220 // Collator is part of PHP intl. 1200 // Collator is part of PHP intl.
1221 if (class_exists('Collator')) { 1201 if (class_exists('Collator')) {
1222 $c = new Collator(setlocale(LC_ALL, 0)); 1202 $c = new Collator(setlocale(LC_COLLATE, 0));
1223 return $c->compare($a, $b); 1203 if (!intl_is_failure(intl_get_error_code())) {
1224 } else { 1204 return $c->compare($a, $b);
1225 return strcasecmp($a, $b); 1205 }
1226 } 1206 }
1207 return strcasecmp($a, $b);
1227 }); 1208 });
1228 1209
1229 $tagList=array(); 1210 $tagList=array();