################################################################################
##
##  Licensed to the Apache Software Foundation (ASF) under one or more
##  contributor license agreements.  See the NOTICE file distributed with
##  this work for additional information regarding copyright ownership.
##  The ASF licenses this file to You under the Apache License, Version 2.0
##  (the "License"); you may not use this file except in compliance with
##  the License.  You may obtain a copy of the License at
##
##      http://www.apache.org/licenses/LICENSE-2.0
##
##  Unless required by applicable law or agreed to in writing, software
##  distributed under the License is distributed on an "AS IS" BASIS,
##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
##  See the License for the specific language governing permissions and
##  limitations under the License.
##
################################################################################

# Symbols

# UITextField

truncationIndicator=...

# Developer RTE Section

# Core

multipleChildSets_ClassAndInstance=Vários conjuntos de filhos visuais foram especificados para esse componente (definição do componente e instância do componente).
multipleChildSets_ClassAndSubclass=Vários conjuntos de filhos visuais foram especificados para esse componente (definição do componente de base e definição do componente derivado).

# EmbeddedFontRegistry
fontIncompatible=aviso: fonte '{0}' incorporada incompatível especificada para {1}. Este componente requer que a fonte incorporada seja declarada com embedAsCff={2}.

# Repeater

notExecuting=O repetidor não está sendo executado.

# UIComponent

stateUndefined=Estado '{0}' indefinido.

# UIComponent / WindowedApplication

viewSource=Exibir origem
badFile=O arquivo não existe.

# Version (FlexVersion)

versionAlreadySet=A versão compatível já foi configurada.
versionAlreadyRead=A versão compatível já foi lida.

# UIFTETextField

badParameter=O parâmetro {0} deve ser um dos valores aceitos.
nullParameter=O parâmetro {0} deve ser não nulo.
badIndex=O índice fornecido está fora dos limites.
notImplementedInFTETextField={0}' nao é implementado em FTETextField.
unsupportedTypeInFTETextField=FTETextField nao oferece suporte a tipo de definição para "input".

# Generated code for FlexInit
remoteClassMemoryLeak=Aviso: a classe {0} foi usada em uma chamada para net.registerClassAlias() em {2}. Isso fará com que {1} seja perdida. Para resolver a perda, defina {0} no aplicativo de nível superior.   
