###############################################################################
# Copyright (c) 2004 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
###############################################################################
## 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</BODY>\n</HTML>
! XML Common UI 
! Constants for strings

NEW=New
DELETE=Remove
ADD_TEXT=Add Text
ADD_CDATA_SECTION=Add CDATA Section
ADD_COMMENT=Add Commen&t
ADD_PROCESSING_INSTRUCTION=Add Processing Instruction

_UI_MENU_ADD_AFTER=Add &After
_UI_MENU_ADD_ATTRIBUTE=Add A&ttribute
_UI_MENU_ADD_BEFORE=Add &Before
_UI_MENU_ADD_CHILD=Add &Child
_UI_MENU_REMOVE=Re&move
_UI_MENU_REPLACE_WITH=Re&place With
_UI_MENU_ADD_DOCTYPE=Add DOCTYPE...
_UI_MENU_EDIT_DOCTYPE=Edit DOCTYPE...
_UI_MENU_ADD_GRAMMAR_INFORMATION=Add Grammar Information
_UI_MENU_VALIDATE_XML=Validate XML File
_UI_LABEL_UNDO_ADD_DESCRIPTION=Add
_UI_LABEL_UNDO_REPLACE_DESCRIPTION=Replace
_UI_LABEL_EDIT_DOCTYPE=Edit DOCTYPE
_UI_INFO_EXPAND_ALL=Expand All
_UI_INFO_COLLAPSE_ALL=Collapse All

_UI_MENU_ADD_DTD_INFORMATION=Add DTD Information...
_UI_MENU_ADD_SCHEMA_INFORMATION=Add Schema Information...
_UI_MENU_EDIT_SCHEMA_INFORMATION=Edit &Schema Information...
_UI_MENU_EDIT_PROCESSING_INSTRUCTION=Edit Process&ing Instruction...

_UI_MENU_ADD_DTD_INFORMATION_TITLE=Add DTD Information
_UI_MENU_EDIT_PROCESSING_INSTRUCTION_TITLE=Edit Processing Instruction
_UI_MENU_EDIT_SCHEMA_INFORMATION_TITLE=Edit Schema Information

_UI_MENU_NEW_ATTRIBUTE=&New Attribute...
_UI_MENU_NEW_ATTRIBUTE_TITLE=New Attribute
_UI_MENU_EDIT_ATTRIBUTE=Edit Attribute...
_UI_MENU_EDIT_ATTRIBUTE_TITLE=Edit Attribute
_UI_MENU_NEW_ELEMENT=New &Element...
_UI_MENU_NEW_ELEMENT_TITLE=New Element
_UI_MENU_RENAME=R&ename
_UI_MENU_RENAME_TITLE=Rename
_UI_LABEL_ELEMENT_NAME=Element name:
_UI_LABEL_LOADING_GRAMMAR=Loading grammar:

_UI_MENU_ADD_COMMENT=Add Comment
_UI_MENU_ADD_PROCESSING_INSTRUCTION=Add Processing Instruction
_UI_MENU_ADD_CDATA_SECTION=Add CDATA Section
_UI_MENU_ADD_PCDATA=Add #PCDATA;

_UI_MENU_COMMENT=C&omment
_UI_MENU_PROCESSING_INSTRUCTION=P&rocessing Instruction
_UI_MENU_CDATA_SECTION=CDATA Section
_UI_MENU_PCDATA=#PC&DATA;

_UI_MENU_ADD=Add

_UI_COMMENT_VALUE=comment
_UI_PI_TARGET_VALUE=target
_UI_PI_DATA_VALUE=data
_UI_LABEL_ROOT_ELEMENT_VALUE=RootElement

_UI_LABEL_TARGET_COLON=Target:
_UI_LABEL_DATA_COLON=Data:
_UI_LABEL_ROOT_ELEMENT_NAME_COLON=Root element name:
_UI_LABEL_PUBLIC_ID_COLON=Public ID:
_UI_LABEL_SYSTEM_ID_COLON=System ID:
_UI_LABEL_BROWSE=Browse...
_UI_LABEL_SELECT_XML_CATALOG_ENTRY=Select XML Catalog Entry
_UI_LABEL_SPECIFY_SYSTEM_ID=Specify System ID
_UI_LABEL_SELECT_FILE=Select File

