mirror of
				https://github.com/Frooodle/Stirling-PDF.git
				synced 2025-11-01 01:21:18 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			123 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""A script to update language progress status in README.md based on
 | 
						|
properties file comparison.
 | 
						|
 | 
						|
This script compares default properties file with others in a directory to
 | 
						|
determine language progress.
 | 
						|
It then updates README.md based on provided progress list.
 | 
						|
 | 
						|
Author: Ludy87
 | 
						|
 | 
						|
Example:
 | 
						|
    To use this script, simply run it from command line:
 | 
						|
        $ python counter_translation.py
 | 
						|
"""
 | 
						|
import os
 | 
						|
import glob
 | 
						|
import re
 | 
						|
from typing import List, Tuple
 | 
						|
 | 
						|
 | 
						|
def write_readme(progress_list: List[Tuple[str, int]]) -> None:
 | 
						|
    """
 | 
						|
    Updates the progress status in the README.md file based
 | 
						|
    on the provided progress list.
 | 
						|
 | 
						|
    Parameters:
 | 
						|
        progress_list (List[Tuple[str, int]]): A list of tuples containing
 | 
						|
        language and progress percentage.
 | 
						|
 | 
						|
    Returns:
 | 
						|
        None
 | 
						|
    """
 | 
						|
    with open("README.md", "r", encoding="utf-8") as file:
 | 
						|
        content = file.read()
 | 
						|
 | 
						|
    lines = content.split("\n")
 | 
						|
    for i, line in enumerate(lines[2:], start=2):
 | 
						|
        for progress in progress_list:
 | 
						|
            language, value = progress
 | 
						|
            if language in line:
 | 
						|
                match = re.search(r"\!\[(\d+(\.\d+)?)%\]\(.*\)", line)
 | 
						|
                if match:
 | 
						|
                    lines[i] = line.replace(
 | 
						|
                        match.group(0),
 | 
						|
                        f"",
 | 
						|
                    )
 | 
						|
 | 
						|
    new_content = "\n".join(lines)
 | 
						|
 | 
						|
    with open("README.md", "w", encoding="utf-8") as file:
 | 
						|
        file.write(new_content)
 | 
						|
 | 
						|
 | 
						|
def compare_files(default_file_path, files_directory) -> List[Tuple[str, int]]:
 | 
						|
    """
 | 
						|
    Compares the default properties file with other
 | 
						|
    properties files in the directory.
 | 
						|
 | 
						|
    Parameters:
 | 
						|
        default_file_path (str): The path to the default properties file.
 | 
						|
        files_directory (str): The directory containing other properties files.
 | 
						|
 | 
						|
    Returns:
 | 
						|
        List[Tuple[str, int]]: A list of tuples containing
 | 
						|
        language and progress percentage.
 | 
						|
    """
 | 
						|
    file_paths = glob.glob(os.path.join(files_directory, "messages_*.properties"))
 | 
						|
    num_lines = sum(1 for _ in open(default_file_path, encoding="utf-8"))
 | 
						|
 | 
						|
    result_list = []
 | 
						|
 | 
						|
    for file_path in file_paths:
 | 
						|
        language = (
 | 
						|
            os.path.basename(file_path)
 | 
						|
            .split("messages_", 1)[1]
 | 
						|
            .split(".properties", 1)[0]
 | 
						|
        )
 | 
						|
 | 
						|
        fails = 0
 | 
						|
        if "en_GB" in language or "en_US" in language:
 | 
						|
            result_list.append(("en_GB", 100))
 | 
						|
            result_list.append(("en_US", 100))
 | 
						|
            continue
 | 
						|
 | 
						|
        with open(default_file_path, "r", encoding="utf-8") as default_file, open(
 | 
						|
            file_path, "r", encoding="utf-8"
 | 
						|
        ) as file:
 | 
						|
            for _ in range(5):
 | 
						|
                next(default_file)
 | 
						|
                try:
 | 
						|
                    next(file)
 | 
						|
                except StopIteration:
 | 
						|
                    fails = num_lines
 | 
						|
 | 
						|
            for _, (line_default, line_file) in enumerate(
 | 
						|
                zip(default_file, file), start=6
 | 
						|
            ):
 | 
						|
                try:
 | 
						|
                    if (
 | 
						|
                        line_default.split("=", 1)[1].strip()
 | 
						|
                        == line_file.split("=", 1)[1].strip()
 | 
						|
                    ):
 | 
						|
                        fails += 1
 | 
						|
                except IndexError:
 | 
						|
                    pass
 | 
						|
 | 
						|
        result_list.append(
 | 
						|
            (
 | 
						|
                language,
 | 
						|
                int((num_lines - fails) * 100 / num_lines),
 | 
						|
            )
 | 
						|
        )
 | 
						|
 | 
						|
    unique_data = list(set(result_list))
 | 
						|
    unique_data.sort(key=lambda x: x[1], reverse=True)
 | 
						|
 | 
						|
    return unique_data
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    directory = os.path.join(os.getcwd(), "src", "main", "resources")
 | 
						|
    reference_file = os.path.join(directory, "messages_en_GB.properties")
 | 
						|
    write_readme(compare_files(reference_file, directory))
 |