Synchronizace obsahu dvou souborů

- -

Synchronizace obsahu dvou souborů
« kdy: 26. 12. 2024, 08:49:04 »
Dobrý den, žádám o pomoc/příkaz/skript, který by zajistil následující:

Aktualizace českého souboru:
https://raw.githubusercontent.com/haveno-dex/haveno/refs/heads/master/core/src/main/resources/i18n/displayStrings_cs.properties

Na základě obsahu anglického souboru:
https://raw.githubusercontent.com/haveno-dex/haveno/refs/heads/master/core/src/main/resources/i18n/displayStrings.properties

V anglickém souboru jsou některé proměnné a jejich hodnoty a chybí v české souboru. V českém souboru jsou některé proměnné a hodnoty umístěné v jiném pořadí (na jiných linkách) než v anglickém. Je to mnoho linek a já jako laik nevím jak to co nejrychleji opravit.

Zkoušel jsem na Linuxu několik programů pro diff, ale hledání hodnot, přemisťování, kopírování je stále příliš časově náročné s ohledem na několik tisíc linek v souboru.

Nejblíže jsem se asi dostal s:
git diff -h
git diff -h --no-prefix --no-index cs.properties en.properties # založeno na https://stackoverflow.com/questions/9122948/run-git-merge-algorithm-on-two-individual-files
A pak s AI generovaným příkazem:
sed -e '/^-/d' -e's/^+//' -e's/^[[:space:]]*//; s/^[[:space:]]*//; s/[[:space:]]*=[[:space:]]*/=/g' cs.properties
ale tam to nahrazuje již přeložené linky anglickými nepřeloženými, takže to nemůžu použít. Neznám jinou verzi souboru, která by umožnila sloučení na základě 3 vstupních souborů, možná ale taková existuje, jen ji neumím najít a rozpoznat.

Díky předem, pokud tomuto budete věnovat nějakou tu minutu. Jde o překlady pro aplikaci pro decentralizovanou a soukromou směnu měn založenou na anonymní kryptoměně Monero:
https://haveno.exchange/ - testnet
https://retoswap.com/ - funkční mainnet
« Poslední změna: 26. 12. 2024, 08:52:40 od - - »


Re:Synchronizace obsahu dvou souborů
« Odpověď #1 kdy: 26. 12. 2024, 11:23:47 »
Když už jsou ty vánoce a člověk by měl dělat dobré skutky ...

Kód: [Vybrat]
egrep "$(cat displayStrings_cs.properties.txt displayStrings.properties.txt | grep = | cut -f1 -d= | sort | uniq -c | grep "^[ ]*1" | cut -f2 -d1 | tr -d " " | tr "\n" "|" | sed "s/|$//")" displayStrings.properties.txt


Není to optimální, nedejbože dokonalé (tak moc zase vánoce nežeru), ale nezabralo to moc času a tak nějak to funguje.

- -

Re:Synchronizace obsahu dvou souborů
« Odpověď #2 kdy: 01. 01. 2025, 20:04:27 »
Ten příkaz vrátí asi 364 anglických linek, které zdá se chybí v českém souboru. To je moc užitečné a mohl bych tyto linky přeložit a přidat na konec českého souboru. Tento postup jsem naznačoval v úvodním příspěvku že nechci. Proč? Nejsem si ale jistý jak budu postupovat dál pokud bude anglický soubor později aktualizován (např některé fráze odebrány a jiné přidány. Pokud nebudu mít český soubor seřazený stejně jako anglický, tak těžko budu používat programy pro sloučení souborů - půjde se v tom těžko vyznat než pokud by by byly oba soubory totožné, pouze by se lišily překladem za rovnítkem. Jsem laik, takže se možná pletu. Mám nainstalované programy Meld, Diffuse, KDiff3

Problém asi dělá i to, že český soubor má některé řádky navíc, které už nejsou v anglickém souboru.
Už jsem to zkoušel předložit i AI ale asi jsem zadal špatně dotaz a nevedlo to k ničemu.

Je zde tedy nějaký nápad co přesně udělat, abych ten český soubor synchronizoval jednorázově a pak znovu po následných aktualizacích anglického souboru?

Re:Synchronizace obsahu dvou souborů
« Odpověď #3 kdy: 01. 01. 2025, 21:32:01 »
Pak už to onelinerem půjde udělat těžko a bude to chtít skript.
Potíž je v tom, že některé řádky jsou rozdělené na dva a více. Jestli jejich sloučení nevadí ...
Něco jako:


cat "$1" | sed ':a;N;$!ba;s/\\\n//g' | while read LINE; do
        TEST="$(echo $LINE | grep = | cut -f1 -d=)"
        if [ -z "${TEST}" ]; then
                echo $LINE
                continue
        fi     
        LINE_TEST=$(cat "$2" | sed ':a;N;$!ba;s/\\\n//g' | grep "^$TEST=")
        if [ "$LINE_TEST" == "" ]; then
                echo $LINE NEW
        else
                echo $LINE_TEST
        fi     
done


Re:Synchronizace obsahu dvou souborů
« Odpověď #4 kdy: Dnes v 05:53:53 »
Co se má stát s řádky, co jsou v CZ souboru, ale nejsou v EN souboru? Mají zůstat na té pozici, kde jsou teď? A k čemu vlastně jsou?