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


keywordNotAllowed=${keyword}' ei ole sallittu
classDefinitionNotAllowed=Luokan m\u00e4\u00e4ritys ei ole sallittu
expressionNotSupported=Ilmaisua ei tueta
functionDefinitionNotAllowed=Toiminnon m\u00e4\u00e4ritys ei ole sallittu
interfaceDefinitionNotAllowed=Rajapintam\u00e4\u00e4ritys ei ole sallittu
labelsNotAllowed=Nimet eiv\u00e4t ole sallittuja
literalObjectsNotSupported=Literaaliobjekteja ei tueta
nullPointerException=Null-objektin viitteen ominaisuutta tai menetelm\u00e4\u00e4 ei voi k\u00e4ytt\u00e4\u00e4
StatementListNodeWIthMoreThanOneItem=StatementListNode, jolla on useampi kuin yksi kohde?
typeNotExpected=Odottamaton tyyppi
unrecognizedBinaryOperator=tunnistamaton binaarioperaattori
unrecognizedUnaryOperator=tunnistamaton unaarioperaattori
unsupportedExpression=Ilmaisua ei tueta
whatIsDocCommentNode=ep\u00e4varmaa, mik\u00e4 DocCommentNode on
whatIsMetaDataNode=ep\u00e4varmaa, mik\u00e4 MetaDataNode on
xmlLiteralsNotSupported=XML-literaaleja ei tueta
binaryProgramNodeUnexpected=Odottamaton BinaryProgramNode
noSuchVariable = Ei t\u00e4llaista muuttujaa: ${arg2}
typeError = Tyyppivirhe
