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 |
||
|---|---|---|
| .. | ||
| .gitattributes | ||
| .gitignore | ||
| .golangci.yml | ||
| LICENSE | ||
| locale_android.c | ||
| locale_android.go | ||
| locale_darwin_cgo.go | ||
| locale_darwin_nocgo.go | ||
| locale_darwin.go | ||
| locale_darwin.m | ||
| 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
UsingGetUserDefaultLocaleNameandGetSystemDefaultLocaleName. -
macOS
Using[Bundle preferredLocalizations], falling back to callingdefaults read -g AppleLocaleanddefaults read -g AppleLanguages(since environment variables likeLANGare not usually set on macOS). -
Unix-like systems (Linux, BSD, etc.)
Using theLANGUAGE,LC_ALL,LC_MESSAGESandLANGenvironment variables. -
WASM (JavaScript)
Usingnavigator.languageandnavigator.languages. -
iOS
Using[NSLocale preferredLanguages]. -
Android
UsinggetResources().getConfiguration().getLocalesfor Android N or later, orgetResources().getConfiguration().localeotherwise.Note: for Android, you'll first need to call
SetRunOnJVM, depending on which mobile framework you're using:-
For Fyne:
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:
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 (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...)
...
}
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.