Beispiel #1
0
		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);
		}
Beispiel #2
0
        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));
        }