import gradio as gr from deep_translator import GoogleTranslator from gtts import gTTS import pykakasi import os # 버전 정보 __version__ = "1.8.30" # Kakasi 인스턴스 생성 및 설정 kakasi = pykakasi.kakasi() def convert_text(japanese_text, conversion_type): if conversion_type == "히라가나": kakasi.setMode("H", "H") # 히라가나 유지 kakasi.setMode("K", "H") # 가타카나를 히라가나로 변환 kakasi.setMode("J", "H") # 한자를 히라가나로 변환 elif conversion_type == "가타카나": kakasi.setMode("H", "K") # 히라가나를 가타카나로 변환 kakasi.setMode("K", "K") # 가타카나 유지 kakasi.setMode("J", "K") # 한자를 가타카나로 변환 else: # 기본 또는 한자 return japanese_text # 변환 없이 그대로 반환 converter = kakasi.getConverter() converted = converter.do(japanese_text) return converted def search_and_update_history(keyword, conversion_type): result, converted_keyword = search(keyword, conversion_type) if converted_keyword: audio_path = generate_audio_file(converted_keyword) url = f"https://www.irasutoya.com/search?q={converted_keyword}" result_button_html = f''' ''' return result, gr.update(value=audio_path, visible=True), gr.update(value=result_button_html, visible=True) else: return result, gr.update(visible=False), gr.update(visible=False) def search(keyword, conversion_type): try: translator = GoogleTranslator(source='ko', target='ja') japanese_keyword = translator.translate(keyword) converted_keyword = convert_text(japanese_keyword, conversion_type) result_text = ( f"**검색어:** {keyword}\n" f"**일본어 번역 ({conversion_type}):** {converted_keyword}\n\n" f"**안내:** 선택한 변환 유형에 따라 검색 결과가 달라질 수 있습니다." ) return result_text, converted_keyword except Exception as e: return f"번역 중 오류가 발생했습니다: {e}", None def generate_audio_file(japanese_text): try: tts = gTTS(japanese_text, lang='ja') file_path = "japanese_audio.mp3" tts.save(file_path) return file_path except Exception as e: return None def clear_inputs(): return "", "", gr.update(visible=False), gr.update(visible=False) with gr.Blocks(css=""" #container { width: 50%; margin: auto; } button#search_button { background-color: #1E90FF; color: white; font-size: 16px; padding: 10px; border: none; border-radius: 5px; cursor: pointer; width: 100%; } button#clear_button { background-color: #A9A9A9; color: white; font-size: 16px; padding: 10px; border: none; border-radius: 5px; cursor: pointer; width: 100%; } #result_button { background-color: #28a745; color: white; font-size: 16px; padding: 10px; border: none; border-radius: 5px; cursor: pointer; width: 100%; } """) as demo: with gr.Column(elem_id="container"): gr.Markdown("
제작자: 고버스TV
") gr.Markdown(f"버전: {__version__}
") # 앱 실행 if __name__ == "__main__": demo.launch(share=False)