#
#
# Copyright 2000-2005 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.
#

# "rmid", inetd", and "wait" should not be translated.
rmid.syntax.exec.invalid=\
    rmid startades fr\u00e5n inetd med ogiltig status (m\u00e5ste vara wait)

# "rmid" and "inetd" should not be translated.
rmid.syntax.port.badarg=\
    port kan inte anges om rmid startas fr\u00e5n inetd

# "port" here refers to a TCP port for the server to listen on.
rmid.syntax.port.badnumber=\
    port \u00e4r inte ett nummer

# "-port" should not be translated, because it's part of command syntax.
rmid.syntax.port.missing=\
    alternativet -port kr\u00e4ver argument

# "-log" should not be translated, because it's part of command syntax.
rmid.syntax.log.missing=\
    alternativet -log kr\u00e4ver argument

# "-log" should not be translated, because it's part of command syntax.
rmid.syntax.log.required=\
    alternativet -log kr\u00e4vs

# {0} = the (string) illegal argument in question
rmid.syntax.illegal.option=\
ogiltigt alternativ: {0}

# {0} = the (string) reason text that came with a thrown exception
# "Activation.main" should not be translated, because it's a codepoint
rmid.unexpected.exception=\
	Activation.main: ett undantagsavbrott har intr\u00e4ffat: {0}

# "java.home" should not be translated, because it's a property name
# "ActivatorImpl" should not be translated, because it's a codepoint
rmid.unfound.java.home.property=\
	ActivatorImpl: det g\u00e5r inte att hitta java.home

# "rmid" should not be translated
rmid.inherited.channel.info=\
    uppstart av rmid med \u00e4rvd kanal

# "Activation.main" should not be translated, because it's a codepoint
rmid.exec.policy.invalid=\
	Activation.main: ogiltig exec policy-klass

# "rmid" should not be translated
rmid.exec.policy.exception=\
	rmid: f\u00f6rs\u00f6k att h\u00e4mta throws f\u00f6r exec-policy:

# "rmid" should not be translated
rmid.exec.command=\
	rmid: debugExec: k\u00f6r "{0}"

# "rmid" should not be translated
rmid.group.inactive=\
	rmid: aktiveringsgruppen \u00e4r inaktiv: {0}

# "Activation.main", "sun.rmi.activation.execPolicy", "ExecPermission" and 
# "ExecOptionPermission" should not be translated, since they refer to
# class/permission names.
rmid.exec.perms.inadequate=\
    Activation.main: varning: systemegenskapen sun.rmi.activation.execPolicy\n\
        \u00e4r inte specificerad och inga ExecPermissions/ExecOptionPermissions\n\
        har utdelats. Efterf\u00f6ljande aktiveringsf\u00f6rs\u00f6k kan misslyckas p\u00e5 grund av misslyckade\n\
    kontroller av ExecPermission/ExecOptionPermission-beh\u00f6righet.  Mer\n\
    information om hur du konfigurerar rmid-s\u00e4kerhet finns i:\n\
\n\
        http://java.sun.com/j2se/1.4/docs/tooldocs/solaris/rmid.html\n\
        http://java.sun.com/j2se/1.4/docs/tooldocs/win32/rmid.html\n

# "rmid", "-port", "-log", "-stop", "-C" and "-J" should not be translated,
# because they are syntax
rmid.usage=G\u00f6r s\u00e5 h\u00e4r: {0} <alternativ>\
\n\
\nd\u00e4r <alternativ> omfattar:\
\n  -port <port>        Ange porten f\u00f6r rmid\
\n  -log <katalog>      Ange katalogen d\u00e4r rmid ska spara loggen\
\n  -stop               Stoppa p\u00e5g\u00e5ende rmid-anrop (f\u00f6r angiven port)\
\n  -C<k\u00f6rtidsflagga>   Skicka argumentet till varje underordnad process (aktiveringsgrupp)\
\n  -J<k\u00f6rtidsflagga>   Skicka argumentet till java-tolken\
\n\

# This means "The currently running activation daemon has been shut down,
# and is about to exit".
rmid.daemon.shutdown=\
	aktiveringsdemonen avslutas

# "rmid" should not be translated
rmid.restart.group.warning=\
\nrmid: (VARNING) starta om grupp-throws:

# "rmid" should not be translated
rmid.restart.service.warning=\
\nrmid: (VARNING) starta om service-throws:

# "rmid" should not be translated
rmid.log.update.warning=\
\nrmid: (VARNING) logga uppdaterings-throws:

# "rmid" should not be translated
rmid.log.snapshot.warning=\
\nrmid: (ALLVARLIGT) logga \u00f6gonblicks-throws:

# "rmid" should not be translated
rmid.log.recover.warning=\
\nrmid: (VARNING) {0}: hoppa \u00f6ver loggpost under \u00e5terst\u00e4llning:
