# Copyright (c) 2006, 2007 Borland Software Corporation.
#  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:
#      Richard Gronback (Borland) - initial API and implementation
#
# $Id: plugin.properties,v 1.1 2007/10/31 13:50:27 rgronback Exp $

# ====================================================================
# To code developer:
#   Do NOT change the properties between this line and the
#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
#   Make a new property name, append to the end of the file and change
#   the code to use the new property.
# ====================================================================

# ====================================================================
# %%% END OF TRANSLATED PROPERTIES %%%
# ====================================================================

pluginName = Mindmap Edit Support
providerName = www.example.org

_UI_CreateChild_text = {0}
_UI_CreateChild_text2 = {1} {0}
_UI_CreateChild_text3 = {1}
_UI_CreateChild_tooltip = Create New {0} Under {1} Feature
_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.
_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.

_UI_PropertyDescriptor_description = The {0} of the {1}

_UI_Topic_type = Topic
_UI_Map_type = Map
_UI_Resource_type = Resource
_UI_Relationship_type = Relationship
_UI_Thread_type = Thread
_UI_ThreadItem_type = Thread Item
_UI_Unknown_type = Object

_UI_Unknown_datatype= Value

_UI_Topic_name_feature = Name
_UI_Topic_subtopics_feature = Subtopics
_UI_Topic_resources_feature = Resources
_UI_Topic_percentComplete_feature = Percent Complete
_UI_Topic_priority_feature = Priority
_UI_Topic_startDate_feature = Start Date
_UI_Topic_endDate_feature = End Date
_UI_Topic_duration_feature = Duration
_UI_Topic_comments_feature = Comments
_UI_Map_title_feature = Title
_UI_Map_rootTopics_feature = Root Topics
_UI_Map_relations_feature = Relations
_UI_Map_resources_feature = Resources
_UI_Resource_name_feature = Name
_UI_Resource_topics_feature = Topics
_UI_Resource_email_feature = Email
_UI_Resource_comments_feature = Comments
_UI_Relationship_label_feature = Label
_UI_Relationship_source_feature = Source
_UI_Relationship_target_feature = Target
_UI_Relationship_type_feature = Type
_UI_Thread_author_feature = Author
_UI_Thread_subject_feature = Subject
_UI_Thread_items_feature = Items
_UI_Thread_postDate_feature = Post Date
_UI_ThreadItem_author_feature = Author
_UI_ThreadItem_body_feature = Body
_UI_ThreadItem_itemPostDate_feature = Item Post Date
_UI_Unknown_feature = Unspecified

_UI_RelationshipType_DEPENDENCY_literal = DEPENDENCY
_UI_RelationshipType_INCLUDES_literal = INCLUDES
_UI_RelationshipType_EXTENDS_literal = EXTENDS
_UI_Priority_ONE_literal = ONE
_UI_Priority_TWO_literal = TWO
_UI_Priority_ZERO_literal = ZERO
_UI_Priority_THREE_literal = THREE
_UI_Priority_FOUR_literal = FOUR
_UI_Priority_FIVE_literal = FIVE
