Commits

Christian Specht committed 5f6480f Draft

move error messages to resources

Comments (0)

Files changed (11)

src/MissileSharp.Launcher/Properties/Resources.Designer.cs

 //     Dieser Code wurde von einem Tool generiert.
 //     Laufzeitversion:4.0.30319.269
 //
-//     Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
-//     der Code neu generiert wird.
+//     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+//     der Code erneut generiert wird.
 // </auto-generated>
 //------------------------------------------------------------------------------
 
-namespace MissileSharp.Launcher.Properties
-{
-
-
+namespace MissileSharp.Launcher.Properties {
+    using System;
+    
+    
     /// <summary>
     ///   Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
     /// </summary>
-    // Diese Klasse wurde von der StronglyTypedResourceBuilder-Klasse
-    // über ein Tool wie ResGen oder Visual Studio automatisch generiert.
+    // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
+    // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
     // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
-    // mit der Option /str erneut aus, oder erstellen Sie Ihr VS-Projekt neu.
+    // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
     [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    internal class Resources
-    {
-
+    internal class Resources {
+        
         private static global::System.Resources.ResourceManager resourceMan;
-
+        
         private static global::System.Globalization.CultureInfo resourceCulture;
-
+        
         [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        internal Resources()
-        {
+        internal Resources() {
         }
-
+        
         /// <summary>
         ///   Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
         /// </summary>
         [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Resources.ResourceManager ResourceManager
-        {
-            get
-            {
-                if ((resourceMan == null))
-                {
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
                     global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MissileSharp.Launcher.Properties.Resources", typeof(Resources).Assembly);
                     resourceMan = temp;
                 }
                 return resourceMan;
             }
         }
-
+        
         /// <summary>
         ///   Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
-        ///   Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden.
+        ///   Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
         /// </summary>
         [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Globalization.CultureInfo Culture
-        {
-            get
-            {
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
                 return resourceCulture;
             }
-            set
-            {
+            set {
                 resourceCulture = value;
             }
         }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die Config file empty:  ähnelt.
+        /// </summary>
+        internal static string ConfigFileEmpty {
+            get {
+                return ResourceManager.GetString("ConfigFileEmpty", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die Couldn&apos;t load config file. Error:{0}{1} ähnelt.
+        /// </summary>
+        internal static string ConfigFileError {
+            get {
+                return ResourceManager.GetString("ConfigFileError", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die Config file missing:  ähnelt.
+        /// </summary>
+        internal static string ConfigFileMissing {
+            get {
+                return ResourceManager.GetString("ConfigFileMissing", resourceCulture);
+            }
+        }
     }
 }

src/MissileSharp.Launcher/Properties/Resources.resx

     
     mimetype: application/x-microsoft.net.object.binary.base64
     value   : The object must be serialized with 
-            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
             : and then encoded with base64 encoding.
     
     mimetype: application/x-microsoft.net.object.soap.base64
             : and then encoded with base64 encoding.
     -->
   <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
     <xsd:element name="root" msdata:IsDataSet="true">
       <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
               <xsd:sequence>
                 <xsd:element name="value" type="xsd:string" minOccurs="0" />
               </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="name" use="required" type="xsd:string" />
               <xsd:attribute name="type" type="xsd:string" />
               <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
             </xsd:complexType>
           </xsd:element>
           <xsd:element name="assembly">
                 <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                 <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
               </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
               <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
               <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
             </xsd:complexType>
           </xsd:element>
           <xsd:element name="resheader">
     <value>2.0</value>
   </resheader>
   <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
   <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <data name="ConfigFileEmpty" xml:space="preserve">
+    <value>Config file empty: </value>
+  </data>
+  <data name="ConfigFileError" xml:space="preserve">
+    <value>Couldn't load config file. Error:{0}{1}</value>
+  </data>
+  <data name="ConfigFileMissing" xml:space="preserve">
+    <value>Config file missing: </value>
+  </data>
 </root>

src/MissileSharp.Launcher/Services/ConfigService.cs

 using System.IO;
+using MissileSharp.Launcher.Properties;
 
 namespace MissileSharp.Launcher.Services
 {
 
             if (!File.Exists(configFile))
             {
-                throw new FileNotFoundException("Config file missing: " + configFile);
+                throw new FileNotFoundException(Resources.ConfigFileMissing + configFile);
             }
 
             var configFileLines = File.ReadAllLines(configFile);
 
             if (configFileLines.Length == 0)
             {
-                throw new FileFormatException("Config file empty: " + configFile);
+                throw new FileFormatException(Resources.ConfigFileEmpty + configFile);
             }
 
             return configFileLines;

src/MissileSharp.Launcher/ViewModels/MainWindowViewModel.cs

 using System.ComponentModel;
 using System.Windows;
 using System.Windows.Input;
+using MissileSharp.Launcher.Properties;
 using MissileSharp.Launcher.Services;
 
 namespace MissileSharp.Launcher.ViewModels
             }
             catch (Exception ex)
             {
-                messageService.ShowMessage(string.Format("Couldn't load config file. Error:{0}{1}", Environment.NewLine, ex.Message));
+                messageService.ShowMessage(string.Format(Resources.ConfigFileError, Environment.NewLine, ex.Message));
                 Application.Current.Shutdown();
                 return;
             }

src/MissileSharp/CommandCenter.cs

 using System;
 using System.Collections.Generic;
 using System.Threading;
+using MissileSharp.Properties;
 
 namespace MissileSharp
 {
         {
             if (sets.CountSets() == 0)
             {
-                throw new InvalidOperationException("No command sets available. You need to load them first using the LoadCommandSets method!");
+                throw new InvalidOperationException(Resources.NoCommandSets);
             }
 
             if (sets.ContainsCommandSet(commandSetName))

src/MissileSharp/CommandSetList.cs

 using System;
 using System.Collections.Generic;
 using System.Linq;
+using MissileSharp.Properties;
 
 namespace MissileSharp
 {
         {
             if (string.IsNullOrEmpty(commandSetName))
             {
-                throw new ArgumentNullException("command set name is empty");
+                throw new ArgumentNullException(Resources.CommandSetNameEmpty);
             }
 
             if (command == null)
             {
-                throw new ArgumentNullException("command is empty");
+                throw new ArgumentNullException(Resources.CommandEmpty);
             }
 
             if (!dict.ContainsKey(commandSetName))

src/MissileSharp/ConfigReader.cs

 using System;
 using System.Collections.Generic;
 using System.IO;
+using MissileSharp.Properties;
 
 namespace MissileSharp
 {
                 {
                     if (string.IsNullOrEmpty(key))
                     {
-                        throw new InvalidOperationException("The first line in the config must be a command set name. There can be no commands before the first command set name!");
+                        throw new InvalidOperationException(Resources.FirstLineMustBeCommandSetName);
                     }
 
                     var items = line.Split(',');
 
                     if (items.Length != 2)
                     {
-                        throw new InvalidOperationException("This line in the config file does not contain exactly two items: " + line);
+                        throw new InvalidOperationException(Resources.LineDoesNotContainTwoItems + line);
                     }
 
                     int value;
 
                     if (!int.TryParse(items[1], out value))
                     {
-                        throw new InvalidOperationException("The second item in this line in the config file must be numeric: " + line);
+                        throw new InvalidOperationException(Resources.SecondItemMustBeNumeric + line);
                     }
 
                     commands.Add(key, items[0], value);

src/MissileSharp/LauncherCommand.cs

 using System;
+using MissileSharp.Properties;
 
 namespace MissileSharp
 {
         {
             if (string.IsNullOrEmpty(command))
             {
-                throw new ArgumentNullException("command is empty");
+                throw new ArgumentNullException(Resources.CommandEmpty);
             }
 
             if (value < 0)
             {
-                throw new ArgumentOutOfRangeException("value must be equal or greater than zero");
+                throw new ArgumentOutOfRangeException(Resources.ValueMustBeEqualGreaterZero);
             }
 
             switch (command.ToLower())
                     this.Command = Command.Fire;
                     break;
                 default:
-                    throw new ArgumentOutOfRangeException("command must be one of the following: up, down, left, right, reset, fire");
+                    throw new ArgumentOutOfRangeException(Resources.CommandMustBeOneOfFollowing);
             }
 
             this.Value = value;
         {
             if (value < 0)
             {
-                throw new ArgumentOutOfRangeException("value must be equal or greater than zero");
+                throw new ArgumentOutOfRangeException(Resources.ValueMustBeEqualGreaterZero);
             }
 
             this.Command = command;

src/MissileSharp/MissileSharp.csproj

     <Compile Include="LauncherCommand.cs" />
     <Compile Include="CommandSetList.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
     <Compile Include="ThunderMissileLauncher.cs">
       <SubType>Code</SubType>
     </Compile>
   </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.

src/MissileSharp/Properties/Resources.Designer.cs

+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Dieser Code wurde von einem Tool generiert.
+//     Laufzeitversion:4.0.30319.269
+//
+//     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+//     der Code erneut generiert wird.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace MissileSharp.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
+    /// </summary>
+    // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
+    // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
+    // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
+    // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MissileSharp.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
+        ///   Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die command is empty ähnelt.
+        /// </summary>
+        internal static string CommandEmpty {
+            get {
+                return ResourceManager.GetString("CommandEmpty", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die command must be one of the following: up, down, left, right, reset, fire ähnelt.
+        /// </summary>
+        internal static string CommandMustBeOneOfFollowing {
+            get {
+                return ResourceManager.GetString("CommandMustBeOneOfFollowing", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die command set name is empty ähnelt.
+        /// </summary>
+        internal static string CommandSetNameEmpty {
+            get {
+                return ResourceManager.GetString("CommandSetNameEmpty", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die The first line in the config must be a command set name. There can be no commands before the first command set name! ähnelt.
+        /// </summary>
+        internal static string FirstLineMustBeCommandSetName {
+            get {
+                return ResourceManager.GetString("FirstLineMustBeCommandSetName", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die This line in the config file does not contain exactly two items:  ähnelt.
+        /// </summary>
+        internal static string LineDoesNotContainTwoItems {
+            get {
+                return ResourceManager.GetString("LineDoesNotContainTwoItems", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die No command sets available. You need to load them first using the LoadCommandSets method! ähnelt.
+        /// </summary>
+        internal static string NoCommandSets {
+            get {
+                return ResourceManager.GetString("NoCommandSets", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die The second item in this line in the config file must be numeric:  ähnelt.
+        /// </summary>
+        internal static string SecondItemMustBeNumeric {
+            get {
+                return ResourceManager.GetString("SecondItemMustBeNumeric", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Sucht eine lokalisierte Zeichenfolge, die value must be equal or greater than zero ähnelt.
+        /// </summary>
+        internal static string ValueMustBeEqualGreaterZero {
+            get {
+                return ResourceManager.GetString("ValueMustBeEqualGreaterZero", resourceCulture);
+            }
+        }
+    }
+}

src/MissileSharp/Properties/Resources.resx

+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="CommandEmpty" xml:space="preserve">
+    <value>command is empty</value>
+  </data>
+  <data name="CommandMustBeOneOfFollowing" xml:space="preserve">
+    <value>command must be one of the following: up, down, left, right, reset, fire</value>
+  </data>
+  <data name="CommandSetNameEmpty" xml:space="preserve">
+    <value>command set name is empty</value>
+  </data>
+  <data name="FirstLineMustBeCommandSetName" xml:space="preserve">
+    <value>The first line in the config must be a command set name. There can be no commands before the first command set name!</value>
+  </data>
+  <data name="LineDoesNotContainTwoItems" xml:space="preserve">
+    <value>This line in the config file does not contain exactly two items: </value>
+  </data>
+  <data name="NoCommandSets" xml:space="preserve">
+    <value>No command sets available. You need to load them first using the LoadCommandSets method!</value>
+  </data>
+  <data name="SecondItemMustBeNumeric" xml:space="preserve">
+    <value>The second item in this line in the config file must be numeric: </value>
+  </data>
+  <data name="ValueMustBeEqualGreaterZero" xml:space="preserve">
+    <value>value must be equal or greater than zero</value>
+  </data>
+</root>