/* Wrong node type code at actions element level */
"ActionsElementInvalidNodeType" = "The keyboard layout was invalid.
The actions element has an invalid node type.";

/* Format string for wrong element type */
"ActionsElementWrongElementType" = "The keyboard layout was invalid.
In the actions element, expected an action, but got an element of type %@.";

/* No elements declared in the top level keyboard */
"KeyboardElementNoElements" = "The keyboard layout was invalid.
The top level keyboard element is empty.";

/* Error message for missing elements (group, ID or name) */
"KeyboardElementMissingAttributes" = "The keyboard layout was invalid.
In top level keyboard element: One or more missing attributes (group, id or name).";

/* The element type was not valid */
"KeyboardElementInvalidElementType" = "The keyboard layout was invalid.
In the keyboard element, got an unrecognised element of type %@.";

/* Wrong node type code at keyboard level */
"KeyboardElementWrongNodeType" = "The keyboard layout was invalid.
In the keyboard element, got an invalid node of type %d.";

/* There was a second actions element */
"KeyboardElementRepeatedActionsElement" = "The keyboard layout was invalid.
There can only be one actions element, but there were more than one.";

/* There was a second layouts element */
"KeyboardElementRepeatedLayoutsElement" = "The keyboard layout was invalid.
There can only be one layouts element, but there were more than one.";

/* There was a second terminators element */
"KeyboardElementRepeatedTerminatorsElement" = "The keyboard layout was invalid.
There can only be one terminators element, but there were more than one.";

/* The file was an XML file, but not a keyboard layout file */
"UkeleleKeyboardWrongXMLType" = "The file is the wrong XML type: Element type (%@) is not keyboard";

/* The node type was not expected */
"UkeleleKeyboardUnknownNodeType" = "The keyboard layout was invalid.
Unknown node type in the keyboard element of the XML tree";

/* The zoom value was invalid */
"InvalidZoomValue" = "The zoom value must be a number between %d and %d";

/* The specified key can't be unlinked, as it's not already linked */
"KeyNotLinked" = "The specified key is not linked, so cannot be unlinked";

/* The keyboard layout selected for import was invalid in some way */
"ErrorInvalidKeyboardForImport" = "The keyboard layout file was not valid";

/* The keyboard has an incompatible modifier map */
"ErrorIncompatibleModifierMap" = "The chosen keyboard layout is not compatible with this keyboard layout, so the dead key cannot be imported";

/* Can't import a dead key from the current keyboard */
"ErrorCannotImportFromSameFile" = "You cannot import a dead key from the current file";

/* Error reading the XML file */
"InvalidXMLFile" = "The file was invalid XML.
At line %@, %@.";

/* The keyboard was empty */
"EmptyKeyboard" = "The file does not contain a complete keyboard layout";

/* The keyboard contains multiplier actions */
"HasMultiplierAction" = "This keyboard layout has multiplier actions, which Ukelele cannot handle, so this file cannot be opened";

/* The keyboard has indirect base maps */
"HasIndirectBaseMaps" = "This keyboard has indirect base maps, which Ukelele cannot handle, so this file cannot be opened";

/* There are actions referred to but not defined in the keyboard layout */
"HasMissingActions" = "The keyboard layout was invalid.
It refers to the following actions, but does not define them: %@";

/* Code point is beyond Unicode range */
"CodePointBeyondUnicode" = "Code point %X is beyond the Unicode range";

/* Code point is in surrogate range */
"CodePointInSurrogateRange" = "Code point %04X is in the surrogate pair range";

/* Unicode non-character */
"CodePointNotUnicodeCharacter" = "Code point %04X is a non-character in Unicode";

/* Can't capture the current input source */
"CannotCaptureInputSource" = "Unable to capture the current input source as a usable keyboard layout";

/* XML errors of various sorts */
"UkeleleKeyboardRepeatedXMLHeader" = "The keyboard layout was invalid.
The XML file can only be one header element, but there were more than one.";

"UkeleleKeyboardRepeatedDTD" = "The keyboard layout was invalid.
The XML file can only be one DTD element, but there were more than one.";

"NotKeyMapSetError" = "The keyboard layout was invalid.
In the XML file, in the modifierMap element expected a keyMapSet element, but got an element of type %@.";

"ModifierMapMissingID" = "The keyboard layout was invalid.
In the XML file, a modifierMap is missing the required id attribute.";

"ModifierMapMissingDefaultIndex" = "The keyboard layout was invalid.
In the XML file, the modifierMap \"%@\" is missing the required defaultIndex attribute.";

"ModifierMapInvalidNodeType" = "The keyboard layout was invalid.
In the XML file, the modifierMap \"%@\" has an invalid node type.";

"KeyElementMissingCodeAttribute" = "The keyboard layout was invalid.
A key element is missing the required code attribute.";

"KeyElementDoubleSpecified" = "The keyboard layout was invalid.
A key element is specified as both output and action.";

"KeyElementNotActionElement" = "The keyboard layout was invalid.
In a key element, expected an action element, but got an element of type %@ instead.";

"KeyElementOverspecified" = "The keyboard layout was invalid.
A key element was specified more than once.";

"KeyElementInvalidNodeType" = "The keyboard layout was invalid.
In the XML file, a key element has an invalid node type.";

"WhenElementMissingState" = "The keyboard layout was invalid.
A when element is missing the required state attribute.";

"TerminatorsElementNotWhen" = "The keyboard layout was invalid.
In the terminators element, expected a when element, but got an element of type %@.";

"TerminatorsElementRepeatedWhen" = "The keyboard layout was invalid.
In the terminators element, the when element \"%@\" is repeated.";

"TerminatorsElementInvalidNodeType" = "The keyboard layout was invalid.
In the XML file, the terminators element has an invalid node type.";

"ActionElementInvalidNodeType" = "The keyboard layout was invalid.
In the XML file, the action element \"%@\" has an invalid node type.";

"ActionElementRepeatedWhenElement" = "The keyboard layout was invalid.
In the XML file, the action element \"%@\" has the when element \"%@\" repeated.";

"ActionElementNotWhenElement" = "The keyboard layout was invalid.
In the XML file, the action element \"%@\", expected a when element, but got an element of type %@.";

"ActionElementMissingIDAttribute" = "The keyboard layout was invalid.
In the XML file, an action element is missing the required id attribute.";

"KeyMapElementMissingIndexAttribute" = "The keyboard layout was invalid.\rIn the XML file, a keyMap element is missing the required index attribute.";

"KeyMapElementMissingBaseMap" = "The keyboard layout was invalid.\rIn the XML file, the keyMap element index %@ has a base index, but no base map specified.";

"KeyMapElementMissingBaseIndex" = "The keyboard layout was invalid.\rIn the XML file, the keyMap element index %@ has a base map, but no base index specified.";

"KeyMapElementWrongElementType" = "The keyboard layout was invalid.\rIn the keyMap element index %@, expected a key element, but got %@.";

"KeyMapElementRepeatedKeyElement" = "The keyboard layout was invalid.\rIn the keyMap element index %@, the key element with code %d is repeated.";

"KeyMapElementInvalidNodeType" = "The keyboard layout was invalid.\rIn the keyMap element index %@, got an invalid node type.";

"KeyMapSelectMissingMapIndexAttribute" = "The keyboard layout was invalid.\rIn the XML file, a keyMapSet element is missing the required mapIndex attribute.";

"KeyMapSelectWrongElementType" = "The keyboard layout was invalid.\rIn the keyMapSet index %@, expected a modifier element, but got an element of type %@.";

"KeyMapSelectInvalidNodeType" = "The keyboard layout was invalid.\rIn the keyMapSet index %@, got an invalid node type.";

"KeyMapSetMissingIDAttribute" = "The keyboard layout was invalid.\rIn the XML file, a keyMapSet element is missing the required id attribute.";

"KeyMapSetWrongElementType" = "The keyboard layout was invalid.\rIn the keyMapSet element \"%@\", expected a keyMap element, but got an element of type %@.";

"KeyMapSetInvalidNodeType" = "The keyboard layout was invalid.\rIn the keyMapSet element \"%@\", got an invalid node type.";

"LayoutElementMissingFirstAttribute" = "The keyboard layout was invalid.\rA layout element is missing the required first attribute.";

"LayoutElementMissingLastAttribute" = "The keyboard layout was invalid.\rA layout element is missing the required last attribute.";

"LayoutElementMissingModifiersAttribute" = "The keyboard layout was invalid.\rA layout element is missing the required modifiers attribute.";

"LayoutElementMissingMapSetAttribute" = "The keyboard layout was invalid.\rA layout element is missing the required mapSet attribute.";

"LayoutsElementWrongElementType" = "The keyboard layout was invalid.\rIn the layouts element, expected a layout element, but got an element of type %@.";

"LayoutsElementInvalidNodeType" = "The keyboard layout was invalid.\rIn the layouts element, got an invalid node type.";

"ModifierElementMissingKeysAttribute" = "The keyboard layout was invalid.\rA modifier element is missing the required keys attribute.";

"MissingLayoutsElement" = "The keyboard layout was invalid.\rThe layouts element is missing.";

"ErrorHasMissingKeyMapSets" = "The keyboard layout was invalid.\rThe keyboard layout refers to the following keyMapSet elements, but does not define them: %@.";

"ErrorMissingKeyMap" = "The keyboard layout was invalid.\rThe modifier map with ID \"%@\", in key map set with ID \"%@\", is missing the key map index %d.";

"RepairedMissingKeyMap" = "One or more key maps were missing, and have been set to default values, with only special key output";

"RepairedJISInfoString" = "An error in this keyboard layout file produced by a version of Ukelele before 1.0.3 has been repaired. You will need to save the keyboard layout to keep the fix.";

"KeyboardRepeatedModifierMap" = "The keyboard layout was invalid.\rThere are two modifier maps with the id \"%@\".";

"KeyboardElementRepeatedKeyMapSet" = "The keyboard layout was invalid.\rThere are two key map sets with the id \"%@\".";

"KeyMapSetRepeatedKeyMap" = "The keyboard layout was invalid.\rThe key map set id \"%@\" has two key maps with id %d.";

"KeyboardElementEmptyLayoutsElement" = "The keyboard layout was invalid.\rThe layouts element is empty.";

"ActionElementEmpty" = "The keyboard layout was invalid.\rThe action with ID \"%@\" has no when elements.";

"TerminatorsElementWhenExtraAttributes" = "The keyboard layout was invalid.\rIn the terminators element, the when element for state \"%@\" specifies attributes apart from output.";

"ModifierElementUnknownModifier" = "The keyboard layout was invalid.\rThere was an unknown modifier string \"%@\".";

"KeyMapSetSelfReferentialBaseMap" = "The keyboard layout was invalid.\rThe key map set id \"%@\" has a key map with a base map that refers to itself.";

"KeyMapSelectEmpty" = "The keyboard layout was invalid.\rThe keyMapSelect element with index %d is empty.";

"ModifierMapEmpty" = "The keyboard layout was invalid.\rThe modifier map with ID \"%@\" contains no keyMapSelect elements.";

"MissingModifierMapElement" = "The keyboard layout was invalid.\rNo modifier maps were defined.";

"StateNameAlreadyExists" = "That state name is already in use.";
