File: localization.cpp

package info (click to toggle)
boost1.74 1.74.0-9
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 464,084 kB
  • sloc: cpp: 3,338,324; xml: 131,293; python: 33,088; ansic: 14,336; asm: 4,034; sh: 3,351; makefile: 1,193; perl: 1,036; yacc: 478; php: 212; ruby: 102; lisp: 24; sql: 13; csh: 6
file content (100 lines) | stat: -rw-r--r-- 3,278 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/* The following shows the creation of a facet for the output of 
 * dates in German (please forgive me for any errors in my German --
 * I'm not a native speaker).
 */

#include "boost/date_time/gregorian/gregorian.hpp"
#include <iostream>
#include <algorithm>

/* Define a series of char arrays for short and long name strings 
 * to be associated with German date output (US names will be 
 * retrieved from the locale). */
const char* const de_short_month_names[] = 
{
  "Jan", "Feb", "Mar", "Apr", "Mai", "Jun",
  "Jul", "Aug", "Sep", "Okt", "Nov", "Dez", "NAM" 
};
const char* const de_long_month_names[] =
{
  "Januar", "Februar", "Marz", "April", "Mai",
  "Juni", "Juli", "August", "September", "Oktober",
  "November", "Dezember", "NichtDerMonat"
};
const char* const de_long_weekday_names[] = 
{
  "Sonntag", "Montag", "Dienstag", "Mittwoch",
  "Donnerstag", "Freitag", "Samstag"
};
const char* const de_short_weekday_names[] =
{
  "Son", "Mon", "Die","Mit", "Don", "Fre", "Sam"
};


int main() 
{
  using namespace boost::gregorian;
 
  // create some gregorian objects to output
  date d1(2002, Oct, 1);
  greg_month m = d1.month();
  greg_weekday wd = d1.day_of_week();
  
  // create a facet and a locale for German dates
  date_facet* german_facet = new date_facet();
  std::cout.imbue(std::locale(std::locale::classic(), german_facet));

  // create the German name collections
  date_facet::input_collection_type short_months, long_months, 
                                    short_weekdays, long_weekdays;
  std::copy(&de_short_month_names[0], &de_short_month_names[11],
            std::back_inserter(short_months));
  std::copy(&de_long_month_names[0], &de_long_month_names[11],
            std::back_inserter(long_months));
  std::copy(&de_short_weekday_names[0], &de_short_weekday_names[6],
            std::back_inserter(short_weekdays));
  std::copy(&de_long_weekday_names[0], &de_long_weekday_names[6],
            std::back_inserter(long_weekdays));

  // replace the default names with ours
  // NOTE: date_generators and special_values were not replaced as 
  // they are not used in this example
  german_facet->short_month_names(short_months);
  german_facet->long_month_names(long_months);
  german_facet->short_weekday_names(short_weekdays);
  german_facet->long_weekday_names(long_weekdays);
  
  // output the date in German using short month names
  german_facet->format("%d.%m.%Y");
  std::cout << d1 << std::endl; //01.10.2002
  
  german_facet->month_format("%B");
  std::cout << m << std::endl; //Oktober
  
  german_facet->weekday_format("%A");
  std::cout << wd << std::endl; //Dienstag


  // Output the same gregorian objects using US names
  date_facet* us_facet = new date_facet();
  std::cout.imbue(std::locale(std::locale::classic(), us_facet)); 

  us_facet->format("%m/%d/%Y");
  std::cout << d1 << std::endl; //  10/01/2002
  
  // English names, iso order (year-month-day), '-' separator
  us_facet->format("%Y-%b-%d");
  std::cout << d1 << std::endl; //  2002-Oct-01
  
  return 0;

}

/*  Copyright 2001-2005: CrystalClear Software, Inc
 *  http://www.crystalclearsoftware.com
 *
 *  Subject to the Boost Software License, Version 1.0.
 * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 */