diff --git a/Assets/Editor/LocalizationExpansionTests.cs b/Assets/Editor/LocalizationExpansionTests.cs new file mode 100644 index 000000000..39939c33b --- /dev/null +++ b/Assets/Editor/LocalizationExpansionTests.cs @@ -0,0 +1,144 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using AibisDream.Framework; +using AibisDream.Kit; +using AibisDream.Utility; +using NUnit.Framework; +using UnityEditor; +using UnityEngine; +using YarnProjectDefinition = Yarn.Compiler.Project; + +namespace AibisDream.SystemEditor.Tests +{ + public sealed class LocalizationExpansionTests + { + private const string FirstRuntimeChapterPath = + "Assets/ScriptableObjects/SceneSO/Demo/Day0_Prologue.asset"; + + private static readonly string[] AddedLocaleCodes = { "ru", "es", "pt-BR" }; + + private static readonly MethodInfo GetLocalizedNameMethod = + typeof(CharacterVo).GetMethod( + "GetLocalizedNameByKind", + BindingFlags.Instance | BindingFlags.NonPublic); + + [TestCase("ru", LocaleKind.Ru)] + [TestCase("ru-RU", LocaleKind.Ru)] + [TestCase("es", LocaleKind.Es)] + [TestCase("es-ES", LocaleKind.Es)] + [TestCase("pt", LocaleKind.PtBr)] + [TestCase("pt-BR", LocaleKind.PtBr)] + public void GetLocaleKind_AddedLocaleCode_ReturnsExpectedKind( + string localeCode, + LocaleKind expected) + { + Assert.That(LocalizationKit.GetLocaleKind(localeCode), Is.EqualTo(expected)); + } + + [TestCase(SystemLanguage.Russian, "ru")] + [TestCase(SystemLanguage.Spanish, "es")] + [TestCase(SystemLanguage.Portuguese, "pt-BR")] + public void MapSystemLanguage_AddedSystemLanguage_ReturnsSupportedLocale( + SystemLanguage systemLanguage, + string expected) + { + Assert.That(LocalizationKit.MapSystemLanguage(systemLanguage), Is.EqualTo(expected)); + } + + [Test] + public void CharacterVo_AddedLocaleName_ReturnsTranslationOrKey() + { + Assert.That(GetLocalizedNameMethod, Is.Not.Null); + + var translated = new CharacterVo + { + key = "actor_key", + ru = "Русское имя", + es = "Nombre español", + ptBr = "Nome português", + }; + + Assert.That(GetLocalizedName(translated, LocaleKind.Ru), Is.EqualTo(translated.ru)); + Assert.That(GetLocalizedName(translated, LocaleKind.Es), Is.EqualTo(translated.es)); + Assert.That(GetLocalizedName(translated, LocaleKind.PtBr), Is.EqualTo(translated.ptBr)); + + var untranslated = new CharacterVo { key = "actor_key" }; + Assert.That(GetLocalizedName(untranslated, LocaleKind.Ru), Is.EqualTo(untranslated.key)); + Assert.That(GetLocalizedName(untranslated, LocaleKind.Es), Is.EqualTo(untranslated.key)); + Assert.That(GetLocalizedName(untranslated, LocaleKind.PtBr), Is.EqualTo(untranslated.key)); + } + + [Test] + public void CharacterCsv_AddedLocaleColumns_ParseSuccessfully() + { + string csvPath = Path.Combine( + Application.streamingAssetsPath, + "Config", + "character.csv"); + + List characters = CsvUtil.ReadAsBean(csvPath); + + Assert.That(characters, Is.Not.Empty); + Character peipei = characters.Single(character => character.Key == "peipei"); + Assert.That(peipei.Ru, Is.Empty); + Assert.That(peipei.Es, Is.Empty); + Assert.That(peipei.PtBr, Is.Empty); + } + + [Test] + public void RuntimeYarnProjects_DeclareAddedLocales() + { + TalkSceneSO firstChapter = + AssetDatabase.LoadAssetAtPath(FirstRuntimeChapterPath); + Assert.That(firstChapter, Is.Not.Null); + + var pending = new Queue(); + var visited = new HashSet(); + pending.Enqueue(firstChapter); + + while (pending.Count > 0) + { + TalkSceneSO chapter = pending.Dequeue(); + if (chapter == null || !visited.Add(chapter)) + continue; + + Assert.That(chapter.yarnProject, Is.Not.Null, chapter.name); + AssertYarnProjectDeclaresAddedLocales(chapter); + + if (chapter.exits == null) + continue; + + foreach (SceneExit sceneExit in chapter.exits) + { + if (sceneExit?.targetScene != null) + pending.Enqueue(sceneExit.targetScene); + } + } + + Assert.That(visited, Is.Not.Empty); + } + + private static string GetLocalizedName(CharacterVo character, LocaleKind localeKind) + { + return (string)GetLocalizedNameMethod.Invoke(character, new object[] { localeKind }); + } + + private static void AssertYarnProjectDeclaresAddedLocales(TalkSceneSO chapter) + { + string assetPath = AssetDatabase.GetAssetPath(chapter.yarnProject); + string projectRoot = Directory.GetParent(Application.dataPath).FullName; + string absolutePath = Path.GetFullPath(Path.Combine(projectRoot, assetPath)); + YarnProjectDefinition project = YarnProjectDefinition.LoadFromFile(absolutePath); + + foreach (string localeCode in AddedLocaleCodes) + { + Assert.That( + project.Localisation.ContainsKey(localeCode), + Is.True, + $"{chapter.name} ({assetPath}) does not declare Locale {localeCode}."); + } + } + } +} diff --git a/Assets/Editor/LocalizationExpansionTests.cs.meta b/Assets/Editor/LocalizationExpansionTests.cs.meta new file mode 100644 index 000000000..b8c68824f --- /dev/null +++ b/Assets/Editor/LocalizationExpansionTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f556352cf7f71c4a98e967b54dffc3b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Framework/Config/Character.cs b/Assets/Scripts/Framework/Config/Character.cs index c04ccd301..96a4d27fb 100644 --- a/Assets/Scripts/Framework/Config/Character.cs +++ b/Assets/Scripts/Framework/Config/Character.cs @@ -8,6 +8,9 @@ namespace AibisDream.Kit public string Cn { get; set; } public string En { get; set; } public string Ja { get; set; } + public string Ru { get; set; } + public string Es { get; set; } + public string PtBr { get; set; } public string NameColor { get; set; } public string HeadPicPath { get; set; } public string VoicePath { get; set; } @@ -26,6 +29,9 @@ namespace AibisDream.Kit vo.cn = Cn; vo.en = En; vo.ja = Ja; + vo.ru = Ru; + vo.es = Es; + vo.ptBr = PtBr; vo.nameColor = NameColor; vo.headPicPath = HeadPicPath; vo.voicePath = VoicePath; @@ -43,6 +49,9 @@ namespace AibisDream.Kit public string cn; public string en; public string ja; + public string ru; + public string es; + public string ptBr; public string nameColor; public string headPicPath; public string voicePath; @@ -79,6 +88,12 @@ namespace AibisDream.Kit case LocaleKind.Ja: if (!string.IsNullOrWhiteSpace(ja)) return ja; return string.IsNullOrWhiteSpace(cn) ? key : cn; + case LocaleKind.Ru: + return string.IsNullOrWhiteSpace(ru) ? key : ru; + case LocaleKind.Es: + return string.IsNullOrWhiteSpace(es) ? key : es; + case LocaleKind.PtBr: + return string.IsNullOrWhiteSpace(ptBr) ? key : ptBr; case LocaleKind.Cn: default: return string.IsNullOrWhiteSpace(cn) ? key : cn; @@ -105,4 +120,4 @@ namespace AibisDream.Kit Player, MainActor } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Framework/OtherKit/LocalizationKit.cs b/Assets/Scripts/Framework/OtherKit/LocalizationKit.cs index 4c65938f8..9d374dc24 100644 --- a/Assets/Scripts/Framework/OtherKit/LocalizationKit.cs +++ b/Assets/Scripts/Framework/OtherKit/LocalizationKit.cs @@ -18,7 +18,10 @@ namespace AibisDream.Framework { Cn, En, - Ja + Ja, + Ru, + Es, + PtBr } public static class LocalizationKit @@ -34,8 +37,11 @@ namespace AibisDream.Framework public static LocaleKind GetLocaleKind(string localeCode) { if (string.IsNullOrEmpty(localeCode)) return LocaleKind.Cn; - if (localeCode.StartsWith("en")) return LocaleKind.En; - if (localeCode.StartsWith("ja")) return LocaleKind.Ja; + if (localeCode.StartsWith("en", StringComparison.OrdinalIgnoreCase)) return LocaleKind.En; + if (localeCode.StartsWith("ja", StringComparison.OrdinalIgnoreCase)) return LocaleKind.Ja; + if (localeCode.StartsWith("ru", StringComparison.OrdinalIgnoreCase)) return LocaleKind.Ru; + if (localeCode.StartsWith("es", StringComparison.OrdinalIgnoreCase)) return LocaleKind.Es; + if (localeCode.StartsWith("pt", StringComparison.OrdinalIgnoreCase)) return LocaleKind.PtBr; return LocaleKind.Cn; } @@ -62,6 +68,9 @@ namespace AibisDream.Framework SystemLanguage.Chinese or SystemLanguage.ChineseSimplified or SystemLanguage.ChineseTraditional => "zh-Hans", SystemLanguage.Japanese => "ja-JP", SystemLanguage.English => "en", + SystemLanguage.Russian => "ru", + SystemLanguage.Spanish => "es", + SystemLanguage.Portuguese => "pt-BR", _ => "en", }; diff --git a/Assets/Scripts/UI/Terminal/TerminalSettingPanel.cs b/Assets/Scripts/UI/Terminal/TerminalSettingPanel.cs index d84bcedfc..2efa5a7a7 100644 --- a/Assets/Scripts/UI/Terminal/TerminalSettingPanel.cs +++ b/Assets/Scripts/UI/Terminal/TerminalSettingPanel.cs @@ -36,6 +36,9 @@ namespace AibisDream.UI new UIFormOption { prop = "zh-Hans", label = "中文" }, new UIFormOption { prop = "en", label = "English" }, new UIFormOption { prop = "ja-JP", label = "日本語" }, + new UIFormOption { prop = "ru", label = "Русский" }, + new UIFormOption { prop = "es", label = "Español" }, + new UIFormOption { prop = "pt-BR", label = "Português (Brasil)" }, }; private static readonly UIFormOption[] TextSpeedOptions = diff --git a/Assets/StreamingAssets/Config/character.csv b/Assets/StreamingAssets/Config/character.csv index ac31af3f8..488abe96a 100644 --- a/Assets/StreamingAssets/Config/character.csv +++ b/Assets/StreamingAssets/Config/character.csv @@ -1,77 +1,77 @@ -通过key索引配置,中文名,英文名,日文名,"显示位置,Default使用默认,Screen插线屏幕,OldBox基本对话框",人物角色(Player/MainActor/Aside),名称显示时的颜色,头像Pic路径,语音资源路径,气泡序号(默认0) -Key,Cn,En,Ja,DialogViewType,Role,NameColor,HeadPicPath,VoicePath,BubbleIdx -jg,警告,Warning,Warning,Default,MainActor,#7ae622,,VO/voice_DN, -门,门,Door,,Default,MainActor,#7ae622,,, -矩形,黑暗,Darkness,,Default,MainActor,#7ae622,,VO/voice_DN, -记忆,记忆,Memory,,Default,MainActor,#7ae622,,, -peipei,佩佩,Peipei,ペイペイ,Default,MainActor,#00FFFF,peipei_head,VO/voice_PP, -乌鸦,乌鸦,Crow,,Default,MainActor,#e6ddc1,,VO/voice_WYd, -wyd?,???,???,???,Default,MainActor,#e6ddc1,,VO/voice_WYd, -马尾辫女孩,马尾辫女孩,Girl with ponytail,,Default,MainActor,,,VO/voice_JJ, -pp,佩佩,Peipei,ペイペイ,Default,MainActor,#00FFFF,peipei_head,VO/voice_PP, -ppm,佩佩,Peipei,ペイペイ,Default,MainActor,#00FFFF,peipei_head,VO/voice_PPm, -ppd,女孩,Girl,,Default,MainActor,,,VO/voice_PPd, -ppd?,女孩,Girl,,Default,MainActor,,,VO/voice_PPd, -me,路斯,Luth,ルース,Default,Player,,me_head,VO/voice_ME, -med,路斯,Luth,ルース,Default,Player,,me_head,VO/voice_MEd, -mem,路斯,Luth,ルース,Default,Player,,me_head,VO/voice_MEm, -mecd,女孩,Young Girl,少女,Default,MainActor,,,VO/voice_MECd, -mecd?,???,???,???,Default,MainActor,,,VO/voice_MECd, -bb,BB机,Beeper,,Default,Player,,me_head,, -jj,姐姐,Sister,姉さん,Default,MainActor,,me_head,VO/voice_JJ, -jjd,姐姐,Sister,姉さん,Default,MainActor,,me_head,VO/voice_JJd, -jjm,姐姐,Sister,姉さん,Default,MainActor,,me_head,VO/voice_JJm, -jj?,柔和女声,???,???,Default,MainActor,,me_head,VO/voice_JJ, -hs,火山,HuoShan,火山,Default,MainActor,#FFA800,peipei_head,VO/voice_HS, -hs?,沙哑男声,???,???,Default,MainActor,#FFA800,peipei_head,VO/voice_HS, -hsm,火山,HuoShan,火山,Default,MainActor,,,VO/voice_HSm, -hsd,阿灿,Young Boy,少年,Default,MainActor,,,VO/voice_HSd, -hsd?,???,???,???,Default,MainActor,#FFA800,peipei_head,VO/voice_HSd, -yl,英理,Yingli,エリ,Default,MainActor,#4000FF,peipei_head,VO/voice_YL, -ql?,02号调酒机体,Bartender,,Default,MainActor,#00FFFF,peipei_head,VO/voice_YL, -ql,奇琳,Kirin,チーリン,Default,MainActor,#00FFFF,peipei_head,VO/voice_YL, -peipei_novoice,胆怯女声,Timid female voice,怯えた女声,Default,Aside,#00FFFF,,VO/voice_PP,2 -yingli_novoice,严厉女声,Stern female voice,厳しい女声,Default,Aside,#FFCC00,,VO/voice_YL,1 -tutorial,教学,Tutorial,,Default,Aside,,,, -docter,儿科医生,Doctor (in memory),医者(記憶の中),Default,Aside,#FFCC00,,, -peipei_child,童年佩佩,Peipei (child),ペイペイ(幼少期),Default,Aside,#00FFFF,,VO/voice_PPm, -unknown,???,???,???,Default,Aside,#FFCC00,,, -???,???,???,???,Default,MainActor,#FFCC00,,, -zls?,???,???,???,Default,MainActor,#FFCC00,,VO/voice_memCommon, -zls,治疗师,Therapist,セラピスト,Default,MainActor,#FFCC00,,VO/voice_memCommon, -shitou,石头,Stone,シートウ,Default,MainActor,,,VO/voice_shitou, -Descent,Descent,Descent,,Default,Aside,#FFCC00,,VO/voice_me, -e-assistant,电子助手,Electronic Assistant,,Default,Aside,#FFCC00,,VO/voice_me, -Gotashi_unknow,戴纯金雕塑头的男人,*Gotash,*ゴタシュ,Default,Aside,#FFCC00,,, -dn,无连接,No Connection,No Connection,Screen,Aside,#FFBF5F,,VO/voice_DN, -Linking,连接中……,Connecting...,Connecting...,Screen,Aside,#E6A23C,,VO/voice_DN, -Analysing,分析中,Analyzing...,Analyzing...,Screen,Aside,#E6A23C,,VO/voice_DN, -Error,错误警告,Error warning,Error warning,Screen,Aside,#E6A23C,,VO/voice_DN, -UfModule,Unstable Fusion图像生成模块,Unstable Fusion Module,Unstable Fusion Module,Screen,Aside,#F56C6C,,VO/voice_DN, -EyeModule,HS9型视觉模块,HS9 Visual Module,HS9 Visual Module,Screen,Aside,#F56C6C,,VO/voice_DN, -EmoModule,通用型情绪发生模块,Universal Emotion Generation Module,Universal Emotion Generation Module,Screen,Aside,#F56C6C,,VO/voice_DN, -MemModule,通用型记忆模块,Universal Memory Module,Universal Memory Module,Screen,Aside,#F56C6C,,VO/voice_DN, -LogicModule,MK1型逻辑处理模块,MK1 logic Processing Module,MK1 logic Processing Module,Screen,Aside,#F56C6C,,VO/voice_DN, -SpeakerModule,MK1型表达模块,MK1 Expression Module,MK1 Expression Module,Screen,Aside,#F56C6C,,VO/voice_DN, -SaleModule,销售语言拓展模块,Sales Language Extension Module,販売言語拡張モジュール,Screen,Aside,#F56C6C,,VO/voice_DN, -ChipModule,4R7型色觉晶圆训练槽,4R7 Color Perception Wafer Training Slot,4R7 Color Perception Wafer Training Slot,Screen,Aside,#F56C6C,,VO/voice_DN, -HivemindModule,未知型号
Hivemind通讯终端,Unknown type Hivemind communication terminal,Unknown type Hivemind communication terminal,Screen,Aside,#F56C6C,,VO/voice_DN, -HeartModule,C03UR型特配涡轮增压动力模块,C03UR Special Turbocharged Power Module,C03UR Special Turbocharged Power Module,Screen,Aside,#E6A23C,,VO/voice_DN, -LungModule,MK1型气体处理模块,MK1 Gas Processing Module,MK1 Gas Processing Module,Screen,Aside,#E6A23C,,VO/voice_DN, -LiverModule,MK1型冷却液循环模块,MK1 Coolant Circulation Module,MK1 Coolant Circulation Module,Screen,Aside,#E6A23C,,VO/voice_DN, -DigestModule,MK1型物料处理模块,MK1 Material Processing Module,MK1 Material Processing Module,Screen,Aside,#E6A23C,,VO/voice_DN, -CenterText,,,,CenterText,Aside,,,, -CenterOption,,,,CenterOption,Aside,,,, -Task,,,,Task,Aside,,,, -TempText,,,,Default,Aside,,,, -gts,患者,???,???,Default,MainActor,#A4CD36,,VO/voice_GTS, -gts?,患者,???,???,Default,MainActor,#A4CD36,,VO/voice_GTS_broken, -gts??,患者??,???,???,Default,MainActor,#E2C22B,,VO/voice_GTS, -classmate,同学,Classmate,クラスメート,Default,Aside,,,VO/voice_memCommon, -jb,酒保,Bartender,バーテンダー,Default,MainActor,,,VO/voice_memCommon, -host,主持人,Newscaster,ニュースキャスター,Default,MainActor,,,VO/voice_memCommon, -teacher,教师,Teacher,Teacher,Default,MainActor,#FFCC00,,VO/voice_memCommon, -sellerA,销售员A,Seller A,Seller A,Default,MainActor,#FFCC00,,VO/voice_memCommon, -sellerB,销售员B,Seller B,Seller B,Default,MainActor,#FFCC00,,VO/voice_memCommon, -sellerC,销售员C,Seller C,Seller C,Default,MainActor,#FFCC00,,VO/voice_memCommon, +通过key索引配置,中文名,英文名,日文名,俄文名,西班牙文名,巴西葡萄牙文名,"显示位置,Default使用默认,Screen插线屏幕,OldBox基本对话框",人物角色(Player/MainActor/Aside),名称显示时的颜色,头像Pic路径,语音资源路径,气泡序号(默认0) +Key,Cn,En,Ja,Ru,Es,PtBr,DialogViewType,Role,NameColor,HeadPicPath,VoicePath,BubbleIdx +jg,警告,Warning,Warning,,,,Default,MainActor,#7ae622,,VO/voice_DN, +门,门,Door,,,,,Default,MainActor,#7ae622,,, +矩形,黑暗,Darkness,,,,,Default,MainActor,#7ae622,,VO/voice_DN, +记忆,记忆,Memory,,,,,Default,MainActor,#7ae622,,, +peipei,佩佩,Peipei,ペイペイ,,,,Default,MainActor,#00FFFF,peipei_head,VO/voice_PP, +乌鸦,乌鸦,Crow,,,,,Default,MainActor,#e6ddc1,,VO/voice_WYd, +wyd?,???,???,???,,,,Default,MainActor,#e6ddc1,,VO/voice_WYd, +马尾辫女孩,马尾辫女孩,Girl with ponytail,,,,,Default,MainActor,,,VO/voice_JJ, +pp,佩佩,Peipei,ペイペイ,,,,Default,MainActor,#00FFFF,peipei_head,VO/voice_PP, +ppm,佩佩,Peipei,ペイペイ,,,,Default,MainActor,#00FFFF,peipei_head,VO/voice_PPm, +ppd,女孩,Girl,,,,,Default,MainActor,,,VO/voice_PPd, +ppd?,女孩,Girl,,,,,Default,MainActor,,,VO/voice_PPd, +me,路斯,Luth,ルース,,,,Default,Player,,me_head,VO/voice_ME, +med,路斯,Luth,ルース,,,,Default,Player,,me_head,VO/voice_MEd, +mem,路斯,Luth,ルース,,,,Default,Player,,me_head,VO/voice_MEm, +mecd,女孩,Young Girl,少女,,,,Default,MainActor,,,VO/voice_MECd, +mecd?,???,???,???,,,,Default,MainActor,,,VO/voice_MECd, +bb,BB机,Beeper,,,,,Default,Player,,me_head,, +jj,姐姐,Sister,姉さん,,,,Default,MainActor,,me_head,VO/voice_JJ, +jjd,姐姐,Sister,姉さん,,,,Default,MainActor,,me_head,VO/voice_JJd, +jjm,姐姐,Sister,姉さん,,,,Default,MainActor,,me_head,VO/voice_JJm, +jj?,柔和女声,???,???,,,,Default,MainActor,,me_head,VO/voice_JJ, +hs,火山,HuoShan,火山,,,,Default,MainActor,#FFA800,peipei_head,VO/voice_HS, +hs?,沙哑男声,???,???,,,,Default,MainActor,#FFA800,peipei_head,VO/voice_HS, +hsm,火山,HuoShan,火山,,,,Default,MainActor,,,VO/voice_HSm, +hsd,阿灿,Young Boy,少年,,,,Default,MainActor,,,VO/voice_HSd, +hsd?,???,???,???,,,,Default,MainActor,#FFA800,peipei_head,VO/voice_HSd, +yl,英理,Yingli,エリ,,,,Default,MainActor,#4000FF,peipei_head,VO/voice_YL, +ql?,02号调酒机体,Bartender,,,,,Default,MainActor,#00FFFF,peipei_head,VO/voice_YL, +ql,奇琳,Kirin,チーリン,,,,Default,MainActor,#00FFFF,peipei_head,VO/voice_YL, +peipei_novoice,胆怯女声,Timid female voice,怯えた女声,,,,Default,Aside,#00FFFF,,VO/voice_PP,2 +yingli_novoice,严厉女声,Stern female voice,厳しい女声,,,,Default,Aside,#FFCC00,,VO/voice_YL,1 +tutorial,教学,Tutorial,,,,,Default,Aside,,,, +docter,儿科医生,Doctor (in memory),医者(記憶の中),,,,Default,Aside,#FFCC00,,, +peipei_child,童年佩佩,Peipei (child),ペイペイ(幼少期),,,,Default,Aside,#00FFFF,,VO/voice_PPm, +unknown,???,???,???,,,,Default,Aside,#FFCC00,,, +???,???,???,???,,,,Default,MainActor,#FFCC00,,, +zls?,???,???,???,,,,Default,MainActor,#FFCC00,,VO/voice_memCommon, +zls,治疗师,Therapist,セラピスト,,,,Default,MainActor,#FFCC00,,VO/voice_memCommon, +shitou,石头,Stone,シートウ,,,,Default,MainActor,,,VO/voice_shitou, +Descent,Descent,Descent,,,,,Default,Aside,#FFCC00,,VO/voice_me, +e-assistant,电子助手,Electronic Assistant,,,,,Default,Aside,#FFCC00,,VO/voice_me, +Gotashi_unknow,戴纯金雕塑头的男人,*Gotash,*ゴタシュ,,,,Default,Aside,#FFCC00,,, +dn,无连接,No Connection,No Connection,,,,Screen,Aside,#FFBF5F,,VO/voice_DN, +Linking,连接中……,Connecting...,Connecting...,,,,Screen,Aside,#E6A23C,,VO/voice_DN, +Analysing,分析中,Analyzing...,Analyzing...,,,,Screen,Aside,#E6A23C,,VO/voice_DN, +Error,错误警告,Error warning,Error warning,,,,Screen,Aside,#E6A23C,,VO/voice_DN, +UfModule,Unstable Fusion图像生成模块,Unstable Fusion Module,Unstable Fusion Module,,,,Screen,Aside,#F56C6C,,VO/voice_DN, +EyeModule,HS9型视觉模块,HS9 Visual Module,HS9 Visual Module,,,,Screen,Aside,#F56C6C,,VO/voice_DN, +EmoModule,通用型情绪发生模块,Universal Emotion Generation Module,Universal Emotion Generation Module,,,,Screen,Aside,#F56C6C,,VO/voice_DN, +MemModule,通用型记忆模块,Universal Memory Module,Universal Memory Module,,,,Screen,Aside,#F56C6C,,VO/voice_DN, +LogicModule,MK1型逻辑处理模块,MK1 logic Processing Module,MK1 logic Processing Module,,,,Screen,Aside,#F56C6C,,VO/voice_DN, +SpeakerModule,MK1型表达模块,MK1 Expression Module,MK1 Expression Module,,,,Screen,Aside,#F56C6C,,VO/voice_DN, +SaleModule,销售语言拓展模块,Sales Language Extension Module,販売言語拡張モジュール,,,,Screen,Aside,#F56C6C,,VO/voice_DN, +ChipModule,4R7型色觉晶圆训练槽,4R7 Color Perception Wafer Training Slot,4R7 Color Perception Wafer Training Slot,,,,Screen,Aside,#F56C6C,,VO/voice_DN, +HivemindModule,未知型号
Hivemind通讯终端,Unknown type Hivemind communication terminal,Unknown type Hivemind communication terminal,,,,Screen,Aside,#F56C6C,,VO/voice_DN, +HeartModule,C03UR型特配涡轮增压动力模块,C03UR Special Turbocharged Power Module,C03UR Special Turbocharged Power Module,,,,Screen,Aside,#E6A23C,,VO/voice_DN, +LungModule,MK1型气体处理模块,MK1 Gas Processing Module,MK1 Gas Processing Module,,,,Screen,Aside,#E6A23C,,VO/voice_DN, +LiverModule,MK1型冷却液循环模块,MK1 Coolant Circulation Module,MK1 Coolant Circulation Module,,,,Screen,Aside,#E6A23C,,VO/voice_DN, +DigestModule,MK1型物料处理模块,MK1 Material Processing Module,MK1 Material Processing Module,,,,Screen,Aside,#E6A23C,,VO/voice_DN, +CenterText,,,,,,,CenterText,Aside,,,, +CenterOption,,,,,,,CenterOption,Aside,,,, +Task,,,,,,,Task,Aside,,,, +TempText,,,,,,,Default,Aside,,,, +gts,患者,???,???,,,,Default,MainActor,#A4CD36,,VO/voice_GTS, +gts?,患者,???,???,,,,Default,MainActor,#A4CD36,,VO/voice_GTS_broken, +gts??,患者??,???,???,,,,Default,MainActor,#E2C22B,,VO/voice_GTS, +classmate,同学,Classmate,クラスメート,,,,Default,Aside,,,VO/voice_memCommon, +jb,酒保,Bartender,バーテンダー,,,,Default,MainActor,,,VO/voice_memCommon, +host,主持人,Newscaster,ニュースキャスター,,,,Default,MainActor,,,VO/voice_memCommon, +teacher,教师,Teacher,Teacher,,,,Default,MainActor,#FFCC00,,VO/voice_memCommon, +sellerA,销售员A,Seller A,Seller A,,,,Default,MainActor,#FFCC00,,VO/voice_memCommon, +sellerB,销售员B,Seller B,Seller B,,,,Default,MainActor,#FFCC00,,VO/voice_memCommon, +sellerC,销售员C,Seller C,Seller C,,,,Default,MainActor,#FFCC00,,VO/voice_memCommon, diff --git a/Assets/Yarn/FP/FP_Day1_sleep/FP_Day1_sleep.yarn b/Assets/Yarn/FP/FP_Day1_sleep/FP_Day1_sleep.yarn index 05249787d..251845754 100644 --- a/Assets/Yarn/FP/FP_Day1_sleep/FP_Day1_sleep.yarn +++ b/Assets/Yarn/FP/FP_Day1_sleep/FP_Day1_sleep.yarn @@ -129,6 +129,7 @@ position: -116,-2585 <> ->观察 #line:0c9209f <> + <> ->趴回去再睡会 #line:0028a19 <> <> diff --git a/Assets/Yarn/Test/Test_GeneralEnd/Test_GeneralEnd.yarnproject b/Assets/Yarn/Test/Test_GeneralEnd/Test_GeneralEnd.yarnproject index 2fc33bf8f..f981830b4 100644 --- a/Assets/Yarn/Test/Test_GeneralEnd/Test_GeneralEnd.yarnproject +++ b/Assets/Yarn/Test/Test_GeneralEnd/Test_GeneralEnd.yarnproject @@ -6,7 +6,13 @@ "excludeFiles": [ "**/*~/*" ], - "localisation": {}, + "localisation": { + "en": {}, + "ja-JP": {}, + "ru": {}, + "es": {}, + "pt-BR": {} + }, "baseLanguage": "zh-Hans", "compilerOptions": {} -} \ No newline at end of file +} diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 80501a684..6d0087dde 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -133,7 +133,7 @@ PlayerSettings: vulkanEnableLateAcquireNextImage: 0 vulkanEnableCommandBufferRecycling: 1 loadStoreDebugModeEnabled: 0 - bundleVersion: 0.6.1.15-20260730-005754 + bundleVersion: 0.6.1.16-20260731-152037 preloadedAssets: - {fileID: 11400000, guid: 0fb2bc2476953fc43a74f0ab8879077c, type: 2} metroInputSource: 0