プログラミング・動画編集 備忘録

プログラミングや動画編集についての備忘録です

The Elder Scrolls: Arena の日本語化 - 9(DeepL翻訳連携2)

前回

NPCとの会話など文字列をPCOTを利用せずに、翻訳まで行うようにすることにした。
方法としては、Seleniumを利用して内部のブラウザにてDeepL翻訳のサイトを開き、テキストエリアに翻訳文字列を送って翻訳結果を得る方法を試行錯誤した。
rrryutaro.hatenablog.com

結果としては、テキストエリアに張り付けた場合、翻訳結果のテキストエリアには翻訳途中の文字列が返されるため、翻訳が完了しているかを判断する方法に悩むことになった。

今回

TwitterにてURLに翻訳したいテキストを送れば翻訳が完了した結果が返るというアドバイスをもらった。
言われてみればその通りなので、前回の内容からURLに翻訳文字列を入れるように変更する。

URLに翻訳文字列を入れる

URLエンコードでのスペースは %20とする必要があるので、Uri.EscapeUriString を利用する。
前回のコードを流用して次のように変更。

        public string DeepLTranslation(string src)
        {
            driver.Navigate().GoToUrl("https://www.deepl.com/ja/translator#en/ja/" + Uri.EscapeUriString(src));
            TranslationString = "";
            if (wait.Until(condition =>
            {
                while (true)
                {
                    TranslationString = condition.FindElement(By.ClassName("lmt__target_textarea")).GetProperty("value");
                    if (1 < TranslationString.Length)
                    {
                        break;
                    }
                    Thread.Sleep(100);
                }
                return true;
            }))
            {
                return TranslationString;
            }
            return String.Empty;
        }

前回問題となっていたような事象は発生しないため、これで十分そう。