-
Notifications
You must be signed in to change notification settings - Fork 482
/
Copy pathLocalizableSentenceBuilder.cs
126 lines (117 loc) · 6.52 KB
/
LocalizableSentenceBuilder.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CommandLine;
using CommandLine.Text;
namespace ReadText.LocalizedDemo
{
public class LocalizableSentenceBuilder : SentenceBuilder
{
public override Func<string> RequiredWord
{
get { return () => Properties.Resources.SentenceRequiredWord; }
}
public override Func<string> ErrorsHeadingText
{
// Cannot be pluralized
get { return () => Properties.Resources.SentenceErrorsHeadingText; }
}
public override Func<string> UsageHeadingText
{
get { return () => Properties.Resources.SentenceUsageHeadingText; }
}
public override Func<bool, string> HelpCommandText
{
get
{
return isOption => isOption
? Properties.Resources.SentenceHelpCommandTextOption
: Properties.Resources.SentenceHelpCommandTextVerb;
}
}
public override Func<bool, string> VersionCommandText
{
get { return _ => Properties.Resources.SentenceVersionCommandText; }
}
public override Func<Error, string> FormatError
{
get
{
return error =>
{
switch (error.Tag)
{
case ErrorType.BadFormatTokenError:
return String.Format(Properties.Resources.SentenceBadFormatTokenError, ((BadFormatTokenError)error).Token);
case ErrorType.MissingValueOptionError:
return String.Format(Properties.Resources.SentenceMissingValueOptionError, ((MissingValueOptionError)error).NameInfo.NameText);
case ErrorType.UnknownOptionError:
return String.Format(Properties.Resources.SentenceUnknownOptionError, ((UnknownOptionError)error).Token);
case ErrorType.MissingRequiredOptionError:
var errMisssing = ((MissingRequiredOptionError)error);
return errMisssing.NameInfo.Equals(NameInfo.EmptyName)
? Properties.Resources.SentenceMissingRequiredOptionError
: String.Format(Properties.Resources.SentenceMissingRequiredOptionError, errMisssing.NameInfo.NameText);
case ErrorType.MissingRequiredValueError:
var errMissing = ((MissingRequiredValueError)error);
return String.Format(Properties.Resources.SentenceMissingRequiredValueError,
errMisssing.NameInfo.Equals(NameInfo.EmptyName) ? errMissing.NameInfo.NameText : Convert.ToString(error.ValuePosition));
case ErrorType.BadFormatConversionError:
var badFormat = ((BadFormatConversionError)error);
return badFormat.NameInfo.Equals(NameInfo.EmptyName)
? Properties.Resources.SentenceBadFormatConversionErrorValue
: String.Format(Properties.Resources.SentenceBadFormatConversionErrorOption, badFormat.NameInfo.NameText);
case ErrorType.SequenceOutOfRangeError:
var seqOutRange = ((SequenceOutOfRangeError)error);
return seqOutRange.NameInfo.Equals(NameInfo.EmptyName)
? Properties.Resources.SentenceSequenceOutOfRangeErrorValue
: String.Format(Properties.Resources.SentenceSequenceOutOfRangeErrorOption,
seqOutRange.NameInfo.NameText);
case ErrorType.BadVerbSelectedError:
return String.Format(Properties.Resources.SentenceBadVerbSelectedError, ((BadVerbSelectedError)error).Token);
case ErrorType.NoVerbSelectedError:
return Properties.Resources.SentenceNoVerbSelectedError;
case ErrorType.RepeatedOptionError:
return String.Format(Properties.Resources.SentenceRepeatedOptionError, ((RepeatedOptionError)error).NameInfo.NameText);
case ErrorType.SetValueExceptionError:
var setValueError = (SetValueExceptionError)error;
return String.Format(Properties.Resources.SentenceSetValueExceptionError, setValueError.NameInfo.NameText, setValueError.Exception.Message);
}
throw new InvalidOperationException();
};
}
}
public override Func<IEnumerable<MutuallyExclusiveSetError>, string> FormatMutuallyExclusiveSetErrors
{
get
{
return errors =>
{
var bySet = from e in errors
group e by e.SetName into g
select new { SetName = g.Key, Errors = g.ToList() };
var msgs = bySet.Select(
set =>
{
var names = String.Join(
String.Empty,
(from e in set.Errors select String.Format("'{0}', ", e.NameInfo.NameText)).ToArray());
var namesCount = set.Errors.Count();
var incompat = String.Join(
String.Empty,
(from x in
(from s in bySet where !s.SetName.Equals(set.SetName) from e in s.Errors select e)
.Distinct()
select String.Format("'{0}', ", x.NameInfo.NameText)).ToArray());
//TODO: Pluralize by namesCount
return
String.Format(Properties.Resources.SentenceMutuallyExclusiveSetErrors,
names.Substring(0, names.Length - 2), incompat.Substring(0, incompat.Length - 2));
}).ToArray();
return string.Join(Environment.NewLine, msgs);
};
}
}
}
}