|  | @@ -1,10 +1,13 @@
 | 
	
		
			
				|  |  |  package eu.kanade.tachiyomi.ui.extension
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import android.app.Application
 | 
	
		
			
				|  |  |  import android.os.Bundle
 | 
	
		
			
				|  |  | +import eu.kanade.tachiyomi.R
 | 
	
		
			
				|  |  |  import eu.kanade.tachiyomi.extension.ExtensionManager
 | 
	
		
			
				|  |  |  import eu.kanade.tachiyomi.extension.model.Extension
 | 
	
		
			
				|  |  |  import eu.kanade.tachiyomi.extension.model.InstallStep
 | 
	
		
			
				|  |  |  import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
 | 
	
		
			
				|  |  | +import eu.kanade.tachiyomi.util.LocaleHelper
 | 
	
		
			
				|  |  |  import rx.Observable
 | 
	
		
			
				|  |  |  import rx.Subscription
 | 
	
		
			
				|  |  |  import rx.android.schedulers.AndroidSchedulers
 | 
	
	
		
			
				|  | @@ -49,6 +52,8 @@ open class ExtensionPresenter(
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Synchronized
 | 
	
		
			
				|  |  |      private fun toItems(tuple: ExtensionTuple): List<ExtensionItem> {
 | 
	
		
			
				|  |  | +        val context = Injekt.get<Application>()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          val (installed, untrusted, available) = tuple
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          val items = mutableListOf<ExtensionItem>()
 | 
	
	
		
			
				|  | @@ -62,7 +67,7 @@ open class ExtensionPresenter(
 | 
	
		
			
				|  |  |                  .sortedBy { it.pkgName }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (installedSorted.isNotEmpty() || untrustedSorted.isNotEmpty()) {
 | 
	
		
			
				|  |  | -            val header = ExtensionGroupItem(true, installedSorted.size + untrustedSorted.size)
 | 
	
		
			
				|  |  | +            val header = ExtensionGroupItem(context.getString(R.string.ext_installed), installedSorted.size + untrustedSorted.size)
 | 
	
		
			
				|  |  |              items += installedSorted.map { extension ->
 | 
	
		
			
				|  |  |                  ExtensionItem(extension, header, currentDownloads[extension.pkgName])
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -71,10 +76,17 @@ open class ExtensionPresenter(
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (availableSorted.isNotEmpty()) {
 | 
	
		
			
				|  |  | -            val header = ExtensionGroupItem(false, availableSorted.size)
 | 
	
		
			
				|  |  | -            items += availableSorted.map { extension ->
 | 
	
		
			
				|  |  | -                ExtensionItem(extension, header, currentDownloads[extension.pkgName])
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            val availableGroupedByLang = availableSorted
 | 
	
		
			
				|  |  | +                    .groupBy { LocaleHelper.getDisplayName(it.lang, context) }
 | 
	
		
			
				|  |  | +                    .toSortedMap()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            availableGroupedByLang
 | 
	
		
			
				|  |  | +                    .forEach {
 | 
	
		
			
				|  |  | +                        val header = ExtensionGroupItem(it.key, it.value.size)
 | 
	
		
			
				|  |  | +                        items += it.value.map { extension ->
 | 
	
		
			
				|  |  | +                            ExtensionItem(extension, header, currentDownloads[extension.pkgName])
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          this.extensions = items
 |