Merge pull request #80 from didrocks/allow-setting-global-storage

Allow setting global storage
This commit is contained in:
Leonel Quinteros 2023-07-18 11:00:14 -03:00 committed by GitHub
commit 1f7d156c36
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 69 additions and 0 deletions

View file

@ -142,6 +142,30 @@ func SetLibrary(lib string) {
loadStorage(true)
}
// GetStorage is the locale storage getter for the package configuration.
func GetStorage() *Locale {
globalConfig.RLock()
storage := globalConfig.storage
globalConfig.RUnlock()
return storage
}
// SetStorage allows overridding the global Locale object with one built manually with NewLocale().
// This allows then to attach to the locale Domains object in memory po or mo files (embedded or in any directory),
// for each domain.
// Locale library, language and domain properties will apply on default global configuration.
// Any domain not loaded yet will use to the just in time domain loading process.
// Note that any call to gotext.Set* or Configure will invalidate this override.
func SetStorage(storage *Locale) {
globalConfig.Lock()
globalConfig.storage = storage
globalConfig.library = storage.path
globalConfig.language = storage.lang
globalConfig.domain = storage.defaultDomain
globalConfig.Unlock()
}
// Configure sets all configuration variables to be used at package level and reloads the corresponding Translation file.
// It receives the library path, language code and domain name.
// This function is recommended to be used when changing more than one setting,

View file

@ -29,6 +29,15 @@ func TestGettersSetters(t *testing.T) {
if lang != "es" {
t.Errorf("Expected GetLanguage to return 'es', but got '%s'", lang)
}
// Create Locale with full language code
l := NewLocale("fixtures/", "fr_FR")
SetStorage(l)
storage := GetStorage()
if storage != l {
t.Errorf("Expected GetStorage to return provided locale storage %v, but got '%v'", storage, l)
}
}
func TestPackageFunctions(t *testing.T) {
@ -411,6 +420,42 @@ msgstr[1] "Custom ctx translations"
}
}
func TestOverrideStorage(t *testing.T) {
// Configure global translation
Configure("fixtures/", "de_DE", "default")
language := Get("language")
if language != "de_DE" {
t.Errorf("Expected default configuration to be 'de_DE' but got '%s'", language)
}
// Create and override with our new locale.
l := NewLocale("fixtures/", "fr")
l.SetDomain("default")
SetStorage(l)
language = Get("language")
if language != "fr" {
t.Errorf("Expected default configuration to be overriden by locale 'fr' but got '%s'", language)
}
// Ensure properties were applied on globale configuration when Set.
dom := GetDomain()
if dom != "default" {
t.Errorf("Expected GetDomain to return 'default', but got '%s'", dom)
}
lib := GetLibrary()
if lib != "fixtures/" {
t.Errorf("Expected GetLibrary to return 'fixtures/', but got '%s'", lib)
}
lang := GetLanguage()
if lang != "fr" {
t.Errorf("Expected GetLanguage to return 'fr', but got '%s'", lang)
}
}
func TestPackageRace(t *testing.T) {
// Set PO content
str := `# Some comment