💬

【C#】VRChatSDKを翻訳してみた話

2024/02/06に公開

本記事はプロモーションを含みます(笑)
BoothにVRChatSDKのBuildタブを翻訳できる「VRChatSDK翻訳機」を出品しています。
開発秘話を書いていこうと思います。

ツールの作成経緯

ワールド作っていて、ツールチップとか翻訳したいのに、マウスでドラッグできないやん!
って思ったのが発端です(笑

VRChatSDK翻訳機とは

先述の通りVRChatSDKのBuildタブを翻訳できます。
翻訳方向は「英語→日本語」と、その逆です。

アプリ概要

  • Windows formアプリ(C#)
  • .NETバージョン(.NET6.0)

ロジック

大ざっぱにロジック

  1. Unityプロジェクトフォルダ>Packagesフォルダ配下の翻訳対象のバックアップ
  2. 翻訳対象のファイル数でループ
  3. 対象ファイルを読み込みつつ対象の文言を置換

やったこと

翻訳ファイル

翻訳の英語 / 日本語の対比管理はJSONを採用しました。
理由としては、翻訳対象のファイルが複数あるからってことと、プログラム内で扱いやすいだろうと考えたからです。
あとは、今後他の言語に対応も想定してたりします。

対象ファイル

uxmlと一部C#でした。泥臭くGrepして探しました(笑

  • VRCSdkWorldBuilderContentInfo.uxml
  • VRCSdkWorldBuilderBuildLayout.uxml
  • ContentWarningsField.cs
  • ThumbnailFoldout.uxml

翻訳ロジック

結論からいくと、「ReadLines」で読み込んで、1行ずつ処理してます。
作り始めた当初は、xmlっぽいしLinqを使おうとしていました。
が、「XElement」とかで取得しても、要素の取得ができない・・・。
uxml≠xmlのだったのが原因だった模様。
テキストファイル読み込んでLinq使えばよかったかもですが、今後試してみようかと思ってます。

あとがき

uxmlから翻訳対象を抽出して、deeplで翻訳してJSONにするのがめんどくさかったですね(笑
ロジックも比較的泥臭い感じがあるので、もうちょい効率的にできないかな~とかも思います。

関連

参考

Discussion