################################################################################
##
##  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 = QS, QM, QT, QW, QT, QF, QS

# Shared by DateChooser, DateField
firstDayOfWeek = 2
yearSymbol = \u0051

# Localizable Strings


# Alert
# Removing letters from "Cancel" so it will fit in the Alert.
okLabel = QOK
yesLabel = QYes
noLabel = QNo
cancelLabel = Qcel

# ProgressBar

label = QLOADING %3%%


# Developer RTE Section


# ColorPicker

notImplemented = '{0}' Qnot Qimplemented Qyet.

# Loader

outOfRange = QIndex Qout Qof Qrange.
notLoadable = QUnable Qto Qload '{0}'.

# MenuBar

unhandledEvent = QUnhandled QMenuEvent.

# NavBar

errWrongType = QERROR: QThe QdataProvider Qof '{0}' Qmust Qbe QString, QViewStack, QArray, Qor QIList.
errWrongContainer = QERROR: QThe QdataProvider Qof '{0}' Qmust Qnot Qcontain Qobjects Qof Qtype Qflash.display.DisplayObject.

# components using interaction (Tree)

unknownInput = QUnknown QinputType '{0}'.

# videoClasses\CuePointManager

wrongTime = QTime Qmust Qbe Qnumber.
wrongName = QName Qcannot Qbe Qundefined Qor Qnull.
wrongTimeName = QTime Qmust Qbe Qnumber Qand/or Qname Qmust Qnot Qbe Qundefined Qor Qnull.
unsortedCuePoint = QUnsorted QcuePoint Qfound Qafter Qtime: '{0}'.
wrongFormat = QUnexpected QcuePoint Qparameter Qformat.
wrongType = QType Qmust Qbe Qnumber.
incorrectType = QType Qmust Qbe Q0, Q1 Qor Q2.
wrongDisabled = QDisabled Qmust Qbe Qnumber.
wrongNumParams = QNum Qparams Qmust Qbe Qnumber.
unexpectedEnd = QUnexpected Qend Qof QcuePoint Qparam Qstring.
cannotDisable = QCannot Qdisable Qactionscript Qcue Qpoints.
undefinedArray = QCuePoint.array Qundefined.
wrongIndex = QCuePoint.index Qmust Qbe Qnumber Qbetween Q-1 Qand QcuePoint.array.length.
undefinedParameter = QCuePoint Qparameter Qundefined.

# videoClasses\NCManager

invalidCall = QCannot Qcall Qreconnect Qon Qan Qhttp Qconnection.
nameNotFound = QBase QRTMP QURL Qmust Qinclude Qapplication Qname: '{0}'.
cannotSwitchRTMP = QCannot Qswitch Qbetween Qmultiple Qabsolute QRTMP QURLs. QMust Quse Qmeta Qtag Qbase Qattribute.
illegalAttributes = QIllegal Qmeta Qtag Qbase Qattribute: '{0}'.
wrongURL = QWhen Qusing Qmeta Qtag Qbase Qattribute, Qcannot Quse Qabsolute QURLs Qfor Qvideo Qor Qref Qtag Qsrc Qattributes.
missingParameter = QFpad QURL Qmust Qinclude Quri Qparameter: '{0}'.
wrongParameter = QFpad QURL Quri Qparameter Qmust Qbe Qrtmp QURL: '{0}'.
cannotSwitchFPAD = QCannot Qswitch Qbetween Qmultiple Qabsolute Qfpad QURLs. QMust Quse Qmeta Qtag Qbase Qattribute.

# videoClasses\SMILManager

rootNotFound = QURL: \\"'{0}'\\" QNo Qroot Qnode Qfound; Qif Qfile Qis Qan Qflv, Qit Qmust Qhave Qa .flv Qextension.
rootNotSMIL = QURL: \\"'{0}'\\" QRoot Qnode Qnot Qsmil: '{1}'.
missingAttributes = QURL: \\"'{0}'\\" QTag '{1}' Qrequires Qattributes Qid, Qwidth, Qand Qheight. Q QWidth Qand Qheight Qmust Qbe Qnumbers Qgreater Qthan Qor Qequal Qto 0.
tagNotFound = QURL: \\"'{0}'\\"  QAt Qleast Qone Qvideo Qof Qref Qtag Qis Qrequired.
missingAttributeSrc = QURL: \\"'{0}'\\" QAttribute Qsrc Qis Qrequired Qin '{1}' Qtag.

# videoClasses\VideoError

errorMessages = QUnable Qto Qmake Qconnection Qto Qserver Qor Qto Qfind QFLV Qon Qserver.,\
        QNo Qmatching Qcue Qpoint Qfound.,\
        QIllegal Qcue Qpoint.,\
        QInvalid Qseek.,\
        QInvalid QcontentPath.,\
        QInvalid QXML.,\
        QNo Qbitrate Qmatch, Qmust Qbe Qno Qdefault Qflv.,\
        QCannot Qdelete Qdefault QVideoPlayer.

# videoClasses\VideoPlayer

nullURL = QNull QURL Qsent Qto QVideoPlayer.load.
badArgs = QBad Qargs Qto Q_play.

# videoClasses\FPADManager

missingRoot = QURL: \\"'{0}'\\" QNo Qroot Qnode Qfound; Qif QURL Qis Qfor Qan Qflv, Qit Qmust Qhave Qa Q.flv Qextension Qand Qtake Qno Qparameters.
notfpad = QURL: \\"'{0}'\\" QRoot Qnode Qnot Qfpad.
missingProxy = QURL: \\"'{0}'\\" Qfpad Qxml Qrequires Qproxy Qtag.

#TextInput/TextArea

unsupportedMode = QIMEMode:{0} Qnot Qsupported.