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


timeoutAfterUnknownDelay = Timeout vid v\u00e4ntan p\u00e5 fels\u00f6kningssvar fr\u00e5n Flash Player.
timeout = Timeout vid v\u00e4ntan p\u00e5 fels\u00f6kningssvar fr\u00e5n Flash Player i ${time} millisekunder.
notConnected = Fels\u00f6karen \u00e4r inte l\u00e4ngre ansluten till Flash Player
notSuspended = \u00c5tg\u00e4rden \u00e4r endast till\u00e5ten n\u00e4r Flash Player \u00e4r pausad.
suspended = \u00c5tg\u00e4rden \u00e4r inte till\u00e5ten n\u00e4r Flash Player \u00e4r pausad
unexpectedPlayerVersion = Ov\u00e4ntad version av Flash Player
webBrowserGenericName = Webbl\u00e4sare
flashPlayerGenericName = Flash-spelare
maybeAlreadyRunningForDebug = St\u00e4ng programmet (om det redan k\u00f6rs) innan du p\u00e5b\u00f6rjar avlusning.
maybeAlreadyRunningForRun = St\u00e4ng programmet (om det redan k\u00f6rs) innan du p\u00e5b\u00f6rjar k\u00f6rning.
