Merge pull request #40 from chrisvaughn/cv/ar_bug
call Translation.Get & GetC directly
This commit is contained in:
@@ -1,6 +1,19 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
|
||||||
|
|
||||||
msgid "Alcohol & Tobacco"
|
msgid "Alcohol & Tobacco"
|
||||||
msgstr "الكحول والتبغ"
|
msgstr "الكحول والتبغ"
|
||||||
|
|
||||||
|
# this test data is purposely missing msgstr
|
||||||
|
msgid "%d selected"
|
||||||
|
msgid_plural "%d selected"
|
||||||
|
|
||||||
|
msgid "Load %d more document"
|
||||||
|
msgid_plural "Load %d more documents"
|
||||||
|
msgstr[0] "حمّل %d مستندات إضافيّة"
|
||||||
|
msgstr[1] "حمّل مستند واحد إضافي"
|
||||||
|
msgstr[2] "حمّل مستندين إضافيين"
|
||||||
|
msgstr[3] "حمّل %d مستندات إضافيّة"
|
||||||
|
msgstr[4] "حمّل %d مستندا إضافيّا"
|
||||||
|
msgstr[5] "حمّل %d مستند إضافي"
|
||||||
2
fixtures/ar/no_plural_header.po
Normal file
2
fixtures/ar/no_plural_header.po
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
msgid "Alcohol & Tobacco"
|
||||||
|
msgstr "الكحول والتبغ"
|
||||||
25
gotext.go
25
gotext.go
@@ -171,7 +171,20 @@ func GetN(str, plural string, n int, vars ...interface{}) string {
|
|||||||
// GetD returns the corresponding Translation in the given domain for a given string.
|
// GetD returns the corresponding Translation in the given domain for a given string.
|
||||||
// Supports optional parameters (vars... interface{}) to be inserted on the formatted string using the fmt.Printf syntax.
|
// Supports optional parameters (vars... interface{}) to be inserted on the formatted string using the fmt.Printf syntax.
|
||||||
func GetD(dom, str string, vars ...interface{}) string {
|
func GetD(dom, str string, vars ...interface{}) string {
|
||||||
return GetND(dom, str, str, 1, vars...)
|
// Try to load default package Locale storage
|
||||||
|
loadStorage(false)
|
||||||
|
|
||||||
|
// Return Translation
|
||||||
|
globalConfig.RLock()
|
||||||
|
|
||||||
|
if _, ok := globalConfig.storage.Domains[dom]; !ok {
|
||||||
|
globalConfig.storage.AddDomain(dom)
|
||||||
|
}
|
||||||
|
|
||||||
|
tr := globalConfig.storage.GetD(dom, str, vars...)
|
||||||
|
globalConfig.RUnlock()
|
||||||
|
|
||||||
|
return tr
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetND retrieves the (N)th plural form of Translation in the given domain for a given string.
|
// GetND retrieves the (N)th plural form of Translation in the given domain for a given string.
|
||||||
@@ -208,7 +221,15 @@ func GetNC(str, plural string, n int, ctx string, vars ...interface{}) string {
|
|||||||
// GetDC returns the corresponding Translation in the given domain for the given string in the given context.
|
// GetDC returns the corresponding Translation in the given domain for the given string in the given context.
|
||||||
// Supports optional parameters (vars... interface{}) to be inserted on the formatted string using the fmt.Printf syntax.
|
// Supports optional parameters (vars... interface{}) to be inserted on the formatted string using the fmt.Printf syntax.
|
||||||
func GetDC(dom, str, ctx string, vars ...interface{}) string {
|
func GetDC(dom, str, ctx string, vars ...interface{}) string {
|
||||||
return GetNDC(dom, str, str, 1, ctx, vars...)
|
// Try to load default package Locale storage
|
||||||
|
loadStorage(false)
|
||||||
|
|
||||||
|
// Return Translation
|
||||||
|
globalConfig.RLock()
|
||||||
|
tr := globalConfig.storage.GetDC(dom, str, ctx, vars...)
|
||||||
|
globalConfig.RUnlock()
|
||||||
|
|
||||||
|
return tr
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetNDC retrieves the (N)th plural form of Translation in the given domain for a given string.
|
// GetNDC retrieves the (N)th plural form of Translation in the given domain for a given string.
|
||||||
|
|||||||
@@ -452,3 +452,60 @@ msgstr "Some random Translation in a context"
|
|||||||
|
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPackageArabicTranslation(t *testing.T) {
|
||||||
|
Configure("fixtures/", "ar", "categories")
|
||||||
|
|
||||||
|
// Plurals formula missing + Plural translation string missing
|
||||||
|
tr := GetD("categories", "Alcohol & Tobacco")
|
||||||
|
if tr != "الكحول والتبغ" {
|
||||||
|
t.Errorf("Expected to get 'الكحول والتبغ', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Plural translation string present without translations, should get the msgid_plural
|
||||||
|
tr = GetND("categories", "%d selected", "%d selected", 10)
|
||||||
|
if tr != "%d selected" {
|
||||||
|
t.Errorf("Expected to get '%%d selected', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
|
||||||
|
//Plurals formula present + Plural translation string present and complete
|
||||||
|
tr = GetND("categories", "Load %d more document", "Load %d more documents", 0)
|
||||||
|
if tr != "حمّل %d مستندات إضافيّة" {
|
||||||
|
t.Errorf("Expected to get 'msgstr[0]', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
|
||||||
|
tr = GetND("categories", "Load %d more document", "Load %d more documents", 1)
|
||||||
|
if tr != "حمّل مستند واحد إضافي" {
|
||||||
|
t.Errorf("Expected to get 'msgstr[1]', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
|
||||||
|
tr = GetND("categories", "Load %d more document", "Load %d more documents", 2)
|
||||||
|
if tr != "حمّل مستندين إضافيين" {
|
||||||
|
t.Errorf("Expected to get 'msgstr[2]', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
|
||||||
|
tr = GetND("categories", "Load %d more document", "Load %d more documents", 6)
|
||||||
|
if tr != "حمّل %d مستندات إضافيّة" {
|
||||||
|
t.Errorf("Expected to get 'msgstr[3]', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
|
||||||
|
tr = GetND("categories", "Load %d more document", "Load %d more documents", 116)
|
||||||
|
if tr != "حمّل %d مستندا إضافيّا" {
|
||||||
|
t.Errorf("Expected to get 'msgstr[4]', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
|
||||||
|
tr = GetND("categories", "Load %d more document", "Load %d more documents", 102)
|
||||||
|
if tr != "حمّل %d مستند إضافي" {
|
||||||
|
t.Errorf("Expected to get 'msgstr[5]', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPackageArabicMissingPluralForm(t *testing.T) {
|
||||||
|
Configure("fixtures/", "ar", "no_plural_header")
|
||||||
|
|
||||||
|
// Get translation
|
||||||
|
tr := GetD("no_plural_header", "Alcohol & Tobacco")
|
||||||
|
if tr != "الكحول والتبغ" {
|
||||||
|
t.Errorf("Expected to get 'الكحول والتبغ', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
28
locale.go
28
locale.go
@@ -182,7 +182,19 @@ func (l *Locale) GetN(str, plural string, n int, vars ...interface{}) string {
|
|||||||
// GetD returns the corresponding Translation in the given domain for the given string.
|
// GetD returns the corresponding Translation in the given domain for the given string.
|
||||||
// Supports optional parameters (vars... interface{}) to be inserted on the formatted string using the fmt.Printf syntax.
|
// Supports optional parameters (vars... interface{}) to be inserted on the formatted string using the fmt.Printf syntax.
|
||||||
func (l *Locale) GetD(dom, str string, vars ...interface{}) string {
|
func (l *Locale) GetD(dom, str string, vars ...interface{}) string {
|
||||||
return l.GetND(dom, str, str, 1, vars...)
|
// Sync read
|
||||||
|
l.RLock()
|
||||||
|
defer l.RUnlock()
|
||||||
|
|
||||||
|
if l.Domains != nil {
|
||||||
|
if _, ok := l.Domains[dom]; ok {
|
||||||
|
if l.Domains[dom] != nil {
|
||||||
|
return l.Domains[dom].Get(str, vars...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Printf(str, vars...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetND retrieves the (N)th plural form of Translation in the given domain for the given string.
|
// GetND retrieves the (N)th plural form of Translation in the given domain for the given string.
|
||||||
@@ -222,7 +234,19 @@ func (l *Locale) GetNC(str, plural string, n int, ctx string, vars ...interface{
|
|||||||
// GetDC returns the corresponding Translation in the given domain for the given string in the given context.
|
// GetDC returns the corresponding Translation in the given domain for the given string in the given context.
|
||||||
// Supports optional parameters (vars... interface{}) to be inserted on the formatted string using the fmt.Printf syntax.
|
// Supports optional parameters (vars... interface{}) to be inserted on the formatted string using the fmt.Printf syntax.
|
||||||
func (l *Locale) GetDC(dom, str, ctx string, vars ...interface{}) string {
|
func (l *Locale) GetDC(dom, str, ctx string, vars ...interface{}) string {
|
||||||
return l.GetNDC(dom, str, str, 1, ctx, vars...)
|
// Sync read
|
||||||
|
l.RLock()
|
||||||
|
defer l.RUnlock()
|
||||||
|
|
||||||
|
if l.Domains != nil {
|
||||||
|
if _, ok := l.Domains[dom]; ok {
|
||||||
|
if l.Domains[dom] != nil {
|
||||||
|
return l.Domains[dom].GetC(str, ctx, vars...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Printf(str, vars...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetNDC retrieves the (N)th plural form of Translation in the given domain for the given string in the given context.
|
// GetNDC retrieves the (N)th plural form of Translation in the given domain for the given string in the given context.
|
||||||
|
|||||||
@@ -504,11 +504,63 @@ func TestArabicTranslation(t *testing.T) {
|
|||||||
// Add domain
|
// Add domain
|
||||||
l.AddDomain("categories")
|
l.AddDomain("categories")
|
||||||
|
|
||||||
// Get translation
|
// Plurals formula missing + Plural translation string missing
|
||||||
tr := l.GetD("categories", "Alcohol & Tobacco")
|
tr := l.GetD("categories", "Alcohol & Tobacco")
|
||||||
if tr != "الكحول والتبغ" {
|
if tr != "الكحول والتبغ" {
|
||||||
t.Errorf("Expected to get 'الكحول والتبغ', but got '%s'", tr)
|
t.Errorf("Expected to get 'الكحول والتبغ', but got '%s'", tr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Plural translation string present without translations, should get the msgid_plural
|
||||||
|
tr = l.GetND("categories", "%d selected", "%d selected", 10)
|
||||||
|
if tr != "%d selected" {
|
||||||
|
t.Errorf("Expected to get '%%d selected', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
|
||||||
|
//Plurals formula present + Plural translation string present and complete
|
||||||
|
tr = l.GetND("categories", "Load %d more document", "Load %d more documents", 0)
|
||||||
|
if tr != "حمّل %d مستندات إضافيّة" {
|
||||||
|
t.Errorf("Expected to get 'msgstr[0]', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
|
||||||
|
tr = l.GetND("categories", "Load %d more document", "Load %d more documents", 1)
|
||||||
|
if tr != "حمّل مستند واحد إضافي" {
|
||||||
|
t.Errorf("Expected to get 'msgstr[1]', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
|
||||||
|
tr = l.GetND("categories", "Load %d more document", "Load %d more documents", 2)
|
||||||
|
if tr != "حمّل مستندين إضافيين" {
|
||||||
|
t.Errorf("Expected to get 'msgstr[2]', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
|
||||||
|
tr = l.GetND("categories", "Load %d more document", "Load %d more documents", 6)
|
||||||
|
if tr != "حمّل %d مستندات إضافيّة" {
|
||||||
|
t.Errorf("Expected to get 'msgstr[3]', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
|
||||||
|
tr = l.GetND("categories", "Load %d more document", "Load %d more documents", 116)
|
||||||
|
if tr != "حمّل %d مستندا إضافيّا" {
|
||||||
|
t.Errorf("Expected to get 'msgstr[4]', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
|
||||||
|
tr = l.GetND("categories", "Load %d more document", "Load %d more documents", 102)
|
||||||
|
if tr != "حمّل %d مستند إضافي" {
|
||||||
|
t.Errorf("Expected to get 'msgstr[5]', but got '%s'", tr)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestArabicMissingPluralForm(t *testing.T) {
|
||||||
|
// Create Locale
|
||||||
|
l := NewLocale("fixtures/", "ar")
|
||||||
|
|
||||||
|
// Add domain
|
||||||
|
l.AddDomain("no_plural_header")
|
||||||
|
|
||||||
|
// Get translation
|
||||||
|
tr := l.GetD("no_plural_header", "Alcohol & Tobacco")
|
||||||
|
if tr != "الكحول والتبغ" {
|
||||||
|
t.Errorf("Expected to get 'الكحول والتبغ', but got '%s'", tr)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLocaleBinaryEncoding(t *testing.T) {
|
func TestLocaleBinaryEncoding(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user