#
# Copyright 2000-2006 Sun Microsystems, Inc.  All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Sun designates this
# particular file as subject to the "Classpath" exception as provided
# by Sun in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#

error.cant.open=\
     kan inte \u00f6ppna: {0} 
error.illegal.option=\
        Ogiltigt alternativ: {0}
error.bad.option=\
        Ett av alternativen -{ctxu} m\u00e5ste anges.
error.bad.cflag=\
        f\u00f6r c-flaggan m\u00e5ste manifest- eller indatafiler anges.
error.bad.uflag=\
        f\u00f6r u-flaggan m\u00e5ste manifest-, e-flagg- eller indatafiler anges.
error.bad.eflag=\
	e-flaggan och manifest med attributet Main-Class kan inte anges \n\
	 tillsammans.
error.nosuch.fileordir=\
        {0} : Det finns ingen s\u00e5dan fil eller katalog.
error.write.file=\
        Det uppstod ett fel vid skrivning till befintlig jar-fil.
error.create.dir=\
        {0} : Det gick inte att skapa n\u00e5gon katalog.
error.incorrect.length=\
        ogiltig l\u00e4ngd vid bearbetning: {0}
out.added.manifest=\
        extra manifestfil
out.update.manifest=\
        uppdaterad manifestfil
out.ignore.entry=\
        ignorerar posten {0}
out.adding=\
        l\u00e4gger till: {0}
out.deflated=\
        \ \({0}% komprimerat)
out.stored=\
        \ \(0% lagrat)
out.create=\
        \ \ \ \ skapad: {0}
out.extracted=\
        extraherat: {0}
out.inflated=\
        expanderat: {0}
out.size=\
        \ \(in = {0}) (ut = {1})

usage=\
Anv\u00e4ndning: jar-filer {ctxui}[vfm0Me] [jar-fil] [manifestfil] [startpunkt] [-C-katalog] files ...\n\
Alternativ:\n\
\ \   -c  skapa nytt arkiv\n\
\ \   -t  lista inneh\u00e5llsf\u00f6rteckning f\u00f6r arkiv\n\
\ \   -x  extrahera specifika (eller alla) filer fr\u00e5n arkiv\n\
\ \   -u  uppdatera befintligt arkiv\n\
\ \   -v  generera ytterligare text f\u00f6r standardtext\n\
\ \   -f  ange arkivfilens namn\n\
\ \   -m  ta med manifestinformation fr\u00e5n angiven manifestfil\n\
\ \   -e  ange programstartpunkt f\u00f6r frist\u00e5ende program \n\
\ \       som medf\u00f6ljer i en k\u00f6rbar jar-fil\n\
\ \   -0  lagra endast (ingen zip-komprimering)\n\
\ \   -M  skapa inte n\u00e5gon manifestfil f\u00f6r posterna\n\
\ \   -i  generera indexinformation f\u00f6r de angivna jar-filerna\n\
\ \   -C  \u00e4ndra till den angivna katalogen och ta med f\u00f6ljande fil\n\
Om en fil \u00e4r en katalog bearbetas den rekursivt.\n\
Namnen p\u00e5 manifestfilen, arkivfilen och startpunkten anges i samma\n\
ordning som m-, f- och e-flaggorna.\n\n\
Exempel 1: S\u00e5 h\u00e4r arkiverar du tv\u00e5 klassfiler i ett arkiv vid namn classes.jar: \n\
\ \      jar cvf classes.jar Foo.class Bar.class \n\
Exempel 2: Anv\u00e4nd en befintlig manifestfil (mymanifest) och arkivera alla\n\
\ \          filer fr\u00e5n katalogen foo/ i classes.jar: \n\
\ \      jar cvfm classes.jar mymanifest -C foo/ .\n
