Lesaria の Multiple-Choice

最近、本買いログがメインになっています。たまにPCやガジェットに関して記事にします。

VBScript で 指定したフォルダのファイルをまとめて、英語から日本語に翻訳したかったんじゃ。 (サンプルコード有り)

 

何コレ?

 大量の英語ファイルをWeb版のDeeplにコピペして翻訳させるのが面倒だったので、フォルダ直下の英語ファイルをまとめて翻訳してしまえ。という欲求から出来ています。(Auto-GPTの出力結果英語なんだもん…)

まぁ、今時、ブラウザがいい感じに翻訳してくれるので、ここまでしなくてもとも思います。

 このまま利用する場合、コードの部分をテキストエディタにコピーして拡張子「.vbs」で保存してください。

備考

 翻訳したすると元のファイル名の先頭に「translated_」と付いたコピーが作成されます。ちなみに、目は通していますが、ChatGpt4に書かせたコードを手直ししたものです。処理対象は拡張子「txt」に限定されます。

 

免責に関して

 悪意を持ってスクリプトを書いてはいませんが、このスクリプトを参照、利用して発生したあらゆる損害は免責されるものとします。このスクリプトを利用された時点でこの免責事項を承諾されたものとみなします。当然ですが、当スクリプトを改変の上利用された場合も同様に免責されます。

'■■■宣言部■■■
Option Explicit

'■■■設定部
'□DeepL API URL(
'有料版ではapiのURLが違います。その場合は上のURLを利用してください
'Const apiURL = "https://api.deepl.com/v2/translate"
Const apiURL = "https://api-free.deepl.com/v2/translate"
'□DeepL API キーを設定
Const apiKey = "your-api-key"
'□翻訳したいファイルを格納するフォルダを設定
'仮にC直下に「translng」というフォルダを作成する前提です
Const folderPath = "C:\translng"
'□入力される言語
Const sourceLang = "EN"
'□翻訳したい言語
Const targetLang = "JA"



'■■■処理部■■■
Function TranslateText(text, sourceLang, targetLang, apiKey)
    Dim url, xmlhttp, params, responseText, translation
    url = apiURL
    
    Set xmlhttp = CreateObject("MSXML2.XMLHTTP")
    xmlhttp.Open "POST", url, False
    xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    
    params = "auth_key=" & apiKey & "&text=" & text & "&source_lang=" & sourceLang & "&target_lang=" & targetLang
    xmlhttp.Send params
    
    responseText = xmlhttp.responseText
    translation = Mid(responseText, InStr(responseText, "text") + 8)
    translation = Left(translation, InStr(translation, """") - 1)
    
    TranslateText = translation
End Function

Sub TranslateFilesInFolder(folderPath, sourceLang, targetLang, apiKey)
    Dim fso, folder, file, content, translatedText, translatedFilePath
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(folderPath)
    
    For Each file In folder.Files
        If LCase(fso.GetExtensionName(file.Name)) = "txt" Then
            content = fso.OpenTextFile(file.Path, 1).ReadAll()
            translatedText = TranslateText(content, sourceLang, targetLang, apiKey)
            translatedFilePath = folderPath & "\translated_" & file.Name
            fso.CreateTextFile(translatedFilePath, True).Write(translatedText)
            WScript.Echo "Translated " & file.Name & " and saved as " & translatedFilePath
        End If
    Next
End Sub



TranslateFilesInFolder folderPath, sourceLang, targetLang, apiKey