public static void SetLocale( CultureInfo locale )
{
if (ErrorManager.locale == locale)
return;
ErrorManager.locale = locale;
string language = locale.TwoLetterISOLanguageName;
string fileName = Path.Combine(Path.Combine(Path.Combine(Path.Combine(Path.Combine(AntlrTool.ToolPathRoot, "Tool"), "Templates"), "messages"), "languages"), language + ".stg");
if (!File.Exists(fileName) && locale.TwoLetterISOLanguageName != CultureInfo.GetCultureInfo("en-us").TwoLetterISOLanguageName)
{
SetLocale(CultureInfo.GetCultureInfo("en-us"));
return;
}
messages = new TemplateGroupFile(fileName);
messages.EnableCache = AntlrTool.EnableTemplateCache;
messages.Listener = initSTListener;
if (!messages.IsDefined("INTERNAL_ERROR"))
{
// pick random msg to load
if (language.Equals(CultureInfo.GetCultureInfo("en-us").TwoLetterISOLanguageName))
{
RawError("ANTLR installation corrupted; cannot find English messages file " + fileName);
Panic();
}
else
{
// recurse on this rule, trying the US locale
SetLocale(CultureInfo.GetCultureInfo("en-us"));
}
}
messages.Listener = blankSTListener;
bool messagesOK = VerifyMessages();
if ( !messagesOK && language.Equals(CultureInfo.GetCultureInfo("en-us").TwoLetterISOLanguageName) ) {
RawError("ANTLR installation corrupted; English messages file "+language+".stg incomplete");
Panic();
}
else if ( !messagesOK ) {
SetLocale(CultureInfo.GetCultureInfo("en-us")); // try US to see if that will work
}
}