_UI_LABEL_KEY=Key
_UI_LABEL_URI=URI:
_UI_LABEL_XML_CATALOG_COLON=XML Catalog
_UI_LABEL_NAMESPACE_NAME=Namespace Name
_UI_LABEL_LOCATION_HINT=Location Hint
_UI_LABEL_PREFIX=Prefix
_UI_LABEL_NAMESPACE_NAME_COLON=Namespace Name:
_UI_LABEL_LOCATION_HINT_COLON=Location Hint:
_UI_LABEL_PREFIX_COLON=Prefix:
_UI_NO_NAMESPACE_NAME=<no namespace name>
_UI_NO_PREFIX=<no prefix>

_UI_LABEL_XML_SCHEMA_INFORMATION=XML Schema Information

_UI_LABEL_NAME_COLON=Name:
_UI_LABEL_VALUE_COLON=Value:

_UI_BUTTON_DELETE=Delete
_UI_BUTTON_NEW=New...
_UI_BUTTON_EDIT=Edit...

_UI_LABEL_NEW_NAMESPACE_INFORMATION=New Namespace Information
_UI_LABEL_EDIT_NAMESPACE_INFORMATION=Edit Namespace Information

!
! Assign links to an XML file
!
_UI_WORK_BENCH=Workbench Files...
_UI_FILE_SYSTEM=Import Files...
_UI_ASSIGN_XSL=Assign An XSL Stylesheet To The XML File
_UI_ASSIGN_DTD=Assign A DTD file To The XML File
_UI_ASSIGN_XSD=Assign An XML schema To The XML File
_UI_SELECT_XSL_TITLE=Select an XSL File
_UI_SELECT_XSL_DESC=Select an XSL file from the workbench.

_UI_ASSIGN=Assign
_UI_XSD=XML Schema...
_UI_DTD=DTD...
_UI_XSL=XSL Stylesheet...

! XMLValidator.java
_UI_XML_VALIDATOR=XML Validator
! SelectFileOrXMLCatalogIdPanel.java

_UI_RADIO_BUTTON_SELECT_FROM_WORKSPACE=Select file from workbench
_UI_RADIO_BUTTON_SELECT_FROM_CATALOG=Select XML Catalog entry

_UI_WARNING_TITLE_ROOT_ELEMENT_REQUIRED=Root Element Required
_UI_WARNING_DOCUMENT_REQUIRES_ROOT=The document requires a root element in order to add schema information.
_UI_WARNING_MORE_THAN_ONE_NS_WITH_NAME=More than one namespace has been specified with the namespace name :
_UI_WARNING_MORE_THAN_ONE_NS_WITHOUT_NAME=More than one schema has been specified without a namespace name
_UI_WARNING_MORE_THAN_ONE_NS_WITHOUT_PREFIX=More than one namespace has been specificed without a prefix
_UI_WARNING_MORE_THAN_ONE_NS_WITH_PREFIX=More than one namespace has been specified with the prefix :
_UI_WARNING_SCHEMA_CAN_NOT_BE_LOCATED=The specified schema can not be located :
_UI_WARNING_LOCATION_HINT_NOT_SPECIFIED=A location hint has not been specified for the namespace with name
_UI_WARNING_NAMESPACE_NAME_NOT_SPECIFIED=A name must be specified for the namespace with prefix :
_UI_WARNING_PREFIX_NOT_SPECIFIED=A prefix must be specified for the namespace named :
_UI_WARNING_ROOT_ELEMENT_MUST_BE_SPECIFIED=A root element name must be specified.
_UI_WARNING_SYSTEM_ID_MUST_BE_SPECIFIED=A system ID must be specified.

_ERROR_XML_ATTRIBUTE_ALREADY_EXISTS=The element already has an attribute with this name.

#
TemplateContextTypeHTMLTag.0=HTML Tags
TemplateContextTypeHTML.0=All HTML
TemplateContextTypeHTMLAttributeValue.0=HTML Attribute Values
TemplateContextTypeHTMLAttribute.0=HTML Attributes

HTMLFilesPreferencePage.0=Loading files...
HTMLFilesPreferencePage.1=Add this suffix (if not specified):
HTMLFilesPreferencePage.2=Insert DOCTYPE declaration
HTMLFilesPreferencePage.3=Insert GENERATOR with META tag
#
_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 .html or .xhtml
