# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
#
# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
# Other names may be trademarks of their respective owners.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common
# Development and Distribution License("CDDL") (collectively, the
# "License"). You may not use this file except in compliance with the
# License. You can obtain a copy of the License at
# http://www.netbeans.org/cddl-gplv2.html
# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
# specific language governing permissions and limitations under the
# License.  When distributing the software, include this License Header
# Notice in each file and include the License file at
# nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the GPL Version 2 section of the License file that
# accompanied this code. If applicable, add the following below the
# License Header, with the fields enclosed by brackets [] replaced by
# your own identifying information:
# "Portions Copyrighted [year] [name of copyright owner]"
#
# Contributor(s):
#
# The Original Software is NetBeans. The Initial Developer of the Original
# Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
# Microsystems, Inc. All Rights Reserved.
#
# If you wish your version of this file to be governed by only the CDDL
# or only the GPL Version 2, indicate your decision by adding
# "[Contributor] elects to include this software in this distribution
# under the [CDDL or GPL Version 2] license." If you do not indicate a
# single choice of license, a recipient has the option to distribute
# your version of this file under either the CDDL, the GPL Version 2 or
# to extend the choice of license to its licensees as provided above.
# However, if you add GPL Version 2 code and therefore, elected the GPL
# Version 2 license, then the option applies only if the new code is
# made subject to such option by the copyright holder.

# DDDataLoader
LBL_loaderName=Objectes del descriptor del desplegament de l'aplicaci\u00f3 J2EE

# DDDataNode

# sheet set - should be the same as in dd.editors
PROP_deploymentSet=Desplegament
HINT_deploymentSet=Desplegament

# dtd property (document type)
PROP_documentDTD=Versi\u00f3 especificaci\u00f3 application-client.xml
HINT_documentDTD=Version of application-client deployment descriptor
LAB_servletAPIUnknown=Versi\u00f3 no reconeguda
LAB_saveButton=Desar
LAB_saveButton_Mnemonic=A
ACS_saveButtonA11yDesc=Desar fitxer actualitzat.
LAB_discardButton=Descartar
LAB_discardButton_Mnemonic=D
ACS_discardButtonA11yDesc=Descartar els canvis.

#NOI18N
#LAB_deploymentDescriptor=application-client.xml
TXT_newEjbElementDescription=Configuraci\u00f3 predeterminada creada per a l'EJB.

#Message on DD node with line number for invalid web.xml file
TXT_errorOnLine=DD:Error en la l\u00ednia {0}

# DDChangesPanel and related code in DDDatabject
LAB_ConfirmDialog=Confirmaci\u00f3 per als canvis
MSG_SynchronizeCaption=Changes recommended in deployment descriptor of {0} to accommodate EJB change(s).

LAB_processButton=Processar
LAB_processButton_Mnemonic=p
LAB_processAllButton=Processar-ho tot
LAB_processAllButton_Mnemonic=A
LAB_closeButton=Tancar
LAB_closeButton_Mnemonic=o
LAB_ChangesList=Llistat de canvis
LAB_ChangesList_Mnemonic=L
HINT_ChangesList=Llistats dels canvis trobats de la sincronitzaci\u00f3.

LAB_addServletElement=Crear nou element EJB per a la classe {0}.
LAB_changeServletElement=Actualitzar ejb-class en l''element EJB de la classe {0} a la classe {1}.
LAB_deleteServletElement=Eliminar elements EJB per a la classe {0}.
LAB_moveServletElement=Moure l''element EJB per a la classe {0} des del descriptor del desplegament {1}.

LAB_changeEjbElement=Actualitzar l''element ejb-class del bean empresarial de la classe {0} a la classe {1}.
LAB_deleteEjbElement=Eliminar elements EJB per a la classe {0}.

LAB_changeHomeElement=Actualitzar la interf\u00edcie d''inici del bean empresarial de la classe {0} a la classe {1}.
LAB_changeRemoteElement=Actualitzar la interf\u00edcie remota del bean empresarial de la classe {0} a la classe {1}.
LAB_changeLocalHomeElement=Actualitzar la interf\u00edcie d''inici local del bean empresarial de la classe {0} a la classe {1}.
LAB_changeLocalElement=Actualitzar la interf\u00edcie local del bean empresarial de la classe {0} a la classe {1}.

LAB_deleteHomeElement=Eliminar la interf\u00edcie d''inici del bean empresarial per a la classe {0}.
LAB_deleteRemoteElement=Eliminar la interf\u00edcie remota del bean empresarial per a la classe {0}.
LAB_deleteLocalHomeElement=Eliminar la interf\u00edcie d''inici local del bean empresarial per a la classe {0}.
LAB_deleteLocalElement=Eliminar la interf\u00edcie local del bean empresarial per a la classe {0}.

ACS_ChangesListA11yDesc=Llistat dels canvis trobats de la sincronitzaci\u00f3.
ACS_processButtonA11yDesc=Processar el canvi seleccionat.
ACS_processAllButtonA11yDesc=Processar tots els canvis.
ACS_closeButtonA11yDesc=Tancar aquest di\u00e0leg.
ACS_ChangesListA11yPanelDesc=This confirmation dialog box lists the recommended changes to the deployment descriptor due to changes in the web module. Trieu quins canvis voleu que es facin.

LAB_changeFilterElement=Actualitzar el contingut de <filter-class> en els elements <filter> des del valor "{0}" fins al valor "{1}".

LAB_changeListenerElement=Actualitzar el contingut de <listener-class> en els elements <listener> des del valor "{0}" fins al valor "{1}".

LAB_deleteFilterElement=Eliminar els elements <filter> i <filter-mapping> per a <filter-class> = "{0}".

LAB_deleteListenerElement=Eliminar l''element <listener> per a <listener-class> = "{0}".

LAB_changeJspElement=Update <jsp-file> content in <servlet> elements from value "{0}" to value "{1}".

LAB_deleteJspElement=Eliminar els elements <servlet> i <servlet-mapping> per a <jsp-file> = "{0}".

LBL_DDCatalog=J2EE Application Client Deployment Descriptors Catalog

DESC_DDCatalog=XML Catalog for J2EE Application Client deployment descriptor DTD and XML schema files.

HINT_web_dd=J2EE application client deployment descriptor.

