From 34bcb6c4cee9eb6bf4c2871e2c9d574c066ccc18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AB=8F=E8=A8=AA=E5=AD=90?= Date: Mon, 17 Jul 2023 01:02:37 +0900 Subject: [PATCH] =?UTF-8?q?=E8=A8=80=E8=AA=9E=E3=81=AFliblocale=E5=8C=96?= =?UTF-8?q?=20=EF=BC=8B=20=E8=A4=87=E6=95=B0=E8=A8=80=E8=AA=9E=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 4 ++++ go.mod | 2 ++ go.sum | 2 ++ lang.go | 39 --------------------------------------- locale/en.json | 17 +++++++++++++++++ locale/ja.json | 17 +++++++++++++++++ main.go | 2 +- srv.go | 40 ++++++++++++++++++++++++++-------------- static/style.css | 22 +++++++++++++++++++++- view/404.html | 2 +- view/archive.html | 4 ++-- view/check.html | 14 +++----------- view/header.html | 18 +++++++++++------- view/index.html | 4 ++-- 14 files changed, 109 insertions(+), 78 deletions(-) create mode 100644 go.sum delete mode 100644 lang.go create mode 100644 locale/en.json create mode 100644 locale/ja.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 23702d1..4007733 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.1.0 +* 言語はliblocale化 +* 複数言語対応 + # 1.0.0 * PHPからGoに交換しました * 今度からバージョンを付きます diff --git a/go.mod b/go.mod index be53e79..1175266 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module 076/hozonsite go 1.20 + +require gitler.moe/suwako/goliblocale v1.0.0 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..7642e2e --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +gitler.moe/suwako/goliblocale v1.0.0 h1:QiQKNzdgpavwmAaYhAb5pth0I6qS8IJ7q2hYAgpXacU= +gitler.moe/suwako/goliblocale v1.0.0/go.mod h1:pdv9Go5taevY8ClBOA+oLXjGap7G1RmIVKUMF8HSJmU= diff --git a/lang.go b/lang.go deleted file mode 100644 index 71169c5..0000000 --- a/lang.go +++ /dev/null @@ -1,39 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" -) - -func getlist (lang string) []byte { - var jloc = []byte(`{ - "top": "トップ", - "errfuseiurl": "URLは「http://」又は「https://」で始めます。", - "errfusei": "不正なエラー。" - }`) - var eloc = []byte(`{ - "top": "Top", - "errfuseiurl": "The URL should start with \"http://\" or \"https://\".", - "errfusei": "Unknown error." - }`) - - if lang == "en" { return eloc } - return jloc -} - -func getloc (str string, lang string) string { - var payload map[string]interface{} - err := json.Unmarshal(getlist(lang), &payload) - if err != nil { - fmt.Println("loc:", err) - return "" - } - - for k, v := range payload { - if str == k { - return v.(string) - } - } - - return "" -} diff --git a/locale/en.json b/locale/en.json new file mode 100644 index 0000000..0aa2d36 --- /dev/null +++ b/locale/en.json @@ -0,0 +1,17 @@ +{ + "hozonsite": "Hozon Site", + "desc": "It is the world's first FOSS web archiver.", + "logo": "Logo", + "top": "Top", + "langchange": "Language change", + "totop": "Return to toppage", + "tophe": "To toppage.", + "topwhatsave": "Which page will you archive?", + "hozon": "Archive", + "archwhozonsite": "Archived with Hozon Site.", + "areadyhozon": "Pages that already got archived:", + "willreallyhozon": "This page seems to have been already archived.
Do you really want to proceed?", + "yesreallyhozon": "Yes, please archive!!", + "errfuseiurl": "The URL should start with \"http://\" or \"https://\".", + "errfusei": "Unknown error." +} diff --git a/locale/ja.json b/locale/ja.json new file mode 100644 index 0000000..a27b2c1 --- /dev/null +++ b/locale/ja.json @@ -0,0 +1,17 @@ +{ + "hozonsite": "保存サイト", + "desc": "世界初FOSS系ウエブアーカイバーです。", + "logo": "ロゴ", + "top": "トップ", + "langchange": "言語変更", + "totop": "トップページに戻る", + "tophe": "トップページへ", + "topwhatsave": "どのページを保存しますか?", + "hozon": "保存", + "archwhozonsite": "保存サイトでアーカイブしました。", + "areadyhozon": "既に保存されたページ:", + "willreallyhozon": "このページが既に保存されているみたいです。
本当に手続きましょうか?", + "yesreallyhozon": "はい、保存して下さい!!", + "errfuseiurl": "URLは「http://」又は「https://」で始めます。", + "errfusei": "不正なエラー。" +} diff --git a/main.go b/main.go index 44f3106..6731f24 100644 --- a/main.go +++ b/main.go @@ -7,7 +7,7 @@ import ( "strconv" ) -var version = "1.0.0" +var version = "1.1.0" func help () { fmt.Println("使い方:"); diff --git a/srv.go b/srv.go index facd846..b4240fa 100644 --- a/srv.go +++ b/srv.go @@ -9,11 +9,13 @@ import ( "time" "os" "encoding/json" + "gitler.moe/suwako/goliblocale" ) type ( Page struct { - Tit, Err, Lan, Ver, Ves, Url, Body string + Err, Lan, Ver, Ves, Url, Body string + i18n map[string]string Ext []Exist // 既に存在する場合 } Stat struct { // APIのみ @@ -24,6 +26,10 @@ type ( } ) +func (p Page) T (key string) string { + return p.i18n[key] +} + // 日本語か英語 TODO:複数言語対応 func initloc (r *http.Request) string { cookie, err := r.Cookie("lang") @@ -52,12 +58,17 @@ func siteHandler (cnf Config) func (http.ResponseWriter, *http.Request) { data := &Page{Ver: version, Ves: strings.ReplaceAll(version, ".", "")} lang := initloc(r) - data.Lan = lang + + i18n, err := goliblocale.GetLocale("locale/" + lang) + if err != nil { + fmt.Println("liblocaleエラー:%v", err) + return + } + data.i18n = i18n ftmpl[0] = cnf.webpath + "/view/index.html" tmpl := template.Must(template.ParseFiles(ftmpl[0], ftmpl[1], ftmpl[2])) - data.Tit = getloc("top", lang) if r.Method == "POST" { err := r.ParseForm() if err != nil { @@ -66,14 +77,9 @@ func siteHandler (cnf Config) func (http.ResponseWriter, *http.Request) { return } - // クッキー - if r.PostForm.Get("langchange") != "" { - cookie, err := r.Cookie("lang") - if err != nil || cookie.Value == "ja" { - http.SetCookie(w, &http.Cookie {Name: "lang", Value: "en", MaxAge: 31536000, Path: "/"}) - } else { - http.SetCookie(w, &http.Cookie {Name: "lang", Value: "ja", MaxAge: 31536000, Path: "/"}) - } + // 言語変更 + if lang := r.PostFormValue("lang"); lang != "" { + http.SetCookie(w, &http.Cookie{Name: "lang", Value: lang, MaxAge: 31536000, Path: "/"}) http.Redirect(w, r, "/", http.StatusSeeOther) return } @@ -84,7 +90,7 @@ func siteHandler (cnf Config) func (http.ResponseWriter, *http.Request) { url := r.PostForm.Get("hozonsite") // HTTPかHTTPSじゃない場合 if !checkprefix(url) { - data.Err = getloc("errfuseiurl", lang) + data.Err = i18n["errfuseiurl"] ftmpl[0] = cnf.webpath + "/view/404.html" } else { eurl := stripurl(url) @@ -114,7 +120,7 @@ func siteHandler (cnf Config) func (http.ResponseWriter, *http.Request) { } data.Ext = existing } else { - data.Err = getloc("errfusei", lang) + data.Err = i18n["errfusei"] ftmpl[0] = cnf.webpath + "/view/404.html" } } @@ -142,8 +148,14 @@ func archiveHandler (cnf Config) func (http.ResponseWriter, *http.Request) { ftmpl := []string{cnf.webpath + "/view/index.html", cnf.webpath + "/view/header.html", cnf.webpath + "/view/footer.html"} data := &Page{Ver: version, Ves: strings.ReplaceAll(version, ".", "")} lang := initloc(r) - data.Lan = lang + + i18n, err := goliblocale.GetLocale("locale/" + lang) + if err != nil { + fmt.Println("liblocaleエラー:%v", err) + return + } + data.i18n = i18n ftmpl[0] = cnf.webpath + "/view/index.html" tmpl := template.Must(template.ParseFiles(ftmpl[0], ftmpl[1], ftmpl[2])) path := strings.TrimPrefix(r.URL.Path, "/archive/") diff --git a/static/style.css b/static/style.css index f73d05a..8e030e6 100644 --- a/static/style.css +++ b/static/style.css @@ -69,10 +69,30 @@ input[type="text"] { border-color: #ea8181; } -.submit, .footer, h1, .switchlang { +select { + background-color: #600e0e; + color: #ea8181; + font-size: 18px; + border-radius: 4px; + max-width: 700px; + border: 1px #ff3b3b groove; + padding: 8px; + width: 200px; +} + +select, input.langchange { + height: 35px; + vertical-align: middle; +} + +.submit, .footer, h1 { text-align: center; } +input.langchange { + font-size: 24px; +} + .submit, .footer, h1 { margin-top: 32px; } diff --git a/view/404.html b/view/404.html index 9e10b39..5ff36fc 100644 --- a/view/404.html +++ b/view/404.html @@ -1,4 +1,4 @@ {{template "header" .}} {{ .Err }}
- {{if eq .Lan "ja"}}トップページに戻る{{else}}Return to toppage{{end}} + {{.T "totop"}} {{template "footer" .}} diff --git a/view/archive.html b/view/archive.html index 4961989..eb8bc64 100644 --- a/view/archive.html +++ b/view/archive.html @@ -28,8 +28,8 @@
- {{if eq .Lan "ja"}}保存サイトでアーカイブしました。{{else}}Archived with Hozon Site.{{end}} hozonsite-{{ .Ver }}
- {{if eq .Lan "ja"}}トップページへ{{else}}To toppage{{end}} + {{.T "archwhozonsite"}} hozonsite-{{ .Ver }}
+ {{.T "tophe"}}
{{ .Body }} diff --git a/view/check.html b/view/check.html index 8beeea9..1d5993e 100644 --- a/view/check.html +++ b/view/check.html @@ -1,10 +1,6 @@ {{template "header" .}}

{{.Url}}

- {{if eq .Lan "en"}} - Pages that already got archived: - {{else}} - 既に保存されたページ: - {{end}}
+ {{.T "areadyhozon"}}
{{range $i, $e := .Ext}} {{$e.Date}} @@ -12,17 +8,13 @@
{{end}}

- {{if eq .Lan "en"}} - This page seems to have been already archived.
Do you really want to proceed? - {{else}} - このページが既に保存されているみたいです。
本当に手続きましょうか? - {{end}} + {{.T "willreallyhozon"}}

- +
{{template "footer" .}} diff --git a/view/header.html b/view/header.html index e76163c..8b3effe 100644 --- a/view/header.html +++ b/view/header.html @@ -3,24 +3,28 @@ - - + + - 保存サイト〜{{.Tit}} + {{.T "hozonsite"}}〜{{.T "top"}}

- {{if eq .Lan + {{.T

- {{if eq .Lan "ja"}}トップ{{else}}Top{{end}} + {{.T "top"}}

-
- +
+ +

diff --git a/view/index.html b/view/index.html index dae9a8a..465b674 100644 --- a/view/index.html +++ b/view/index.html @@ -1,9 +1,9 @@ {{template "header" .}} - {{if eq .Lan "ja"}}どのページを保存しますか?{{else}}Which page will you archive?{{end}} + {{.T "topwhatsave"}}
- +
{{template "footer" .}}