Awesome Open Source
Awesome Open Source

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.

Related Awesome Lists
Top Programming Languages
Top Projects

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Golang (158,002
Language (30,062
Localization (5,322
I18n (4,834
Golang Library (1,620
Ietf (761
L10n (657
Locale (194