# NLS_ENCODING=UNICODE
#-------------------------------------------------------------------------------
# Copyright (c) 2000, 2008 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 implementation.
#-------------------------------------------------------------------------------
# NLS_MESSAGEFORMAT_VAR

# Plug-in
pluginName=UI de RCP de compositor de EPF
productName=Compositor de EPF
providerName=Eclipse.org

# About text
aboutText=Eclipse Process Framework Composer\n\
\n\
Versi\u00f3n: {0}\n\
\n\
(c) Copyright Eclipse contributors y otros 2000, 2009. Reservados todos los derechos.\n

# Category
methodCategoryName=M\u00e9todo

# Views
welcomeViewName=Bienvenida

# Actions
globalActionSet=Conjunto de acciones globales
newAction=&Nuevo
newActionTooltip=Nuevo
openAction=&Abrir...
openActionTooltip=Abrir
searchAction=&Buscar...
searchActionTooltip=Buscar
welcomeAction=&Bienvenida
welcomeActionToolTip=Bienvenida

# Tooltips
shortcut.overview.tooltip=Volver a la p\u00e1gina Visi\u00f3n general
shortcut.tutorials.tooltip=Volver a la p\u00e1gina Gu\u00eda de aprendizaje
shortcut.firststeps.tooltip=Volver a la p\u00e1gina Primeros pasos
shortcut.webresources.tooltip=Volver a la p\u00e1gina Recursos web       

#Action Set
actionSet.description = Acciones de la barra de herramientas del sistema de ayuda
actionSet.label = Sistema de ayuda
searchAction.label = B&uscar en la ayuda
searchAction.tooltip = Buscar en la ayuda
dynamicHelpAction.label = A&yuda din\u00e1mica 
dynamicHelpAction.tooltip = Ayuda din\u00e1mica

#Activities/Capabilities
activity.general=Importar y exportar proyectos y recursos
activity.general.desc=Utilizar las funciones est\u00e1ndar de Importar/Exportar proyectos/recursos de Eclipse.
activity.team.cvs=Soporte de CVS
activity.team.cvs.desc=Utilizar el Sistema de versiones concurrentes (CVS) para gestionar recursos.
activity.team=Soporte del equipo b\u00e1sico
activity.team.desc=Compartir proyectos mediante sistemas de gesti\u00f3n de la configuraci\u00f3n.

activity.cat.general=General
activity.cat.general.desc=Utilizar las funciones est\u00e1ndar de Eclipse.
activity.cat.team=Equipo
activity.cat.team.desc=Utilizar sistemas de gesti\u00f3n de la configuraci\u00f3n para gestionar recursos.

PreferencePages.Capabilities = Funciones
PreferencePages.Capabilities.activityName = &Funciones
PreferencePages.Capabilities.categoryName = &Funciones
PreferencePages.Capabilities.activityPromptButton = Mostrar &solicitud al habilitar funciones
PreferencePages.Capabilities.activityPromptButtonTooltip = Mostrar solicitud cuando una caracter\u00edstica que necesite la habilitaci\u00f3n de funciones se utilice por primera vez
PreferencePages.Capabilities.captionMessage = Las funciones le permiten habilitar o inhabilitar diversos componentes del producto.  Estas funciones se agrupan de acuerdo a un conjunto de categor\u00edas predefinidas.
