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

# Day names

weekday-0-long = 일요일
weekday-1-long = 월요일
weekday-2-long = 화요일
weekday-3-long = 수요일
weekday-4-long = 목요일
weekday-5-long = 금요일
weekday-6-long = 토요일

weekday-0-short = 일
weekday-1-short = 월
weekday-2-short = 화
weekday-3-short = 수
weekday-4-short = 목
weekday-5-short = 금
weekday-6-short = 토

# Month names

month-0-long  = 1월
month-1-long  = 2월
month-2-long  = 3월
month-3-long  = 4월
month-4-long  = 5월
month-5-long  = 6월
month-6-long  = 7월
month-7-long  = 8월
month-8-long  = 9월
month-9-long  = 10월
month-10-long = 11월
month-11-long = 12월

month-0-genitive  = 1월
month-1-genitive  = 2월
month-2-genitive  = 3월
month-3-genitive  = 4월
month-4-genitive  = 5월
month-5-genitive  = 6월
month-6-genitive  = 7월
month-7-genitive  = 8월
month-8-genitive  = 9월
month-9-genitive  = 10월
month-10-genitive = 11월
month-11-genitive = 12월

month-0-short  = 1월
month-1-short  = 2월
month-2-short  = 3월
month-3-short  = 4월
month-4-short  = 5월
month-5-short  = 6월
month-6-short  = 7월
month-7-short  = 8월
month-8-short  = 9월
month-9-short  = 10월
month-10-short = 11월
month-11-short = 12월

# Relative time ("pretty dates"), normal/long variant

minutes-ago-long={[ plural(value) ]}
minutes-ago-long[zero]  = 지금
minutes-ago-long[one]   = 1분 전
minutes-ago-long[two]   = {{value}}분 전
minutes-ago-long[few]   = {{value}}분 전
minutes-ago-long[many]  = {{value}}분 전
minutes-ago-long[other] = {{value}}분 전

hours-ago-long={[ plural(value) ]}
hours-ago-long[zero]  = 지금
hours-ago-long[one]   = 1시간 전
hours-ago-long[two]   = {{value}}시간 전
hours-ago-long[few]   = {{value}}시간 전
hours-ago-long[many]  = {{value}}시간 전
hours-ago-long[other] = {{value}}시간 전

days-ago-long={[ plural(value) ]}
days-ago-long[zero]  = 오늘
days-ago-long[one]   = 어제
days-ago-long[two]   = {{value}}일 전
days-ago-long[few]   = {{value}}일 전
days-ago-long[many]  = {{value}}일 전
days-ago-long[other] = {{value}}일 전

weeks-ago-long={[ plural(value) ]}
weeks-ago-long[zero]  = 이번 주
weeks-ago-long[one]   = 지난 주
weeks-ago-long[two]   = {{value}}주 전
weeks-ago-long[few]   = {{value}}주 전
weeks-ago-long[many]  = {{value}}주 전
weeks-ago-long[other] = {{value}}주 전

months-ago-long={[ plural(value) ]}
months-ago-long[zero]  = 이번 달
months-ago-long[one]   = 지난 달
months-ago-long[two]   = {{value}}개월 전
months-ago-long[few]   = {{value}}개월 전
months-ago-long[many]  = {{value}}개월 전
months-ago-long[other] = {{value}}개월 전

years-ago-long={[ plural(value) ]}
years-ago-long[zero]  = 올해
years-ago-long[one]   = 작년
years-ago-long[two]   = {{value}}년 전
years-ago-long[few]   = {{value}}년 전
years-ago-long[many]  = {{value}}년 전
years-ago-long[other] = {{value}}년 전

minutes-until-long={[ plural(value) ]}
minutes-until-long[zero]  = 지금
minutes-until-long[one]   = 1분 후
minutes-until-long[two]   = {{value}}분 후
minutes-until-long[few]   = {{value}}분 후
minutes-until-long[many]  = {{value}}분 후
minutes-until-long[other] = {{value}}분 후

hours-until-long={[ plural(value) ]}
hours-until-long[zero]  = 지금
hours-until-long[one]   = 한 시간 후
hours-until-long[two]   = {{value}}시간 후
hours-until-long[few]   = {{value}}시간 후
hours-until-long[many]  = {{value}}시간 후
hours-until-long[other] = {{value}}시간 후

days-until-long={[ plural(value) ]}
days-until-long[zero]  = 오늘
days-until-long[one]   = 내일
days-until-long[two]   = {{value}}일 후
days-until-long[few]   = {{value}}일 후
days-until-long[many]  = {{value}}일 후
days-until-long[other] = {{value}}일 후

weeks-until-long={[ plural(value) ]}
weeks-until-long[zero]  = 이번 주
weeks-until-long[one]   = 다음 주
weeks-until-long[two]   = {{value}}주 후
weeks-until-long[few]   = {{value}}주 후
weeks-until-long[many]  = {{value}}주 후
weeks-until-long[other] = {{value}}주 후

months-until-long={[ plural(value) ]}
months-until-long[zero]  = 이번 달
months-until-long[one]   = 다음 달
months-until-long[two]   = {{value}}개월 후
months-until-long[few]   = {{value}}개월 후
months-until-long[many]  = {{value}}개월 후
months-until-long[other] = {{value}}개월 후

years-until-long={[ plural(value) ]}
years-until-long[zero]  = 올해
years-until-long[one]   = 내년
years-until-long[two]   = {{value}}년 후
years-until-long[few]   = {{value}}년 후
years-until-long[many]  = {{value}}년 후
years-until-long[other] = {{value}}년 후

# Relative time ("pretty dates"), short variant
# LOCALIZATION NOTE: the time unit should be as short as possible,
# and the whole string should not exceed a length of ~10 latin characters.
# LOCALIZATION NOTE: the prime (’) can be used to represent minutes for most
# locales, but we use “m” instead for the English locale to prevent a possible
# confusion (35’ ago ≠ 35 feet ago).

minutes-ago-short={[ plural(value) ]}
minutes-ago-short[zero]  = 지금
minutes-ago-short[other] = {{value}}분 전

hours-ago-short={[ plural(value) ]}
hours-ago-short[zero]  = 지금
hours-ago-short[other] = {{value}}시간 전

days-ago-short={[ plural(value) ]}
days-ago-short[zero]  = 오늘
days-ago-short[other] = {{value}}일 전

minutes-until-short={[ plural(value) ]}
minutes-until-short[zero]  = 지금
minutes-until-short[other] = {{value}}분 후

hours-until-short={[ plural(value) ]}
hours-until-short[zero]  = 지금
hours-until-short[other] = {{value}}시간 후

days-until-short={[ plural(value) ]}
days-until-short[zero]  = 오늘
days-until-short[other] = {{value}}일 후

# Relative time ("pretty dates"), unexpected error

incorrectDate=(잘못된 날짜)

# Date/Time format
# see http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html

dateTimeFormat_%c = %Y년 %B %e일 %a %I:%M:%S %p
dateTimeFormat_%x = %Y/%m/%d
dateTimeFormat_%X = %I:%M:%S %p

shortTimeFormat = %I:%M %p
shortDateTimeFormat = %x %I:%M %p

# Boolean to indicate if weekStarts on Monday (1) or Sunday (0).
weekStartsOnMonday = 0

# Localize "AM" and "PM" used in %p format for time
time_am = 오전
time_pm = 오후
