###############################################################################
# Copyright (c) 2001, 2009 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=E&nable All
PREF_BUTTON_DISABLEALL=D&isable 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=S&uspend all validators

DelegatesDialogTitle=Validator Preferences
DelegatesComboLabel=Im&plementation:
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 combined by using the logical OR operator. 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 R&ule...
ButtonRemove=&Remove 

LabelEnableProjectSpecific=Enable pr&oject specific settings

LabelExtension=File &extension
LabelFile=F&older 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=Validating
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.
FrSimpleFileName=For file based &comparisons, use only the simple file name.
FrFolderOrFile=Folder or File Name
FrFolderOrFileLabel=Fil&e or folder:
FrBrowseFile=Browse &File...
FrFileFilter=Select the file that will serve as the filter
FrBrowseFolder=Browse F&older...
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

RebuildTitle=Validation Settings Changed
RebuildMsg=The validation settings have changed. A full rebuild is required for the changes to take effect. Do the full build now?

#
# End Validation Builder Framework UI Strings
#

