跳转到内容

多语言支持与资源

对开发感兴趣吗?

Project EAUploader一直在招募开发成员! 只是想聊聊也非常欢迎! 请访问本项目的Discord服务器。 点击这里加入



本页介绍EAUploader多语言支持的工作原理,以及帮助消息和EA Library文章的编写方法。 如果您愿意协助翻译,也请阅读本页。

本文档基于EAUploader v1.6.2编写。

多语言支持的工作原理


EAUploader以英语字符串为键获取各语言的字符串。英语没有翻译文件,键会原样显示。

语言语言代码翻译文件
English(英语)en无(键原样显示)
日本語(日语)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)。

以下元素不会被翻译。

  • 带有USS类no-translate的元素。请为物品名称、标签等用户输入的文本添加该类。
  • 文本输入框的内容(标签会被翻译)。

翻译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);

没有对应的翻译时,会原样返回键。

T7e会缓存翻译。重新导入Resources/Localization/中的文件时会清除缓存,因此对翻译文件的编辑无需域重新加载即可生效。

添加语言


要添加新的语言,请准备以下所有文件。文件名和文件夹名请使用语言代码(如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)会以模态窗口的形式显示在EAUploader窗口内。 消息会根据当前语言从Editor/Resources/Message/{语言代码}/{消息编号}.txt读取。

在UXML中,通过msg-id指定消息编号。

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

在C#中,可以通过EAUploaderMessageWindow.ShowMsg(100)(公开API中为HelpButtonAPI.ShowMessage(100))显示。

正在使用的消息编号

编号显示位置
100导入窗口:Import Avatars
101导入窗口:Import VRM
102导入窗口:Import Shaders
103编辑界面:Edit tool
104编辑界面:Import extentions(目前隐藏)
1083D预览的操作方法
109上传:How it looks on VRChat
113上传:Avatar Performance
114上传:Platform
116Avatar列表
117上传:Blueprint
200VRM转换窗口
201视点位置编辑器
202上传:Avatar优化
203AvatarOptimizer的安装引导

105、107、111、112、115的文件仍然存在,但v1.6.2的界面中没有使用。

添加新消息时,请使用未使用的编号,并在所有语言的文件夹中添加文件。

文章格式


帮助消息和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的文章按语言保存在以下文件夹中。每篇文章创建一个文件夹。

Editor/Resources/UI/TabContents/ImportSettings/Contents/EALibrary/Articles/EAUploader/
└── en/
├── 001_tutorial1/
│ ├── tutorial1.json 文章信息
│ ├── Content.txt 文章正文
│ ├── thumbnail.png 缩略图
│ └── image1.png 正文中使用的图片
└── 002_tutorial2/
└── ...

文章信息以如下格式写在JSON文件中。文件夹中的.json文件会作为文章信息读取,因此一个文件夹中请不要放置多个.json文件。

{
"title": "Introduction",
"date": "2023-12-07",
"tags": ["Tutorial"],
"keywords": ["Tutorial", "Start", "Guide", "Introduction", "How to use"],
"contentFile": "Content.txt",
"thumbnail": "thumbnail.png"
}
项目内容
title文章标题。显示在列表中。可以用\n换行。
date文章的创建日期
tags标签。用于EA Library中按标签筛选。
keywords搜索时使用的关键词
contentFile正文的文件名(相对于JSON文件)
thumbnail缩略图的文件名(相对于JSON文件)

正文请按”文章格式”编写。