public Translation ReadTranslation() { if (++_index >= StringCount) return null; _stream.Seek(OriginalTableOffset + 8 * _index, SeekOrigin.Begin); var originalLength = _reader.ReadInt32(); var originalOffset = _reader.ReadInt32(); _stream.Seek(TranslationTableOffset + 8 * _index, SeekOrigin.Begin); var translationLength = _reader.ReadInt32(); var translationOffset = _reader.ReadInt32(); var id = ReadString(originalOffset, originalLength); var translations = ReadString(translationOffset, translationLength) .Split('\0'); string context; string singular; string plural; var contextSplit = id.Split(CONTEXT_SEPARATORS, 2, StringSplitOptions.RemoveEmptyEntries); if (contextSplit.Length == 0) { context = null; singular = ""; } else if (contextSplit.Length == 1) { context = null; singular = contextSplit[0]; } else if (contextSplit.Length == 2) { context = contextSplit[0]; singular = contextSplit[1]; } else throw new InvalidOperationException("Failed to parse translation context '" + id + "'"); var pluralSplit = singular.Split(STRING_SEPARATORS, 2, StringSplitOptions.RemoveEmptyEntries); if (pluralSplit.Length == 0) { singular = ""; plural = null; } else if (pluralSplit.Length == 1) { singular = pluralSplit[0]; plural = null; } else if (pluralSplit.Length == 2) { singular = pluralSplit[0]; plural = pluralSplit[1]; } else throw new InvalidOperationException("Failed to parse translation plural form '" + id + "'"); var key = new GettextKey(context, singular, plural); return new Translation(key, translations); }
public Translation ReadTranslation() { if (++_index >= StringCount) { return(null); } _stream.Seek(OriginalTableOffset + 8 * _index, SeekOrigin.Begin); var originalLength = _reader.ReadInt32(); var originalOffset = _reader.ReadInt32(); _stream.Seek(TranslationTableOffset + 8 * _index, SeekOrigin.Begin); var translationLength = _reader.ReadInt32(); var translationOffset = _reader.ReadInt32(); var id = ReadString(originalOffset, originalLength); var translations = ReadString(translationOffset, translationLength) .Split('\0'); string context; string singular; string plural; var contextSplit = id.Split(CONTEXT_SEPARATORS, 2, StringSplitOptions.RemoveEmptyEntries); if (contextSplit.Length == 0) { context = null; singular = ""; } else if (contextSplit.Length == 1) { context = null; singular = contextSplit[0]; } else if (contextSplit.Length == 2) { context = contextSplit[0]; singular = contextSplit[1]; } else { throw new InvalidOperationException("Failed to parse translation context '" + id + "'"); } var pluralSplit = singular.Split(STRING_SEPARATORS, 2, StringSplitOptions.RemoveEmptyEntries); if (pluralSplit.Length == 0) { singular = ""; plural = null; } else if (pluralSplit.Length == 1) { singular = pluralSplit[0]; plural = null; } else if (pluralSplit.Length == 2) { singular = pluralSplit[0]; plural = pluralSplit[1]; } else { throw new InvalidOperationException("Failed to parse translation plural form '" + id + "'"); } var key = new GettextKey(context, singular, plural); return(new Translation(key, translations)); }