Example #1
0
        public byte[] CreateLanguageFileBytes(ILanguageStringCollection languageStringCollection, ushort fixedStringCount, ushort softStringCount, Version deviceVersion, uint driveCustomizationSignature)
        {
            LanguageFileBody lfb = new LanguageFileBody(languageStringCollection, fixedStringCount, softStringCount, deviceVersion, driveCustomizationSignature);

            //byte[] bytes = lfb.ToByteArrayWithChecksum();
            return(lfb.ToByteArray());// bytes;
        }
 public ReferenceStringProvider(ILanguageStringCollection languageStringCollection)
 {
     if (languageStringCollection != null)
     {
         foreach (var t in languageStringCollection.Translations)
         {
             if (!referenceStrings.ContainsKey(t.StringId))
             {
                 referenceStrings.Add(t.StringId, t.String);
             }
         }
     }
 }
Example #3
0
        ushort GetMaxBytesPerString(ILanguageStringCollection languageStringCollection)
        {
            ushort maxByteCount = 0;

            foreach (var s in languageStringCollection.Translations)
            {
                int tmp = Encoding.UTF8.GetBytes(s.String).Length;
                if (tmp > maxByteCount)
                {
                    maxByteCount = (ushort)tmp;
                }
            }
            return(maxByteCount);// (ushort)languageStringCollection.Translations.Max(s => s.String.Length);
        }
Example #4
0
        public LanguageFileBody(ILanguageStringCollection languageStringCollection, ushort fixedStringCount, ushort softStringCount, Version deviceVersion, uint driveCustomizationSignature)
        {
            ushort bytesPerString = (ushort)(GetMaxBytesPerString(languageStringCollection) + 1);
            ushort bytesPerEntry  = (ushort)(bytesPerString + 2); // Add 2 bytes for the StringId

            header = new LanguageFileHeader(fixedStringCount, softStringCount, bytesPerEntry, deviceVersion, driveCustomizationSignature);

            foreach (ITranslation translation in languageStringCollection.Translations)
            {
                bodyBytes.AddRange(GetBigEndianBytes((ushort)translation.StringId));
                bodyBytes.AddRange(GetBytesFromString(translation.String, bytesPerString));
            }
            if (header.FileLength % 2 != 0)
            {
                bodyBytes.Add(0x00);
                header.FileLength += 1;
            }
        }
        private void AddLanguageStringCollection(string fileLocation, IDeviceStringReader deviceStringReader, IDeviceXmlProvider deviceXmlProvider)
        {
            try
            {
                foreach (var languageStringCollection in ((IDeviceStringReader1)deviceStringReader).GetStringsFromDeviceXml(fileLocation, deviceXmlProvider))
                {
                    ILanguageStringCollection matchingCollection = LanguageStringCollections.Where(lsc => lsc.Index == languageStringCollection.Index).FirstOrDefault();
                    if (matchingCollection != null)
                    {
                        matchingCollection.Translations.AddRange(languageStringCollection.Translations);
                    }
                    else
                    {
                        LanguageStringCollections.Add(languageStringCollection);
                    }
                }

                if (LanguageStringCollections[0].Translations.Count > 0)
                {
                    FixedStringCount = Convert.ToUInt16(LanguageStringCollections[0].Translations.Where(s => !s.IsSoftString).Max(s => s.StringId) + 1);
                    //Find missing stringIds
                    foreach (var als in LanguageStringCollections)
                    {
                        var list   = als.Translations.Select(s => s.StringId).OrderBy(i => i);
                        var result = Enumerable.Range(0, FixedStringCount).Except(list);
                        als.Translations.AddRange(
                            from missing in result
                            select new Translation()
                        {
                            StringId = missing,
                            String   = String.Empty
                        }
                            );
                        als.Translations.Sort();
                    }
                }
                LanguageStringCollections.Sort();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Example #6
0
 ushort GetMaxStringId(ILanguageStringCollection languageStringCollection)
 {
     return((ushort)languageStringCollection.Translations.Max(s => s.StringId));
 }