private LanguageEntity(string languageFilename)
{
TranslationEntities = new Dictionary<string, TranslationEntity>();
string content;
using (StreamReader sr = new StreamReader(languageFilename))
{
Filename = languageFilename;
content = sr.ReadToEnd();
MatchCollection matches = Regex.Matches(languageFilename, LanguageFilenameRegexPattern);
if (matches.Count != 1 || matches[0].Groups.Count != 2)
{
throw new ApplicationException("Language ID not found!");
}
Id = matches[0].Groups[1].Value;
matches = Regex.Matches(content, @"\$lang_name( *?)=( *?)""(.*?)""( *?);");
if (matches.Count > 0 && matches[0].Groups.Count == 5)
{
Name = matches[0].Groups[3].Value;
HeaderTitle = string.Format("{0} ({1})", languageFilename, Name);
}
else
{
HeaderTitle = Name = languageFilename;
}
matches = Regex.Matches(content, @"\$language_pack( *?)\[( *?)'(.*?)'( *?)\]( *?)=( *?)""(.*?)""( *?);");
foreach (Match match in matches)
{
string translationId = match.Groups[3].Value.ToLower();
string defaulTranslation = DefaultLanguage != null &&
DefaultLanguage.TranslationEntities.ContainsKey(translationId)
? DefaultLanguage.TranslationEntities[translationId].Translation
: string.Empty;
TranslationEntity translation = new TranslationEntity(this, translationId, match.Groups[7].Value, defaulTranslation);
if (TranslationEntities.ContainsKey(translationId))
{
TranslationEntities[translationId] = translation;
}
else
{
TranslationEntities.Add(translationId, translation);
}
}
if (DefaultLanguage != null)
{
foreach (TranslationEntity translationEntity in DefaultLanguage.TranslationEntities.Values)
{
if (!TranslationEntities.ContainsKey(translationEntity.TranslationId))
{
TranslationEntities.Add(translationEntity.TranslationId,
new TranslationEntity(this, translationEntity.TranslationId,
string.Empty, translationEntity.Translation));
}
}
}
}
}