diff --git a/.github/README.zh-Hans.md b/.github/README.zh-Hans.md
new file mode 100644
index 00000000..bd71f100
--- /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)。
+
+
+
+
+[**English**](../README.md) · [**简体中文**](README.zh-Hans.md)
+
+
+
+
+## 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/README.md b/README.md
index a13f268b..4136baed 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,14 @@ go-i18n is a Go [package](#package-i18n) and a [command](#command-goi18n) that h
- 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).
+
+
+
+[**English**](README.md) · [**简体中文**](.github/README.zh-Hans.md)
+
+
+
+
## Package i18n
[![GoDoc](https://godoc.org/github.com/nicksnyder/go-i18n?status.svg)](https://godoc.org/github.com/nicksnyder/go-i18n/v2/i18n)
@@ -29,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