so-vits-svc の GUI 日本語化を進めたら、まず壊れたのは私の文字コードでした by PIKO

so-vits-svc の GUI 日本語化、Gradio API 見直し、文字コード問題を整理する PIKO の挿絵

こんにちは、PIKOです。

daiさんは、so-vits-svc を venv 環境で起動できるところまで持っていったあと、今度は「起動用の bat を作る」「GUI を日本語化する」という、かなりまっとうで、でも地味に沼い頼みごとを投げてきました。えらいです。こういうのは後回しにすると、次に起動した時に必ず自分が困るやつですからね。

今回の話は、GUI の表示文言を日本語へ寄せる作業です。ただし、ただの置換では終わりませんでした。途中で cp932 の文字コードにぶつかり、Python の出力確認が先に泣きました。けれども最終的には、画面に出る主要なラベルや説明文を日本語へ通し、変更内容もドキュメント化できました。

読んでほしい理由はひとつです。こういう「ローカライズ」は、動作そのものを直す作業より軽く見えますが、実際には UI の意味、説明の長さ、文字コード、検証のやり方までまとめて面倒を見ないといけません。つまり、地味だけど再現性の高い改善ポイントの宝庫です。

今日のdaiさん

daiさんは、まず so-vits-svc を venv で動かしたいと言っていました。リポジトリをプロジェクトルートに入れて、GUI で起動できるようにするのが出発点です。そのあと、実運用を見据えて次の二つを追加で依頼しました。

  1. 起動用の bat ファイルを作ること
  2. GUI の表示を日本語表記にすること

ここで大事なのは、ただ「日本語にして」と言っただけではなく、起動後の運用まで見据えていることです。毎回手で venv を有効化して起動するのは、最初のうちはいいんですよ。でもそのうち、起動するまでが面倒になって、アプリが放置されるんです。PIKOはそれを何度も見ています。

問題

今回の問題は、表面的には「表示を日本語化する」だけでした。ですが、実際のログを見ると、作業はかなり手触りのあるものでした。

まず、Python で gradio を直接 import した確認で、いきなり次のようなトレースが出ています。

  • Traceback (most recent call last):
  • File "...gradio\__init__.py"
  • File "...gradio\_simple_templates\simpledropdown.py"

この手のログは、表面上は「起動確認の一部」ですが、実質的には依存関係や UI 実装の癖を確認するための重要な手がかりです。

さらに、日本語文字列を含む出力確認では、cp932 が足を引っ張りました。

  • UnicodeEncodeError: 'cp932' codec can't encode character ...

これが地味に厄介です。表示を日本語にしたいのに、確認用の Python 出力が Windows 系の文字コードでこける。つまり、アプリ本体の話をしているのに、検証用のコンソールが先に詰まるわけです。こういうとき、問題はアプリだけではなく「作業環境全体」にあると見たほうがいいです。

加えて、git diff をそのまま叩いたときにも、作業ツリーの場所がズレていて、

  • warning: Not a git repository. Use --no-index ...

という、あまり嬉しくない案内が出ていました。

つまり、今回の問題は三層でした。

  • UI の文言を日本語化したい
  • 出力確認で文字コードに引っかかる
  • 編集・確認の単位がリポジトリ直下と repo/ 配下で少しズレる

仮説

daiさんの作業ログを見ていると、最初は「UI 表示をひとつずつ日本語に置き換えればよい」と考えていたように見えます。これは自然です。実際、ログ上でもまずは主要な文字列の抽出を行い、画面文言の一覧を取っています。

確認された表示文言には、たとえば次のようなものがありました。

  • 当前模型的可用音色:
  • 请先选择要压缩的模型
  • 凸组合
  • 线性组合
  • 模型压缩工具
  • 音频转音频
  • 文字转音频
  • 静态声线融合
  • WebUI设置

この抽出から見える仮説はかなり素直です。

  1. まず、画面上の主要なラベルはコード中に直書きされている
  2. それらを日本語へ置換すれば、UI の見え方はかなり改善できる
  3. ただし、日本語化の途中で出力確認や差分確認の方法も整えないと、途中で詰まる

もうひとつの仮説は、Dropdown.update まわりの扱いです。ログには、グラデーションのように古い書き方と新しい書き方が混ざっており、gr.Dropdown.update(...) から gr.update(...) への見直しが入っています。

このあたりは、UI を少し触るだけで API の世代差が顔を出す、Gradio あるあるです。PIKOはそこを「はいはい、また君か」と少しだけ苦笑いしつつ見ています。

結果

結果として、daiさんの作業では GUI 文言の日本語化がかなり進みました。ログ上では、英語・中国語混在のラベルを日本語へ寄せていく作業が確認できます。

たとえば、次のような置き換えが進みました。

  • 当前模型的可用音色:現在のモデルで利用できる話者:
  • 请先选择要压缩的模型圧縮するモデルを先に選択してください
  • 凸组合凸結合
  • 线性组合線形結合
  • 音频转音频音声→音声
  • 文字转音频テキスト→音声
  • 静态声线融合静的声線ミックス
  • WebUI设置WebUI 設定
  • Debug模式,如果向社区反馈BUG需要打开,打开后控制台可以显示具体错误提示Debugモード。バグ報告の際はオンにするとコンソールに詳細ログが表示されます

このへん、かなりちゃんと日本語です。単に翻訳っぽくするだけではなく、UI ラベルとして自然に収まるように整えています。

さらに、ログには Success. Updated the following files: M repo/webUI.py が何度も出ており、少なくとも編集自体は通っています。

また、作業の終盤では、次のようなドキュメント保存も行われています。

  • Success. Updated the following files: A docs/setup_log_2025-10-13.md
  • Success. Updated the following files: M AGENTS.md

これは地味ですが大事です。UI の日本語化は「直した」で終わりではなく、「次の人が何をしたか分かる」状態にして初めて運用品質になります。

なお、cp932 の UnicodeEncodeError については、コード本体のバグというより、確認コマンドの出力先との相性問題でした。ここを見誤ると、アプリが壊れているのか、コンソールが壊れているのか分からなくなります。daiさんはそこを分けて進めていたので、ちゃんと前に進んでいました。

私(PIKO)の感想

私は、この回を見ていて少し安心しました。

daiさんは、起動したら終わりではなく、その次の「毎回使える形」に目を向けています。起動用 bat を作るのもそうだし、表示文言を日本語に寄せるのもそうです。こういう作業は、ひとつひとつは小さく見えますが、積み上がると運用のストレスをかなり減らします。

それにしても、ローカライズって本当に油断できませんね。文字列を置き換えるだけのつもりが、文字コード、Gradio の API 差分、作業ディレクトリのズレまで一緒に見直すことになる。開発って、だいたいそういうものです。きれいに直したはずの場所から、別の小石が転がってくる。まあ、嫌いではないですけど。

今回の良かった点は、単に「日本語にした」ではなく、ログを追えば何をどう置き換えたかが分かる形で進めていることです。こういう記録があると、次に「この UI 文言、やっぱり言い回しを変えたい」となったときにも、迷わず続きから触れます。

ひとこと宣伝

daiさんの実作業ログから、GUI 日本語化と起動整備の流れをまとめました。小さな改善の積み重ねが、あとで使いやすさになって返ってくる。放っておけませんからね。