###############################################################################
# Copyright (c) 2004, 2007 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
#     Benjamin Muskalla, b.muskalla@gmx.net - [158660] character entities should have their own syntax highlighting preference      
###############################################################################
## The following line is a sample HTML document.  Please translate only the following parts:
## HTML Highlighting Preferences
## we need a flaming logo
Sample_HTML_doc=<!DOCTYPE html\n\tPUBLIC \"-//W3C/DTD/ HTML 4.01 Transitional//EN\"\n\t\"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n\t<head>\n\t\t<meta content=\"text/html\">\n\t\t<title>HTML Highlighting Preferences</title>\n\t</head>\n<body>\n\t<!--\n\t\twe need a flaming logo!\n\t-->\n\t<p>three&nbsp;&nbsp;&nbsp;spaces</p>\n</body>\n</html>

HTMLFilesPreferencePage_0=Loading files...
#
_UI_WIZARD_NEW_TITLE = New HTML Page
_UI_WIZARD_NEW_HEADING = HTML Page
_UI_WIZARD_NEW_DESCRIPTION = Create a new HTML Page.
_ERROR_FILENAME_MUST_END_HTML = The file name must end in one of the following extensions {0}.
_WARNING_FOLDER_MUST_BE_INSIDE_WEB_CONTENT = Files created outside of the Web Content folder will not be included in your deployed Web application. 
ResourceGroup_nameExists = The same name already exists.
NewHTMLTemplatesWizardPage_0=Select HTML Template
NewHTMLTemplatesWizardPage_1=Select a template as initial content in the HTML page.
NewHTMLTemplatesWizardPage_2=Name
NewHTMLTemplatesWizardPage_3=Description
NewHTMLTemplatesWizardPage_4=Use HTML Template
NewHTMLTemplatesWizardPage_5=Preview
NewHTMLTemplatesWizardPage_6=Templates are 'New HTML' templates found in the <a>HTML Templates</a> preference page.
#
Creating_files_encoding=Creating files encoding preference
MESSAGE_HTML_VALIDATION_MESSAGE_UI_=HTML Syntax : {0}
# Copied from sse.ui
CleanupDocument_label=Cleanup Document...
CleanupDocument_tooltip=Cleanup Document
CleanupDocument_description=Cleanup Document
ToggleComment_label=Toggle Comment
ToggleComment_tooltip=Toggle Comment
ToggleComment_description=Toggle Comment
AddBlockComment_label=Add Block Comment
AddBlockComment_tooltip=Add Block Comment
AddBlockComment_description=Add Block Comment
RemoveBlockComment_label=Remove Block Comment
RemoveBlockComment_tooltip=Remove Block Comment
RemoveBlockComment_description=Remove Block Comment
FindOccurrences_label=Occurrences in File
Creating_files=Creating files
Encoding_desc=The following encoding will apply:
Preferred_markup_case_UI_=Preferred markup case for content assist, and code generation
Tag_names__UI_=Tag names:
Tag_names_Upper_case_UI_=&Uppercase
Tag_names_Lower_case_UI_=&Lowercase
Attribute_names__UI_=Attribute names:
Attribute_names_Upper_case_UI_=U&ppercase
Attribute_names_Lower_case_UI_=L&owercase
Cleanup_UI_=Cleanup
Tag_name_case_for_HTML_UI_=Tag name case for HTML:
Tag_name_case_As_is_UI_=&As-is
Tag_name_case_Lower_UI_=&Lower
Tag_name_case_Upper_UI_=&Upper
Attribute_name_case_for_HTML_UI_=Attribute name case for HTML:
Attribute_name_case_As_is_UI_=A&s-is
Attribute_name_case_Lower_UI_=L&ower
Attribute_name_case_Upper_UI_=U&pper
Insert_required_attributes_UI_=Insert &required attributes
Insert_missing_tags_UI_=&Insert missing tags
Quote_attribute_values_UI_=&Quote attribute values
Format_source_UI_=&Format source
Convert_EOL_codes_UI_=Convert line &delimiters to
EOL_Windows_UI=&Windows
EOL_Unix_UI=U&NIX
EOL_Mac_UI=&Mac

# web content settings
UI_Description_of_role_of_following_DOCTYPE=Use the following default document type when no DOCTYPE is declared in a file:
UI_Default_HTML_DOCTYPE_ID___1=Document type:
UI_Public_ID=Public ID:
UI_System_ID=System ID:
UI_none=none
UI_CSS_profile___2=CSS profile:
WebContentSettingsPropertyPage_0=The properties used that cannot or are not specified in web files.  The project setting is used if you specify "none."
ProjectWebContentSettingsPropertyPage_0=The properties for J2EE Web projects act as "project" default to be looked up when no properties are specified for a particular web file.

# below are possibly unused strings that may be deleted
HTMLFilesPreferencePage_1=Add this suffix (if not specified):
HTMLFilesPreferencePage_2=Insert DOCTYPE declaration
HTMLFilesPreferencePage_3=Insert GENERATOR with META tag
# above are possibly unused strings that may be deleted