Skip to content

Go library used to retrieve the current locale(s) of the operating system.

License

Notifications You must be signed in to change notification settings

jeandeaual/go-locale

Repository files navigation

go-locale

PkgGoDev Go Report Card Coverage Status test

Go library used to retrieve the current locale(s) of the operating system.

OS Support

Usage

GetLocales

GetLocales returns the user's preferred locales, by order of preference, as a slice of IETF BCP 47 language tag (e.g. []string{"en-US", "fr-FR", "ja-JP"}).

This works if the user set multiple languages on macOS and other Unix systems. Otherwise, it returns a slice with a single locale.

userLocales, err := locale.GetLocales()
if err == nil {
	fmt.Println("Locales:", userLocales)
}

This can be used with golang.org/x/text or go-i18n to set the localizer's language preferences:

import (
	"github.com/jeandeaual/go-locale"
	"golang.org/x/text/message"
)

func main() {
	userLocales, _ := locale.GetLocales()
	p := message.NewPrinter(message.MatchLanguage(userLocales...))
	...
}
import (
	"github.com/jeandeaual/go-locale"
	"github.com/nicksnyder/go-i18n/v2/i18n"
	"golang.org/x/text/language"
)

func main() {
	userLocales, _ := locale.GetLocales()
	bundle := i18n.NewBundle(language.English)
	localizer := i18n.NewLocalizer(bundle, userLocales...)
	...
}

For a complete example, see here.

GetLocale

GetLocale returns the current locale as defined in IETF BCP 47 (e.g. "en-US").

userLocale, err := locale.GetLocale()
if err == nil {
	fmt.Println("Locale:", userLocale)
}

GetLanguage

GetLanguage returns the current language as an ISO 639 language code (e.g. "en").

userLanguage, err := locale.GetLanguage()
if err == nil {
	fmt.Println("Language:", userLocale)
}

GetRegion

GetRegion returns the current language as an ISO 3166 country code (e.g. "US").

userRegion, err := locale.GetRegion()
if err == nil {
	fmt.Println("Region:", userRegion)
}

Aknowledgements

Inspired by jibber_jabber.