#
# Copyright (c) 2000, 2015, 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.
#

orbd.usage=Syntax: {0} <alternativ> \n\nd\u00E4r <alternativ> inkluderar:\n  -port                  Aktiveringsport d\u00E4r ORBD ska startas, standard 1049 (valfritt)\n  -defaultdb             Katalog f\u00F6r ORBD-filer, standard "./orb.db" (valfritt)\n  -serverid              Server-id f\u00F6r ORBD, standard 1 (valfritt)\n  -ORBInitialPort        Ursprunglig port (obligatoriskt)\n  -ORBInitialHost        Ursprungligt v\u00E4rdnamn (obligatoriskt)\n

servertool.usage=Syntax: {0} <alternativ> \n\nd\u00E4r <alternativ> inkluderar:\n  -ORBInitialPort        Ursprunglig port (obligatoriskt)\n  -ORBInitialHost        Ursprungligt v\u00E4rdnamn (obligatoriskt)\n
servertool.banner=\n\nV\u00E4lkommen till Java IDL Server Tool \nange kommandona vid kommandoraden \n
servertool.shorthelp=\n\n\tTillg\u00E4ngliga kommandon: \n\t------------------- \n
servertool.baddef=Felaktig serverdefinition: {0}
servertool.nosuchserver=\tn\u00E5gon s\u00E5dan server kan inte hittas.
servertool.helddown=\tservern h\u00E5lls avst\u00E4ngd.
servertool.nosuchorb=\togiltig ORB.
servertool.serverup=\tserver \u00E4r redan startad
servertool.appname=\tapplicationName     - {0}
servertool.name=\tnamn      - {0}
servertool.classpath=\tclasspath - {0}
servertool.args=\targs      - {0}
servertool.vmargs=\tvmargs    - {0}
servertool.serverid=\tserver id - {0}
servertool.servernotrunning=\tserver k\u00F6rs inte.
servertool.register=\n\n\tregister -server <serverklassnamn> \n\t         -applicationName <alternativt servernamn> \n\t         -classpath <klass\u00F6kv\u00E4g till server> \n\t         -args <argument till server> \n\t         -vmargs <argument till server-JVM>\n
servertool.register1=registrera en aktiverbar server
servertool.register2=\tserver registrerad (serverid = {0}).
servertool.register3=\tserver registrerad men h\u00E5lls avst\u00E4ngd(serverid = {0}).
servertool.register4=\tserver har redan registrerats (serverid = {0}).

servertool.unregister=\n\tunregister [ -serverid <server-id> | -applicationName <namn> ] \n
servertool.unregister1=avregistrera en registrerad server
servertool.unregister2=\tserver avregistrerad.

servertool.locate=\n\tlocate [ -serverid <server-id> | -applicationName <namn> ] [ <-endpointType <slutpunktstyp> ] \n
servertool.locate1=hitta portar av en viss typ f\u00F6r en registrerad server
servertool.locate2=\n\n\tV\u00E4rdnamn {0} \n\n\t\tPort\t\tPorttyp\t\tORB-id\n\t\t----\t\t---------\t\t------\n
servertool.locateorb=\n\tlocateperorb [ -serverid <server-id> | -applicationName <namn> ] [ -orbid <ORB-namn> ]\n
servertool.locateorb1=hitta portar f\u00F6r en viss ORB f\u00F6r en registrerad server
servertool.locateorb2=\n\n\tV\u00E4rdnamn {0} \n\n\t\tPort\t\tPorttyp\t\tORB-id\n\t\t----\t\t--------\t\t------\n
servertool.getserverid=\n\tgetserverid [ -applicationName <namn> ] \n
servertool.getserverid1=returnerar server-id f\u00F6r ett applicationName
servertool.getserverid2=\tServer-id f\u00F6r applicationName {0} \u00E4r {1}

servertool.list=\n\tlist_\n
servertool.list1=listar alla registrerade servrar
servertool.list2=\n\tServer-id\tServerklassnamn\t\tServerapplikation\n\t---------\t-----------------\t\t------------------\n
servertool.listactive=\n\tlistactive
servertool.listactive1=listar alla f\u00F6r tillf\u00E4llet aktiva servrar
servertool.listappnames=\tlistappnames\n
servertool.listappnames1=listar de applicationNames som f\u00F6r tillf\u00E4llet \u00E4r definierade
servertool.listappnames2=Definierade applikationsnamn f\u00F6r servern:

servertool.shutdown=\n\tshutdown [ -serverid <server-id> | -applicationName <namn> ]\n
servertool.shutdown1=st\u00E4nger av en registrerad server
servertool.shutdown2=\tserver har st\u00E4ngts av.
servertool.startserver=\n\tstartup [ -serverid <server-id> | -applicationName <namn> ]\n
servertool.startserver1=startar en registrerad server
servertool.startserver2=\tserver har startats.

servertool.quit=\n\tquit\n
servertool.quit1=avsluta det h\u00E4r verktyget

servertool.help=\thelp\n\tELLER\n\thelp <kommandonamn>\n
servertool.help1=f\u00E5 hj\u00E4lp

servertool.orbidmap=\tSyntax: orblist [ -serverid <server-id> | -applicationName <namn> ]\n
servertool.orbidmap1=lista \u00F6ver ORB-namn och deras mappning
servertool.orbidmap2=\n\tORB-id\t\tORB-namn\n\t------\t\t--------\n
pnameserv.success=Den best\u00E4ndiga namnservern har startats


bootstrap.usage=Syntax: {0} <alternativ> \n\nd\u00E4r <alternativ> inkluderar:\n  -ORBInitialPort        Ursprunglig port (obligatoriskt)\n  -InitialServicesFile   En fil som inneh\u00E5ller en lista \u00F6ver ursprungliga tj\u00E4nster (obligatoriskt)\n
bootstrap.success=st\u00E4ller in porten till {0} och l\u00E4ser tj\u00E4nster fr\u00E5n {1}
bootstrap.filenotreadable=filen {0} kan inte l\u00E4sas
bootstrap.filenotfound=filen {0} hittas inte
bootstrap.exception=p\u00E5tr\u00E4ffade undantag medan egenskaper sparades i filen {0}: Undantag {1}

tnameserv.exception=p\u00E5tr\u00E4ffade ett undantag n\u00E4r starttj\u00E4nsten startades vid porten {0}
tnameserv.usage=f\u00F6rs\u00F6k att anv\u00E4nda en annan port med kommandoradsargument -ORBInitialPort <portnr>
tnameserv.invalidhostoption=ORBInitialHost \u00E4r inte ett giltigt alternativ f\u00F6r NameService
tnameserv.orbinitialport0=ORBInitialPort 0 \u00E4r inte ett giltigt alternativ f\u00F6r NameService
tnameserv.hs1=Ursprunglig namngivningskontext:\n{0}
tnameserv.hs2=TransientNameServer: st\u00E4ller in port f\u00F6r ursprungliga objektreferenser till: {0}
tnameserv.hs3=Klar.

orbd.commfailure=\nKunde inte starta ORBD eftersom ORBinitialport redan anv\u00E4nds
orbd.internalexception=\nKunde inte starta ORBD p\u00E5 grund av internt undantag. \nM\u00F6jliga orsaker: \n1. Angivet ORBInitialPort eller ORBActivationPort anv\u00E4ndas redan \n2. Ingen beh\u00F6righet att skriva till orb.db 

