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

# Sample ResourceBundle properties file

RULE_LIST_ACTION=A\u00e7\u00e3o de Lista de Regra

STYLE_BUILDER_VIEW_ACTION=A\u00e7\u00e3o de Lista de Regra

VIEW_STYLE_BUILDER_TOOLTIP=Alternar Construtor de Estilo
OK=Ok
CANCEL=Cancelar
STYLE_RULE_EDITOR_TITLE=Editor de Regra de Estilo



RULE_TYPE_PANEL_TITLE=Selecionar Tipo de Regra


RULE_PREVIEW_LABEL=Vi&sualiza\u00e7\u00e3o


ELEMENT_ID_LBL=ID do Elemento:


CLASS_NAME_LBL=Classe:


HTML_ELELEMT=Elemento HTML:


REMOVE_RULE_TOOL_TIP=Remover Regra





ADD_RULE_TOOL_TIP=Adicionar Regra





MOVE_RULE_DOWN_LBL=Para Baixo


MOVE_RULE_UP_LBL=Para Cima


RULE_HIERARCHY_TITLE=Hierarquia de Regra de Estilo


No_preview_available=Nenhuma Visualiza\u00e7\u00e3o Dispon\u00edvel





Create_Rule=Criar Regra























CLASS_RULE_TYPE_ACCESSIBLE_DESCRIPTION=Tipo de Regra CSS da Classe


HTML_ELEMENT_RULE_TYPE_ACCESSIBLE_DESCRIPTION=Tipo de Regra CSS do Elemento HTML


ELEMENT_ID_RULE_TYPE_ACCESSIBLE_DESCRIPTION=Tipo de regra CSS do ID do Elemento


UP_RULE_BUTTON_TOOLTIP=Mover a regra para cima na lista


DOWN_RULE_BUTTON_TOOLTIP=Mover a regra para baixo na lista


STYLE_RULE_LIST_ACCESSIBLE_NAME=Lista em cascata de Regras de Estilo


STYLE_RULE_LIST_ACCESSIBLE_DESC=Esta lista cont\u00e9m a lista em cascata de Regras de Estilo


CLASS_TEXT_FIELD_ACCESSIBLE_NAME=Campo de Texto do Nome da Classe de Estilo


CLASS_TEXT_FIELD_ACCESSIBLE_DESC=Campo de Texto para informar o Nome da Classe do Estilo CSS


OPTIONAL_ELEMENT_TOOLTIP=Elemento HTML opcional


OPTIONAL_ELEMENT_ACCESSIBLE_DESC=Elemento HTML opcional para ser colocado antes do nome da classe CSS


HTML_ELEMENT_ACCESSIBLE_NAME=Lista de elementos HTML


HTML_ELEMENT_ACCESSIBLE_DESC=Esta lista fornece a lista de elementos HTML que podem ser adicionados \u00e0 lista em cascata de regras


ELEMENT_ID_TEXTFIELD_ACCESSIBLE_NAME=Campo de texto do ID do elemento


ELEMENT_ID_TEXTFIELD_ACCESSIBLE_DESC=Campo de texto para informar o ID do elemento que pode ser adicionado \u00e0 lista de regras em cascata


PREVIEW_LABEL_ACCESSIBLE_DESC=Label de visualiza\u00e7\u00e3o que exibe a lista de regras em cascata composta do CSS

## CopyStyleAction.java
Style-Comment=<!-- A apar\u00eancia deste documento \u00e9 determinada por uma refer\u00eancia CSS em um atributo href. Veja http://www.w3.org/TR/xml-stylesheet/ -->
MSG_Style_tag_in_clipboard=A tag de estilo foi colocada na \u00e1rea de transfer\u00eancia
Copy-XML-Style=Copiar Estilo XML
Copy-HTML-Style=Copiar Estilo HTML


