@@ -560,15 +560,31 @@ function populateTranslationList() {
560560 dstLangsPerCol = Math . ceil ( dstLangs . length / numDstCols ) ;
561561
562562 for ( var i = 0 ; i < numSrcCols ; i ++ ) {
563- var numSrcLang = Math . ceil ( srcLangs . length / numSrcCols ) * i ;
563+ while ( srcLangs [ i * srcLangsPerCol ] . indexOf ( '_' ) !== - 1 ) {
564+ srcLangsPerCol ++ ;
565+ }
566+ }
567+
568+ for ( i = 0 ; i < numDstCols ; i ++ ) {
569+ while ( dstLangs [ i * dstLangsPerCol ] . indexOf ( '_' ) !== - 1 ) {
570+ dstLangsPerCol ++ ;
571+ }
572+ }
573+
574+ for ( i = 0 ; i < numSrcCols ; i ++ ) {
575+ var numSrcLang = srcLangsPerCol * i ;
564576 var srcLangCol = $ ( '<div class="languageCol">' ) . appendTo ( $ ( '#srcLanguages .row' ) ) ;
565577
566578 for ( var j = numSrcLang ; j < numSrcLang + srcLangsPerCol ; j ++ ) {
567579 if ( numSrcLang < srcLangs . length ) {
568580 var langCode = srcLangs [ j ] ;
569581 var langName = getLangByCode ( langCode ) ;
582+ var langClasses = 'languageName' ;
583+ if ( typeof langCode !== 'undefined' && langCode . indexOf ( '_' ) !== - 1 ) {
584+ langClasses += ' languageVariant' ;
585+ }
570586 srcLangCol . append (
571- $ ( '<div class="languageName "></div>' )
587+ $ ( '<div class="' + langClasses + ' "></div>')
572588 . attr ( 'data-code' , langCode )
573589 . text ( langName )
574590 ) ;
@@ -577,15 +593,19 @@ function populateTranslationList() {
577593 }
578594
579595 for ( i = 0 ; i < numDstCols ; i ++ ) {
580- var numDstLang = Math . ceil ( dstLangs . length / numDstCols ) * i ;
596+ var numDstLang = dstLangsPerCol * i ;
581597 var dstLangCol = $ ( '<div class="languageCol">' ) . appendTo ( $ ( '#dstLanguages .row' ) ) ;
582598
583599 for ( j = numDstLang ; j < numDstLang + dstLangsPerCol ; j ++ ) {
584600 if ( numDstLang < dstLangs . length ) {
585601 langCode = dstLangs [ j ] ;
586602 langName = getLangByCode ( langCode ) ;
603+ langClasses = 'languageName' ;
604+ if ( typeof langCode !== 'undefined' && langCode . indexOf ( '_' ) !== - 1 ) {
605+ langClasses += ' languageVariant' ;
606+ }
587607 dstLangCol . append (
588- $ ( '<div class="languageName "></div>' )
608+ $ ( '<div class="' + langClasses + ' "></div>')
589609 . attr ( 'data-code' , langCode )
590610 . text ( langName )
591611 ) ;
@@ -600,10 +620,18 @@ function populateTranslationList() {
600620
601621 $ ( '.langSelect option[value!=detect]' ) . remove ( ) ;
602622 $ . each ( srcLangs , function ( ) {
603- $ ( '#srcLangSelect' ) . append ( $ ( '<option></option>' ) . prop ( 'value' , this ) . text ( getLangByCode ( this ) ) ) ;
623+ var indent = '' ;
624+ if ( typeof this !== 'undefined' && this . indexOf ( '_' ) !== - 1 ) {
625+ indent += ' ' ;
626+ }
627+ $ ( '#srcLangSelect' ) . append ( $ ( '<option></option>' ) . prop ( 'value' , this ) . html ( indent + getLangByCode ( this ) ) ) ;
604628 } ) ;
605629 $ . each ( dstLangs , function ( ) {
606- $ ( '#dstLangSelect' ) . append ( $ ( '<option></option>' ) . prop ( 'value' , this ) . text ( getLangByCode ( this ) ) ) ;
630+ var indent = '' ;
631+ if ( typeof this !== 'undefined' && this . indexOf ( '_' ) !== - 1 ) {
632+ indent += ' ' ;
633+ }
634+ $ ( '#dstLangSelect' ) . append ( $ ( '<option></option>' ) . prop ( 'value' , this ) . html ( indent + getLangByCode ( this ) ) ) ;
607635 } ) ;
608636
609637 $ ( '#srcLangSelect' ) . val ( curSrcLang ) ;
@@ -623,7 +651,6 @@ function populateTranslationList() {
623651
624652 function compareLangCodes ( a , b ) {
625653 var aVariant = a . split ( '_' ) , bVariant = b . split ( '_' ) ;
626-
627654 var directCompare ;
628655 try {
629656 directCompare = getLangByCode ( aVariant [ 0 ] ) . localeCompare ( getLangByCode ( bVariant [ 0 ] ) , sortLocale ) ;
@@ -635,10 +662,10 @@ function populateTranslationList() {
635662 if ( aVariant [ 1 ] && bVariant [ 1 ] && aVariant [ 0 ] === bVariant [ 0 ] ) {
636663 return directCompare ;
637664 }
638- else if ( aVariant && a . startsWith ( b ) ) {
665+ else if ( aVariant [ 1 ] && aVariant [ 0 ] === b ) {
639666 return 1 ;
640667 }
641- else if ( bVariant && b . startsWith ( a ) ) {
668+ else if ( bVariant [ 1 ] && bVariant [ 0 ] === a ) {
642669 return - 1 ;
643670 }
644671 else {
@@ -647,7 +674,18 @@ function populateTranslationList() {
647674 }
648675
649676 srcLangs = srcLangs . sort ( compareLangCodes ) ;
650- dstLangs = dstLangs . sort ( function ( a , b ) {
677+
678+ var langsOnly = [ ] ;
679+ var variantsOnly = [ ] ;
680+ for ( var i = 0 ; i < dstLangs . length ; i ++ ) {
681+ if ( dstLangs [ i ] . indexOf ( '_' ) !== - 1 ) {
682+ variantsOnly . push ( dstLangs [ i ] ) ;
683+ }
684+ else {
685+ langsOnly . push ( dstLangs [ i ] ) ;
686+ }
687+ }
688+ dstLangs = langsOnly . sort ( function ( a , b ) {
651689 var aPossible = pairs [ curSrcLang ] && pairs [ curSrcLang ] . indexOf ( a ) !== - 1 ;
652690 var bPossible = pairs [ curSrcLang ] && pairs [ curSrcLang ] . indexOf ( b ) !== - 1 ;
653691
@@ -661,6 +699,16 @@ function populateTranslationList() {
661699 return 1 ;
662700 }
663701 } ) ;
702+
703+ for ( i = 0 ; i < variantsOnly . length ; i ++ ) {
704+ var baseLang = variantsOnly [ i ] . split ( '_' ) [ 0 ] ;
705+ for ( var j = 0 ; j < dstLangs . length ; j ++ ) {
706+ if ( baseLang === dstLangs [ j ] ) {
707+ dstLangs . splice ( j + 1 , 0 , variantsOnly [ i ] ) ;
708+ break ;
709+ }
710+ }
711+ }
664712 }
665713}
666714
0 commit comments