Esempio n. 1
0
def get_suitable_codepages_for_file(
        translation_file: Path):  # FIXME: make async
    codepages = get_supported_codepages().keys()

    with open(translation_file, "r", encoding="utf-8") as fn:
        po_file = parse_po.PoReader(fn)
        translation_file_language = po_file.meta["Language"]
        strings = [cleanup_string(entry.translation) for entry in po_file]

    return filter_codepages(codepages, strings), translation_file_language
Esempio n. 2
0
def prepare_dictionary(
    dictionary: Iterable[Tuple[str, str]],
    exclusions_leading: Set[str],
    exclusions_trailing: Set[str],
) -> Iterable[Tuple[str, str]]:

    for original_string, translation in dictionary:
        if original_string and translation and translation != original_string:
            translation = fix_spaces(original_string, translation,
                                     exclusions_leading, exclusions_trailing)
            yield original_string, cleanup_string(translation)
Esempio n. 3
0
def get_suitable_codepages_for_directory(directory: Path,
                                         language: str):  # FIXME: make async
    files = filter_files_by_language(directory, language)
    codepages = get_supported_codepages().keys()

    for file in files:
        with open(directory / file, "r", encoding="utf-8") as fn:
            po_file = parse_po.PoReader(fn)
            strings = [cleanup_string(entry.translation) for entry in po_file]
        codepages = filter_codepages(codepages, strings)

    return codepages
Esempio n. 4
0
def translate_single_raw_file(
    source_file_path: Path,
    destination_file_path: Path,
    dictionary: Mapping[Tuple[str, Optional[str]], str],
    encoding: str,
) -> Iterator[str]:
    with open(source_file_path, encoding="cp437") as src:
        with open(destination_file_path, "w", encoding=encoding) as dest:
            yield destination_file_path.name
            for line in translate_raw_file(src, dictionary):
                line = cleanup_string(line)
                try:
                    print(line, file=dest)
                except UnicodeEncodeError:
                    line = line.encode(
                        encoding, errors="backslashreplace").decode(encoding)
                    print(
                        f"Some characters of this line: {line!r} "
                        f"cannot be represented in {encoding} encoding. Using backslashreplace mode.",
                        file=sys.stderr,
                    )

                    print(line, file=dest)
def test_cleanup_string(original, fixed):
    assert cleanup_string(original) == fixed
Esempio n. 6
0
def cleanup_translations_string(
        original: str, translation: str,
        exclusions_leading: Optional[Set[str]],
        exclusions_trailing: Optional[Set[str]]) -> str:
    return fix_spaces(original, cleanup_string(translation),
                      exclusions_leading, exclusions_trailing)