Major improvements to UnifiedPlayer: 1. GetFrameImage() now works when paused for responsive UI updates 2. Play() method properly starts FFmpeg process 3. Frame display loop runs continuously for smooth video display 4. Disabled audio temporarily to fix video playback fundamentals 5. Simplified FFmpeg command to focus on video stream only Player now: - Generates video frames correctly - Shows video when paused - Has responsive progress tracking - Starts playback properly Next steps: Re-enable audio playback once video is stable
142 lines
4.8 KiB
Markdown
142 lines
4.8 KiB
Markdown
# go-locale
|
|
|
|
[](https://pkg.go.dev/github.com/jeandeaual/go-locale)
|
|
[](https://goreportcard.com/report/github.com/jeandeaual/go-locale)
|
|
[](https://coveralls.io/github/jeandeaual/go-locale?branch=master)
|
|
[](https://github.com/jeandeaual/go-locale/actions?query=workflow%3Atest)
|
|
|
|
Go library used to retrieve the current locale(s) of the operating system.
|
|
|
|
## OS Support
|
|
|
|
* Windows\
|
|
Using [`GetUserDefaultLocaleName`](https://docs.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-getuserdefaultlocalename) and [`GetSystemDefaultLocaleName`](https://docs.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-getsystemdefaultlocalename).
|
|
* macOS\
|
|
Using [`[Bundle preferredLocalizations]`](https://developer.apple.com/documentation/foundation/bundle/1417249-preferredlocalizations), falling back to
|
|
calling `defaults read -g AppleLocale` and `defaults read -g AppleLanguages` (since environment variables like `LANG` are not usually set on macOS).
|
|
* Unix-like systems (Linux, BSD, etc.)\
|
|
Using the `LANGUAGE`, `LC_ALL`, `LC_MESSAGES` and `LANG` environment variables.
|
|
* WASM (JavaScript)\
|
|
Using [`navigator.language`](https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/language) and [`navigator.languages`](https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/languages).
|
|
* iOS\
|
|
Using [`[NSLocale preferredLanguages]`](https://developer.apple.com/documentation/foundation/nslocale/1415614-preferredlanguages).
|
|
* Android\
|
|
Using [`getResources().getConfiguration().getLocales`](https://developer.android.com/reference/android/content/res/Configuration#getLocales()) for Android N or later, or [`getResources().getConfiguration().locale`](https://developer.android.com/reference/android/content/res/Configuration#locale) otherwise.
|
|
|
|
*Note*: for Android, you'll first need to call `SetRunOnJVM`, depending on which mobile framework you're using:
|
|
|
|
* For [Fyne](https://fyne.io/):
|
|
|
|
```go
|
|
import (
|
|
"fyne.io/fyne/v2/driver"
|
|
"github.com/jeandeaual/go-locale"
|
|
)
|
|
|
|
func init() {
|
|
locale.SetRunOnJVM(func(fn func(vm, env, ctx uintptr) error) error {
|
|
driver.RunNative(func(ctx interface{}) error {
|
|
and := ctx.(*driver.AndroidContext)
|
|
return fn(and.VM, and.Env, and.Ctx)
|
|
})
|
|
return nil
|
|
})
|
|
}
|
|
```
|
|
|
|
* For [gomobile](https://github.com/golang/go/wiki/Mobile):
|
|
|
|
```go
|
|
import (
|
|
"golang.org/x/mobile/app"
|
|
"github.com/jeandeaual/go-locale"
|
|
)
|
|
|
|
func init() {
|
|
locale.SetRunOnJVM(app.RunOnJVM)
|
|
}
|
|
```
|
|
|
|
## Usage
|
|
|
|
## GetLocales
|
|
|
|
`GetLocales` returns the user's preferred locales, by order of preference, as a slice of [IETF BCP 47 language tag](https://tools.ietf.org/rfc/bcp/bcp47.txt) (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.
|
|
|
|
```go
|
|
userLocales, err := locale.GetLocales()
|
|
if err == nil {
|
|
fmt.Println("Locales:", userLocales)
|
|
}
|
|
```
|
|
|
|
This can be used with [golang.org/x/text](https://godoc.org/golang.org/x/text) or [go-i18n](https://github.com/nicksnyder/go-i18n) to set the localizer's language preferences:
|
|
|
|
```go
|
|
import (
|
|
"github.com/jeandeaual/go-locale"
|
|
"golang.org/x/text/message"
|
|
)
|
|
|
|
func main() {
|
|
userLocales, _ := locale.GetLocales()
|
|
p := message.NewPrinter(message.MatchLanguage(userLocales...))
|
|
...
|
|
}
|
|
```
|
|
|
|
```go
|
|
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...)
|
|
...
|
|
}
|
|
```
|
|
|
|
## GetLocale
|
|
|
|
`GetLocale` returns the current locale as defined in [IETF BCP 47](https://tools.ietf.org/rfc/bcp/bcp47.txt) (e.g. `"en-US"`).
|
|
|
|
```go
|
|
userLocale, err := locale.GetLocale()
|
|
if err == nil {
|
|
fmt.Println("Locale:", userLocale)
|
|
}
|
|
```
|
|
|
|
## GetLanguage
|
|
|
|
`GetLanguage` returns the current language as an [ISO 639](http://en.wikipedia.org/wiki/ISO_639) language code (e.g. `"en"`).
|
|
|
|
```go
|
|
userLanguage, err := locale.GetLanguage()
|
|
if err == nil {
|
|
fmt.Println("Language:", userLocale)
|
|
}
|
|
```
|
|
|
|
## GetRegion
|
|
|
|
`GetRegion` returns the current language as an [ISO 3166](http://en.wikipedia.org/wiki/ISO_3166-1) country code (e.g. `"US"`).
|
|
|
|
```go
|
|
userRegion, err := locale.GetRegion()
|
|
if err == nil {
|
|
fmt.Println("Region:", userRegion)
|
|
}
|
|
```
|
|
|
|
## Aknowledgements
|
|
|
|
Inspired by [jibber_jabber](https://github.com/cloudfoundry-attic/jibber_jabber).
|