외부 json 파일을 goo 언어로 처리합니다!편하게 해.(다언어화의 기초가 목적이다)

13519 단어 golangJSONtech

이마


네.이 보도는 매우 중요하다.모든 프로그래머는 자신의 습관을 가지고 있다.
이때는 다양한 환경에서 지금까지 많이 움직였는데 왜 움직이지 않았을까?그런 일이 있었어요.나는 이 구글에서 낭비했다.근데 빠져서 좌우로 흔들리는 거지?이렇게 왼쪽으로 돌기 덕분에 손으로 만든 물건을 더욱 간편하게 만들 수 있는 편리한 서비스를 만났습니다.매일 도전하는 사람들에게 보내는 한마디다.이것은 너의 이야기다!

다언어화


다언어화에 포장 같은 것도 있지만 대규모도 아니고 넣어보려고 했는데 이해가 안 돼서 1부터 해봤어요.구성은 다음과 같다.
lang.json
{
    "tool": {
        "ja": "ツール",
        "en": "Tool",
        "cn": "ツール"
    },
    "game": {
        "ja": "ゲーム",
        "en": "Game",
        "cn": "ゲーム"
    },
    "media": {
        "ja": "メディア",
        "en": "Media",
        "cn": "メディア"
    },
    "lab": {
        "ja": "ラボ",
        "en": "Lab",
        "cn": "ラボ"
    },
    "lang": {
        "ja": "Lang",
        "en": "Lang",
        "cn": "Lang"
    }
}

제이슨 괜찮아요?


제 습관이라고요? json은 손 고릴라로 쓰고 문법 검사도 js예요. 브라우저로 검사한 후에 OK하는 경우가 많아요.그 외에 PHP인가?이번에는 제이슨 검사 서비스입니다.이것은 나에게 매우 중요하다.
https://lab.syncer.jp/Tool/JSON-Viewer/
응, 다른 json 문법 검사 웹 서비스도 있을 것 같아.그렇다면 나에게 중요한 말은 공백을 꼬리표로 바꾸는 것이다.아마도 이번 goo포장은 json의 공간이 라벨에 공백이 있다는 것을 의식하지 못했을 것이다.어떤 포장이 "import encoding/json"의 "json.Unmarsha"입니까?이 웹 서비스는 반각 공간 버전으로 다시 출력할 수 있다.이걸로 알아봤어.나는 json 문법에 문제가 없다고 생각한다. 왜 몇 시간 동안 움직이지 않는 다른 곳에 문제가 있는지 많이 조사했다.

goo 형식 선언은 힘들지만 편리한 서비스가 있습니다


지금까지 나는 고의 형 선언이 끼워 넣으면 번거롭다고 생각해 왔다.요즘 다른 언어도 그래요.수동으로 달랑거리다.근데 있네.편한 건여기 있습니다.
https://mholt.github.io/json-to-go/
이렇게 써도 되죠(웃음)

결국 이거예요.
type AutoGenerated struct {
	Tool struct {
		Ja string `json:"ja"`
		En string `json:"en"`
		Cn string `json:"cn"`
	} `json:"tool"`
	Game struct {
		Ja string `json:"ja"`
		En string `json:"en"`
		Cn string `json:"cn"`
	} `json:"game"`
	Media struct {
		Ja string `json:"ja"`
		En string `json:"en"`
		Cn string `json:"cn"`
	} `json:"media"`
	Lab struct {
		Ja string `json:"ja"`
		En string `json:"en"`
		Cn string `json:"cn"`
	} `json:"lab"`
	Lang struct {
		Ja string `json:"ja"`
		En string `json:"en"`
		Cn string `json:"cn"`
	} `json:"lang"`
}
아, 너무 편해요.

참고로 다언어화는 하나의 문서이다


검색은 많이 했지만 간단한 사이트에서 언어별 파일을 분리할 필요는 없다고 생각해 포획 같은 구성으로 만들었다.

이렇게 쓰면 안 돼요.


이번에는 ja,en,cn과 플러그가 통일되었기 때문에 참고로 다음과 같이 압축되었습니다.
type I18n struct {
	Tool I18nnest `json:"tool"`
	Game I18nnest `json:"game"`
	Media I18nnest `json:"media"`
	Lab I18nnest `json:"lab"`
	Lang I18nnest `json:"lang"`
}

