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

# Launcher
EXEL050=java version %s
EXEL051=\ub0b4\ubd80 VM \uc624\ub958\: \uba54\ubaa8\ub9ac \ubd80\uc871
EXEL052=\ub0b4\ubd80 VM \uc624\ub958\: java/lang/String \ud074\ub798\uc2a4\ub97c \ucc3e\ub294 \ub370 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.
EXEL053=\ub0b4\ubd80 VM \uc624\ub958\: \ud074\ub798\uc2a4 \uc774\ub984 %s\uc758 \ubc14\uc774\ud2b8 \ubc30\uc5f4 \uc791\uc131\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.
EXEL054=\ub0b4\ubd80 VM \uc624\ub958\: \ud074\ub798\uc2a4 \uc774\ub984 %s\uc758 java/lang/String \uc791\uc131\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.
EXEL055=\ub0b4\ubd80 VM \uc624\ub958\: \ud074\ub798\uc2a4 \uc774\ub984 %s\uc758 \ubb38\uc790\uc5f4\uc744 UTF \ubb38\uc790\ub85c \ubcc0\ud658 \uc911 \uba54\ubaa8\ub9ac \ubd80\uc871
EXEL056=%s \ud074\ub798\uc2a4\ub294 main()\uc744 \uad6c\ud604\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
EXEL057=\ub0b4\ubd80 VM \uc624\ub958\: \uc778\uc218 \ubc30\uc5f4 \uc791\uc131\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.
EXEL058=\ub0b4\ubd80 VM \uc624\ub958\: \uc778\uc218 %s\uc758 \ubc14\uc774\ud2b8 \ubc30\uc5f4 \uc791\uc131\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.
EXEL059=\ub0b4\ubd80 VM \uc624\ub958\: \uc778\uc218 %s\uc758 java/lang/String \uc791\uc131\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.
EXEL060=\ub0b4\ubd80 VM \uc624\ub958\: %s\uc758 \ubc30\uc5f4 \uc694\uc18c \uc124\uc815\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.
EXEL061=VM \uc2dc\uc791 \uc624\ub958\: \uba54\ubaa8\ub9ac \ubd80\uc871
EXEL062=\ub0b4\ubd80 VM \uc624\ub958\: Java VM \uc791\uc131\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.

# Port
PORT001=\uba54\ubaa8\ub9ac\ub97c \ud560\ub2f9\ud558\ub294 \ub370 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.
PORT002=\uacf5\uc720 \ub77c\uc774\ube0c\ub7ec\ub9ac \ub85c\ub4dc \uc911 \uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
PORT015=DLL \ucc38\uc870\ub97c \ud574\uc11d\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. - \uc804\uc81c\uc870\uac74 DLL\uc774 \ub204\ub77d\ub418\uc5c8\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
PORT016=\ub0b4\ubd80 \uc624\ub958 %i
PORT017=\uc870\uc791\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4\: %d

# Zip
ZIPS000=%1$s\uc744(\ub97c) \uc5f4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4(%2$s).
ZIPS001=%s\uc744(\ub97c) \uc5f4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4(\ub0b4\ubcf4\ub0b4\uae30 \ub204\ub77d).

