# 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.

# Action
ActionStop=Aturar
ActionStopInstr=Aturar en la instrucci\u00f3
ActionTrace=Tra\u00e7ar
ActionTraceInstr=Tra\u00e7ar en la instrucci\u00f3
ActionRunScript=Executar Script
ActionRunScriptInstr=Executar Script en la instrucci\u00f3

# AId
MSG_AId_MalformedLwp=Malformed LWP Id
MSG_AId_MalformedThread=Malformed Thread Id

# Seconds
FMT_Seconds_ERROR=Malformed value -- expected positive floating point number

# CountLimit
FMT_CountLimit_ERROR=Value {0} not in the range {1} to {2}
CountLimitKeyword_INFINITY=Infinitament
CountLimitAction_DISABLE=Aturar sempre
CountLimitAction_CURRENT=Utilitzar el valor actual del comptador

# FunctionBptEnum
FunctionSubEvent_IN=Unique Function With this Name
FunctionSubEvent_INFUNCTION=All Member Functions With this Name
FunctionSubEvent_RETURNS=En tornar

AccessBA_BEFORE=Abans
AccessBA_AFTER=Despr\u00e9s

ExceptionSpec_ALL=Qualsevol excepci\u00f3
ExceptionSpec_UNCAUGHT=Excepci\u00f3 sense capturar
ExceptionSpec_UNEXPECTED=Excepci\u00f3 inesperada

# DlEvent
OnOpen=En obrir
OnClose=En tancar
LoadObj_All=Tots els objectes carregats

# SysCallEE
OnEntrance=En entrar
OnExit=En sortir

# Process
Process_exit=Sortir
Process_sync=sync
Process_syncrtld=syncrtld
Process_next=Seg\u00fcent
Process_step=Step
Process_stop=Aturar
Process_lastrites=Last Rites
Process_gone=Gone
Process_lwp_exit=LWP Exit

# Debugger
Debugger_detach=Des-adjuntar
Debugger_attach=Adjuntar

