/*
 * Locale definitions for Dutch (Surinam)
 *
 * The code for Dutch/Surinam doesn't appear on my docs;
 * It should be something + 0x13 as 0x13 is the Dutch language;
 * Following the same logic as other multi-countries languages
 * I picked 0x0c13 for Surinam/Dutch.
 *
 * Copyright 1998 Marcel Baur
 * 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(1252)

STRINGTABLE LANGUAGE LANG_DUTCH, SUBLANG_DUTCH_SURINAM
{
  LOCALE_FONTSIGNATURE L"\x002f\x8000\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0013\x0000\x0000\xc5d4"
  LOCALE_ICALENDARTYPE "1"
  LOCALE_ICENTURY "1"
  LOCALE_ICOUNTRY "31"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "2"
  LOCALE_IDATE "1"
  LOCALE_IDAYLZERO "0"
  LOCALE_IDEFAULTANSICODEPAGE "1252"
  LOCALE_IDEFAULTCODEPAGE "850"
  LOCALE_IDEFAULTCOUNTRY "31"
  LOCALE_IDEFAULTEBCDICCODEPAGE "500"
  LOCALE_IDEFAULTLANGUAGE "0413"
  LOCALE_IDEFAULTMACCODEPAGE "10000"
  LOCALE_IDEFAULTUNIXCODEPAGE "28605"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "2"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0c13"
  LOCALE_ILDATE "1"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "0"
  LOCALE_INEGCURR "11"
  LOCALE_INEGNUMBER "1"
  LOCALE_INEGSEPBYSPACE "1"
  LOCALE_INEGSIGNPOSN "2"
  LOCALE_INEGSYMPRECEDES "1"
  LOCALE_IOPTIONALCALENDAR "0"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "1"
  LOCALE_IPOSSIGNPOSN "2"
  LOCALE_IPOSSYMPRECEDES "1"
  LOCALE_ITIME "1"
  LOCALE_ITIMEMARKPOSN "0"
  LOCALE_ITLZERO "0"
  LOCALE_S1159 ""
  LOCALE_S2359 ""
  LOCALE_SABBREVCTRYNAME "SUR"
  LOCALE_SABBREVDAYNAME1 "ma"
  LOCALE_SABBREVDAYNAME2 "di"
  LOCALE_SABBREVDAYNAME3 "wo"
  LOCALE_SABBREVDAYNAME4 "do"
  LOCALE_SABBREVDAYNAME5 "vr"
  LOCALE_SABBREVDAYNAME6 "za"
  LOCALE_SABBREVDAYNAME7 "zo"
  LOCALE_SABBREVLANGNAME "NLS"
  LOCALE_SABBREVMONTHNAME1 "jan"
  LOCALE_SABBREVMONTHNAME2 "feb"
  LOCALE_SABBREVMONTHNAME3 "mrt"
  LOCALE_SABBREVMONTHNAME4 "apr"
  LOCALE_SABBREVMONTHNAME5 "mei"
  LOCALE_SABBREVMONTHNAME6 "jun"
  LOCALE_SABBREVMONTHNAME7 "jul"
  LOCALE_SABBREVMONTHNAME8 "aug"
  LOCALE_SABBREVMONTHNAME9 "sep"
  LOCALE_SABBREVMONTHNAME10 "okt"
  LOCALE_SABBREVMONTHNAME11 "nov"
  LOCALE_SABBREVMONTHNAME12 "dec"
  LOCALE_SABBREVMONTHNAME13 ""
  LOCALE_SCOUNTRY ""
  LOCALE_SCURRENCY ""
  LOCALE_SDATE "-"
  LOCALE_SDAYNAME1 "maandag"
  LOCALE_SDAYNAME2 "dinsdag"
  LOCALE_SDAYNAME3 "woensdag"
  LOCALE_SDAYNAME4 "donderdag"
  LOCALE_SDAYNAME5 "vrijdag"
  LOCALE_SDAYNAME6 "zaterdag"
  LOCALE_SDAYNAME7 "zondag"
  LOCALE_SDECIMAL ","
  LOCALE_SENGCOUNTRY "Suriname"
  LOCALE_SENGCURRNAME ""
  LOCALE_SENGLANGUAGE "Dutch"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "SRG"
  LOCALE_SISO3166CTRYNAME "SR"
  LOCALE_SISO639LANGNAME "nl"
  LOCALE_SLANGUAGE "Dutch (Surinam)"
  LOCALE_SLIST ";"
  LOCALE_SLONGDATE "dddd d MMMM yyyy"
  LOCALE_SMONDECIMALSEP ","
  LOCALE_SMONGROUPING "3;0"
  LOCALE_SMONTHNAME1 "januari"
  LOCALE_SMONTHNAME2 "februari"
  LOCALE_SMONTHNAME3 "maart"
  LOCALE_SMONTHNAME4 "april"
  LOCALE_SMONTHNAME5 "mei"
  LOCALE_SMONTHNAME6 "juni"
  LOCALE_SMONTHNAME7 "juli"
  LOCALE_SMONTHNAME8 "augustus"
  LOCALE_SMONTHNAME9 "september"
  LOCALE_SMONTHNAME10 "oktober"
  LOCALE_SMONTHNAME11 "november"
  LOCALE_SMONTHNAME12 "december"
  LOCALE_SMONTHNAME13 ""
  LOCALE_SMONTHOUSANDSEP "."
  LOCALE_SNAME "nl-SR"
  LOCALE_SNATIVECTRYNAME ""
  LOCALE_SNATIVECURRNAME ""
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVELANGNAME ""
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSHORTDATE "d-M-yyyy"
  LOCALE_SSORTNAME "Default"
  LOCALE_STHOUSAND "."
  LOCALE_STIME ":"
  LOCALE_STIMEFORMAT "H:mm:ss"
  LOCALE_SYEARMONTH "MMMM yyyy"

  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"
}
