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


functionsInFile = Funksjoner i ${fileName}#${fileNumber}
unknown = ukjent
empty = <tom>
processTerminatedWithoutDebuggerConnection = Prosessen ble avsluttet uten at den opprettet en tilkobling til feils\u00f8king.
processTerminatedUnexpectedly = Prosessen ble avbrutt uten forvarsel.
serverSocketNotListening = Serversocket lytter ikke.
functionCallsNotSupported = M\u00e5lspilleren st\u00f8tter ikke funksjonskall
watchpointsNotSupported = M\u00e5lspilleren st\u00f8tter ikke overv\u00e5kningspunkter
exceptionBreakpointsNotSupported = M\u00e5lspilleren st\u00f8tter ikke unntaksavbruddspunkter
operatorNotSupported = M\u00e5lspilleren st\u00f8tter ikke operatoren ${operator}
