多言語対応とリソース
開発に興味がありますか?
Project EAUploaderでは開発メンバーを常に募集しています!! 話を聞くだけでもOK! 是非当プロジェクトのDiscordサーバーへお越しください。 参加はこちら
本ページでは、EAUploaderの多言語対応の仕組みと、ヘルプメッセージ・EA Libraryの記事の書き方を解説します。 翻訳にご協力いただける方も、是非ご覧ください。
本ドキュメントは、EAUploader v1.4.6 の内容に準拠しています。
多言語対応の仕組み
EAUploaderでは、英語の文字列をキーとして、各言語の文字列を取得します。英語は翻訳ファイルを持たず、キーがそのまま表示されます。
| 言語 | 言語コード | 翻訳ファイル |
|---|---|---|
| English | en | なし(キーをそのまま表示) |
| 日本語 | ja | Editor/Resources/Localization/ja.json |
| 한국어 | ko | Editor/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 |
| 200 | VRM変換ウィンドウ |
| 201 | ビューポイント位置エディタ |
| 202 | アップロードタブ:アバターの最適化 |
| 203 | AvatarOptimizerの導入案内 |
新しいメッセージを追加する場合は、未使用の番号を使用し、すべての言語のフォルダにファイルを追加してください。
記事の書式
ヘルプメッセージと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ファイルからの相対パス) |
本文は「記事の書式」で記述します。