﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc
16530	Implement locale based sorting	cyberskull		"While looking at my tags list I noticed that they are not sorted to the English locale, but rather to the ordinal value of the characters.

For example, this is how WordPress currently sorts things:

* A Book on Software
* all those things that bug me
* an apple a day keeps bill gates away
* books, books and more books!
* history and stuff
* lies, damned lies and statistics
* the history of stuff
* this tag is totally made up
* those guys
* under the bridge
* zaroo bugs found

A natural English local sort would be:

* all those things that bug me
* an apple a day keeps bill gates away
* A Book on Software
* books, books and more books!
* history and stuff
* the history of stuff
* lies, damned lies and statistics
* this tag is totally made up
* those guys
* under the bridge
* zaroo bugs found

For English, this can be done with the reasonably simple regex:  {{{/^((a|the)\s+)?(.+)/i}}} and using the value of {{{$3}}} for the comparison.

I was thinking that a function like either locale_sort(…) or wp_sort(…) that would take the same arguments as the built in sort function. When invoked, it would get the locale from either the blog or the logged in user and if there is a custom sort for that local to then apply it before the strings are compared.

Here is a pseudocode approach:
{{{
function local_sort(…)
{
	local function $locale_format = $locale_sorts{locale()};
	#Gets the appropriate formatter function from a hash of functions based
	#on the locale() or returns null/undef.
	
	if($locale_format)
	{
		$a = $locale_format($a); #format a
		$b = $locale_format($b); #format b
	}
	
	return sort($a, $b);
}
}}}

In the case of English, the function would look something like this:

{{{
en_locale_sort_format($string)
{
	$string =~ /^((a|the)\s+)?(.+)/i;
	return $3;
}
}}}"	enhancement	closed	normal		I18N	3.1	normal	maybelater		pavelevap@…
