From a1ee29a5d946c66e47fd6e3ea9202aaa5d86c7f0 Mon Sep 17 00:00:00 2001 From: Nick Snyder Date: Mon, 28 Sep 2020 08:38:58 -0700 Subject: [PATCH] wip --- v2/go.mod | 2 +- v2/go.sum | 2 ++ v2/i18n/fallback.txt | 42 ++++++++++++++++++++++++++++++++++++++++++ v2/i18n/fallback2.txt | 42 ++++++++++++++++++++++++++++++++++++++++++ v2/i18n/localizer.go | 11 ++++++----- v2/i18n/master.txt | 43 +++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 136 insertions(+), 6 deletions(-) create mode 100644 v2/i18n/fallback.txt create mode 100644 v2/i18n/fallback2.txt create mode 100644 v2/i18n/master.txt diff --git a/v2/go.mod b/v2/go.mod index bd92c7c4..3a0b2434 100644 --- a/v2/go.mod +++ b/v2/go.mod @@ -3,7 +3,7 @@ module github.com/nicksnyder/go-i18n/v2 go 1.9 require ( - github.com/BurntSushi/toml v0.3.0 + github.com/BurntSushi/toml v0.3.1 golang.org/x/crypto v0.0.0-20190506204251-e1dfcc566284 // indirect golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c // indirect golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b // indirect diff --git a/v2/go.sum b/v2/go.sum index 96207c2f..74deecfd 100644 --- a/v2/go.sum +++ b/v2/go.sum @@ -1,5 +1,7 @@ github.com/BurntSushi/toml v0.3.0 h1:e1/Ivsx3Z0FVTV0NSOv/aVgbUWyQuzj7DDnFblkRvsY= github.com/BurntSushi/toml v0.3.0/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190506204251-e1dfcc566284/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= diff --git a/v2/i18n/fallback.txt b/v2/i18n/fallback.txt new file mode 100644 index 00000000..03e8871c --- /dev/null +++ b/v2/i18n/fallback.txt @@ -0,0 +1,42 @@ +goos: darwin +goarch: amd64 +pkg: github.com/nicksnyder/go-i18n/v2/i18n +BenchmarkLocalizer_Localize/message_id_mismatch-8 30000000 38.1 ns/op 32 B/op 1 allocs/op +BenchmarkLocalizer_Localize/message_id_not_mismatched-8 5000000 279 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/missing_translation_from_default_language-8 5000000 335 ns/op 96 B/op 2 allocs/op +BenchmarkLocalizer_Localize/empty_translation_without_fallback-8 5000000 381 ns/op 48 B/op 1 allocs/op +BenchmarkLocalizer_Localize/missing_translation_from_default_language_with_other_translation-8 5000000 334 ns/op 96 B/op 2 allocs/op +BenchmarkLocalizer_Localize/missing_translation_from_not_default_language-8 5000000 263 ns/op 96 B/op 2 allocs/op +BenchmarkLocalizer_Localize/missing_translation_not_default_language_with_other_translation-8 5000000 266 ns/op 96 B/op 2 allocs/op +BenchmarkLocalizer_Localize/accept_default_language,_message_in_bundle-8 5000000 274 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/accept_default_language,_message_in_bundle,_default_message-8 5000000 282 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/accept_not_default_language,_message_in_bundle-8 5000000 283 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/accept_not_default_language,_other_message_in_bundle,_default_message-8 10000000 214 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/accept_not_default_language,_message_in_bundle,_default_message-8 5000000 291 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/accept_default_language,_default_message-8 3000000 524 ns/op 368 B/op 4 allocs/op +BenchmarkLocalizer_Localize/accept_not_default_language,_default_message-8 3000000 453 ns/op 368 B/op 4 allocs/op +BenchmarkLocalizer_Localize/fallback_to_non-default_less_specific_language-8 2000000 767 ns/op 56 B/op 4 allocs/op +BenchmarkLocalizer_Localize/fallback_to_non-default_more_specific_language-8 5000000 284 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/plural_count_one,_bundle_message-8 1000000 1187 ns/op 592 B/op 9 allocs/op +BenchmarkLocalizer_Localize/plural_count_other,_bundle_message-8 1000000 1178 ns/op 592 B/op 9 allocs/op +BenchmarkLocalizer_Localize/plural_count_float,_bundle_message-8 1000000 1359 ns/op 624 B/op 10 allocs/op +BenchmarkLocalizer_Localize/plural_count_one,_default_message-8 300000 6123 ns/op 2862 B/op 42 allocs/op +BenchmarkLocalizer_Localize/plural_count_missing_one,_default_message-8 300000 5894 ns/op 2797 B/op 42 allocs/op +BenchmarkLocalizer_Localize/plural_count_missing_other,_default_message-8 2000000 800 ns/op 784 B/op 8 allocs/op +BenchmarkLocalizer_Localize/plural_count_other,_default_message-8 300000 5874 ns/op 2861 B/op 42 allocs/op +BenchmarkLocalizer_Localize/plural_count_float,_default_message-8 200000 6793 ns/op 2894 B/op 43 allocs/op +BenchmarkLocalizer_Localize/template_data,_bundle_message-8 2000000 918 ns/op 208 B/op 6 allocs/op +BenchmarkLocalizer_Localize/template_data,_default_message-8 200000 6006 ns/op 2257 B/op 35 allocs/op +BenchmarkLocalizer_Localize/template_data,_custom_delims,_bundle_message-8 2000000 881 ns/op 208 B/op 6 allocs/op +BenchmarkLocalizer_Localize/template_data,_custom_delims,_default_message-8 200000 5982 ns/op 2257 B/op 35 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_one,_bundle_message-8 1000000 1357 ns/op 288 B/op 9 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_other,_bundle_message-8 1000000 1365 ns/op 288 B/op 9 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_float,_bundle_message-8 1000000 1547 ns/op 336 B/op 10 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_one,_default_message-8 200000 9328 ns/op 2833 B/op 49 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_other,_default_message-8 200000 9385 ns/op 2833 B/op 49 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_float,_default_message-8 200000 9897 ns/op 2881 B/op 50 allocs/op +BenchmarkLocalizer_Localize/test_slow_path-8 3000000 412 ns/op 96 B/op 2 allocs/op +BenchmarkLocalizer_Localize/test_slow_path_default_message-8 2000000 645 ns/op 416 B/op 5 allocs/op +BenchmarkLocalizer_Localize/test_slow_path_no_message-8 3000000 408 ns/op 96 B/op 2 allocs/op +PASS +ok github.com/nicksnyder/go-i18n/v2/i18n 66.175s diff --git a/v2/i18n/fallback2.txt b/v2/i18n/fallback2.txt new file mode 100644 index 00000000..f2cc1920 --- /dev/null +++ b/v2/i18n/fallback2.txt @@ -0,0 +1,42 @@ +goos: darwin +goarch: amd64 +pkg: github.com/nicksnyder/go-i18n/v2/i18n +BenchmarkLocalizer_Localize/message_id_mismatch-8 50000000 37.0 ns/op 32 B/op 1 allocs/op +BenchmarkLocalizer_Localize/message_id_not_mismatched-8 5000000 280 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/missing_translation_from_default_language-8 5000000 292 ns/op 48 B/op 1 allocs/op +BenchmarkLocalizer_Localize/empty_translation_without_fallback-8 5000000 381 ns/op 48 B/op 1 allocs/op +BenchmarkLocalizer_Localize/missing_translation_from_default_language_with_other_translation-8 5000000 296 ns/op 48 B/op 1 allocs/op +BenchmarkLocalizer_Localize/missing_translation_from_not_default_language-8 10000000 222 ns/op 48 B/op 1 allocs/op +BenchmarkLocalizer_Localize/missing_translation_not_default_language_with_other_translation-8 10000000 226 ns/op 48 B/op 1 allocs/op +BenchmarkLocalizer_Localize/accept_default_language,_message_in_bundle-8 5000000 274 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/accept_default_language,_message_in_bundle,_default_message-8 5000000 279 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/accept_not_default_language,_message_in_bundle-8 5000000 289 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/accept_not_default_language,_other_message_in_bundle,_default_message-8 10000000 223 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/accept_not_default_language,_message_in_bundle,_default_message-8 5000000 304 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/accept_default_language,_default_message-8 3000000 538 ns/op 368 B/op 4 allocs/op +BenchmarkLocalizer_Localize/accept_not_default_language,_default_message-8 3000000 444 ns/op 368 B/op 4 allocs/op +BenchmarkLocalizer_Localize/fallback_to_non-default_less_specific_language-8 2000000 764 ns/op 56 B/op 4 allocs/op +BenchmarkLocalizer_Localize/fallback_to_non-default_more_specific_language-8 5000000 294 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/plural_count_one,_bundle_message-8 1000000 1175 ns/op 592 B/op 9 allocs/op +BenchmarkLocalizer_Localize/plural_count_other,_bundle_message-8 1000000 1180 ns/op 592 B/op 9 allocs/op +BenchmarkLocalizer_Localize/plural_count_float,_bundle_message-8 1000000 1359 ns/op 624 B/op 10 allocs/op +BenchmarkLocalizer_Localize/plural_count_one,_default_message-8 300000 5972 ns/op 2862 B/op 42 allocs/op +BenchmarkLocalizer_Localize/plural_count_missing_one,_default_message-8 200000 5917 ns/op 2797 B/op 42 allocs/op +BenchmarkLocalizer_Localize/plural_count_missing_other,_default_message-8 2000000 787 ns/op 784 B/op 8 allocs/op +BenchmarkLocalizer_Localize/plural_count_other,_default_message-8 300000 5921 ns/op 2862 B/op 42 allocs/op +BenchmarkLocalizer_Localize/plural_count_float,_default_message-8 200000 6109 ns/op 2894 B/op 43 allocs/op +BenchmarkLocalizer_Localize/template_data,_bundle_message-8 2000000 877 ns/op 208 B/op 6 allocs/op +BenchmarkLocalizer_Localize/template_data,_default_message-8 200000 6041 ns/op 2257 B/op 35 allocs/op +BenchmarkLocalizer_Localize/template_data,_custom_delims,_bundle_message-8 2000000 873 ns/op 208 B/op 6 allocs/op +BenchmarkLocalizer_Localize/template_data,_custom_delims,_default_message-8 200000 6007 ns/op 2257 B/op 35 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_one,_bundle_message-8 1000000 1386 ns/op 288 B/op 9 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_other,_bundle_message-8 1000000 1372 ns/op 288 B/op 9 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_float,_bundle_message-8 1000000 1537 ns/op 336 B/op 10 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_one,_default_message-8 200000 9499 ns/op 2833 B/op 49 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_other,_default_message-8 200000 9542 ns/op 2833 B/op 49 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_float,_default_message-8 200000 10114 ns/op 2881 B/op 50 allocs/op +BenchmarkLocalizer_Localize/test_slow_path-8 5000000 369 ns/op 48 B/op 1 allocs/op +BenchmarkLocalizer_Localize/test_slow_path_default_message-8 2000000 643 ns/op 416 B/op 5 allocs/op +BenchmarkLocalizer_Localize/test_slow_path_no_message-8 5000000 369 ns/op 48 B/op 1 allocs/op +PASS +ok github.com/nicksnyder/go-i18n/v2/i18n 68.989s diff --git a/v2/i18n/localizer.go b/v2/i18n/localizer.go index 5696b8db..6af17e04 100644 --- a/v2/i18n/localizer.go +++ b/v2/i18n/localizer.go @@ -132,6 +132,11 @@ func (l *Localizer) LocalizeWithTag(lc *LocalizeConfig) (string, language.Tag, e messageID = lc.DefaultMessage.ID } + tag, template, err1 := l.getMessageTemplate(messageID, lc.DefaultMessage) + if template == nil { + return "", language.Und, err1 + } + var operands *plural.Operands templateData := lc.TemplateData if lc.PluralCount != nil { @@ -147,11 +152,6 @@ func (l *Localizer) LocalizeWithTag(lc *LocalizeConfig) (string, language.Tag, e } } - tag, template, err1 := l.getMessageTemplate(messageID, lc.DefaultMessage) - if template == nil { - return "", language.Und, err1 - } - pluralForm := l.pluralForm(tag, operands) msg, err := template.Execute(pluralForm, templateData, lc.Funcs) if err != nil { @@ -162,6 +162,7 @@ func (l *Localizer) LocalizeWithTag(lc *LocalizeConfig) (string, language.Tag, e return msg2, tag, errors.Append(err1, err) } } + // TODO this? return "", language.Und, errors.Append(err1, err) } return msg, tag, err1 diff --git a/v2/i18n/master.txt b/v2/i18n/master.txt new file mode 100644 index 00000000..86ba315e --- /dev/null +++ b/v2/i18n/master.txt @@ -0,0 +1,43 @@ +goos: darwin +goarch: amd64 +pkg: github.com/nicksnyder/go-i18n/v2/i18n +BenchmarkLocalizer_Localize/message_id_mismatch-8 50000000 36.5 ns/op 32 B/op 1 allocs/op +BenchmarkLocalizer_Localize/message_id_not_mismatched-8 5000000 290 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/missing_translation_from_default_language-8 5000000 267 ns/op 16 B/op 1 allocs/op +BenchmarkLocalizer_Localize/empty_translation_without_fallback-8 50000 34128 ns/op 8829 B/op 188 allocs/op +BenchmarkLocalizer_Localize/empty_translation_with_fallback-8 50000 34616 ns/op 8956 B/op 190 allocs/op +BenchmarkLocalizer_Localize/missing_translation_from_default_language_with_other_translation-8 50000 35813 ns/op 9421 B/op 208 allocs/op +BenchmarkLocalizer_Localize/missing_translation_from_not_default_language-8 10000000 207 ns/op 16 B/op 1 allocs/op +BenchmarkLocalizer_Localize/missing_translation_not_default_language_with_other_translation-8 50000 37135 ns/op 10038 B/op 229 allocs/op +BenchmarkLocalizer_Localize/accept_default_language,_message_in_bundle-8 5000000 289 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/accept_default_language,_message_in_bundle,_default_message-8 5000000 296 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/accept_not_default_language,_message_in_bundle-8 5000000 295 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/accept_not_default_language,_other_message_in_bundle,_default_message-8 10000000 231 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/accept_not_default_language,_message_in_bundle,_default_message-8 5000000 308 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/accept_default_language,_default_message-8 3000000 529 ns/op 368 B/op 4 allocs/op +BenchmarkLocalizer_Localize/accept_not_default_language,_default_message-8 3000000 446 ns/op 368 B/op 4 allocs/op +BenchmarkLocalizer_Localize/fallback_to_non-default_less_specific_language-8 2000000 779 ns/op 56 B/op 4 allocs/op +BenchmarkLocalizer_Localize/fallback_to_non-default_more_specific_language-8 5000000 302 ns/op 0 B/op 0 allocs/op +BenchmarkLocalizer_Localize/plural_count_one,_bundle_message-8 1000000 1191 ns/op 592 B/op 9 allocs/op +BenchmarkLocalizer_Localize/plural_count_other,_bundle_message-8 1000000 1182 ns/op 592 B/op 9 allocs/op +BenchmarkLocalizer_Localize/plural_count_float,_bundle_message-8 1000000 1349 ns/op 624 B/op 10 allocs/op +BenchmarkLocalizer_Localize/plural_count_one,_default_message-8 300000 5844 ns/op 2862 B/op 42 allocs/op +BenchmarkLocalizer_Localize/plural_count_missing_one,_default_message-8 300000 5857 ns/op 2797 B/op 42 allocs/op +BenchmarkLocalizer_Localize/plural_count_missing_other,_default_message-8 2000000 795 ns/op 784 B/op 8 allocs/op +BenchmarkLocalizer_Localize/plural_count_other,_default_message-8 300000 5897 ns/op 2862 B/op 42 allocs/op +BenchmarkLocalizer_Localize/plural_count_float,_default_message-8 200000 6175 ns/op 2894 B/op 43 allocs/op +BenchmarkLocalizer_Localize/template_data,_bundle_message-8 2000000 903 ns/op 208 B/op 6 allocs/op +BenchmarkLocalizer_Localize/template_data,_default_message-8 200000 6074 ns/op 2257 B/op 35 allocs/op +BenchmarkLocalizer_Localize/template_data,_custom_delims,_bundle_message-8 2000000 899 ns/op 208 B/op 6 allocs/op +BenchmarkLocalizer_Localize/template_data,_custom_delims,_default_message-8 200000 6018 ns/op 2257 B/op 35 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_one,_bundle_message-8 1000000 1399 ns/op 288 B/op 9 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_other,_bundle_message-8 1000000 1367 ns/op 288 B/op 9 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_float,_bundle_message-8 1000000 1551 ns/op 336 B/op 10 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_one,_default_message-8 200000 9456 ns/op 2833 B/op 49 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_other,_default_message-8 200000 9436 ns/op 2833 B/op 49 allocs/op +BenchmarkLocalizer_Localize/template_data,_plural_count_float,_default_message-8 200000 9986 ns/op 2881 B/op 50 allocs/op +BenchmarkLocalizer_Localize/test_slow_path-8 50000 37866 ns/op 9493 B/op 211 allocs/op +BenchmarkLocalizer_Localize/test_slow_path_default_message-8 100000 12631 ns/op 1280 B/op 32 allocs/op +BenchmarkLocalizer_Localize/test_slow_path_no_message-8 100000 12297 ns/op 928 B/op 29 allocs/op +PASS +ok github.com/nicksnyder/go-i18n/v2/i18n 70.236s