Small fixes for gettext parser.

This commit is contained in:
2019-05-24 00:58:00 +01:00
parent 11686ccd91
commit 868f202be5

View File

@@ -39,7 +39,7 @@ namespace Claunia.Localization.Parsers
string extractedComment = ""; string extractedComment = "";
string currentReference = ""; string currentReference = "";
string currentContext = ""; string currentContext = "";
var currentLanguage = Language.None; Language currentLanguage = Language.None;
while(line != null) while(line != null)
{ {
@@ -51,19 +51,21 @@ namespace Claunia.Localization.Parsers
{ {
if(!firstEmptyMessageId) if(!firstEmptyMessageId)
{ {
var message = localization.NewMessage(); Message message = localization.NewMessage();
message.Comments = extractedComment; message.Comments = extractedComment;
message.Context = currentContext; message.Context = currentContext;
message.Reference = currentReference; message.Reference = currentReference;
message.Source.Singular = currentMsgId; message.Source.Singular = currentMsgId;
message.Id = currentMsgId; message.Id = currentContext + currentMsgId;
var localizedString = message.NewLocalizedString(); LocalizedString localizedString = message.NewLocalizedString();
localizedString.Comments = currentComment; localizedString.Comments = currentComment;
localizedString.Locale = currentLocale; localizedString.Locale = currentLocale;
localizedString.Singular = currentMsgString; localizedString.Singular = currentMsgString;
localizedString.Translator = currentTranslator?.Id; localizedString.Translator = currentTranslator?.Id;
// TODO: Parse per programming language
} }
firstEmptyMessageId = false; firstEmptyMessageId = false;
@@ -80,8 +82,7 @@ namespace Claunia.Localization.Parsers
{ {
if(line.Length == 1) if(line.Length == 1)
{ {
if(!firstEmptyMessageId) if(!firstEmptyMessageId) currentComment += Environment.NewLine;
currentComment += "\n";
continue; continue;
} }
@@ -90,22 +91,16 @@ namespace Claunia.Localization.Parsers
case ' ': case ' ':
if(firstEmptyMessageId) break; if(firstEmptyMessageId) break;
currentComment += line.Substring(2) + "\n"; currentComment += line.Substring(2) + Environment.NewLine;
continue; continue;
case '.': case '.':
extractedComment += line.Substring(2) + "\n"; extractedComment += line.Substring(3) + Environment.NewLine;
continue; continue;
case ':': case ':':
currentReference += line.Substring(2) + "\n"; currentReference += line.Substring(3) + Environment.NewLine;
continue; continue;
case ',': case ',':
var flags = line.Substring(2); string flags = line.Substring(2);
if(flags.StartsWith("no-"))
{
currentLanguage = Language.None;
continue;
}
switch(flags) switch(flags)
{ {
@@ -195,6 +190,7 @@ namespace Claunia.Localization.Parsers
currentLanguage = Language.None; currentLanguage = Language.None;
continue; continue;
} }
case '|': break; case '|': break;
} }
} }
@@ -219,15 +215,13 @@ namespace Claunia.Localization.Parsers
continue; continue;
} }
var projectString = line.Substring(1, line.Length - 2); string projectString = line.Substring(1, line.Length - 2);
if(projectString.StartsWith("Project-Id-Version", StringComparison.Ordinal)) if(projectString.StartsWith("Project-Id-Version", StringComparison.Ordinal))
{ {
var projectIdVersion = projectString.Substring(20, projectString.Length - 20); string projectIdVersion = projectString.Substring(20, projectString.Length - 20);
if(projectIdVersion.EndsWith("\\n", StringComparison.Ordinal)) if(projectIdVersion.EndsWith("\\n", StringComparison.Ordinal))
{
projectIdVersion = projectIdVersion.Substring(0, projectIdVersion.Length - 2); projectIdVersion = projectIdVersion.Substring(0, projectIdVersion.Length - 2);
}
localization.Project.Name = projectIdVersion; localization.Project.Name = projectIdVersion;
continue; continue;
@@ -235,11 +229,9 @@ namespace Claunia.Localization.Parsers
if(projectString.StartsWith("Report-Msgid-Bugs-To", StringComparison.Ordinal)) if(projectString.StartsWith("Report-Msgid-Bugs-To", StringComparison.Ordinal))
{ {
var projectReportTo = projectString.Substring(22, projectString.Length - 22); string projectReportTo = projectString.Substring(22, projectString.Length - 22);
if(projectReportTo.EndsWith("\\n", StringComparison.Ordinal)) if(projectReportTo.EndsWith("\\n", StringComparison.Ordinal))
{
projectReportTo = projectReportTo.Substring(0, projectReportTo.Length - 2); projectReportTo = projectReportTo.Substring(0, projectReportTo.Length - 2);
}
localization.Project.Url = projectReportTo; localization.Project.Url = projectReportTo;
continue; continue;
@@ -247,23 +239,20 @@ namespace Claunia.Localization.Parsers
if(projectString.StartsWith("Last-Translator", StringComparison.Ordinal)) if(projectString.StartsWith("Last-Translator", StringComparison.Ordinal))
{ {
var lastTranslator = projectString.Substring(17, projectString.Length - 17); string lastTranslator = projectString.Substring(17, projectString.Length - 17);
if(lastTranslator.EndsWith("\\n", StringComparison.Ordinal)) if(lastTranslator.EndsWith("\\n", StringComparison.Ordinal))
{
lastTranslator = lastTranslator.Substring(0, lastTranslator.Length - 2); lastTranslator = lastTranslator.Substring(0, lastTranslator.Length - 2);
}
if(lastTranslator[lastTranslator.Length - 1] == '>') if(lastTranslator[lastTranslator.Length - 1] == '>')
{ {
var emailStart = lastTranslator.LastIndexOf('<'); int emailStart = lastTranslator.LastIndexOf('<');
var name = lastTranslator.Substring(0, emailStart - 1); string name = lastTranslator.Substring(0, emailStart - 1);
var email = lastTranslator.Substring(emailStart + 1, string email = lastTranslator.Substring(emailStart + 1,
lastTranslator.Length - emailStart - 2); lastTranslator.Length - emailStart - 2);
currentTranslator = localization.NewTranslator(name, email); currentTranslator = localization.NewTranslator(name, email);
} }
else else currentTranslator = localization.NewTranslator(lastTranslator, null);
currentTranslator = localization.NewTranslator(lastTranslator, null);
continue; continue;
} }
@@ -272,12 +261,8 @@ namespace Claunia.Localization.Parsers
{ {
currentLocale = projectString.Substring(10, projectString.Length - 10); currentLocale = projectString.Substring(10, projectString.Length - 10);
if(currentLocale.EndsWith("\\n", StringComparison.Ordinal)) if(currentLocale.EndsWith("\\n", StringComparison.Ordinal))
{
currentLocale = currentLocale.Substring(0, currentLocale.Length - 2); currentLocale = currentLocale.Substring(0, currentLocale.Length - 2);
} }
continue;
}
} }
} }