################################################################################
##
##  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}" visas inte.
unsupportedValues="{0}" har inte st\u00f6d f\u00f6r allAutomationValues.
unsupportedReplay="{0}" st\u00f6der inte omspelning.
rootApplication=Roten f\u00f6r reproduceringsbart ID ['{0}'] f\u00f6rv\u00e4ntas vara programmet.
notResolved=Det g\u00e5r inte att l\u00f6sa underordnad f\u00f6r del "{0}":"{1}" i \u00f6verordnad "{2}".
resolvedTo="{0}" l\u00f6st till "{1}".
idResolved="{0}" ID l\u00f6st f\u00f6r tidigt.
idNotResolved=Det g\u00e5r inte att l\u00f6sa ID "{0}".
nullReturned=Null underordnade returnerade f\u00f6r "{0}" av "{1}" med "{2}" underordnade.
matchesMsg="{0}" matchningar f\u00f6r kriterier {"{1}"}.
notDefined=Egenskapen "{0}" har inte definierats i "{1}".
classNotFound=Det g\u00e5r inte att hitta automatiseringsklassen "{0}".
methodNotFound=Det g\u00e5r inte att hitta automatiseringsmetod "{0}" f\u00f6r klass "{1}".
missingArgument=Argumentv\u00e4rdet: "{0}" saknas.

# TextFieldAutomationHelper

notReplayable=Det g\u00e5r inte att spela upp KeyboardEvent med tangentkod "{0}".

# codec/AssetPropertyCodec

notSettable=Du f\u00e5r inte ange inst\u00e4llningar f\u00f6r en tillg\u00e5ng.

# codec/DefaultPropertyCodec

precisionLoss=Eventuell precisionsf\u00f6rlust vid konvertering av egenskap '{0}'.

# codec/ListDataObjectCodec

notSupported=Inst\u00e4llning av selectedItem st\u00f6ds inte.

# qtp/QTPAdapter

invisible=Visas ej.
notActiveX=Det g\u00e5r inte att l\u00e4sa in Adobe Flex 4-plugin-programmet f\u00f6r HP Quick Test Pro. Adobe Flex 4-plugin-programmet f\u00f6r HP Quick Test fungerar endast med Microsoft Internet Explorer.
notWindows=Det g\u00e5r inte att l\u00e4sa in Adobe Flex 4-plugin-programmet f\u00f6r HP Quick Test Pro. Adobe Flex 4-plugin-programmet f\u00f6r HP Quick Test fungerar inte p\u00e5 "{0}".
noExternalInterface=Det g\u00e5r inte att l\u00e4sa in Adobe Flex 4-plugin-programmet f\u00f6r HP Quick Test Pro. ExternalInterface \u00e4r inte tillg\u00e4ngligt i den h\u00e4r spelaren.
noPlayerID=Det g\u00e5r inte att l\u00e4sa in Adobe Flex 4-plugin-programmet f\u00f6r HP Quick Test Pro. Inget ID har angetts f\u00f6r spelaren p\u00e5 html-sidan.
invalidPlayerID=Det g\u00e5r inte att l\u00e4sa in Adobe Flex 4-plugin-programmet f\u00f6r HP Quick Test Pro. Ogiltigt spelar-ID "{0}".
unableToLoadPluginGeneric=Det g\u00e5r inte att l\u00e4sa in Adobe Flex 4-plugin-programmet f\u00f6r HP Quick Test Pro \u2013 "{0}".
notSynchronized=V\u00e4ntar p\u00e5 att f\u00f6reg\u00e5ende operation ska slutf\u00f6ras.

# qtp/QTPEnvironment

autClassNotFound=Det g\u00e5r inte att hitta AutomationClass f\u00f6r "{0}" "{1}".



# Licence handler messages 
recordLimitReached=Det finns ingen licens. I testversionen \u00e4r endast ett begr\u00e4nsat antal poster till\u00e5tna.
replayLimitReached=Det finns ingen licens. I testversionen \u00e4r endast ett begr\u00e4nsat antal omspelningar till\u00e5tna.
