1 #!/bin/bash - |
1 #!/usr/bin/env bash |
2 # |
2 # |
3 # Tool which tries to find outdated translations in the engine strings (*.txt) using hg blame. |
3 # Tool which tries to find outdated translations in the engine strings (*.txt) using hg blame. |
4 # Note this is only a heuristic; the output might not be 100% accurate. |
4 # Note this is only a heuristic; the output might not be 100% accurate. |
5 # Strings which this tool lists MIGHT be outdated, so you might want to re-translate them, if needed. |
5 # Strings which this tool lists MIGHT be outdated, so you might want to re-translate them, if needed. |
6 # Run this in the tools/ directory. |
6 # Run this in the tools/ directory. |
9 # |
9 # |
10 # ./find_outdated_engine_translations.sh <LANGUAGE> |
10 # ./find_outdated_engine_translations.sh <LANGUAGE> |
11 # |
11 # |
12 # <LANGUAGE>: Language code of the language to check |
12 # <LANGUAGE>: Language code of the language to check |
13 # |
13 # |
|
14 shopt -s checkwinsize |
14 |
15 |
15 cd ../share/hedgewars/Data/Locale |
16 cd ../share/hedgewars/Data/Locale |
|
17 |
|
18 IGNORE_CASE_WHITESPACE=1; |
|
19 if ((${#@}==2)) |
|
20 then |
|
21 IGNORE_CASE_WHITESPACE=$2; |
|
22 fi; |
16 |
23 |
17 BLAMELANG=$1; |
24 BLAMELANG=$1; |
18 |
25 |
19 if [ -z $BLAMELANG ] |
26 if [ -z $BLAMELANG ] |
20 then |
27 then |
21 echo "No language specified."; |
28 echo "No language specified."; |
22 exit; |
29 exit; |
23 fi; |
30 fi; |
24 BLAMELANGFILE="$BLAMELANG.txt"; |
31 BLAMELANGFILE="$BLAMELANG.txt"; |
25 |
32 |
26 TEMP_EN=$(mktemp); |
33 TEMP_EN=$(mktemp); |
27 TEMP_LANG=$(mktemp); |
34 TEMP_LANG=$(mktemp); |
30 |
37 |
31 hg blame $BLAMELANGFILE | grep -P "^\s*\d+:\s+0[013-6]:" > $TEMP_LANG; |
38 hg blame $BLAMELANGFILE | grep -P "^\s*\d+:\s+0[013-6]:" > $TEMP_LANG; |
32 |
39 |
33 cat $TEMP_EN | while read f; |
40 cat $TEMP_EN | while read f; |
34 do |
41 do |
35 REV=$(echo $f | sed 's/:.*//'); |
42 REV=$(echo $f | sed 's/:.*//'); |
36 CODE=$(echo $f | sed 's/^[0-9]\+:\s\+//;s/=.*//'); |
43 CODE=$(echo $f | sed 's/^[0-9]\+:\s\+//;s/=.*//'); |
37 OTHER=$(grep -P "^\s*\d+:\s+${CODE}" $TEMP_LANG); |
44 OTHER=$(grep -P "^\s*\d+:\s+${CODE}" $TEMP_LANG); |
38 if (($?==0)); |
45 if (($?==0)); |
39 then |
46 then |
40 OTHER_REV=$(echo $OTHER | sed 's/:.*//'); |
47 OTHER_REV=$(echo $OTHER | sed 's/:.*//'); |
41 if (($REV>$OTHER_REV)); |
48 if (($REV>$OTHER_REV)); |
42 then |
49 then |
43 TEXT=$(echo $f | sed 's/^\s*[0-9]\+:\s*[0-9]\+:[0-9]\+=//'); |
50 TEXT=$(echo $f | sed 's/^\s*[0-9]\+:\s*[0-9]\+:[0-9]\+=//'); |
44 OLD_TEXT=$(hg grep --all -r "1:$OTHER_REV" "$CODE" en.txt | tail -n1 | sed 's/.*en.txt:[0-9]\+:[+-]:[0-9]\+:[0-9]\+=//;s/^M//'); |
51 OLD_TEXT=$(hg grep --all -r "1:$OTHER_REV" "$CODE" en.txt | tail -n1 | sed 's/.*en.txt:[0-9]\+:[+-]:[0-9]\+:[0-9]\+=//;s/ |
45 if [ "$TEXT" != "$OLD_TEXT" ]; |
52 //'); |
46 then |
53 |
47 if [ -z $COLUMNS ]; |
54 COMPARE_TEXT=$TEXT; |
48 then |
55 COMPARE_OLD_TEXT=$OLD_TEXT; |
49 printf '━%.0s' $(seq 74); |
56 if (($IGNORE_CASE_WHITESPACE==1)); |
50 echo ""; |
57 then |
51 else |
58 COMPARE_TEXT=$(echo $TEXT | sed 's/\s*//g' | tr A-Z a-z); |
52 printf '━%.0s' $(seq $COLUMNS); |
59 COMPARE_OLD_TEXT=$(echo $OLD_TEXT | sed 's/\s*//g' | tr A-Z a-z); |
53 fi; |
60 fi; |
54 echo "$TEXT ← Current English"; |
61 |
55 echo "$OLD_TEXT ← English at time of translation"; |
62 if [ "$COMPARE_TEXT" != "$COMPARE_OLD_TEXT" ]; |
56 echo "$(echo $OTHER | sed 's/^\s*[0-9]\+:\s*[0-9]\{2\}:[0-9]\{2\}=//') ← current translation"; |
63 then |
57 fi; |
64 if [ -z $COLUMNS ]; |
58 fi; |
65 then |
59 fi; |
66 printf '━%.0s' $(seq 74); |
|
67 echo ""; |
|
68 else |
|
69 printf '━%.0s' $(seq $COLUMNS); |
|
70 fi; |
|
71 echo "$TEXT ← Current English"; |
|
72 echo "$OLD_TEXT ← English at time of translation"; |
|
73 echo "$(echo $OTHER | sed 's/^\s*[0-9]\+:\s*[0-9]\{2\}:[0-9]\{2\}=//') ← current translation"; |
|
74 fi; |
|
75 fi; |
|
76 fi; |
60 done |
77 done |
61 |
78 |
62 rm $TEMP_EN $TEMP_LANG |
79 rm $TEMP_EN $TEMP_LANG |