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

# Shared by DateChooser, DateField, CalendarLayout
dayNamesShortest=D,S,T,Q,Q,S,S

# Shared by DateChooser, DateField
firstDayOfWeek=1
yearSymbol=

# Localizable Strings


# Alert

okLabel=OK
yesLabel=Sim
noLabel=Não
cancelLabel=Cancelar

# ProgressBar

label=CARREGANDO %3%%


# Developer RTE Section


# ColorPicker

notImplemented={0}' não implementado ainda.

# Loader

notLoadable=Não foi possível carregar '{0}'.

# NavBar

errWrongType=ERRO: O dataProvider de '{0}' deve ser String, ViewStack, Array ou IList.
errWrongContainer=ERRO: O dataProvider de '{0}' não deve conter objetos do tipo flash.display.DisplayObject.

# components using interaction (Tree)

unknownInput=inputType '{0}' desconhecido.

# videoClasses.CuePointManager

wrongTime=Hora deve ser um número.
wrongName=Nome não pode ser indefinido ou nulo.
wrongTimeName=O valor do campo hora deve ser um número e/ou o nome não deve ser indefinido nem nulo.
wrongFormat=Formato inesperado do parâmetro cuePoint.
wrongType=Tipo deve ser um número.
incorrectType=O tipo deve ser  0, 1 ou 2.
wrongDisabled=Desativado deve ser um número.
wrongNumParams=Params Num devem ser um número.
unexpectedEnd=Encerramento inesperado da string do param cuePoint.
cannotDisable=Não foi possível desativar os pontos de dicas de actionscript.
undefinedArray=CuePoint.array indefinido.
wrongIndex=CuePoint.index deve ser um número entre -1 e cuePoint.array.length.
undefinedParameter=Parâmetro CuePoint indefinido.

# videoClasses.NCManager

invalidCall=Não é possível reconectar a chamada em uma conexão http.

# videoClasses.SMILManager

rootNotFound=URL: '{0}' Nenhum nó raiz encontrado; se o arquivo for um flv, deverá ter uma extensão .flv.
rootNotSMIL=URL: '{0}' O nó raiz não é smil: '{1}'.
missingAttributes=URL: '{0}' A marca '{1}' exige os atributos id, width e height. Width e height devem ser números maiores ou iguais a 0.
tagNotFound=URL: '{0}'  Pelo menos um vídeo de marca ref é necessário.
missingAttributeSrc=URL: '{0}' O atributo src é obrigatório na marca '{1}'.

# videoClasses.VideoError

errorMessages=Não foi possível estabelecer conexão ou encontrar FLV no servidor.,Nenhum ponto de dica correspondente foi encontrado.,Ponto de dica ilegal.,Procura inválida.,contentPath inválido.,XML inválido.,Nenhuma correspondência bitrate; não deve haver FLV padrão.,Não é possível excluir VideoPlayer padrão.

# videoClasses.VideoPlayer

nullURL=URL nulo enviado a VideoPlayer.load.
badArgs=Argumentos inválidos em _play.

# videoClasses.FPADManager

missingRoot=URL: '{0}' Nenhum nó raiz encontrado; se o URL é um FLV, ele deve ter uma extensão .flv e não aceita nenhum parâmetro.
notfpad=URL: '{0}' O nó raiz não é fpad.
missingProxy=URL: '{0}' O xml fpad exige a marca proxy.

# TextInput, TextArea

unsupportedMode=IMEMode '{0}' sem suporte.

# AccImpl

requiredField=Campo obrigatório
