Olá, tenho um arquivo englishStrings.json e quando faço novas edições/adições nele, preciso copiar as novas alterações para todos os outros arquivos string.json do idioma.
Antes de fazer qualquer alteração em englishStrings, englishStrings e otherLanguageStrings têm as mesmas chaves e o mesmo número de linhas, mas os valores são diferentes.
Estou tentando fazer algo assim:
git diff -U0 —-word-diff-regex=. —-word-diff=porcelain englishStrings.json > changes.diff
patch frenchStrings.json < changes.diff
Mas não funciona para edições. A razão pela qual desejo aplicar diferenças de caracteres quando insiro uma vírgula no final da chave, par de valores de uma englishString e preciso transferi-la para outro arquivo de strings de idioma.
Exemplos: EnglishString.json
{
"a": "one",
"b": "two",
"test": "test",
"c": "three",
"edit": "edit"
}
FrancêsString.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"
~
Esperando após o patch:
{
"a": "un",
"b": "deux",
"test": "test",
"c": "trois",
"edit": "edit"
}
Mas o patch está me dizendo que o arquivo do patch está malformado. O patch provavelmente não será capaz de ajudar, já que o comprimento da linha pode diferir entre as strings inglesas e francesas, mas eu estaria aberto a recomendações para mudar minha solução
Em vez de encarar o problema como um problema de correção de texto, podemos vê-lo como uma tarefa de mesclagem de estrutura JSON, substituindo as chaves+valores de uma estrutura de dados JSON pelos de outra.
Supondo que as aspas tipográficas (extravagantes) no arquivo francês sejam, na verdade, aspas duplas comuns, você pode usar o processador JSON
jq
para mesclar as duas estruturas de dados como esta:Isto lê o "dicionário" de cada arquivo em um elemento do array. A
add
instrução najq
expressão adiciona os dois elementos, substituindo as chaves+valores lidos do primeiro arquivo pelas chaves+valores correspondentes do segundo.No exemplo, as chaves
a
,b
ec
ocorrem em ambos os arquivos, portanto são usados os valores do último arquivo.