您好,我有一个 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"
}
法语字符串.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"
}
这会将每个文件的“字典”读取到数组元素中。表达式add
中的指令将jq
两个元素相加,用第二个文件中匹配的键+值覆盖从第一个文件读取的键+值。
在示例中,键a
、b
和c
出现在两个文件中,因此使用最后一个文件中的值。