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

################################################################################
# ConfigurationLogic.java
CL.error.installation.return.nonzero=A instala\u00e7\u00e3o do MySQL foi finalizada com o c\u00f3digo de erro {0}
CL.progress.detail.install.mysql=Executando o instalador do MySQL...
CL.progress.detail.uninstall.mysql=Executando o desinstalador do MySQL...
CL.progress.detail.configure.mysql=Configurando a inst\u00e2ncia do MySQL...
CL.error.install.mysql.exception=Ocorreu um erro durante a instala\u00e7\u00e3o do MySQL
CL.error.uninstall.mysql.exception=Ocorreu um erro durante a desinstala\u00e7\u00e3o do MySQL
CL.error.uninstall.mysql.non.zero=Ocorreu um erro durante a desinstala\u00e7\u00e3o do MySQL; o c\u00f3digo de erro \u00e9 {0}
CL.error.configure.instance.exception=Ocorreu um erro durante a execu\u00e7\u00e3o do Assistente de configura\u00e7\u00e3o da inst\u00e2ncia do MySQL

CL.error.configuration.code.2=N\u00e3o \u00e9 poss\u00edvel localizar o arquivo de modelo de configura\u00e7\u00e3o.
CL.error.configuration.code.3=N\u00e3o \u00e9 poss\u00edvel criar a entrada de servi\u00e7o do Windows.
CL.error.configuration.code.4=N\u00e3o foi poss\u00edvel conectar-se ao Gerenciador de controle de servi\u00e7o.
CL.error.configuration.code.5=N\u00e3o \u00e9 poss\u00edvel iniciar o servi\u00e7o MySQL.
CL.error.configuration.code.6=N\u00e3o \u00e9 poss\u00edvel interromper o servi\u00e7o MySQL.
CL.error.configuration.code.7=N\u00e3o \u00e9 poss\u00edvel aplicar as defini\u00e7\u00f5es de seguran\u00e7a.
CL.error.configuration.code.8=N\u00e3o \u00e9 poss\u00edvel gravar o arquivo de configura\u00e7\u00e3o.
CL.error.configuration.code.9=N\u00e3o \u00e9 poss\u00edvel remover a entrada de servi\u00e7o do Windows.
CL.error.shortcut.create=N\u00e3o \u00e9 poss\u00edvel criar o atalho para MySQL

CL.shortcuts.start.mysql=Iniciar Servidor MySQL
CL.shortcuts.stop.mysql=Interromper Servidor MySQL

CL.install.ide.integration=Integrando Servidor MySQL com NetBeans IDEs existentes
CL.uninstall.ide.integration=Removendo integra\u00e7\u00e3o do Servidor MySQL com NetBeans IDEs existentes
CL.install.error.ide.integration=Falha na integra\u00e7\u00e3o do servidor MySQL com NetBeans IDEs existentes
CL.uninstall.error.ide.integration=Falha ao remover a integra\u00e7\u00e3o do MySQL com os NetBeans IDEs existentes

