New Upstream Release - golang-github-nicksnyder-go-i18n.v2
Ready changes
Summary
Merged new upstream version: 2.2.1 (was: 2.2.0).
Resulting package
Built on 2023-04-06T23:58 (took 6m16s)
The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:
apt install -t fresh-releases golang-github-nicksnyder-go-i18n.v2-dev
Lintian Result
Diff
diff --git a/.github/README.zh-Hans.md b/.github/README.zh-Hans.md
new file mode 100644
index 0000000..bd71f10
--- /dev/null
+++ b/.github/README.zh-Hans.md
@@ -0,0 +1,145 @@
+# go-i18n ![Build status](https://github.com/nicksnyder/go-i18n/workflows/Build/badge.svg) [![Report card](https://goreportcard.com/badge/github.com/nicksnyder/go-i18n)](https://goreportcard.com/report/github.com/nicksnyder/go-i18n) [![codecov](https://codecov.io/gh/nicksnyder/go-i18n/branch/master/graph/badge.svg)](https://codecov.io/gh/nicksnyder/go-i18n) [![Sourcegraph](https://sourcegraph.com/github.com/nicksnyder/go-i18n/-/badge.svg)](https://sourcegraph.com/github.com/nicksnyder/go-i18n?badge)
+
+go-i18n 是一个帮助您将 Go 程序翻译成多种语言的 Go [包](#package-i18n) 和 [命令](#command-goi18n)。
+
+- 支持 [Unicode Common Locale Data Repository (CLDR)](https://www.unicode.org/cldr/charts/28/supplemental/language_plural_rules.html) 中所有 200 多种语言的 [复数字符](http://cldr.unicode.org/index/cldr-spec/plural-rules)。
+ - 代码和测试是从 [CLDR 数据](http://cldr.unicode.org/index/downloads) 中 [自动生成](https://github.com/nicksnyder/go-i18n/tree/main/v2/internal/plural/codegen) 的。
+- 使用 [text/template](http://golang.org/pkg/text/template/) 语法支持带有命名变量的字符串。
+- 支持任何格式的消息文件(例如:JSON、TOML、YAML)。
+
+<strong align="center">
+<samp>
+
+[**English**](../README.md) · [**简体中文**](README.zh-Hans.md)
+
+</samp>
+</strong>
+
+## Package i18n
+
+[![GoDoc](https://godoc.org/github.com/nicksnyder/go-i18n?status.svg)](https://godoc.org/github.com/nicksnyder/go-i18n/v2/i18n)
+
+i18n 包支持根据一组语言环境首选项查找消息。
+
+```go
+import "github.com/nicksnyder/go-i18n/v2/i18n"
+```
+
+创建一个 Bundle 以在应用程序的整个生命周期中使用。
+
+```go
+bundle := i18n.NewBundle(language.English)
+```
+
+在初始化期间将翻译加载到您的 bundle 中。
+
+```go
+bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal)
+bundle.LoadMessageFile("es.toml")
+```
+
+```go
+// 如果使用 go:embed
+//go:embed locale.*.toml
+var LocaleFS embed.FS
+
+bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal)
+bundle.LoadMessageFileFS(LocaleFS, "locale.es.toml")
+```
+
+创建一个 Localizer 以用于一组语言首选项。
+
+```go
+func(w http.ResponseWriter, r *http.Request) {
+ lang := r.FormValue("lang")
+ accept := r.Header.Get("Accept-Language")
+ localizer := i18n.NewLocalizer(bundle, lang, accept)
+}
+```
+
+使用 Localizer 查找消息。
+
+```go
+localizer.Localize(&i18n.LocalizeConfig{
+ DefaultMessage: &i18n.Message{
+ ID: "PersonCats",
+ One: "{{.Name}} has {{.Count}} cat.",
+ Other: "{{.Name}} has {{.Count}} cats.",
+ },
+ TemplateData: map[string]interface{}{
+ "Name": "Nick",
+ "Count": 2,
+ },
+ PluralCount: 2,
+}) // Nick has 2 cats.
+```
+
+## goi18n 命令
+
+[![GoDoc](https://godoc.org/github.com/nicksnyder/go-i18n?status.svg)](https://godoc.org/github.com/nicksnyder/go-i18n/v2/goi18n)
+
+goi18n 命令管理 i18n 包使用的消息文件。
+
+```
+go get -u github.com/nicksnyder/go-i18n/v2/goi18n
+goi18n -help
+```
+
+### 提取消息
+
+使用 `goi18n extract` 将 Go 源文件中的所有 i18n.Message 结构文字提取到消息文件中以进行翻译。
+
+```toml
+# active.en.toml
+[PersonCats]
+description = "The number of cats a person has"
+one = "{{.Name}} has {{.Count}} cat."
+other = "{{.Name}} has {{.Count}} cats."
+```
+
+### 翻译一种新语言
+
+1. 为您要添加的语言创建一个空消息文件(例如:`translate.es.toml`)。
+2. 运行 `goi18n merge active.en.toml translate.es.toml` 以填充 `translate.es.toml` 要翻译的消息。
+
+ ```toml
+ # translate.es.toml
+ [HelloPerson]
+ hash = "sha1-5b49bfdad81fedaeefb224b0ffc2acc58b09cff5"
+ other = "Hello {{.Name}}"
+ ```
+
+3. 翻译完成 `translate.es.toml` 后,将其重命名为 `active.es.toml``。
+
+ ```toml
+ # active.es.toml
+ [HelloPerson]
+ hash = "sha1-5b49bfdad81fedaeefb224b0ffc2acc58b09cff5"
+ other = "Hola {{.Name}}"
+ ```
+
+4. 加载 `active.es.toml` 到您的 bundle 中。
+
+ ```go
+ bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal)
+ bundle.LoadMessageFile("active.es.toml")
+ ```
+
+### 翻译新消息
+
+如果您在程序中添加了新消息:
+
+1. 运行 `goi18n extract` 以使用新消息更新 `active.en.toml`。
+2. 运行 `goi18n merge active.*.toml` 以生成更新的 `translate.*.toml` 文件。
+3. 翻译 `translate.*.toml` 文件中的所有消息。
+4. 运行 `goi18n merge active.*.toml translate.*.toml` 将翻译后的消息合并到 active 消息文件中。
+
+## 有关更多信息和示例:
+
+- 阅读 [文档](https://godoc.org/github.com/nicksnyder/go-i18n/v2)。
+- 查看 [代码示例](https://github.com/nicksnyder/go-i18n/blob/main/v2/i18n/example_test.go) 和 [测试](https://github.com/nicksnyder/go-i18n/blob/main/v2/i18n/localizer_test.go)。
+- 查看一个示例 [程序](https://github.com/nicksnyder/go-i18n/tree/main/v2/example)。
+
+## 许可证
+
+go-i18n 在 MIT 许可下可用。有关更多信息,请参阅 [许可证](LICENSE) 文件。
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 55d9460..e505baf 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -6,12 +6,12 @@ jobs:
build:
name: Build
runs-on: ubuntu-latest
- if: (github.event_name == 'push' && github.repository_owner == 'nicksnyder') || (github.event_name == 'pull_request' && github.repository_owner != 'nicksnyder')
+ if: (github.event_name == 'push' && github.ref == 'refs/heads/main') || github.event_name == 'pull_request'
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
- go-version: 1.15.2
+ go-version: 1.19.3
- name: Git checkout
uses: actions/checkout@v2
- name: Build
@@ -25,15 +25,15 @@ jobs:
run: go test -race -coverprofile=coverage.txt -covermode=atomic ./...
- name: Upload coverage
uses: codecov/codecov-action@v1
- build_1_9_7:
- name: Build with Go 1.9.7
+ build_1_12:
+ name: Build with Go 1.12.17
runs-on: ubuntu-latest
- if: (github.event_name == 'push' && github.repository_owner == 'nicksnyder') || (github.event_name == 'pull_request' && github.repository_owner != 'nicksnyder')
+ if: (github.event_name == 'push' && github.ref == 'refs/heads/main') || github.event_name == 'pull_request'
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
- go-version: 1.9.7
+ go-version: 1.12.17
- name: Git checkout
uses: actions/checkout@v2
with:
diff --git a/.github/workflows/goreleaser.yml b/.github/workflows/goreleaser.yml
index a4da704..3148e4d 100644
--- a/.github/workflows/goreleaser.yml
+++ b/.github/workflows/goreleaser.yml
@@ -18,7 +18,7 @@ jobs:
name: Set up Go
uses: actions/setup-go@v2
with:
- go-version: '^1.15.2'
+ go-version: '^1.19.3'
-
name: Release
uses: goreleaser/goreleaser-action@v2
diff --git a/.github/workflows/lsif-go.yml b/.github/workflows/lsif-go.yml
index 6ab74e0..7e56f79 100644
--- a/.github/workflows/lsif-go.yml
+++ b/.github/workflows/lsif-go.yml
@@ -10,5 +10,7 @@ jobs:
- uses: actions/checkout@v1
- name: Generate LSIF data
run: lsif-go
+ working-directory: v2
- name: Upload LSIF data to Sourcegraph.com
run: src lsif upload -github-token=${{ secrets.GITHUB_TOKEN }} -ignore-upload-failure
+ working-directory: v2
diff --git a/README.md b/README.md
index d292ea3..4136bae 100644
--- a/README.md
+++ b/README.md
@@ -2,12 +2,21 @@
go-i18n is a Go [package](#package-i18n) and a [command](#command-goi18n) that helps you translate Go programs into multiple languages.
-- Supports [pluralized strings](http://cldr.unicode.org/index/cldr-spec/plural-rules) for all 200+ languages in the [Unicode Common Locale Data Repository (CLDR)](http://www.unicode.org/cldr/charts/28/supplemental/language_plural_rules.html).
- - Code and tests are [automatically generated](https://github.com/nicksnyder/go-i18n/tree/master/i18n/language/codegen) from [CLDR data](http://cldr.unicode.org/index/downloads).
+- Supports [pluralized strings](http://cldr.unicode.org/index/cldr-spec/plural-rules) for all 200+ languages in the [Unicode Common Locale Data Repository (CLDR)](https://www.unicode.org/cldr/charts/28/supplemental/language_plural_rules.html).
+ - Code and tests are [automatically generated](https://github.com/nicksnyder/go-i18n/tree/main/v2/internal/plural/codegen) from [CLDR data](http://cldr.unicode.org/index/downloads).
- Supports strings with named variables using [text/template](http://golang.org/pkg/text/template/) syntax.
- Supports message files of any format (e.g. JSON, TOML, YAML).
-## Package i18n [![GoDoc](http://godoc.org/github.com/nicksnyder/go-i18n?status.svg)](http://godoc.org/github.com/nicksnyder/go-i18n/v2/i18n)
+<strong align="center">
+<samp>
+
+[**English**](README.md) · [**简体中文**](.github/README.zh-Hans.md)
+
+</samp>
+</strong>
+
+## Package i18n
+[![GoDoc](https://godoc.org/github.com/nicksnyder/go-i18n?status.svg)](https://godoc.org/github.com/nicksnyder/go-i18n/v2/i18n)
The i18n package provides support for looking up messages according to a set of locale preferences.
@@ -28,6 +37,15 @@ bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal)
bundle.LoadMessageFile("es.toml")
```
+```go
+// If use go:embed
+//go:embed locale.*.toml
+var LocaleFS embed.FS
+
+bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal)
+bundle.LoadMessageFileFS(LocaleFS, "locale.es.toml")
+```
+
Create a Localizer to use for a set of language preferences.
```go
@@ -55,7 +73,8 @@ localizer.Localize(&i18n.LocalizeConfig{
}) // Nick has 2 cats.
```
-## Command goi18n [![GoDoc](http://godoc.org/github.com/nicksnyder/go-i18n?status.svg)](http://godoc.org/github.com/nicksnyder/go-i18n/v2/goi18n)
+## Command goi18n
+[![GoDoc](https://godoc.org/github.com/nicksnyder/go-i18n?status.svg)](https://godoc.org/github.com/nicksnyder/go-i18n/v2/goi18n)
The goi18n command manages message files used by the i18n package.
@@ -115,9 +134,9 @@ If you have added new messages to your program:
## For more information and examples:
-- Read the [documentation](http://godoc.org/github.com/nicksnyder/go-i18n/v2).
-- Look at the [code examples](https://github.com/nicksnyder/go-i18n/blob/master/v2/i18n/example_test.go) and [tests](https://github.com/nicksnyder/go-i18n/blob/master/v2/i18n/localizer_test.go).
-- Look at an example [application](https://github.com/nicksnyder/go-i18n/tree/master/v2/example).
+- Read the [documentation](https://godoc.org/github.com/nicksnyder/go-i18n/v2).
+- Look at the [code examples](https://github.com/nicksnyder/go-i18n/blob/main/v2/i18n/example_test.go) and [tests](https://github.com/nicksnyder/go-i18n/blob/main/v2/i18n/localizer_test.go).
+- Look at an example [application](https://github.com/nicksnyder/go-i18n/tree/main/v2/example).
## License
diff --git a/debian/changelog b/debian/changelog
index dff649d..a715a51 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+golang-github-nicksnyder-go-i18n.v2 (2.2.1-1) UNRELEASED; urgency=low
+
+ * New upstream release.
+ * Drop patch 0001-Update-test-to-new-error-message-in-go-1.16-260.patch,
+ present upstream.
+ * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk> Thu, 06 Apr 2023 23:52:45 -0000
+
golang-github-nicksnyder-go-i18n.v2 (2.1.2-1) unstable; urgency=medium
* New upstream version 2.1.2
diff --git a/debian/patches/0001-Update-test-to-new-error-message-in-go-1.16-260.patch b/debian/patches/0001-Update-test-to-new-error-message-in-go-1.16-260.patch
deleted file mode 100644
index dd36e3a..0000000
--- a/debian/patches/0001-Update-test-to-new-error-message-in-go-1.16-260.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From dadad2bdb2a713748df0717eddd54495150cfb58 Mon Sep 17 00:00:00 2001
-From: William Wilson <william.wilson@canonical.com>
-Date: Wed, 23 Jun 2021 18:37:51 -0500
-Subject: [PATCH] Update test to new error message in go 1.16 (#260)
-
----
- v2/internal/template_test.go | 7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/v2/internal/template_test.go b/v2/internal/template_test.go
-index 2f5d991..4f569b9 100644
---- a/v2/internal/template_test.go
-+++ b/v2/internal/template_test.go
-@@ -1,6 +1,7 @@
- package internal
-
- import (
-+ "strings"
- "testing"
- "text/template"
- )
-@@ -45,7 +46,7 @@ func TestExecute(t *testing.T) {
- template: &Template{
- Src: "hello {{",
- },
-- err: "template: :1: unexpected unclosed action in command",
-+ err: "unclosed action",
- noallocs: true,
- },
- }
-@@ -53,8 +54,8 @@ func TestExecute(t *testing.T) {
- for _, test := range tests {
- t.Run(test.template.Src, func(t *testing.T) {
- result, err := test.template.Execute(test.funcs, test.data)
-- if actual := str(err); actual != test.err {
-- t.Errorf("expected err %q; got %q", test.err, actual)
-+ if actual := str(err); !strings.Contains(str(err), test.err) {
-+ t.Errorf("expected err %q to contain %q", actual, test.err)
- }
- if result != test.result {
- t.Errorf("expected result %q; got %q", test.result, result)
---
-2.34.0
-
diff --git a/debian/patches/series b/debian/patches/series
index 736f6e2..e69de29 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +0,0 @@
-0001-Update-test-to-new-error-message-in-go-1.16-260.patch
diff --git a/v2/go.mod b/v2/go.mod
index 447a685..2d607b1 100644
--- a/v2/go.mod
+++ b/v2/go.mod
@@ -1,9 +1,9 @@
module github.com/nicksnyder/go-i18n/v2
-go 1.9
+go 1.12
require (
- github.com/BurntSushi/toml v0.3.1
- golang.org/x/text v0.3.3
+ github.com/BurntSushi/toml v1.0.0
+ golang.org/x/text v0.4.0
gopkg.in/yaml.v2 v2.3.0
)
diff --git a/v2/go.sum b/v2/go.sum
index 96bf3d7..5674dff 100644
--- a/v2/go.sum
+++ b/v2/go.sum
@@ -1,8 +1,31 @@
-github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
+github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU=
+github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg=
+golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
diff --git a/v2/i18n/bundlefs.go b/v2/i18n/bundlefs.go
new file mode 100644
index 0000000..50c794b
--- /dev/null
+++ b/v2/i18n/bundlefs.go
@@ -0,0 +1,18 @@
+// +build go1.16
+
+package i18n
+
+import (
+ "io/fs"
+)
+
+// LoadMessageFileFS is like LoadMessageFile but instead of reading from the
+// hosts operating system's file system it reads from the fs file system.
+func (b *Bundle) LoadMessageFileFS(fsys fs.FS, path string) (*MessageFile, error) {
+ buf, err := fs.ReadFile(fsys, path)
+ if err != nil {
+ return nil, err
+ }
+
+ return b.ParseMessageFileBytes(buf, path)
+}
diff --git a/v2/i18n/localizer.go b/v2/i18n/localizer.go
index 17261e2..256cd49 100644
--- a/v2/i18n/localizer.go
+++ b/v2/i18n/localizer.go
@@ -9,6 +9,15 @@ import (
)
// Localizer provides Localize and MustLocalize methods that return localized messages.
+// Localize and MustLocalize methods use a language.Tag matching algorithm based
+// on the best possible value. This algorithm may cause an unexpected language.Tag returned
+// value depending on the order of the tags stored in memory. For example, if the bundle
+// used to create a Localizer instance ingested locales following this order
+// ["en-US", "en-GB", "en-IE", "en"] and the locale "en" is asked, the underlying matching
+// algorithm will return "en-US" thinking it is the best match possible. More information
+// about the algorithm in this Github issue: https://github.com/golang/go/issues/49176.
+// There is additionnal informations inside the Go code base:
+// https://github.com/golang/text/blob/master/language/match.go#L142
type Localizer struct {
// bundle contains the messages that can be returned by the Localizer.
bundle *Bundle
diff --git a/v2/internal/plural/codegen/README.md b/v2/internal/plural/codegen/README.md
index 41a0094..f1f5ff8 100644
--- a/v2/internal/plural/codegen/README.md
+++ b/v2/internal/plural/codegen/README.md
@@ -1,6 +1,6 @@
# How to upgrade CLDR data
1. Go to http://cldr.unicode.org/index/downloads to find the latest version.
-1. Download the latest version of cldr-common (e.g. http://unicode.org/Public/cldr/37/cldr-common-37.0.zip)
+1. Download the latest version of cldr-common (e.g. https://unicode.org/Public/cldr/39/cldr-common-39.0.zip)
1. Unzip and copy `common/supplemental/plurals.xml` to this directory.
1. Run `generate.sh`.
diff --git a/v2/internal/template_test.go b/v2/internal/template_test.go
index 2f5d991..4f569b9 100644
--- a/v2/internal/template_test.go
+++ b/v2/internal/template_test.go
@@ -1,6 +1,7 @@
package internal
import (
+ "strings"
"testing"
"text/template"
)
@@ -45,7 +46,7 @@ func TestExecute(t *testing.T) {
template: &Template{
Src: "hello {{",
},
- err: "template: :1: unexpected unclosed action in command",
+ err: "unclosed action",
noallocs: true,
},
}
@@ -53,8 +54,8 @@ func TestExecute(t *testing.T) {
for _, test := range tests {
t.Run(test.template.Src, func(t *testing.T) {
result, err := test.template.Execute(test.funcs, test.data)
- if actual := str(err); actual != test.err {
- t.Errorf("expected err %q; got %q", test.err, actual)
+ if actual := str(err); !strings.Contains(str(err), test.err) {
+ t.Errorf("expected err %q to contain %q", actual, test.err)
}
if result != test.result {
t.Errorf("expected result %q; got %q", test.result, result)
Debdiff
[The following lists of changes regard files as different if they have different names, permissions or owners.]
Files in second set of .debs but not in first
-rw-r--r-- root/root /usr/share/gocode/src/github.com/nicksnyder/go-i18n/v2/i18n/bundlefs.go
No differences were encountered in the control files