diff --git a/v2/goi18n/merge_command.go b/v2/goi18n/merge_command.go index 9765c6d3..b736dfe9 100644 --- a/v2/goi18n/merge_command.go +++ b/v2/goi18n/merge_command.go @@ -125,12 +125,16 @@ func merge(messageFiles map[string][]byte, sourceLanguageTag language.Tag, outdi } templates := map[string]*i18n.MessageTemplate{} for _, m := range mf.Messages { - templates[m.ID] = i18n.NewMessageTemplate(m) + template := i18n.NewMessageTemplate(m) + if template == nil { + continue + } + templates[m.ID] = template } if mf.Tag == sourceLanguageTag { for _, template := range templates { if sourceMessageTemplates[template.ID] != nil { - return nil, fmt.Errorf("multiple source translations for id %s", template.ID) + return nil, fmt.Errorf("multiple source translations for id %q", template.ID) } template.Hash = hash(template) sourceMessageTemplates[template.ID] = template diff --git a/v2/goi18n/merge_command_test.go b/v2/goi18n/merge_command_test.go index ff7c2219..ea6e2ca1 100644 --- a/v2/goi18n/merge_command_test.go +++ b/v2/goi18n/merge_command_test.go @@ -35,6 +35,20 @@ func TestMerge(t *testing.T) { "active.en-US.toml": []byte("1HelloMessage = \"Hello\"\n"), }, }, + { + name: "single identity, one localization text missing", + sourceLanguage: language.AmericanEnglish, + inFiles: map[string][]byte{ + "one.en-US.toml": []byte(` +1HelloMessage = "" +Body = "Finally some text!" +`), + }, + outFiles: map[string][]byte{ + "active.en-US.toml": []byte(`Body = "Finally some text!" +`), + }, + }, { name: "plural identity", sourceLanguage: language.AmericanEnglish, @@ -52,6 +66,24 @@ other = "{{.Count}} unread emails" description = "Message that tells the user how many unread emails they have" one = "{{.Count}} unread email" other = "{{.Count}} unread emails" +`), + }, + }, + { + name: "plural identity, missing localization text", + sourceLanguage: language.AmericanEnglish, + inFiles: map[string][]byte{ + "active.en-US.toml": []byte(` +Body = "Some text!" + +[MissingTranslation] +description = "I wonder what it was?!" +one = "" +other = "" +`), + }, + outFiles: map[string][]byte{ + "active.en-US.toml": expectFile(`Body = "Some text!" `), }, },