diff --git a/PKHeX.Core/PKM/PK1.cs b/PKHeX.Core/PKM/PK1.cs
index cece5e2ed..13649a4d7 100644
--- a/PKHeX.Core/PKM/PK1.cs
+++ b/PKHeX.Core/PKM/PK1.cs
@@ -164,7 +164,7 @@ public PK7 ConvertToPK7()
Geo1_Country = PKMConverter.Country,
Geo1_Region = PKMConverter.Region
};
- pk7.Language = GuessedLanguage(PKMConverter.Language);
+ pk7.Language = TransferLanguage(PKMConverter.Language);
pk7.Nickname = PKX.GetSpeciesNameGeneration(pk7.Species, pk7.Language, pk7.Format);
if (otname[0] == StringConverter12.G1TradeOTCode) // Ingame Trade
pk7.OT_Name = Encounters1.TradeOTG1[pk7.Language];
diff --git a/PKHeX.Core/PKM/PK2.cs b/PKHeX.Core/PKM/PK2.cs
index 7e2dec021..f5dd1f1a8 100644
--- a/PKHeX.Core/PKM/PK2.cs
+++ b/PKHeX.Core/PKM/PK2.cs
@@ -163,7 +163,7 @@ public PK7 ConvertToPK7()
Geo1_Country = PKMConverter.Country,
Geo1_Region = PKMConverter.Region
};
- pk7.Language = GuessedLanguage(PKMConverter.Language);
+ pk7.Language = TransferLanguage(PKMConverter.Language);
pk7.Nickname = PKX.GetSpeciesNameGeneration(pk7.Species, pk7.Language, pk7.Format);
if (otname[0] == StringConverter12.G1TradeOTCode) // Ingame Trade
pk7.OT_Name = Encounters1.TradeOTG1[pk7.Language];
diff --git a/PKHeX.Core/PKM/Shared/_K12.cs b/PKHeX.Core/PKM/Shared/_K12.cs
index 46c3157f2..8e7a68cd2 100644
--- a/PKHeX.Core/PKM/Shared/_K12.cs
+++ b/PKHeX.Core/PKM/Shared/_K12.cs
@@ -241,6 +241,20 @@ protected int GuessedLanguage(int fallback = (int)LanguageID.English)
return (int)LanguageID.English;
}
+ ///
+ /// Tries to guess the source language ID when transferred to future generations (7+)
+ ///
+ /// Destination language ID
+ /// Source language ID
+ protected int TransferLanguage(int destLanguage)
+ {
+ // if the Species name of the destination language matches the current nickname, transfer with that language.
+ var expect = PKX.GetSpeciesNameGeneration(Species, destLanguage, 2);
+ if (Nickname == expect)
+ return destLanguage;
+ return GuessedLanguage(destLanguage);
+ }
+
public override ushort[] GetStats(PersonalInfo p)
{
var lv = Stat_Level;