#
#
# Copyright (c) 1998, 2017, Oracle and/or its affiliates. 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.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.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 tal

# "-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=otill\u00E5tet 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 undantag uppstod: {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: hittar inte java.home

# "rmid" should not be translated
rmid.inherited.channel.info=start 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\nhar inte angetts och inga ExecPermissions/ExecOptionPermissions har\ntilldelats. Efterf\u00F6ljande aktiveringsf\u00F6rs\u00F6k kanske inte utf\u00F6rs p\u00E5 grund\nav ej utf\u00F6rda ExecPermission/ExecOptionPermission-beh\u00F6righetskontroller. \nOm du vill konfigurera s\u00E4kerhet l\u00E4ser du i dokumentationen f\u00F6r rmid.

# "rmid", "-port", "-log", "-stop", "-C" and "-J" should not be translated,
# because they are syntax
rmid.usage=Syntax: {0} <alternativ>\n\nd\u00E4r <alternativ> inkluderar:\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\u00F6rningsflagga>   Skicka argumentet till varje underordnad process (aktiveringsgrupp)\n  -J<k\u00F6rningsflagga>   Skicka argumentet till Javatolken\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 gruppkast:

# "rmid" should not be translated
rmid.restart.service.warning=\nrmid: (Varning) starta om tj\u00E4nstekast:

# "rmid" should not be translated
rmid.log.update.warning=\nrmid: (Varning) logga uppdateringskast:

# "rmid" should not be translated
rmid.log.snapshot.warning=\nrmid: (Allvarligt) logga \u00F6gonblickskast:

# "rmid" should not be translated
rmid.log.recover.warning=\nrmid: (Varning) {0}: hoppar \u00F6ver loggpost under \u00E5terst\u00E4llning:
