#
# Licensed Material - Property of IBM 
# (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
# US Government Users Restricted Rights - Use, duplication or disclosure 
# restricted by GSA ADP Schedule Contract with IBM Corp. 
#
#  DISCLAIMER OF WARRANTIES.
#  The following [enclosed] code is sample code created by IBM
#  Corporation. This sample code is not part of any standard or IBM
#  product and is provided to you solely for the purpose of assisting
#  you in the development of your applications.  The code is provided
#  "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
#  NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
#  FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
#  THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
#  for any damages arising out of your use of the sample code, even
#  if it has been advised of the possibility of such damages.
#

ABCD0000 = ABCD0000E: Match the braces in the message. There are {0} '{' and {1} '}'. MessageFormat will throw a NullPointerException when there are mismatching braces.
ABCD0010E = ABCD0010E: Change argument ('{'{0}'}') to an integer between 0 and 9 inclusive in the message. MessageFormat cannot process an integer parameter that is less than 0.
ABCD0010W = ABCD0010W: Change argument ('{'{0}'}') to an integer between 0 and 9 inclusive in the message. MessageFormat ignores any parameters larger than 9.
ABCD0020 = ABCD0020I: Remove redundant parameter '{'{0}'}' from the message. Make messages succinct.
ABCD0030 = ABCD0030I: Check that argument '{'{0}'}' was omitted from the message deliberately. If it was omitted accidentally, and the code does not provide enough parameters, MessageFormat will throw a NullPointerException.
ABCD0040 = ABCD0040I: Use two apostrophes in the message at column {0}. MessageFormat removes single apostrophes; for the message to display an apostrophe, two apostrophes must exist in the string. (An apostrophe is a reserved character of MessageFormat.)
ABCD0050 = ABCD0050I: Use one apostrophe in the message at column {0}. MessageFormat processes only messages with parameters; without MessageFormat, the extra apostrophe will not be removed.

ABCD0060 = ABCD0060W: Make {0} unique. When an id is used more than once in a file, ResourceBundle will use the value of the last message id.
ABCD0070 = ABCD0070W: {0} may need to be unique. Conventionally, a message prefix applies to only one error condition.

ABCD0080 = ABCD0080E: Fix the syntax error; each line must form MESSAGE_ID = MESSAGE.
ABCD0090 = ABCD0090W: Check the read permissions of file {0}. The PropertiesValidator either cannot read or cannot find the file.

ABCD0110 = ABCD0110I: Add a terminating apostrophe at column {0}. The '{' and '}' characters must be enclosed in apostrophes.

ABCD0120 = ABCD0120I: Terminate message prefix {0} with a '':''. The IBM standard requires that message prefixes end with a colon.
ABCD0130 = ABCD0130I: Remove the whitespace between {0} and the '':''. The IBM standard requires an absence of whitespace between the alphanumeric characters and the colon.

# Outside WSAD, append the line number and file name to the end of the message.
LINE_LOC = Line {0}, file {1}.

