/*
 * 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_INEUTRAL "0"
  LOCALE_IOPTIONALCALENDAR "0"
  LOCALE_IPAPERSIZE "9"
  LOCALE_IPOSSEPBYSPACE "1"
  LOCALE_IPOSSIGNPOSN "4"
  LOCALE_IPOSSYMPRECEDES "1"
  LOCALE_IREADINGLAYOUT "0"
  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_SNATIVEDISPLAYNAME "Rumantsch (Svizra)"
  LOCALE_SNATIVELANGNAME "Rumantsch"
  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"
}
