###############################################################################
# Copyright (c) 2001, 2008 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
# 
# Contributors:
# IBM Corporation - initial API and implementation
###############################################################################
#     *************************************************************************
#     * Code oriented instructions:
#     *
#     * In the string, you may see the following special sequences:
#     * a) {n}  where n is a number. These are replaceable parameters.
#     * b) ''  In .properties files, in order to see one apostrophe (') in the final
#     *    string, sometimes two apostrophes must be entered in the string. In the translated
#     *    string, if there is at least one {n} in the string, then to show one apostrophe
#     *    to the user, put two apostrophes in the string. If there are no {n} in the string,
#     *    then put one apostrophe.
#     *    For example, say that you want the user to read "George's file". 
#     *        GEORGE=George's file was on the desk.
#     *        GEORGE2=George''s file and {0} were on the desk.
#     *    GEORGE uses one apostrophe because there are no {n} and GEORGE2
#     *    uses two apostrophes because there is a {n}.
#     * c) '' text '' where text can be any word(s). The text between the double
#     *    apostrophes should not be translated. 
#     * d) <text> where text can be any word(s). The text between the angle
#     *    brackets should NOT be translated.
#     * e) "text" where text can be any word(s). The text between the quotation 
#     *    marks should NOT be translated.
#     *    
#     *************************************************************************
#     * Other instructions
#     * a) Do not translate any text that is on a line which begins with a comment 
#     *    symbol (#).
#     * b) Do not translate these words: 
#     *        schema, EJB, RDB, JAR, RMI, BMP, CMP, OOSQL
#     * c) Please return the .properties files using the same directory structure.
#     *    This is necessary because two of the files have the same name.
#     *
#     *************************************************************************
# Any other comments to the translators are on lines which start like this:  # 2TC:
#
# Version 1.12
#
#
# ID:
#    VBF - Validation Builder Framework
#

# 
# Begin Validation Builder Framework UI Strings
#
# IDs:
#    VBF_EXC=Exception or error text
#    VBF_UI=UI label
#
PREF_BUTTON_OVERRIDE=Allow projects to override these preference settings
PREF_BUTTON_ENABLEALL=Enable All
PREF_BUTTON_DISABLEALL=Disable All
PREF_VALLIST_TITLE=The selected validators will run when validation is performed:
PREF_MNU_MANUAL=&Manual
PREF_MNU_BUILD=&Build
PREF_MNU_SETTINGS=&Settings...

VBF_EXC_INTERNAL_TITLE=Internal error
VBF_EXC_INTERNAL_PAGE=An unexpected error occurred; click Cancel to close the wizard.

VBF_EXC_INVALID_REGISTER=Validators can run only on open resources.
ProjectOverridesNotAllowed=The workspace validation preferences do not allow projects to override the workspace settings. In order to allow project settings you need to configure the workspace settings to allow project overrides.  
 
VBF_UI_NO_VALIDATORS_INSTALLED=No validators are installed.

DISABLE_VALIDATION=Suspend all validators

DelegatesDialogTitle=Validator Preferences
DelegatesComboLabel=Implementation:
ADD_VALIDATION_BUILDER=Add Validation Builder to project
ConfigWsSettings=Configure Workspace Settings...
VALIDATOR=Validator
MANUAL=Manual
BUILD=Build
SETTINGS=Settings

SaveFilesDialog_saving=Saving Resources
SaveFilesDialog_always_save=&Always save all modified resources automatically prior to validating
SaveFilesDialog_save_all_resources=Save All Modified Resources
SaveFilesDialog_must_save=All modified resources must be saved before this operation.

PrefPage_always_save=&Save all modified resources automatically prior to validating
PrefPageConfirmDialog=Show a confirmation dialog when performing manual validations

RunValidationDialogTitle=Running Validation

fdTitle=Validation Filters for {0}
fdNoFilters=The validator does not have currently have any filters installed.
ErrConfig=Extension configuration error. An internal error has happened, the validator {0} has incorrectly configured the validation extension point.

FilterHelp=Filter rules are grouped into groups. Inside of any one group the rules are or'd together. There are two types of groups Include and Exclude. If any of the rules in the Exclude group match, the resource is not validated. If there are Include groups, at least one rule from each group must match before the resource is validated.
ButtonAddGroupInclude=Add Include Group...
ButtonAddGroupExclude=Add Exclude Group...
ButtonAddRule=Add Rule...
ButtonRemove=Remove 

LabelEnableProjectSpecific=Enable project specific settings

LabelExtension=File extension
LabelFile=Folder or file name
LabelProjects=Project nature
LabelFacets=Facet
LabelContentType=Content Type

# Note to translators, keep the <A> and </A> tags exactly as they are
DoNotShowResults=Do not show this dialog in the future.

DescExtension=File extension, for example "html" for HTML files.
DescFile=Either a folder, a relative file, or a fully qualified file name.
DescProjects=A project nature.
DescFacets=A facet.
DescContentType=A content type, for example the XML content type.

ErrorsWarnings=Errors/Warnings

Validation=Validation
ValidationStatus=Validation Status

ErrSummary=Validation results. Errors={0}, Warnings={1}, Information={2}
ValidationSuccessful=Validation was successful

FrWizard=New Filter Rule Wizard
FrSelectFilterType=Select Filter Type
FrFileExtension=File Extension
FrFileExtensionLabel=File extension, for example html:
FrCaseSensitive=Is the comparison case sensitive?
FrExactMatch=Check this if the content type needs to match exactly. Do not check it, if sub types need to match as well.
FrFolderOrFile=Folder or File Name
FrFolderOrFileLabel=File or folder:
FrBrowseFile=Browse File...
FrFileFilter=Select the file that will serve as the filter
FrBrowseFolder=Browse Folder...
FrFolderFilter=Select the folder that will serve as the filter
FrProjectNature=Project Nature
FrProjectNatureLabel=Project nature:
FrFacit=Facet
FrFacitLabel=Facet id:
FrContentType=Content Type
FrContentTypeLabel=Content Type:
FrMsgSev=Select the severity level for the following problems

#
# End Validation Builder Framework UI Strings
#

