.. | ||
.gitattributes | ||
.gitignore | ||
.golangci.yml | ||
LICENSE | ||
locale_android.c | ||
locale_android.go | ||
locale_darwin.go | ||
locale_ios.go | ||
locale_ios.m | ||
locale_js.go | ||
locale_unix.go | ||
locale_windows.go | ||
README.md | ||
util.go |
go-locale
Go library used to retrieve the current locale(s) of the operating system.
OS Support
-
Windows
UsingGetUserDefaultLocaleName
andGetSystemDefaultLocaleName
. -
macOS
Usingdefaults read -g AppleLocale
anddefaults read -g AppleLanguages
(since environment variables likeLANG
are not usually set on macOS). -
Unix-like systems (Linux, BSD, etc.)
Using theLANGUAGE
,LC_ALL
,LC_MESSAGES
andLANG
environment variables. -
WASM (JavaScript)
Usingnavigator.language
andnavigator.languages
. -
iOS
Using[NSLocale preferredLanguages]
. -
Android
UsinggetResources().getConfiguration().getLocales
for Android N or later, orgetResources().getConfiguration().locale
otherwise.Note: for Android, you'll first need to call
SetRunOnJVM
, depending on which mobile framework you're using:
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.