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); } } } }
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); }
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); } }
ushort GetMaxStringId(ILanguageStringCollection languageStringCollection) { return((ushort)languageStringCollection.Translations.Max(s => s.StringId)); }