The Elder Scrolls: Arena の日本語化 - 9(DeepL翻訳連携2)
前回
NPCとの会話など文字列をPCOTを利用せずに、翻訳まで行うようにすることにした。
方法としては、Seleniumを利用して内部のブラウザにてDeepL翻訳のサイトを開き、テキストエリアに翻訳文字列を送って翻訳結果を得る方法を試行錯誤した。
rrryutaro.hatenablog.com
結果としては、テキストエリアに張り付けた場合、翻訳結果のテキストエリアには翻訳途中の文字列が返されるため、翻訳が完了しているかを判断する方法に悩むことになった。
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; }
前回問題となっていたような事象は発生しないため、これで十分そう。