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

# flex2.tools
Mxmlc.OutputMessage=${name} (${length} bytes)
Compc.OutputMessage=${name} (${length} bytes)
Compiler.NoUpdateMessage=${name} est\u00e1 atualizado e n\u00e3o \u00e9 preciso recri\u00e1-lo.
Compc.NoUpdateMessage=${name} est\u00e1 atualizado e n\u00e3o \u00e9 preciso recri\u00e1-lo.
CompcPreLink.HigherMinimumSupportedVersionRequired=O swc '${swc}' requer uma vers\u00e3o m\u00ednima suportada de ao menos ${swcMinimumSupportedVersion}. 
CompcPreLink.PotentialForMissingSkins=O swc '${swc}' tem padr\u00f5es de estilo e est\u00e1 no library-path, o que significa que depend\u00eancias ser\u00e3o vinculadas sem os estilos. Isso pode fazer com que aplicativos, que use o swc de sa\u00edda, tenham capas ausentes. O swc deve ser colocado no external-library-path.
PreLink.DependencyNotCompatible=A ${definition} da depend\u00eancia do ${swc} tem uma vers\u00e3o m\u00ednima suportada de ${swcMinimumVersion}, que \u00e9 maior do que a vers\u00e3o de compatibilidade, ${compatibilityVersion}.
PreLink.NoExternalVisibleDefinition=O arquivo de destino n\u00e3o tem uma defini\u00e7\u00e3o vis\u00edvel externamente.
PreLink.MissingFactoryClassInFrameMetadata=Essa unidade de compila\u00e7\u00e3o n\u00e3o tinha uma factoryClass especificada nos metadados Frame para carregar as bibliotecas compartilhadas de tempo de execu\u00e7\u00e3o configuradas. Para compilar sem bibliotecas compartilhadas de tempo de execu\u00e7\u00e3o, defina a op\u00e7\u00e3o -static-link-runtime-shared-libraries como true ou remova a op\u00e7\u00e3o -runtime-shared-libraries.
PreLink.InvalidBackgroundColor=Cor de fundo inv\u00e1lida: ${backgroundColor}
PreLink.CouldNotParseNumber=N\u00e3o foi poss\u00edvel analisar '${num}' como um n\u00famero para ${attribute}.
PreLink.MissingSignedLibraryDigest=N\u00e3o foi encontrada nenhuma compila\u00e7\u00e3o assinada em catalog.xml da biblioteca, ${libraryPath}. Compilar a biblioteca com -create-digest=true e tentar novamente.
PreLink.MissingUnsignedLibraryDigest=N\u00e3o foi encontrada nenhuma compila\u00e7\u00e3o n\u00e3o assinada em catalog.xml da biblioteca, ${libraryPath}. Compilar a biblioteca com -create-digest=true e tentar novamente.
PreLink.ClassesMappedToSameRemoteAlias=Foi encontrado um mapeamento de '${existingClassName}' para o alias da classe remota '${alias}' ao processar a classe '${className}'. O Flex agora gera c\u00f3digo para verificar se um alias j\u00e1 foi registrado. Ao desserializar dados remotos, um alias somente pode mapear para uma classe \u00fanica. 
PreLink.RequiredRsls=RSLs necess\u00e1rios:
PreLink.RequiredRslUrl=\u0020\u0020\u0020\u0020${rslUrl}
PreLink.RequiredRslUrlWithFailover=\u0020\u0020\u0020\u0020${rslUrl} com um failover.
PreLink.RequiredRslUrlWithMultipleFailovers=\u0020\u0020\u0020\u0020${rslUrl} com ${failoverCount} failovers.
PreLink.CompiledAsAComponent=${className} \u00e9 um m\u00f3dulo ou aplicativo diretamente referenciado. Isso far\u00e1 com que ${className} e todas as suas depend\u00eancias sejam vinculadas a ${mainDefinition}. Para evitar isso, a pr\u00e1tica recomendada \u00e9 usar uma interface.
ToolsConfiguration.FailedToLoadLicenseFile=Falha ao carregar o arquivo de licen\u00e7a: ${fileName}
ToolsConfiguration.BadAS3ESCombination=Combina\u00e7\u00e3o -as3 e -es inv\u00e1lida. -as3=${as3} e -es=${es}. Uma delas deve ser 'true'.
ToolsConfiguration.BadESStrictCombination=-es=${es} e -strict=${strict}. -strict \u00e9 permitida, mas pode resultar em erros do compilador para refer\u00eancias a propriedades din\u00e2micas.
ToolsConfiguration.DeprecatedConfigurationOption=${var}' est\u00e1 obsoleta desde ${since}; use '${replacement}'
Optimizer.NotAValidSwfFile=${fileName} n\u00e3o \u00e9 um arquivo SWF v\u00e1lido
