github.com/willmadison/cli@v6.40.1-0.20181018160101-29d5937903ff+incompatible/cf/i18n/locale.go (about)

     1  package i18n
     2  
     3  import (
     4  	"path"
     5  	"strings"
     6  
     7  	"code.cloudfoundry.org/cli/i18n/resources"
     8  	"code.cloudfoundry.org/cli/util/ui"
     9  )
    10  
    11  const resourceSuffix = ".all.json"
    12  
    13  func SupportedLocales() []string {
    14  	languages := supportedLanguages()
    15  	localeNames := make([]string, len(languages))
    16  
    17  	for i, l := range languages {
    18  		localeParts := strings.Split(l, "-")
    19  		lang := localeParts[0]
    20  		regionOrScript := localeParts[1]
    21  
    22  		switch len(regionOrScript) {
    23  		case 2: // Region
    24  			localeNames[i] = lang + "-" + strings.ToUpper(regionOrScript)
    25  		case 4: // Script
    26  			localeNames[i] = lang + "-" + strings.Title(regionOrScript)
    27  		default:
    28  			localeNames[i] = l
    29  		}
    30  	}
    31  
    32  	return localeNames
    33  }
    34  
    35  func IsSupportedLocale(locale string) bool {
    36  	sanitizedLocale, err := ui.ParseLocale(locale)
    37  	if err != nil {
    38  		return false
    39  	}
    40  
    41  	for _, supportedLanguage := range supportedLanguages() {
    42  		if supportedLanguage == sanitizedLocale {
    43  			return true
    44  		}
    45  	}
    46  
    47  	return false
    48  }
    49  
    50  func supportedLanguages() []string {
    51  	assetNames := resources.AssetNames()
    52  
    53  	var languages []string
    54  	for _, assetName := range assetNames {
    55  		assetLocale := strings.TrimSuffix(path.Base(assetName), resourceSuffix)
    56  		locale, _ := ui.ParseLocale(assetLocale)
    57  		languages = append(languages, locale)
    58  	}
    59  
    60  	return languages
    61  }