pygtrans icon indicating copy to clipboard operation
pygtrans copied to clipboard

Examples

Open lemisky opened this issue 1 year ago • 1 comments

一些可能常用的例子,欢迎大家参与

lemisky avatar Oct 19 '24 02:10 lemisky

翻译 JSON 文件

import json

from pygtrans import Translate


def load_json(file_path):
    with open(file_path, "r", encoding="utf-8") as file:
        return json.load(file)


def extract_strings(data):
    strings = []

    def _extract(_data):
        if isinstance(_data, dict):
            for key, value in _data.items():
                _extract(value)
        elif isinstance(_data, list):
            for item in _data:
                _extract(item)
        elif isinstance(_data, str):
            strings.append(_data)

    _extract(data)
    return strings


def replace_strings(data, dict_translated):
    def _replace(_data):
        if isinstance(_data, dict):
            for key, value in _data.items():
                _data[key] = _replace(value)
        elif isinstance(_data, list):
            return [_replace(item) for item in _data]
        elif isinstance(_data, str):
            return dict_translated[_data]
        return _data

    return _replace(data)


def save_json(data, file_path):
    with open(file_path, "w", encoding="utf-8") as file:
        json.dump(data, file, ensure_ascii=False, indent=4)


def translate_json_file(input_file, output_file, target):
    data = load_json(input_file)
    strings = extract_strings(data)
    strings = list(set(strings))
    strings_translated = at.translate(strings, target=target)
    dict_translated = {k: v.translatedText for k, v in zip(strings, strings_translated)}
    data_translated = replace_strings(data, dict_translated)
    save_json(data_translated, output_file)


if __name__ == "__main__":
    at = Translate(fmt="text")
    translate_json_file("home_zh.json", "home_en.json", "en")

lemisky avatar Oct 19 '24 02:10 lemisky