@@ -17,26 +17,53 @@ $.extend({
17
17
match = name ;
18
18
}
19
19
else {
20
- var cultures = $ . cultures ,
21
- list = $ . isArray ( name ) ? name : [ name ] ,
22
- i , l = list . length ;
20
+ var lang ,
21
+ cultures = $ . cultures ,
22
+ list = $ . isArray ( name ) ? name : name . split ( ',' ) ,
23
+ i , l = list . length ,
24
+ prioritized = [ ] ;
23
25
for ( i = 0 ; i < l ; i ++ ) {
24
- name = list [ i ] ;
25
- match = cultures [ name ] ;
26
+ name = trim ( list [ i ] ) ;
27
+ var pri , parts = name . split ( ';' ) ;
28
+ lang = trim ( parts [ 0 ] ) ;
29
+ if ( parts . length === 1 ) {
30
+ pri = 1 ;
31
+ }
32
+ else {
33
+ name = trim ( parts [ 1 ] ) ;
34
+ if ( name . indexOf ( "q=" ) === 0 ) {
35
+ name = name . substr ( 2 ) ;
36
+ pri = parseFloat ( name , 10 ) ;
37
+ pri = isNaN ( pri ) ? 0 : pri ;
38
+ }
39
+ else {
40
+ pri = 1 ;
41
+ }
42
+ }
43
+ prioritized . push ( { lang : lang , pri : pri } ) ;
44
+ }
45
+ prioritized . sort ( function ( a , b ) {
46
+ return a . pri < b . pri ? 1 : - 1 ;
47
+ } ) ;
48
+ for ( i = 0 ; i < l ; i ++ ) {
49
+ lang = prioritized [ i ] . lang ;
50
+ match = cultures [ lang ] ;
51
+ // exact match?
26
52
if ( match ) {
27
53
return match ;
28
54
}
29
55
}
30
56
for ( i = 0 ; i < l ; i ++ ) {
31
- name = list [ i ] ;
57
+ lang = prioritized [ i ] . lang ;
58
+ // for each entry try its neutral language
32
59
do {
33
- var index = name . lastIndexOf ( "-" ) ;
60
+ var index = lang . lastIndexOf ( "-" ) ;
34
61
if ( index === - 1 ) {
35
62
break ;
36
63
}
37
64
// strip off the last part. e.g. en-US => en
38
- name = name . substr ( 0 , index ) ;
39
- match = cultures [ name ] ;
65
+ lang = lang . substr ( 0 , index ) ;
66
+ match = cultures [ lang ] ;
40
67
if ( match ) {
41
68
return match ;
42
69
}
0 commit comments