/**********************************************************************
 * Copyright (c) 2005, 2011 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 - Initial API and implementation
 * Benjamin Muskalla, b.muskalla@gmx.net - [158660] character entities should have their own syntax highlighting preference
 * David Carver - STAR - [205989] - [validation] validate XML after XInclude resolution
 **********************************************************************/
package org.eclipse.wst.xml.ui.internal;

import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.eclipse.osgi.util.NLS;

/**
 * Strings used by XML UI
 * 
 * @plannedfor 1.0
 */
public class XMLUIMessages extends NLS {
	private static final String BUNDLE_NAME = "org.eclipse.wst.xml.ui.internal.XMLUIPluginResources";//$NON-NLS-1$
	private static ResourceBundle fResourceBundle;

	public static String Sample_XML_doc;
	public static String Comment_Delimiters_UI_;
	public static String Comment_Content_UI_;
	public static String Tag_Delimiters_UI_;
	public static String Tag_Names_UI_;
	public static String Attribute_Names_UI_;
	public static String Attribute_Equals_UI_;
	public static String Attribute_Values_UI_;
	public static String Declaration_Delimiters_UI_;
	public static String Content_UI_;
	public static String CDATA_Delimiters_UI_;
	public static String CDATA_Content_UI_;
	public static String Processing_Instruction_Del_UI_;
	public static String Processing_Instruction_Con_UI__UI_;
	public static String DOCTYPE_Name_UI_;
	public static String DOCTYPE_SYSTEM_PUBLIC_Keyw_UI_;
	public static String DOCTYPE_Public_Reference_UI_;
	public static String DOCTYPE_System_Reference_UI_;
	public static String Entity_Reference_UI_;
	public static String DELETE;
	public static String ADD_PROCESSING_INSTRUCTION;
	public static String _UI_MENU_ADD_AFTER;
	public static String _UI_MENU_ADD_ATTRIBUTE;
	public static String _UI_MENU_ADD_BEFORE;
	public static String _UI_MENU_ADD_CHILD;
	public static String _UI_MENU_REMOVE;
	public static String _UI_MENU_REPLACE_WITH;
	public static String _UI_MENU_EDIT_DOCTYPE;
	public static String _UI_LABEL_UNDO_REPLACE_DESCRIPTION;
	public static String _UI_LABEL_EDIT_DOCTYPE;
	public static String _UI_INFO_EXPAND_ALL;
	public static String _UI_INFO_COLLAPSE_ALL;
	public static String _UI_MENU_ADD_DTD_INFORMATION;
	public static String _UI_MENU_ADD_SCHEMA_INFORMATION;
	public static String _UI_MENU_EDIT_PROCESSING_INSTRUCTION;
	public static String _UI_MENU_EDIT_NAMESPACES;
	public static String _UI_MENU_ADD_DTD_INFORMATION_TITLE;
	public static String _UI_MENU_EDIT_PROCESSING_INSTRUCTION_TITLE;
	public static String _UI_MENU_EDIT_SCHEMA_INFORMATION_TITLE;
	public static String _UI_MENU_NEW_ATTRIBUTE;
	public static String _UI_MENU_NEW_ATTRIBUTE_TITLE;
	public static String _UI_MENU_EDIT_ATTRIBUTE;
	public static String _UI_MENU_EDIT_ATTRIBUTE_TITLE;
	public static String _UI_MENU_NEW_ELEMENT;
	public static String _UI_MENU_NEW_ELEMENT_TITLE;
	public static String _UI_MENU_RENAME;
	public static String _UI_MENU_RENAME_TITLE;
	public static String _UI_LABEL_ELEMENT_NAME;
	public static String _UI_MENU_ADD_COMMENT;
	public static String _UI_MENU_ADD_PROCESSING_INSTRUCTION;
	public static String _UI_MENU_ADD_CDATA_SECTION;
	public static String _UI_MENU_ADD_PCDATA;
	public static String _UI_MENU_COMMENT;
	public static String _UI_MENU_PROCESSING_INSTRUCTION;
	public static String _UI_MENU_CDATA_SECTION;
	public static String _UI_MENU_PCDATA;
	public static String _UI_MENU_ADD;
	public static String _UI_COMMENT_VALUE;
	public static String _UI_PI_TARGET_VALUE;
	public static String _UI_PI_DATA_VALUE;
	public static String _UI_LABEL_ROOT_ELEMENT_VALUE;
	public static String _UI_LABEL_TARGET_COLON;
	public static String _UI_LABEL_DATA_COLON;
	public static String _UI_LABEL_ROOT_ELEMENT_NAME_COLON;
	public static String _UI_LABEL_PUBLIC_ID_COLON;
	public static String _UI_LABEL_SYSTEM_ID_COLON;
	public static String _UI_LABEL_BROWSE;
	public static String _UI_LABEL_BROWSE_1;
	public static String _UI_LABEL_SELECT_XML_CATALOG_ENTRY;
	public static String _UI_LABEL_SPECIFY_SYSTEM_ID;
	public static String _UI_LABEL_SELECT_FILE;
	public static String _UI_LABEL_KEY;
	public static String _UI_LABEL_URI;
	public static String _UI_LABEL_XML_CATALOG_COLON;
	public static String _UI_LABEL_NAMESPACE_NAME;
	public static String _UI_LABEL_LOCATION_HINT;
	public static String _UI_LABEL_PREFIX;
	public static String _UI_LABEL_NAMESPACE_NAME_COLON;
	public static String _UI_LABEL_LOCATION_HINT_COLON;
	public static String _UI_LABEL_PREFIX_COLON;
	public static String _UI_NO_NAMESPACE_NAME;
	public static String _UI_NO_PREFIX;
	public static String _UI_LABEL_XML_SCHEMA_INFORMATION;
	public static String _UI_LABEL_NAME_COLON;
	public static String _UI_LABEL_VALUE_COLON;
	public static String _UI_BUTTON_DELETE;
	public static String _UI_BUTTON_NEW;
	public static String _UI_BUTTON_EDIT;
	public static String _UI_LABEL_NEW_NAMESPACE_INFORMATION;
	public static String _UI_RADIO_BUTTON_SELECT_FROM_WORKSPACE;
	public static String _UI_RADIO_BUTTON_SELECT_FROM_CATALOG;
	public static String _UI_WARNING_MORE_THAN_ONE_NS_WITH_NAME;
	public static String _UI_WARNING_MORE_THAN_ONE_NS_WITHOUT_NAME;
	public static String _UI_WARNING_MORE_THAN_ONE_NS_WITHOUT_PREFIX;
	public static String _UI_WARNING_MORE_THAN_ONE_NS_WITH_PREFIX;
	public static String _UI_WARNING_SCHEMA_CAN_NOT_BE_LOCATED;
	public static String _UI_WARNING_LOCATION_HINT_NOT_SPECIFIED;
	public static String _UI_WARNING_NAMESPACE_NAME_NOT_SPECIFIED;
	public static String _UI_WARNING_PREFIX_NOT_SPECIFIED;
	public static String _UI_WARNING_ROOT_ELEMENT_MUST_BE_SPECIFIED;
	public static String _UI_WARNING_SYSTEM_ID_MUST_BE_SPECIFIED;
	public static String _UI_INVALID_NAME;
	public static String _UI_ENTER_REQ_PREFIX_AND_NAMESPACE;
	public static String _UI_SELECT_REGISTERED_NAMESPACES;
	public static String _UI_SPECIFY_NEW_NAMESPACE;
	public static String _UI_SELECT_NAMESPACE_TO_ADD;
	public static String _UI_ADD_NAMESPACE_DECLARATIONS;
	public static String _UI_NAMESPACE_DECLARATIONS;
	public static String _UI_TARGET_NAMESPACE;
	public static String _ERROR_XML_ATTRIBUTE_ALREADY_EXISTS;
	public static String _ERROR_XML_ATTRIBUTE_IS_INVALID;
	public static String error_message_goes_here;
	public static String SurroundWithNewElementQuickAssistProposal_0;
	public static String SurroundWithNewElementQuickAssistProposal_1;
	public static String RenameInFileQuickAssistProposal_0;
	public static String RenameInFileQuickAssistProposal_1;
	public static String InsertRequiredAttrsQuickAssistProposal_0;
	public static String InsertRequiredAttrsQuickAssistProposal_1;
	public static String EncodingSettings_0;
	public static String EncodingSettings_1;
	public static String DragNodeCommand_0;
	public static String DragNodeCommand_1;
	public static String CommonEditNamespacesDialog_0;
	public static String JFaceNodeAdapter_1;
	public static String QuickFixProcessorXML_0;
	public static String QuickFixProcessorXML_1;
	public static String QuickFixProcessorXML_2;
	public static String QuickFixProcessorXML_3;
	public static String QuickFixProcessorXML_4;
	public static String QuickFixProcessorXML_5;
	public static String QuickFixProcessorXML_6;
	public static String QuickFixProcessorXML_7;
	public static String QuickFixProcessorXML_8;
	public static String QuickFixProcessorXML_9;
	public static String QuickFixProcessorXML_10;
	public static String QuickFixProcessorXML_11;
	public static String QuickFixProcessorXML_12;
	public static String QuickFixProcessorXML_13;
	public static String QuickFixProcessorXML_14;
	public static String QuickFixProcessorXML_15;
	public static String XMLPropertySourceAdapter_0;
	public static String WorkbenchDefaultEncodingSettings_0;
	public static String refreshoutline_0;
	public static String Creating_files_encoding;
	public static String End_tag_has_attributes;
	public static String Attribute__is_missing_a_value;
	public static String Attribute__has_no_value;
	public static String Missing_end_tag_;
	public static String Missing_start_tag_;
	public static String ReconcileStepForMarkup_0;
	public static String ReconcileStepForMarkup_1;
	public static String ReconcileStepForMarkup_2;
	public static String ReconcileStepForMarkup_3;
	public static String ReconcileStepForMarkup_4;
	public static String ReconcileStepForMarkup_5;
	public static String ReconcileStepForMarkup_6;
	public static String End_with_;
	public static String SEVERE_internal_error_occu_UI_;
	public static String No_known_attribute__UI_;
	public static String Content_Assist_not_availab_UI_;
	public static String Element__is_unknown;
	public static String Comment__;
	public static String Close_with__;
	public static String End_with__;
	public static String Close_with___;
	public static String Close_with____;
	public static String _Has_no_available_child;
	public static String No_known_child_tag;
	public static String __Has_no_known_child;
	public static String No_known_child_tag_names;
	public static String The_document_element__;
	public static String No_definition_for_in;
	public static String No_definition_for;
	public static String No_content_model_for;
	public static String No_content_model_found_UI_;
	public static String Cleanup_UI_;
	public static String Compress_empty_element_tags_UI_;
	public static String Insert_required_attributes_UI_;
	public static String Insert_missing_tags_UI_;
	public static String Quote_attribute_values_UI_;
	public static String Format_source_UI_;
	public static String Convert_EOL_codes_UI_;
	public static String Insert_XML_decl;
	public static String EOL_Windows_UI;
	public static String EOL_Unix_UI;
	public static String EOL_Mac_UI;
	public static String Creating_files;
	public static String Encoding_desc;
	public static String Encoding;
	public static String Creating_or_saving_files;
	public static String End_of_line_code_desc;
	public static String End_of_line_code;
	public static String EOL_Windows;
	public static String EOL_Unix;
	public static String EOL_Mac;
	public static String EOL_NoTranslation;
	public static String XMLFilesPreferencePage_ExtensionLabel;
	public static String XMLFilesPreferencePage_ExtensionError;
	public static String XMLContentAssistPreferencePage_Auto_Activation_UI_;
	public static String XMLContentAssistPreferencePage_Cycling_UI_;
	public static String Automatically_make_suggest_UI_;
	public static String Auto_Activation_Delay;
	public static String Not_an_integer;
	public static String Missing_integer;
	public static String Prompt_when_these_characte_UI_;
	public static String Formatting_UI_;
	public static String Line_width__UI_;
	public static String Split_multiple_attributes;
	public static String Align_final_bracket;
	public static String Preserve_PCDATA_Content;
	public static String Space_before_empty_close_tag;
	public static String Indent_using_tabs;
	public static String Indent_using_spaces;
	public static String Indentation_size;
	public static String Indentation_size_tip;
	public static String Clear_all_blank_lines_UI_;
	public static String Format_comments;
	public static String Format_comments_join_lines;
	public static String Grammar_Constraints;
	public static String Use_inferred_grammar_in_absence_of;
	public static String Suggestion_Strategy;
	public static String Suggestion_Strategy_Lax;
	public static String Suggestion_Strategy_Strict;
	public static String Element____1;
	public static String Content_Model____2;
	public static String Attribute____3;
	public static String Data_Type____4;
	public static String Enumerated_Values____5;
	public static String Default_Value____6;
	public static String Documentation_view_default_msg;
	public static String SourceMenu_label;
	public static String Comment_label; // Resource bundle
	public static String Comment_tooltip; // Resource bundle
	public static String Comment_description; // Resource bundle
	public static String Uncomment_label; // Resource bundle
	public static String Uncomment_tooltip; // Resource bundle
	public static String Uncomment_description; // Resource bundle
	public static String ToggleComment_label; // Resource bundle
	public static String ToggleComment_tooltip; // Resource bundle
	public static String ToggleComment_description; // Resource bundle
	public static String AddBlockComment_label; // Resource bundle
	public static String AddBlockComment_tooltip; // Resource bundle
	public static String AddBlockComment_description; // Resource bundle
	public static String RemoveBlockComment_label; // Resource bundle
	public static String RemoveBlockComment_tooltip; // Resource bundle
	public static String RemoveBlockComment_description; // Resource bundle
	public static String CleanupDocument_label; // Resource bundle
	public static String CleanupDocument_tooltip; // Resource bundle
	public static String CleanupDocument_description; // Resource bundle
	public static String FindOccurrences_label; // Resource bundle
	public static String OpenFileFromSource_label; // Resource bundle
	public static String OpenFileFromSource_tooltip; // Resource bundle
	public static String OpenFileFromSource_description; // Resource bundle
	public static String XMLContentOutlineConfiguration_0;
	public static String XMLTyping_Auto_Complete;
	public static String XMLTyping_Auto_Remove;
	public static String XMLTyping_Complete_Comments;
	public static String XMLTyping_Close_Strings;
	public static String XMLTyping_Close_Brackets;
	public static String XMLTyping_Complete_End_Tags;
	public static String XMLTyping_Complete_Elements;
	public static String XMLTyping_Remove_End_Tags;
	public static String XMLTyping_Start_Tag;
	public static String XMLTyping_End_Tag;
	public static String StructureSelectEnclosing_label;
	public static String StructureSelectEnclosing_tooltip;
	public static String StructureSelectEnclosing_description;
	public static String StructureSelectNext_label;
	public static String StructureSelectNext_tooltip;
	public static String StructureSelectNext_description;
	public static String StructureSelectPrevious_label;
	public static String StructureSelectPrevious_tooltip;
	public static String StructureSelectPrevious_description;
	public static String MESSAGE_XML_VALIDATION_MESSAGE_UI_;
	public static String Indicate_no_grammar_specified;
	public static String Indicate_no_document_element;
	public static String Indicate_no_grammar_specified_severities_error;
	public static String Indicate_no_grammar_specified_severities_warning;
	public static String Indicate_no_grammar_specified_severities_ignore;
	public static String Validating_files;
	public static String SyntaxColoringPage_0;
	public static String SyntaxColoringPage_2;
	public static String SyntaxColoringPage_3;
	public static String SyntaxColoringPage_4;
	public static String SyntaxColoringPage_5;
	public static String SyntaxColoringPage_6;
	public static String EmptyFilePreferencePage_0;
	public static String _UI_STRUCTURED_TEXT_EDITOR_PREFS_LINK;
	public static String gotoMatchingTag_label;
	public static String gotoMatchingTag_description;
	public static String gotoMatchingTag_start;
	public static String gotoMatchingTag_end;
	public static String nextSibling_label;
	public static String nextSibling_description;
	public static String previousSibling_label;
	public static String previousSibling_description;
	public static String Use_XInclude;
    public static String Honour_all_schema_locations;   
	public static String Open;
	public static String Open_With;
	public static String _UI_BUTTON_SORT;
	public static String MarkupValidation_files_label;
	public static String MarkupValidation_files;
	public static String Severity_error;
	public static String Severity_warning;
	public static String Severity_ignore;
	public static String Empty_element_tag;
	public static String End_tag_with_attributes;
	public static String Invalid_whitespace_before_tagname;
	public static String Missing_closing_bracket;
	public static String Missing_closing_quote;
	public static String Missing_end_tag;
	public static String Missing_start_tag;
	public static String Missing_quotes;
	public static String Namespace_in_pi_target;
	public static String Tag_name_missing;
	public static String Whitespace_at_start;

	static {
		// load message values from bundle file
		NLS.initializeMessages(BUNDLE_NAME, XMLUIMessages.class);
	}

	private XMLUIMessages() {
		// cannot create new instance
	}

	public static ResourceBundle getResourceBundle() {
		try {
			if (fResourceBundle == null) {
				fResourceBundle = ResourceBundle.getBundle(BUNDLE_NAME);
			}
		}
		catch (MissingResourceException x) {
			fResourceBundle = null;
		}
		return fResourceBundle;
	}
}
