외부 json 파일을 goo 언어로 처리합니다!편하게 해.(다언어화의 기초가 목적이다)
이마
네.이 보도는 매우 중요하다.모든 프로그래머는 자신의 습관을 가지고 있다.
이때는 다양한 환경에서 지금까지 많이 움직였는데 왜 움직이지 않았을까?그런 일이 있었어요.나는 이 구글에서 낭비했다.근데 빠져서 좌우로 흔들리는 거지?이렇게 왼쪽으로 돌기 덕분에 손으로 만든 물건을 더욱 간편하게 만들 수 있는 편리한 서비스를 만났습니다.매일 도전하는 사람들에게 보내는 한마디다.이것은 너의 이야기다!
다언어화
다언어화에 포장 같은 것도 있지만 대규모도 아니고 넣어보려고 했는데 이해가 안 돼서 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인가?이번에는 제이슨 검사 서비스입니다.이것은 나에게 매우 중요하다.
응, 다른 json 문법 검사 웹 서비스도 있을 것 같아.그렇다면 나에게 중요한 말은 공백을 꼬리표로 바꾸는 것이다.아마도 이번 goo포장은 json의 공간이 라벨에 공백이 있다는 것을 의식하지 못했을 것이다.어떤 포장이 "import encoding/json"의 "json.Unmarsha"입니까?이 웹 서비스는 반각 공간 버전으로 다시 출력할 수 있다.이걸로 알아봤어.나는 json 문법에 문제가 없다고 생각한다. 왜 몇 시간 동안 움직이지 않는 다른 곳에 문제가 있는지 많이 조사했다.
goo 형식 선언은 힘들지만 편리한 서비스가 있습니다
지금까지 나는 고의 형 선언이 끼워 넣으면 번거롭다고 생각해 왔다.요즘 다른 언어도 그래요.수동으로 달랑거리다.근데 있네.편한 건여기 있습니다.
이렇게 써도 되죠(웃음)
결국 이거예요.
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의 스마트 같다.참조 붙여넣기
여기에 nl2br의 예가 있다.
그러나 이번 상황은 멀티플렉스를 사용하고 go template의 FuncMap을 사용하기 위해 gin은router이다.SetFuncMap이 필요한 건 알지만 멀티플렉스라면
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 검사 도구를 통과하는 것을 배웠다.
그리고 출력형의 편리한 도구를 만났다.
이 밖에 피할 템플릿 측면의 함수를 설정했다.
그렇다니까.
Reference
이 문제에 관하여(외부 json 파일을 goo 언어로 처리합니다!편하게 해.(다언어화의 기초가 목적이다)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/dokokade/articles/4600c6145e2326텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)