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

#Messages for JavaFixAllImports
#FixingImports_Lbl=Fixing imports...
#NoImportsToFix_Lbl=All used types are already imported.
#AllImportsWereFixed_Lbl=Imports were fixed.
#NoImportsFound_Lbl=No imports found for the following types:
#SourceContainsSyntaxErrors_Lbl=Cannot perform Fix Imports on a source with syntax errors.
MSG_CannotFixImports=No se puede realizar la correcci\u00f3n de Imports en un c\u00f3digo en el cual no est\u00e1 en classpath.
fix-imports=Reparar importaciones
#FixDuplicateImports_dlgTitle=Fix Imports
#FixImportsProgressTitle_Lbl=Fix Imports
#FixImportsProgressLabel_Lbl=Searching for unresolved types ...
#fix_imports_main_menu_item=&Fix Imports
#try_catch_main_menu_item=Surround &With try-catch

#Messages for FixDuplicateImportStmts
FixDupImportStmts_Title=Reparar todas los imports
FixDupImportStmts_IntroLbl=<html>Seleccione el nombre totalmente calificado para su uso en la declaraci\u00f3n de importaci\u00f3n.</html>
FixDupImportStmts_Header=Instrucciones Import:
FixDupImportStmts_Combo_ACSD=Seleccione un nombre v\u00e1lido apropiado
FixDupImportStmts_Combo_Name_ACSD=Nombres v\u00e1lidos
FixDupImportStmts_UnusedImports=&Remover imports que no se usan
FixDupImportStmts_CannotResolve=<html><font color='#FF0000'>&lt;no se puede resolver&gt;
FixDupImportStmts_NothingToFix=<nothing to fix>
FixDupImportStmts_checkUnusedImports_a11y=Remover casilla de verificaci\u00f3n de los imports no usado

#Messages for ImportClassPanel
ImportClassPanel_ACN=Di\u00e1logo r\u00e1pido de import
ImportClassPanel_ACSD=Di\u00e1logo usado para agregar sentencias import para los identificadores que est\u00e1n debajo del cursor
ImportClassPanel_JList1_ACN=Lista de imports
ImportClassPanel_JList1_ACSD=Lista de posibles imports
LBL_Fast_Import=Importaci\u00f3n r\u00e1pida

LBL_MatchingClasses=Comparando Clases\:

MSG_NothingToFix=Nada para corregir en las sentencias import.
MSG_UnusedImportsRemoved=Se removieron los imports que no se usaban.
MSG_ImportsFixed=Se corrigieron las sentencias import.

#{0} FQN of the selected class
MSG_ClassAlreadyImported=La clase {0} ya fue importada.

#{0} FQN of the selected class
MSG_PackageAlreadyImported=El paquete {0} ya fue importado.
LBL_PackageImport=Presione 'May\u00fascula" para FQN o 'Alt' para paquete import.

