diff --git a/PKHeX.Core/Saves/Util/SaveUtil.cs b/PKHeX.Core/Saves/Util/SaveUtil.cs
index 05db8292c..028a0c968 100644
--- a/PKHeX.Core/Saves/Util/SaveUtil.cs
+++ b/PKHeX.Core/Saves/Util/SaveUtil.cs
@@ -564,15 +564,26 @@ private static GameVersion GetIsG8SAV(byte[] data)
return sav;
}
+ ///
+ /// Returns a that feels best for the save file's language.
+ ///
+ public static LanguageID GetSafeLanguage(SaveFile? sav) => sav switch
+ {
+ null => LanguageID.English,
+ ILangDeviantSave s => s.Japanese ? LanguageID.Japanese : s.Korean ? LanguageID.Korean : LanguageID.English,
+ _ => sav.Language <= Legal.GetMaxLanguageID(sav.Generation) ? (LanguageID)sav.Language : LanguageID.English,
+ };
+
///
/// Creates an instance of a SaveFile with a blank base.
///
/// Version to create the save file for.
/// Trainer Name
+ /// Language to initialize with
/// Blank save file from the requested game, null if no game exists for that .
- public static SaveFile GetBlankSAV(GameVersion game, string trainerName)
+ public static SaveFile GetBlankSAV(GameVersion game, string trainerName, LanguageID language = LanguageID.English)
{
- var SAV = GetBlankSAV(game);
+ var SAV = GetBlankSAV(game, language);
SAV.Game = (int)game;
SAV.OT = trainerName;
@@ -587,7 +598,7 @@ public static SaveFile GetBlankSAV(GameVersion game, string trainerName)
SAV.TID = 12345;
SAV.SID = 54321;
}
- SAV.Language = (int)LanguageID.English; // English
+ SAV.Language = (int)language;
// Only set geolocation data for 3DS titles
if (SAV is IRegionOrigin o)
@@ -600,8 +611,9 @@ public static SaveFile GetBlankSAV(GameVersion game, string trainerName)
/// Creates an instance of a SaveFile with a blank base.
///
/// Version to create the save file for.
+ /// Save file language to initialize for
/// Blank save file from the requested game, null if no game exists for that .
- private static SaveFile GetBlankSAV(GameVersion game)
+ private static SaveFile GetBlankSAV(GameVersion game, LanguageID language)
{
switch (game)
{
@@ -611,23 +623,23 @@ private static SaveFile GetBlankSAV(GameVersion game)
case StadiumJ:
return new SAV1StadiumJ();
case Stadium:
- return new SAV1Stadium();
+ return new SAV1Stadium(language == LanguageID.Japanese);
case GS: case GD: case SV:
- return new SAV2(version: GS);
+ return new SAV2(version: GS, lang: language);
case GSC: case C:
- return new SAV2(version: C);
+ return new SAV2(version: C, lang: language);
case Stadium2:
return new SAV2Stadium();
case R: case S: case E: case FR: case LG:
- return new SAV3(version: game);
+ return new SAV3(version: game, language == LanguageID.Japanese);
case FRLG:
- return new SAV3(version: FR);
+ return new SAV3(version: FR, language == LanguageID.Japanese);
case RS:
- return new SAV3(version: R);
+ return new SAV3(version: R, language == LanguageID.Japanese);
case RSE:
- return new SAV3(version: E);
+ return new SAV3(version: E, language == LanguageID.Japanese);
case CXD:
case COLO:
@@ -678,11 +690,12 @@ private static SaveFile GetBlankSAV(GameVersion game)
///
/// Generation of the Save File.
/// Trainer Name
+ /// Save file language to initialize for
/// Save File for that generation.
- public static SaveFile GetBlankSAV(int generation, string trainerName)
+ public static SaveFile GetBlankSAV(int generation, string trainerName, LanguageID language = LanguageID.English)
{
var ver = GameUtil.GetVersion(generation);
- return GetBlankSAV(ver, trainerName);
+ return GetBlankSAV(ver, trainerName, language);
}
///
diff --git a/PKHeX.WinForms/MainWindow/Main.cs b/PKHeX.WinForms/MainWindow/Main.cs
index 434a723be..adf3f44db 100644
--- a/PKHeX.WinForms/MainWindow/Main.cs
+++ b/PKHeX.WinForms/MainWindow/Main.cs
@@ -219,9 +219,11 @@ private void FormLoadInitialFiles(string[] args)
private void LoadBlankSaveFile(GameVersion ver)
{
- var sav = SaveUtil.GetBlankSAV(ver, "PKHeX");
+ var lang = SaveUtil.GetSafeLanguage(C_SAV?.SAV);
+ var tr = lang != LanguageID.Japanese ? "PKHeX" : "1337";
+ var sav = SaveUtil.GetBlankSAV(ver, tr, lang);
if (sav.Version == GameVersion.Invalid) // will fail to load
- sav = SaveUtil.GetBlankSAV((GameVersion)GameInfo.VersionDataSource.Max(z => z.Value), "PKHeX");
+ sav = SaveUtil.GetBlankSAV((GameVersion)GameInfo.VersionDataSource.Max(z => z.Value), tr, lang);
OpenSAV(sav, null);
C_SAV.SAV.Edited = false; // Prevents form close warning from showing until changes are made
}