From 6ddfbe0d6510d8f65b2273f503edb915e8119c32 Mon Sep 17 00:00:00 2001 From: MattNL Date: Wed, 24 Aug 2022 03:37:41 -0400 Subject: [PATCH] fix for language entry length issue --- PCK-Studio/Classes/IO/LOC/LOCFileWriter.cs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/PCK-Studio/Classes/IO/LOC/LOCFileWriter.cs b/PCK-Studio/Classes/IO/LOC/LOCFileWriter.cs index 09bb50ca..158cf2ce 100644 --- a/PCK-Studio/Classes/IO/LOC/LOCFileWriter.cs +++ b/PCK-Studio/Classes/IO/LOC/LOCFileWriter.cs @@ -24,7 +24,7 @@ namespace PckStudio.Classes.IO.LOC WriteInt(stream, type); WriteInt(stream, _locfile.Languages.Count); if (type == 2) WriteLocKeys(stream); - WriteLanguages(stream); + WriteLanguages(stream, type); WriteLanguageEntries(stream, type); } @@ -37,12 +37,27 @@ namespace PckStudio.Classes.IO.LOC WriteString(stream, key); } - private void WriteLanguages(Stream stream) + private void WriteLanguages(Stream stream, int type) { _locfile.Languages.ForEach(language => { WriteString(stream, language); - WriteInt(stream, 0); + + //Calculate the size of the language entry + + int size = 0; + size += sizeof(int); // null long + size += sizeof(byte); // null byte + size += (sizeof(short) + Encoding.UTF8.GetByteCount(language)); // language name string + size += sizeof(int); // key count + + foreach (var locKey in _locfile.LocKeys.Keys) + { + if (type == 0) size += (2 + Encoding.UTF8.GetByteCount(locKey)); // loc key string + size += (2 + Encoding.UTF8.GetByteCount(_locfile.LocKeys[locKey][language])); // loc key string + } + + WriteInt(stream, size); }); }