Localization Diagnostics
This article gives tips for diagnosing localization issues.
.AddErrorHandler(func) adds a handler that handles localization file parse errors.
// Get localization context
ILocalization localization = Localization.Default;
// Add parse error printer
localization.AddErrorHandler((ILocalizationError e) => Console.WriteLine(e));
text.Errors is a property that contains text specific parse errors.
// Get localization context
ILocalization localization = Localization.Default;
// Try get text
if (localization.LocalizedTextCached.TryGetValue(("", "Namespace.Apples"), out ILocalizedText text))
{
// Print any parse errors
foreach (ILocalizationError error in text.Errors) WriteLine(error);
}
.FileQuery and .FileQueryCached can be queried for all the files that are visible to query mechanism.
// Get localization context
ILocalization localization = Localization.Default;
// Print files that are visible to localization
if (localization.FileQueryCached.TryGetValue((null, null), out IEnumerable<ILocalizationFile> files))
foreach (ILocalizationFile file in files)
WriteLine(file.Key);
.Files.FileProviders and .Files.FileProvidersCached can be inspected for files that are accessible to them.
// Get localization context
ILocalization localization = Localization.Default;
// Try each file provider
foreach (var fp in localization.Files.FileProvidersCached)
{
// Try query files
if (!fp.TryGetValue((null, null), out IEnumerable<ILocalizationFile> files)) continue;
// Print file provider composition
WriteLine(fp);
// Print files
foreach (ILocalizationFile file in files) WriteLine(file.Key);
}
Each assigned localization file system can be browsed for the resources that are visible to them. Note that embedded resources are typically added as file provider (see above), not as filesystem.
// Get localization context
ILocalization localization = Localization.Default;
// Print files that are visible to each file system
foreach (ILocalizationFileSystem fs in localization.Files.FileSystems)
{
// Visit tree
foreach (var file in fs.VisitTree(""))
{
// Print text
string print = file.Path == "" ? fs.ToString()! : file.ToString(LocalizationFileSystemPrintTreeExtensions.PrintFormat.DefaultLong);
// Write to console
WriteLine(print);
}
}
.LineQuery and .LineQueryCached can be queried for all the lines that are visible to the line query mechanism.
// Get localization context
ILocalization localization = Localization.Default;
// Print lines that are visible to localization
if (localization.LineQueryCached.TryGetValue((null, null), out IEnumerable<IEnumerable<KeyValuePair<string, MarkedText>>> lines))
foreach (var line in lines)
WriteLine(string.Join(", ", line.Select(a => $"{a.Key}={a.Value.AsString}")));
See Cache article for information about caches.
Full Example
Full example
using Avalanche.Localization;
using Avalanche.Utilities;
using static System.Console;
class diagnostics
{
public static void Run()
{
{
// <01>
// Get localization context
ILocalization localization = Localization.Default;
// Add parse error printer
localization.AddErrorHandler((ILocalizationError e) => Console.WriteLine(e));
// </01>
}
{
// <02>
// Get localization context
ILocalization localization = Localization.Default;
// Try get text
if (localization.LocalizedTextCached.TryGetValue(("", "Namespace.Apples"), out ILocalizedText text))
{
// Print any parse errors
foreach (ILocalizationError error in text.Errors) WriteLine(error);
}
// </02>
}
{
// <03>
// Get localization context
ILocalization localization = Localization.Default;
// Print files that are visible to localization
if (localization.FileQueryCached.TryGetValue((null, null), out IEnumerable<ILocalizationFile> files))
foreach (ILocalizationFile file in files)
WriteLine(file.Key);
// </03>
}
{
// <03B>
// Get localization context
ILocalization localization = Localization.Default;
// Try each file provider
foreach (var fp in localization.Files.FileProvidersCached)
{
// Try query files
if (!fp.TryGetValue((null, null), out IEnumerable<ILocalizationFile> files)) continue;
// Print file provider composition
WriteLine(fp);
// Print files
foreach (ILocalizationFile file in files) WriteLine(file.Key);
}
// </03B>
}
{
// <04>
// Get localization context
ILocalization localization = Localization.Default;
// Print files that are visible to each file system
foreach (ILocalizationFileSystem fs in localization.Files.FileSystems)
{
// Visit tree
foreach (var file in fs.VisitTree(""))
{
// Print text
string print = file.Path == "" ? fs.ToString()! : file.ToString(LocalizationFileSystemPrintTreeExtensions.PrintFormat.DefaultLong);
// Write to console
WriteLine(print);
}
}
// </04>
}
{
// <05>
// Get localization context
ILocalization localization = Localization.Default;
// Print lines that are visible to localization
if (localization.LineQueryCached.TryGetValue((null, null), out IEnumerable<IEnumerable<KeyValuePair<string, MarkedText>>> lines))
foreach (var line in lines)
WriteLine(string.Join(", ", line.Select(a => $"{a.Key}={a.Value.AsString}")));
// </05>
}
}
}