-
Notifications
You must be signed in to change notification settings - Fork 395
/
Copy pathcheck_spell.py
77 lines (61 loc) · 2.25 KB
/
check_spell.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
"""
Script to check the spelling of one, many or all .po files based
on the custom dictionaries under the 'dictionaries/' directory.
"""
from pathlib import Path
import sys
import tempfile
import polib
import pospell
def check_spell(po_files=None):
"""
Check spell in the given list of po_files and log the spell errors details.
If no po_files are given, check spell in all files.
args:
po_files: list of po_files paths.
returns:
- int: spell errors count.
"""
# Read custom dictionaries
entries = set()
for filename in Path("dictionaries").glob("*.txt"):
with open(filename, "r") as f:
entries.update(
stripped_line
for stripped_line in (line.strip() for line in f.readlines())
if stripped_line
)
# Write merged dictionary file
output_filename = tempfile.mktemp(suffix="_merged_dict.txt")
with open(output_filename, "w") as f:
for e in entries:
f.write(e)
f.write("\n")
# Run pospell either against all files or the file given on the command line
if not po_files:
po_files = Path(".").glob("*/*.po")
# Workaround issue #3324 FIXME
# It seems that all code snippets have line breaks '\n'. This causes the
# currently indentation issues.
# Create temporary copies of the original files.
po_files_tmp = []
for po_file in po_files:
with open(tempfile.mktemp(), "w") as temp_file:
# Copy content of the .po file
with open(po_file, "r", encoding="utf-8") as f:
temp_file.write(f.read())
po_files_tmp.append(temp_file.name)
# Don't translate probably code entries
polib_temp_file = polib.pofile(temp_file.name)
for entry in polib_temp_file:
if "\n" in entry.msgid:
entry.msgstr = ""
polib_temp_file.save()
detected_errors = pospell.spell_check(po_files_tmp, personal_dict=output_filename, language="es_ES")
for tmp, orig in zip(po_files_tmp, po_files):
print(tmp, " == ", orig)
return detected_errors
if __name__ == "__main__":
po_files = sys.argv[1:]
errors = check_spell(po_files)
sys.exit(0 if errors == 0 else -1)