컨텐츠로 건너뛰기

多言語対応とリソース

이 내용은 아직 번역본이 없습니다.

開発に興味がありますか?

Project EAUploaderでは開発メンバーを常に募集しています!! 話を聞くだけでもOK! 是非当プロジェクトのDiscordサーバーへお越しください。 参加はこちら



本ページでは、EAUploaderの多言語対応の仕組みと、ヘルプメッセージ・EA Libraryの記事の書き方を解説します。 翻訳にご協力いただける方も、是非ご覧ください。

本ドキュメントは、EAUploader v1.4.6 の内容に準拠しています。

多言語対応の仕組み


EAUploaderでは、英語の文字列をキーとして、各言語の文字列を取得します。英語は翻訳ファイルを持たず、キーがそのまま表示されます。

言語言語コード翻訳ファイル
Englishenなし(キーをそのまま表示)
日本語jaEditor/Resources/Localization/ja.json
한국어koEditor/Resources/Localization/ko.json

現在の言語はAssets/EAUploader/settings.jsonのlanguageに保存されています。初期値はjaです。

翻訳ファイルの形式

翻訳ファイルは次の形式のJSONファイルです。nameには言語選択のドロップダウンに表示する名前を記述します。

{
"name": "日本語",
"items": [
{
"key": "Import",
"value": "インポート"
},
{
"key": "Version: ",
"value": "バージョン: "
}
]
}
  • keyが重複しているとエラーになります。
  • valueにはstring.Formatの書式({0}など)を使用できます。

UXMLの文字列を翻訳する

UXMLには英語の文字列をそのまま記述します。

<ui:Label text="Import Avatars" class="text-lg pb-2 font-bold" />

メインウィンドウは100msごとにLanguageUtility.Localizationを実行し、ウィンドウ内のすべてのTextElement(Label、Buttonなど)のtextを、翻訳ファイルのkeyと完全に一致する場合にvalueへ置き換えます。 メインウィンドウ以外のウィンドウでは、CreateGUIなどでLanguageUtility.Localization(rootVisualElement)を呼び出してください。

C#の文字列を翻訳する

C#で文字列を設定する場合はT7e.Getを使用します。

var label = new Label(T7e.Get("Ready to upload"));
// 書式を使用する場合
T7e.Get("Avatar bundle size is too large. The maximum size is {0} MB, but the current size is {1} MB", limit, fileSize);

対応する翻訳が無い場合は、キーがそのまま返されます。

言語を追加する


新しい言語を追加する場合は、次のファイルをすべて用意してください。言語コード(例:zh-cn)をファイル名・フォルダ名に使用します。

追加するもの場所
UIの翻訳ファイルEditor/Resources/Localization/{言語コード}.json
ヘルプメッセージEditor/Resources/Message/{言語コード}/{メッセージ番号}.txt
EA Libraryの記事Editor/Resources/UI/TabContents/ImportSettings/Contents/EALibrary/Articles/EAUploader/{言語コード}/
ビューポイント位置エディタの翻訳ファイルEditor/Resources/UI/TabContents/Setup/Editor/ViewpointPositionEditor/Localization/{言語コード}.json

ヘルプメッセージ


画面の各所にある「ヘルプ」ボタン(HelpButton)を押すと、ヘルプメッセージのウィンドウ(EAUploaderMessageWindow)が表示されます。 メッセージはEditor/Resources/Message/{言語コード}/{メッセージ番号}.txtから、現在の言語のものが読み込まれます。

UXMLでは、msg-idにメッセージ番号を指定します。

<eau:HelpButton msg-id="100" class="pb-2" />

C#からはEAUploaderMessageWindow.ShowMsg(100)(公開APIではHelpButtonAPI.ShowMessage(100))で表示できます。

使用されているメッセージ番号

番号表示場所
100インポート/設定タブ:アバターをインポート
101インポート/設定タブ:VRMをインポート
102インポート/設定タブ:シェーダーをインポート
103セットアップタブ:編集ツール
104セットアップタブ:拡張機能をインポート
105アップロードタブ:アップロードするアバターを選択
107シェーダーエラー
108プレビューの操作説明
109アップロードタブ:アバター情報
111アップロードタブ:テストとしてビルド
112アップロードタブ:アップロード
113アップロードタブ:アバターパフォーマンス
114アップロードタブ:プラットフォーム
115アップロードタブ:サムネイル
116インポート/設定タブ:モデルの管理
117アップロードタブ:Blueprint
200VRM変換ウィンドウ
201ビューポイント位置エディタ
202アップロードタブ:アバターの最適化
203AvatarOptimizerの導入案内

新しいメッセージを追加する場合は、未使用の番号を使用し、すべての言語のフォルダにファイルを追加してください。

記事の書式


ヘルプメッセージとEA Libraryの記事は、ArticleRendererで描画されます。記事は次のタグで記述します。

タグ書式内容
<t><t>見出し</t>見出しを表示します。
<txt><txt>本文</txt>本文を表示します。Unityのリッチテキスト(<size=16>、<color=red>、<b>、<i>、<u>など)を使用できます。
<image><image>ファイル名, 幅</image>画像を表示します。ファイル名は記事ファイルからの相対パスです。幅は省略できます。
<button><button>ラベル, スタイル, URL</button>押すとURLを開くボタンを表示します。スタイルにはMain、Sub、Linkのいずれかを記述します。(現在の実装では、スタイルによる表示の違いはありません)
<hr><hr>色, 余白</hr>区切り線を表示します。色にはblackや#RRGGBBを指定できます。
<section><section>画像, 幅, 本文</section>画像と本文を並べて表示します。画像の高さは200pxで表示されます。(現在の実装では、幅の指定は使用されていません)

記述例:

<t>シェーダーエラー</t>
<txt>
<size=14>適用されているシェーダーがプロジェクト内に存在しません。
必要なシェーダーを配布元で確認し、プロジェクトにインポートしてください。</size>
</txt>
<button>Discordへ参加する, Main, https://discord.gg/yYFru7brra</button>

EA Libraryの記事


EA Libraryの記事は、言語ごとに次のフォルダに格納します。記事1つにつき1つのフォルダを作成します。

Editor/Resources/UI/TabContents/ImportSettings/Contents/EALibrary/Articles/EAUploader/
└── ja/
├── 001_tutorial1/
│ ├── tutorial1.json 記事の情報
│ ├── Content.txt 記事の本文
│ ├── thumbnail.png サムネイル
│ └── image1.png 本文で使用する画像
└── 002_tutorial2/
└── ...

記事の情報は次の形式のJSONファイルで記述します。フォルダ内の.jsonファイルが記事の情報として読み込まれるため、1つのフォルダに複数の.jsonファイルを置かないでください。

{
"title": "はじめに",
"date": "2023-12-07",
"tags": ["チュートリアル"],
"keywords": ["チュートリアル", "スタート", "ガイド", "はじめに", "使い方"],
"contentFile": "Content.txt",
"thumbnail": "thumbnail.png"
}
項目内容
title記事のタイトル。一覧に表示されます。\nで改行できます。
date記事の作成日
tagsタグ。EA Libraryのタグの絞り込みに使用されます。
keywords検索に使用するキーワード
contentFile本文のファイル名(JSONファイルからの相対パス)
thumbnailサムネイルのファイル名(JSONファイルからの相対パス)

本文は「記事の書式」で記述します。