Hi all,

since OTRS 3.1, OTRS works internally with Unicode Strings but leaves character 
sorting to basic perl 'cmp', which is not really unicode aware...

as explained in Perl Unicode Cookbook 
[http://www.perl.com/pub/2012/06/perlunicook-case--and-accent-insensitive-sorting.html],
 I think it would be best to use Unicode::Collate's sort.

I've done this in Layout.pm -> _BuildSelectionDataRefCreate and it really has 
improved usability to our users (agents and customers both). This is the diff 
to the OTRS layout.pm (v 1.381.2.11 2012/06/22), in case anyone wants to use it:

    16a17,22
    > #####################
    > ## Unicode Sorting ##
    > #####################
    > use Unicode::Collate; 
    > #####################
    >
    4667a4674,4684
    > #####################
    > ## Unicode Sorting ##
    > #####################
    >         ## Unicode Sorting: added sorting by Unicode::Collate
    >         my $Collate = Unicode::Collate->new(level => 1);
    >         # Level 1 ignores case and diacritics
    >         # Level 2 adds diacritic comparisons to the ordering algorithm.
    >         # Level 3 adds case ordering.
    >         # Level 4 adds a tiebreaking comparison of probably more detail 
than most people will ever care to know.
    >         # Level 4 is default
    >
    4677c4694,4695
    <             @SortKeys = sort( keys %{ $Param{Data} } );
    ---
    >             ## Unicode Sorting ##
    >             @SortKeys = $Collate->sort( keys %{ $Param{Data} } );
    4686c4704,4705
    <             @SortKeys = sort { $SortHash{$a} cmp $SortHash{$b} } ( keys 
%SortHash );
    ---
    >             ## Unicode Sorting ##
    >             @SortKeys = sort { $Collate->cmp($SortHash{$a}, 
$SortHash{$b}) } ( keys %SortHash );
    4696c4715,4716
    <             push @SortKeys, sort { $List{$a} cmp $List{$b} } ( keys %List 
);
    ---
    >             ## Unicode Sorting ##
    >             push @SortKeys, sort { $Collate->cmp($List{$a}, $List{$b}) } 
( keys %List );
    4702a4723
    >             ## Unicode Sorting ##
    4704c4725
    <                 = sort { $Param{Data}->{$a} cmp $Param{Data}->{$b} } ( 
keys %{ $Param{Data} } );
    ---
    >                 = sort { $Collate->cmp($Param{Data}->{$a}, 
$Param{Data}->{$b}) } ( keys %{ $Param{Data} } );
    4706a4728
    > #####################


Kind regards,
Juan Clavero

_______________________________________________
OTRS mailing list: dev - Webpage: http://otrs.org/
Archive: http://lists.otrs.org/pipermail/dev
To unsubscribe: http://lists.otrs.org/cgi-bin/listinfo/dev

Reply via email to