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

# flex2.tools
Mxmlc.OutputMessage=${name} (${length} tavua)
Compc.OutputMessage=${name} (${length} tavua)
Compiler.NoUpdateMessage=${name} on ajan tasalla, eik\u00e4 sit\u00e4 tarvitse muodostaa uudelleen.
Compc.NoUpdateMessage=${name} on ajan tasalla, eik\u00e4 sit\u00e4 tarvitse muodostaa uudelleen.
CompcPreLink.HigherMinimumSupportedVersionRequired=SWC '${swc}' vaatii v\u00e4hint\u00e4\u00e4n tuettavan version ${swcMinimumSupportedVersion}. 
CompcPreLink.PotentialForMissingSkins=SWC '${swc}' sis\u00e4lt\u00e4\u00e4 tyylivirheit\u00e4 ja sis\u00e4ltyy kohteeseen library-path, joten riippuvuudet linkitet\u00e4\u00e4n ilman tyylej\u00e4. T\u00e4m\u00e4n vuoksi SWC:t\u00e4 k\u00e4ytt\u00e4vist\u00e4 sovelluksista saattaa puuttua skin-elementtej\u00e4. SWC tulisi lis\u00e4t\u00e4 kohteeseen external-library-path.
PreLink.DependencyNotCompatible=Riippuvuus ${definition} kohteesta ${swc} sis\u00e4lt\u00e4\u00e4 vaaditun tuettavan version ${swcMinimumVersion}, joka on uudempi kuin yhteensopivuusversio ${compatibilityVersion}.
PreLink.NoExternalVisibleDefinition=Kohdetiedostolla ei ole ulkoisesti n\u00e4kyv\u00e4\u00e4 m\u00e4\u00e4rityst\u00e4.
PreLink.MissingFactoryClassInFrameMetadata=T\u00e4lle kokoajayksik\u00f6lle ei ole m\u00e4\u00e4ritetty ruudun metadatassa factoryClass-luokkaa m\u00e4\u00e4ritettyjen suorituksenaikaisten jaettujen kirjastojen lataamiseksi. Jos haluat suorittaa kokoamisen ilman suorituksenaikaisia jaettuja kirjastoja, asetuksen -static-link-runtime-shared-libraries on oltava true tai asetus -runtime-shared-libraries pit\u00e4\u00e4 poistaa.
PreLink.InvalidBackgroundColor=Virheellinen taustav\u00e4ri: ${backgroundColor}
PreLink.CouldNotParseNumber=Kohdetta ${num} ei voitu j\u00e4sent\u00e4\u00e4 numeroksi m\u00e4\u00e4ritteelle ${attribute}.
PreLink.MissingSignedLibraryDigest=Kirjaston ${libraryPath} catalog.xml-tiedostosta ei l\u00f6ytynyt allekirjoitettua yhteenvetoa. Kokoa kirjasto komennolla -create-digest=true ja yrit\u00e4 uudelleen.
PreLink.MissingUnsignedLibraryDigest=Kirjaston ${libraryPath} catalog.xml-tiedostosta ei l\u00f6ytynyt allekirjoittamatonta yhteenvetoa. Kokoa kirjasto komennolla -create-digest=true ja yrit\u00e4 uudelleen.
PreLink.ClassesMappedToSameRemoteAlias=L\u00f6ydettin kohteen '${existingClassName}' m\u00e4\u00e4ritys et\u00e4luokan aliakseen '${alias}' k\u00e4sitelt\u00e4ess\u00e4 luokkaa '${className}'. Flex muodostaa nyt koodin tarkistaakseen, onko aliasta viel\u00e4 rekister\u00f6ity. Poistaessaan et\u00e4tietojen sarjoitusta alias voi muodostaa m\u00e4\u00e4rityksen ainoastaan yhteen luokkaan. 
PreLink.RequiredRsls=Vaaditut RSL:t:
PreLink.RequiredRslUrl=\u0020\u0020\u0020\u0020${rslUrl}
PreLink.RequiredRslUrlWithFailover=\u0020\u0020\u0020\u0020Kohteiden ${rslUrl} ja 1 vikasieto.
PreLink.RequiredRslUrlWithMultipleFailovers=\u0020\u0020\u0020\u0020Kohteiden ${rslUrl} ja ${failoverCount} vikasiedot.
PreLink.CompiledAsAComponent=${className} on moduuli tai sovellus, johon viitataan suoraan. T\u00e4m\u00e4n johdosta ${className} ja kaikki sen riippuvuudet linkitet\u00e4\u00e4n kohteen ${mainDefinition} kanssa. Suositeltu tapa t\u00e4m\u00e4n v\u00e4ltt\u00e4miseen on k\u00e4ytt\u00f6liittym\u00e4n k\u00e4ytt\u00f6.
ToolsConfiguration.FailedToLoadLicenseFile=Lisenssitiedoston lataaminen ep\u00e4onnistui: ${fileName}
ToolsConfiguration.BadAS3ESCombination=Virheellinen -as3 ja -es -yhdistelm\u00e4. -as3=${as3} ja -es=${es}. Kumpi tahansa voi olla true.
ToolsConfiguration.BadESStrictCombination=-es=${es} ja -strict=${strict}. -strict on sallittu, mutta se voi aiheuttaa kokoajavirheit\u00e4 dynaamisten ominaisuuksien viittauksissa.
ToolsConfiguration.DeprecatedConfigurationOption=${var} on poistettu k\u00e4yt\u00f6st\u00e4 versiosta ${since} l\u00e4htien. K\u00e4yt\u00e4 elementti\u00e4 ${replacement}.
Optimizer.NotAValidSwfFile=${fileName} ei ole kelpaava SWF-tiedosto
