mirror of
https://github.com/house-of-abbey/GarminHomeAssistant.git
synced 2025-07-30 16:38:31 +00:00
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: __JosephAbbey <me@josephabbey.dev>
95 lines
3.1 KiB
Python
95 lines
3.1 KiB
Python
####################################################################################
|
|
#
|
|
# Distributed under MIT Licence
|
|
# See https://github.com/house-of-abbey/GarminHomeAssistant/blob/main/LICENSE.
|
|
#
|
|
####################################################################################
|
|
#
|
|
# GarminHomeAssistant is a Garmin IQ application written in Monkey C and routinely
|
|
# tested on a Venu 2 device. The source code is provided at:
|
|
# https://github.com/house-of-abbey/GarminHomeAssistant.
|
|
#
|
|
# J D Abbey & P A Abbey, 24 July 2025
|
|
#
|
|
#
|
|
# Description:
|
|
#
|
|
# Python script to remove all the translations of a specific id from the XML files.
|
|
#
|
|
# Usage:
|
|
# python removeTranslations.py <id>
|
|
#
|
|
# Python installation:
|
|
# pip install beautifulsoup4
|
|
# NB. For XML formatting:
|
|
# pip install lxml
|
|
#
|
|
# References:
|
|
# * https://www.crummy.com/software/BeautifulSoup/bs4/doc/
|
|
# * https://realpython.com/beautiful-soup-web-scraper-python/
|
|
# * https://www.crummy.com/software/BeautifulSoup/bs4/doc/#parsing-xml
|
|
# * https://www.crummy.com/software/BeautifulSoup/bs4/doc/#xml
|
|
#
|
|
####################################################################################
|
|
import sys
|
|
# from bs4 import BeautifulSoup
|
|
import os
|
|
|
|
def remove_translations(file_path: str, translation_id: str) -> None:
|
|
"""
|
|
Remove all translations of a specific id from the XML file.
|
|
|
|
:param file_path: Path to the XML file.
|
|
:param translation_id: The id of the translation to remove.
|
|
"""
|
|
# Breaks the formatting
|
|
# with open(file_path, "r", encoding="utf-8") as file:
|
|
# soup = BeautifulSoup(file, features="xml")
|
|
|
|
# # Find all string elements with the specified id
|
|
# strings_to_remove = soup.find_all("string", {"id": translation_id})
|
|
|
|
# for string in strings_to_remove:
|
|
# string.decompose() # Remove the string element
|
|
|
|
# # Write the modified XML back to the file
|
|
# with open(file_path, "wb") as file:
|
|
# file.write(soup.encode("utf-8") + b"\n")
|
|
|
|
# Use standard string replace instead
|
|
with open(file_path, "r", encoding="utf-8") as file:
|
|
content = file.read()
|
|
|
|
new = ""
|
|
for line in content.splitlines():
|
|
if not f'id="{translation_id}"' in line:
|
|
new += line + "\n"
|
|
|
|
with open(file_path, "w", encoding="utf-8") as file:
|
|
file.write(new)
|
|
|
|
def main(translation_id: str) -> None:
|
|
"""
|
|
Main function to process all XML files.
|
|
|
|
:param translation_id: The id of the translation to remove.
|
|
"""
|
|
xml_files = []
|
|
for directory in os.listdir("."):
|
|
if os.path.isdir(directory) and "resources-" in directory:
|
|
xml_file_path = os.path.join(directory, "strings", "strings.xml")
|
|
if os.path.exists(xml_file_path):
|
|
xml_files.append(xml_file_path)
|
|
|
|
for xml_file in xml_files:
|
|
print(f"Processing file: {xml_file}")
|
|
remove_translations(xml_file, translation_id)
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) != 2:
|
|
print("Usage: python removeTranslations.py <id>")
|
|
sys.exit(1)
|
|
|
|
translation_id = sys.argv[1]
|
|
main(translation_id)
|