@@ -533,6 +533,9 @@ function populateTranslationList() {
533533 sortTranslationList ( ) ;
534534 $ ( '.languageCol' ) . remove ( ) ;
535535
536+ function isVariant ( lang ) {
537+ return lang . indexOf ( '_' ) !== - 1 ;
538+ }
536539 var minColumnWidth = TRANSLATION_LIST_MAX_WIDTH / TRANSLATION_LIST_MAX_COLUMNS ;
537540
538541 // figure out how much space is actually available for the columns
@@ -560,13 +563,13 @@ function populateTranslationList() {
560563 dstLangsPerCol = Math . ceil ( dstLangs . length / numDstCols ) ;
561564
562565 for ( var i = 0 ; i < numSrcCols ; i ++ ) {
563- while ( srcLangs [ i * srcLangsPerCol ] . indexOf ( '_' ) !== - 1 ) {
566+ while ( isVariant ( srcLangs [ i * srcLangsPerCol ] ) ) {
564567 srcLangsPerCol ++ ;
565568 }
566569 }
567570
568571 for ( i = 0 ; i < numDstCols ; i ++ ) {
569- while ( dstLangs [ i * dstLangsPerCol ] . indexOf ( '_' ) !== - 1 ) {
572+ while ( isVariant ( dstLangs [ i * dstLangsPerCol ] ) ) {
570573 dstLangsPerCol ++ ;
571574 }
572575 }
@@ -575,41 +578,37 @@ function populateTranslationList() {
575578 var numSrcLang = srcLangsPerCol * i ;
576579 var srcLangCol = $ ( '<div class="languageCol">' ) . appendTo ( $ ( '#srcLanguages .row' ) ) ;
577580
578- for ( var j = numSrcLang ; j < numSrcLang + srcLangsPerCol ; j ++ ) {
579- if ( numSrcLang < srcLangs . length ) {
580- var langCode = srcLangs [ j ] ;
581- var langName = getLangByCode ( langCode ) ;
582- var langClasses = 'languageName' ;
583- if ( typeof langCode !== 'undefined' && langCode . indexOf ( '_' ) !== - 1 ) {
584- langClasses += ' languageVariant' ;
585- }
586- srcLangCol . append (
587- $ ( '<div class="' + langClasses + '"></div>' )
588- . attr ( 'data-code' , langCode )
589- . text ( langName )
590- ) ;
581+ for ( var j = numSrcLang ; j < srcLangs . length && j < numSrcLang + srcLangsPerCol ; j ++ ) {
582+ var langCode = srcLangs [ j ] ;
583+ var langName = getLangByCode ( langCode ) ;
584+ var langClasses = 'languageName' ;
585+ if ( isVariant ( langCode ) ) {
586+ langClasses += ' languageVariant' ;
591587 }
588+ srcLangCol . append (
589+ $ ( '<div class="' + langClasses + '"></div>' )
590+ . attr ( 'data-code' , langCode )
591+ . text ( langName )
592+ ) ;
592593 }
593594 }
594595
595596 for ( i = 0 ; i < numDstCols ; i ++ ) {
596597 var numDstLang = dstLangsPerCol * i ;
597598 var dstLangCol = $ ( '<div class="languageCol">' ) . appendTo ( $ ( '#dstLanguages .row' ) ) ;
598599
599- for ( j = numDstLang ; j < numDstLang + dstLangsPerCol ; j ++ ) {
600- if ( numDstLang < dstLangs . length ) {
601- langCode = dstLangs [ j ] ;
602- langName = getLangByCode ( langCode ) ;
603- langClasses = 'languageName' ;
604- if ( typeof langCode !== 'undefined' && langCode . indexOf ( '_' ) !== - 1 ) {
605- langClasses += ' languageVariant' ;
606- }
607- dstLangCol . append (
608- $ ( '<div class="' + langClasses + '"></div>' )
609- . attr ( 'data-code' , langCode )
610- . text ( langName )
611- ) ;
600+ for ( j = numDstLang ; j < dstLangs . length && j < numDstLang + dstLangsPerCol ; j ++ ) {
601+ langCode = dstLangs [ j ] ;
602+ langName = getLangByCode ( langCode ) ;
603+ langClasses = 'languageName' ;
604+ if ( isVariant ( langCode ) ) {
605+ langClasses += ' languageVariant' ;
612606 }
607+ dstLangCol . append (
608+ $ ( '<div class="' + langClasses + '"></div>' )
609+ . attr ( 'data-code' , langCode )
610+ . text ( langName )
611+ ) ;
613612 }
614613 }
615614
@@ -620,18 +619,18 @@ function populateTranslationList() {
620619
621620 $ ( '.langSelect option[value!=detect]' ) . remove ( ) ;
622621 $ . each ( srcLangs , function ( ) {
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 ) ) ) ;
622+ $ ( '#srcLangSelect' ) . append (
623+ $ ( '<option></option>' )
624+ . prop ( 'value' , this )
625+ . html ( ( isVariant ( this ) ? ' ' : '' ) + getLangByCode ( this ) )
626+ ) ;
628627 } ) ;
629628 $ . each ( dstLangs , function ( ) {
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 ) ) ) ;
629+ $ ( '#dstLangSelect' ) . append (
630+ $ ( '<option></option>' )
631+ . prop ( 'value' , this )
632+ . html ( ( isVariant ( this ) ? ' ' : '' ) + getLangByCode ( this ) )
633+ ) ;
635634 } ) ;
636635
637636 $ ( '#srcLangSelect' ) . val ( curSrcLang ) ;
@@ -674,21 +673,21 @@ function populateTranslationList() {
674673 }
675674
676675 srcLangs = srcLangs . sort ( compareLangCodes ) ;
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 ] ) ;
676+ dstLangs = dstLangs . sort ( function ( a , b ) {
677+ var possibleDstLangs = pairs [ curSrcLang ] ;
678+ function isPossible ( lang ) {
679+ var parentLanguage = lang . split ( '_' ) [ 0 ] ;
680+
681+ return possibleDstLangs && (
682+ possibleDstLangs . indexOf ( lang ) !== - 1 ||
683+ possibleDstLangs . indexOf ( parentLanguage ) !== - 1 ||
684+ possibleDstLangs . some ( function ( possibleLang ) {
685+ return possibleLang . startsWith ( parentLanguage ) ;
686+ } )
687+ ) ;
686688 }
687- }
688- dstLangs = langsOnly . sort ( function ( a , b ) {
689- var aPossible = pairs [ curSrcLang ] && pairs [ curSrcLang ] . indexOf ( a ) !== - 1 ;
690- var bPossible = pairs [ curSrcLang ] && pairs [ curSrcLang ] . indexOf ( b ) !== - 1 ;
691689
690+ var aPossible = isPossible ( a ) , bPossible = isPossible ( b ) ;
692691 if ( aPossible === bPossible ) {
693692 return compareLangCodes ( a , b ) ;
694693 }
@@ -699,16 +698,6 @@ function populateTranslationList() {
699698 return 1 ;
700699 }
701700 } ) ;
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- }
712701 }
713702}
714703
0 commit comments