안녕하세요, 저는 englishStrings.json 파일을 가지고 있는데 이 파일을 새로 편집/추가할 때 다른 모든 언어의 string.json 파일에 새로운 변경 사항을 복사해야 합니다.
englishStrings가 변경되기 전에는 englishStrings와 otherLanguageStrings의 키와 행 수가 동일했지만 값은 달랐습니다.
나는 다음과 같은 일을하려고합니다 :
git diff -U0 —-word-diff-regex=. —-word-diff=porcelain englishStrings.json > changes.diff
patch frenchStrings.json < changes.diff
하지만 편집에는 작동하지 않습니다. EnglishString의 키-값 쌍 끝에 쉼표를 삽입하고 이를 다른 언어 문자열 파일로 전송해야 할 때 문자 차이를 적용하고 싶습니다.
예: EnglishString.json
{
"a": "one",
"b": "two",
"test": "test",
"c": "three",
"edit": "edit"
}
프랑스어 string.json
{
“a”: “un”,
“b”: “deux”,
“c”: “trois”
}
git diff -U0 —-word-diff-regex=. —-word-diff=porcelain EnglishString.json > changes.diff
@@ -4 +4,3 @@
"
+test": "test",
~
+ "
c": "three"
+,
~
+ "edit": "edit"
~
패치 후 예상 사항:
{
"a": "un",
"b": "deux",
"test": "test",
"c": "trois",
"edit": "edit"
}
그런데 패치에서 현재 패치 파일의 형식이 잘못되었다고 알려줍니다. 영어와 프랑스어 문자열의 줄 길이가 다를 수 있으므로 패치가 도움이 되지 않을 수 있지만 솔루션을 변경하라는 제안을 받아들입니다.
답변1
우리는 문제를 텍스트 패치 문제로 생각하지 않고 JSON 구조 병합 작업으로 생각하여 한 JSON 데이터 구조의 키+값을 다른 JSON 데이터 구조의 키+값으로 덮어씁니다.
프랑스어 파일에 인쇄된 (멋진) 따옴표가 실제로는 일반적인 큰 따옴표라고 가정하면 JSON 프로세서를 사용하여 jq
다음과 같이 두 데이터 구조를 병합할 수 있습니다.
$ jq -s 'add' EnglishString.json FrenchString.json
{
"a": "un",
"b": "deux",
"test": "test",
"c": "trois",
"edit": "edit"
}
이는 각 파일의 "dict"를 배열 요소로 읽습니다. 표현식 add
의 명령은 jq
두 요소를 추가하여 첫 번째 파일에서 읽은 키+값을 두 번째 파일의 일치하는 키+값으로 덮어씁니다.
예제에서는 키 a
및 키 b
가 c
두 파일 모두에 나타나므로 마지막 파일의 값이 사용됩니다.