private static LanguageInfoEntryPrimitive[] ReadInfoEntries(Reader reader, LanguageHeaderPrimitive header)
 {
     var infoEntries = new LanguageInfoEntryPrimitive[header.KeyCount];
     for (uint i = 0; i < header.KeyCount; i++)
         infoEntries[i] = LanguageInfoEntryPrimitive.Read(reader);
     return infoEntries;
 }
        public override void ProcessChunkFile(Stream stream, string chunkFullFilename)
        {
            using var reader = new Reader(new BinaryReader(stream, Encoding.UTF8, true), chunkFullFilename);

            var header = LanguageHeaderPrimitive.Read(reader);

            LanguageInfoEntryPrimitive[] infoEntries = ReadInfoEntries(reader, header);

            // Skip buckets.
            reader.Offset(8 * 256);

            byte[] keyBlock = reader.ReadBytes((int)header.KeyBlockSize);
            byte[] stringBlock = reader.ReadBytes((int)header.StringBlockSize);

            if (stringBlock.Length == 0)
                return;

            List<string> values = ParseStringBlock(stringBlock);

            foreach (LanguageInfoEntryPrimitive infoEntry in infoEntries)
            {
                int index = (int)infoEntry.KeyOffset;

                string key = NativeUtils.GetNextString(keyBlock, ref index, Encoding.ASCII);
                string value = values[(int)infoEntry.StringIndex];

                TryAddEntry(header.LanguageId, infoEntry.StringIndex, key, value);
            }
        }