in library/scripts/string_pack.py [0:0]
def read_string_dict(locale, file_name, id_finder, plural_handler):
result_dict = {}
try:
root = ElementTree.parse(
file_name, parser=ElementTree.XMLParser(target=TreeBuilderWithComments())
).getroot()
except FileNotFoundError:
# Missing files are OK. They just mean no strings.
return result_dict
last_comment = ""
for element in root:
tag = element.tag
if tag == TreeBuilderWithComments.COMMENT_TAG:
# See if the comments include any metadata about plurals that we need to pass on.
last_comment = element.text
continue
assert tag in ["string", "plurals"]
string_name = element.attrib["name"]
id = id_finder.get_id(string_name)
if id is None:
# No integer ID was found for the string. The string was most probably removed,
# but still remains in the translations (such strings will be cleaned up next time
# move_strings_for_packing.py is run). Log a warning and skip the string.
sys.stderr.write(
"No ID found for '%s' while packing %s\n" % (string_name, file_name)
)
continue
if element.tag == "string":
text = element.text
result_dict[id] = unescape(text)
else: # plurals
plural_dict = {}
for item in element:
assert item.tag == "item"
quantity = item.attrib["quantity"]
if plural_handler(locale, last_comment, quantity):
continue
quantity_id = _IDS_FOR_QUANTITY[quantity]
plural_dict[quantity_id] = unescape(item.text)
result_dict[id] = plural_dict
return result_dict