################################################################################
##
##  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.
##
################################################################################
# Developer RTE Section

# AutomationManager

notVisible='{0}' not Visible.
unsupportedValues='{0}' does not support allAutomationValues.
unsupportedReplay='{0}' does not support replay.
rootApplication=Expecting root of reproducible id ['{0}'] to be the application.
notResolved=Unable to resolve child for part '{0}':'{1}' in parent '{2}'.
resolvedTo='{0}' resolved to '{1}'.
idResolved='{0}' id resolved prematurely.
idNotResolved=Unable to resolve id '{0}'.
nullReturned=Null child returned at '{0}' by '{1}' with '{2}' children.
matchesMsg='{0}' matches for critera {'{1}'}.
notDefined=Property '{0}' not defined in '{1}'.
classNotFound=Unable to find automation class '{0}'.
methodNotFound=Unable to find automation method '{0}' for class '{1}'.
missingArgument=Missing argument value: '{0}'.

# TextFieldAutomationHelper

notReplayable=Cannot replay KeyboardEvent with key code '{0}'.

# codec/AssetPropertyCodec

notSettable=You can not set an asset.

# codec/DefaultPropertyCodec

precisionLoss=Possible loss of precision converting property '{0}'.

# codec/ListDataObjectCodec

notSupported=Setting selectedItem is not supported.

# qtp/QTPAdapter

invisible=Not Visible.
notActiveX=Unable to load Adobe Flex 4 Plug-in for HP Quick Test Pro. Adobe Flex 4 Plug-in for HP Quick Test Pro supports only Microsoft Internet Explorer.
notWindows=Unable to load Adobe Flex 4 Plug-in for HP Quick Test Pro. Adobe Flex 4 Plug-in for HP Quick Test Pro is not supported on '{0}'.
noExternalInterface=Unable to load Adobe Flex 4 Plug-in for HP Quick Test Pro. ExternalInterface is not available in this player.
noPlayerID=Unable to load Adobe Flex 4 Plug-in for HP Quick Test Pro. No id specified for player in html page.
invalidPlayerID=Unable to load Adobe Flex 4 Plug-in for HP Quick Test Pro. Invalid player id '{0}'.
unableToLoadPluginGeneric=Unable to load Adobe Flex 4 Plug-in for HP Quick Test Pro - '{0}'.
notSynchronized=Waiting for previous operation to complete.

# qtp/QTPEnvironment

autClassNotFound=Unable to find AutomationClass for '{0}' '{1}'.



# Licence handler messages 
recordLimitReached=License not present. With the trial verison only limited records are allowed.
replayLimitReached=License not present. With the trial verison only limited replays are allowed.
