/*
 * 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_SOPENTYPELANGUAGETAG "RMS "
  LOCALE_SPOSITIVESIGN ""
  LOCALE_SSCRIPTS "Latn;"
  LOCALE_SSHORTDATE "dd-MM-yyyy"
  LOCALE_SSHORTTIME "HH:mm"
  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"
}
