/*
 * Locale definitions for Korean
 *
 * Copyright 2002 Alexandre Julliard for CodeWeavers
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#pragma code_page(65001) /* UTF-8 */

STRINGTABLE LANGUAGE LANG_KOREAN, SUBLANG_KOREAN
{
  LOCALE_FONTSIGNATURE L"\x02a7\x8000\x7cf9\x39d7\x0010\x0000\x0000\x0000\x0000\x0008\x0000\x0000\x0000\x0008\x0000\x0000"
  LOCALE_ICALENDARTYPE "1"
  LOCALE_ICENTURY "1"
  LOCALE_ICOUNTRY "82"
  LOCALE_ICURRDIGITS "0"
  LOCALE_ICURRENCY "0"
  LOCALE_IDATE "2"
  LOCALE_IDAYLZERO "1"
  LOCALE_IDEFAULTANSICODEPAGE "949"
  LOCALE_IDEFAULTCODEPAGE "949"
  LOCALE_IDEFAULTCOUNTRY "82"
  LOCALE_IDEFAULTEBCDICCODEPAGE "20833"
  LOCALE_IDEFAULTLANGUAGE "0412"
  LOCALE_IDEFAULTMACCODEPAGE "10003"
  LOCALE_IDEFAULTUNIXCODEPAGE "949"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "6"
  LOCALE_IFIRSTWEEKOFYEAR "0"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0412"
  LOCALE_ILDATE "2"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "1"
  LOCALE_INEGCURR "1"
  LOCALE_INEGNUMBER "1"
  LOCALE_INEGSEPBYSPACE "0"
  LOCALE_INEGSIGNPOSN "3"
  LOCALE_INEGSYMPRECEDES "1"
  LOCALE_INEUTRAL "0"
  LOCALE_IOPTIONALCALENDAR "5"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "0"
  LOCALE_IPOSSIGNPOSN "3"
  LOCALE_IPOSSYMPRECEDES "1"
  LOCALE_IREADINGLAYOUT "0"
  LOCALE_ITIME "0"
  LOCALE_ITIMEMARKPOSN "1"
  LOCALE_ITLZERO "0"
  LOCALE_S1159 "오전"
  LOCALE_S2359 "오후"
  LOCALE_SABBREVCTRYNAME "KOR"
  LOCALE_SABBREVDAYNAME1 "월"
  LOCALE_SABBREVDAYNAME2 "화"
  LOCALE_SABBREVDAYNAME3 "수"
  LOCALE_SABBREVDAYNAME4 "목"
  LOCALE_SABBREVDAYNAME5 "금"
  LOCALE_SABBREVDAYNAME6 "토"
  LOCALE_SABBREVDAYNAME7 "일"
  LOCALE_SABBREVLANGNAME "KOR"
  LOCALE_SABBREVMONTHNAME1 "1"
  LOCALE_SABBREVMONTHNAME2 "2"
  LOCALE_SABBREVMONTHNAME3 "3"
  LOCALE_SABBREVMONTHNAME4 "4"
  LOCALE_SABBREVMONTHNAME5 "5"
  LOCALE_SABBREVMONTHNAME6 "6"
  LOCALE_SABBREVMONTHNAME7 "7"
  LOCALE_SABBREVMONTHNAME8 "8"
  LOCALE_SABBREVMONTHNAME9 "9"
  LOCALE_SABBREVMONTHNAME10 "10"
  LOCALE_SABBREVMONTHNAME11 "11"
  LOCALE_SABBREVMONTHNAME12 "12"
  LOCALE_SABBREVMONTHNAME13 ""
  LOCALE_SCOUNTRY "Korea"
  LOCALE_SCURRENCY L"\x20a9"
  LOCALE_SDATE "-"
  LOCALE_SDAYNAME1 "월요일"
  LOCALE_SDAYNAME2 "화요일"
  LOCALE_SDAYNAME3 "수요일"
  LOCALE_SDAYNAME4 "목요일"
  LOCALE_SDAYNAME5 "금요일"
  LOCALE_SDAYNAME6 "토요일"
  LOCALE_SDAYNAME7 "일요일"
  LOCALE_SDECIMAL "."
  LOCALE_SENGCOUNTRY "Korea"
  LOCALE_SENGCURRNAME "Korean Won"
  LOCALE_SENGLANGUAGE "Korean"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "KRW"
  LOCALE_SISO3166CTRYNAME "KR"
  LOCALE_SISO639LANGNAME "ko"
  LOCALE_SLANGUAGE "Korean"
  LOCALE_SLIST ","
  LOCALE_SLONGDATE "yyyy'년' M'월' d'일' dddd"
  LOCALE_SMONDECIMALSEP "."
  LOCALE_SMONGROUPING "3;0"
  LOCALE_SMONTHNAME1 "1월"
  LOCALE_SMONTHNAME2 "2월"
  LOCALE_SMONTHNAME3 "3월"
  LOCALE_SMONTHNAME4 "4월"
  LOCALE_SMONTHNAME5 "5월"
  LOCALE_SMONTHNAME6 "6월"
  LOCALE_SMONTHNAME7 "7월"
  LOCALE_SMONTHNAME8 "8월"
  LOCALE_SMONTHNAME9 "9월"
  LOCALE_SMONTHNAME10 "10월"
  LOCALE_SMONTHNAME11 "11월"
  LOCALE_SMONTHNAME12 "12월"
  LOCALE_SMONTHNAME13 ""
  LOCALE_SMONTHOUSANDSEP ","
  LOCALE_SNAME "ko-KR"
  LOCALE_SNAN "NaN"
  LOCALE_SNATIVECTRYNAME "대한민국"
  LOCALE_SNATIVECURRNAME "원"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVEDISPLAYNAME "한국어 (대한민국)"
  LOCALE_SNATIVELANGNAME "한국어"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SOPENTYPELANGUAGETAG "KOR "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Hang;Hani;"
  LOCALE_SSHORTDATE "yyyy-MM-dd"
  LOCALE_SSHORTESTDAYNAME1 "월"
  LOCALE_SSHORTESTDAYNAME2 "화"
  LOCALE_SSHORTESTDAYNAME3 "수"
  LOCALE_SSHORTESTDAYNAME4 "목"
  LOCALE_SSHORTESTDAYNAME5 "금"
  LOCALE_SSHORTESTDAYNAME6 "토"
  LOCALE_SSHORTESTDAYNAME7 "일"
  LOCALE_SSHORTTIME "tt h:mm"
  LOCALE_SSORTNAME "Dictionary"
  LOCALE_STHOUSAND ","
  LOCALE_STIME ":"
  LOCALE_STIMEFORMAT "tt h:mm:ss"
  LOCALE_SYEARMONTH "yyyy'년' M'월'"

  LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
  LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
  LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
  LGRPID_GREEK+LGRPID_RES_BASE "Greek"
  LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
  LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
  LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
  LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
  LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
  LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
  LGRPID_THAI+LGRPID_RES_BASE "Thai"
  LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
  LGRPID_ARABIC+LGRPID_RES_BASE "Arabic" 
  LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
  LGRPID_INDIC+LGRPID_RES_BASE "Indic"
  LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
  LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
}
