/*
 * Locale definitions for Romansh (Switzerland)
 *
 * Copyright 2002 Alexandre Julliard for CodeWeavers
 * Copyright 2008 Michael Stefaniuc
 *
 * 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
 */

/*
- Windows Vista (at least the NLS information about it on www.microsoft.com)
  has the wrong short date format dd/MM/yyyy e.g. 01/08/1996 instead of the
  correct d-M-yyyy e.g 1-8-1996. This file uses the right short date format as
  seen on http://www.liarumantscha.ch/ and in the glibc-morelocales.patch for
  glibc-2.6.
- As decimal separator this file uses the "," like http://www.liarumantscha.ch/
  does and not the "." used by Windows Vista and the Swiss German language.
*/

#pragma code_page(1252)

STRINGTABLE LANGUAGE LANG_ROMANSH, SUBLANG_ROMANSH_SWITZERLAND
{
  LOCALE_FONTSIGNATURE L"\x002f\x8000\x3808\x0000\x0000\x0000\x0000\x0000\x0001\x0000\x0000\x4000\x0093\x0000\x0000\xcdd4"
  LOCALE_ICALENDARTYPE "1"
  LOCALE_ICENTURY "1"
  LOCALE_ICOUNTRY "41"
  LOCALE_ICURRDIGITS "2"
  LOCALE_ICURRENCY "2"
  LOCALE_IDATE "1"
  LOCALE_IDAYLZERO "0"
  LOCALE_IDEFAULTANSICODEPAGE "1252"
  LOCALE_IDEFAULTCODEPAGE "850"
  LOCALE_IDEFAULTCOUNTRY "41"
  LOCALE_IDEFAULTEBCDICCODEPAGE "20273"
  LOCALE_IDEFAULTLANGUAGE "0417"
  LOCALE_IDEFAULTMACCODEPAGE "10000"
  LOCALE_IDEFAULTUNIXCODEPAGE "28605"
  LOCALE_IDIGITS "2"
  LOCALE_IDIGITSUBSTITUTION "1"
  LOCALE_IFIRSTDAYOFWEEK "0"
  LOCALE_IFIRSTWEEKOFYEAR "2"
  LOCALE_IINTLCURRDIGITS "2"
  LOCALE_ILANGUAGE "0417"
  LOCALE_ILDATE "1"
  LOCALE_ILZERO "1"
  LOCALE_IMEASURE "0"
  LOCALE_IMONLZERO "0"
  LOCALE_INEGCURR "2"
  LOCALE_INEGNUMBER "1"
  LOCALE_INEGSEPBYSPACE "0"
  LOCALE_INEGSIGNPOSN "4"
  LOCALE_INEGSYMPRECEDES "1"
  LOCALE_IOPTIONALCALENDAR "0"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "1"
  LOCALE_IPOSSIGNPOSN "4"
  LOCALE_IPOSSYMPRECEDES "1"
  LOCALE_ITIME "1"
  LOCALE_ITIMEMARKPOSN "0"
  LOCALE_ITLZERO "1"
  LOCALE_S1159 ""
  LOCALE_S2359 ""
  LOCALE_SABBREVCTRYNAME "CHE"
  LOCALE_SABBREVDAYNAME1 "gli"
  LOCALE_SABBREVDAYNAME2 "ma"
  LOCALE_SABBREVDAYNAME3 "me"
  LOCALE_SABBREVDAYNAME4 "gie"
  LOCALE_SABBREVDAYNAME5 "ve"
  LOCALE_SABBREVDAYNAME6 "so"
  LOCALE_SABBREVDAYNAME7 "du"
  LOCALE_SABBREVLANGNAME "RMC"
  LOCALE_SABBREVMONTHNAME1 "schan"
  LOCALE_SABBREVMONTHNAME2 "favr"
  LOCALE_SABBREVMONTHNAME3 "mars"
  LOCALE_SABBREVMONTHNAME4 "avr"
  LOCALE_SABBREVMONTHNAME5 "matg"
  LOCALE_SABBREVMONTHNAME6 "zercl"
  LOCALE_SABBREVMONTHNAME7 "fan"
  LOCALE_SABBREVMONTHNAME8 "avust"
  LOCALE_SABBREVMONTHNAME9 "sett"
  LOCALE_SABBREVMONTHNAME10 "oct"
  LOCALE_SABBREVMONTHNAME11 "nov"
  LOCALE_SABBREVMONTHNAME12 "dec"
  LOCALE_SABBREVMONTHNAME13 ""
  LOCALE_SCOUNTRY "Switzerland"
  LOCALE_SCURRENCY "fr."
  LOCALE_SDATE "-"
  LOCALE_SDAYNAME1 "glindesdi"
  LOCALE_SDAYNAME2 "mardi"
  LOCALE_SDAYNAME3 "mesemna"
  LOCALE_SDAYNAME4 "gievgia"
  LOCALE_SDAYNAME5 "venderdi"
  LOCALE_SDAYNAME6 "sonda"
  LOCALE_SDAYNAME7 "dumengia"
  LOCALE_SDECIMAL ","
  LOCALE_SENGCOUNTRY "Switzerland"
  LOCALE_SENGCURRNAME "Swiss Franc"
  LOCALE_SENGLANGUAGE "Romansh"
  LOCALE_SGROUPING "3;0"
  LOCALE_SINTLSYMBOL "CHF"
  LOCALE_SISO3166CTRYNAME "CH"
  LOCALE_SISO639LANGNAME "rm"
  LOCALE_SLANGUAGE "Romansh (Switzerland)"
  LOCALE_SLIST ";"
  LOCALE_SLONGDATE "dddd, d MMMM yyyy"
  LOCALE_SMONDECIMALSEP ","
  LOCALE_SMONGROUPING "3;0"
  LOCALE_SMONTHNAME1 "schaner"
  LOCALE_SMONTHNAME2 "favrer"
  LOCALE_SMONTHNAME3 "mars"
  LOCALE_SMONTHNAME4 "avrigl"
  LOCALE_SMONTHNAME5 "matg"
  LOCALE_SMONTHNAME6 "zercladur"
  LOCALE_SMONTHNAME7 "fanadur"
  LOCALE_SMONTHNAME8 "avust"
  LOCALE_SMONTHNAME9 "settember"
  LOCALE_SMONTHNAME10 "october"
  LOCALE_SMONTHNAME11 "november"
  LOCALE_SMONTHNAME12 "december"
  LOCALE_SMONTHNAME13 ""
  LOCALE_SMONTHOUSANDSEP "'"
  LOCALE_SNAME "rm-CH"
  LOCALE_SNATIVECTRYNAME "Svizra"
  LOCALE_SNATIVECURRNAME "Franc svizzer"
  LOCALE_SNATIVEDIGITS "0123456789"
  LOCALE_SNATIVELANGNAME "Rumantsch (Svizra)"
  LOCALE_SNEGATIVESIGN "-"
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Latn;"
  LOCALE_SSHORTDATE "dd-MM-yyyy"
  LOCALE_SSORTNAME "Default"
  LOCALE_STHOUSAND "'"
  LOCALE_STIME ":"
  LOCALE_STIMEFORMAT "HH: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"
}