type I18nnest struct {
	Ja string `json:"ja"`
	En string `json:"en"`
	Cn string `json:"cn"`
}
단점은 단어가 늘어나면 반드시 형식을 추가해야 한다는 것이다.

어떤 의미에서 본 문제 외부 json의 문법을 읽다


import (
	"encoding/json"
	"io/ioutil"
	"log"
	"os"
	"fmt"
)

type I18n struct {
	Tool I18nnest `json:"tool"`
	Game I18nnest `json:"game"`
	Media I18nnest `json:"media"`
	Lab I18nnest `json:"lab"`
	Lang I18nnest `json:"lang"`
}

type I18nnest struct {
	Ja string `json:"ja"`
	En string `json:"en"`
	Cn string `json:"cn"`
}

func main() {
...
...
	//多言語json
	json_lang_file, err := ioutil.ReadFile("/PATH!!!!/lang.json")
	if err != nil {
		log.Println("ReadError: ", err)
		os.Exit(1)
	}
	//fmt.Println(string(json_lang_file))
...
이렇게 하면 먼저 읽을 수 있습니다.string(json lang file)과 문자열입니다.
그래서 만든 형 제이슨으로.Unmashal 주세요.
...
		var langlist I18n
		json.Unmarshal(json_lang_file, &langlist)
		fmt.Println(langlist.Tool.Ja)
		fmt.Println(langlist.Tool)
		fmt.Println(langlist.Lab.Ja)
...
ツール
{ツール Tool ツール}
ラボ
처럼 출력합니다.

덤으로 주다


언어를 하나의 json으로 만들었는데 GO 언어를 간단하게 하면 분리하는 것이 예쁠 수 있습니다.예를 들어 goo에서template가 실행할 수 있는 함수를 설정할 수 있습니다.그야말로 php의 스마트 같다.참조 붙여넣기
https://blog.narumium.net/2019/04/23/[go] gin의) 템플릿 기능/
여기에 nl2br의 예가 있다.
https://zenn.dev/ajapa/articles/6471ac0c612fda
그러나 이번 상황은 멀티플렉스를 사용하고 go template의 FuncMap을 사용하기 위해 gin은router이다.SetFuncMap이 필요한 건 알지만 멀티플렉스라면
https://github.com/gin-contrib/multitemplate/issues/2
func createRender() multitemplate.Renderer {
	r := multitemplate.NewRenderer()
...
	//r.AddFromFiles("templateA", ...
	r.AddFromFilesFuncs("templateA", template.FuncMap{ "nl2br": nl2br, "loudLang": loudLang }, "templates/***", ...)
...
네, 하나씩 FuncMap을 넣을게요.하지만...괜찮은데.
이 일을 하는 이유는 맵 같은 키를 지정할 때 변수로 대입할 수 없기 때문이다.예를 들어 range 순환 같은 것으로 대응할 수 있지만 템플릿 쪽은 시끄러워진다.그러므로
func loudLang(word I18nnest, lang string) string {
	if lang == "Ja" {
		return word.Ja
	} else if lang == "En" {
		return word.En
	} else if lang == "Cn" {
		return word.Cn
	} else {
		return word.Ja
	}
}
이렇게 위에서 읽어도 알 수 있습니다. 끼워 넣은 유형(I18nnest)을 매개 변수에 넣고if문으로 언어의 매개 변수를 판정하십시오.템플릿 쪽에서 이걸 부르면...
template/aaa.html
{{ loudLang .langlist.Tool .lang }}
이렇게그거 알아요?loudLang은 함수입니다.langlist는 외부에서 읽는 json 대상을 템플릿에 전달하는 변수입니다.langlist.Tool에서는 네스트된 부분만 첫 번째 매개변수에 포함합니다.두 번째 매개 변수는 언어의 지정이다.당분간 이 행동으로

총결산


제이슨의 공간을 꼬리표로 삼는 버릇 때문에 악전고투했다.
하지만, 나는 json 검사 도구를 통과하는 것을 배웠다.
그리고 출력형의 편리한 도구를 만났다.
이 밖에 피할 템플릿 측면의 함수를 설정했다.
그렇다니까.

좋은 웹페이지 즐겨찾기