1<?xml version="1.0" encoding="utf-8"?> 2<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" 3"../../../tools/boostbook/dtd/boostbook.dtd"> 4 5<!-- Copyright (c) 2001-2005 CrystalClear Software, Inc. 6 Subject to the Boost Software License, Version 1.0. 7 (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) 8--> 9 10<section id="date_time.examples.localization"> 11 <title>Localization Demonstration</title> 12 13 <para> 14 The boost::date_time library provides the ability to create customized locale facets. Date ordering, language, seperators, and abbreviations can be customized. 15 </para> 16 <!-- <para> 17 This example uses the new (as of 1.33) date_time IO code. An example using the old code is also provided to demonstrate how much easier customized output is (see <link linkend="date_time.examples.legacy_localization">legacy_localization example</link>). 18 </para> --> 19 <programlisting> 20 <![CDATA[ 21 /* The following shows the creation of a facet for the output of 22 * dates in German (please forgive me for any errors in my German -- 23 * I'm not a native speaker). 24 */ 25 26 #include "boost/date_time/gregorian/gregorian.hpp" 27 #include <iostream> 28 #include <algorithm> 29 30 /* Define a series of char arrays for short and long name strings 31 * to be associated with German date output (US names will be 32 * retrieved from the locale). */ 33 const char* const de_short_month_names[] = 34 { 35 "Jan", "Feb", "Mar", "Apr", "Mai", "Jun", 36 "Jul", "Aug", "Sep", "Okt", "Nov", "Dez", "NAM" 37 }; 38 const char* const de_long_month_names[] = 39 { 40 "Januar", "Februar", "Marz", "April", "Mai", 41 "Juni", "Juli", "August", "September", "Oktober", 42 "November", "Dezember", "NichtDerMonat" 43 }; 44 const char* const de_long_weekday_names[] = 45 { 46 "Sonntag", "Montag", "Dienstag", "Mittwoch", 47 "Donnerstag", "Freitag", "Samstag" 48 }; 49 const char* const de_short_weekday_names[] = 50 { 51 "Son", "Mon", "Die","Mit", "Don", "Fre", "Sam" 52 }; 53 54 55 int main() 56 { 57 using namespace boost::gregorian; 58 59 // create some gregorian objects to output 60 date d1(2002, Oct, 1); 61 greg_month m = d1.month(); 62 greg_weekday wd = d1.day_of_week(); 63 64 // create a facet and a locale for German dates 65 date_facet* german_facet = new date_facet(); 66 std::cout.imbue(std::locale(std::locale::classic(), german_facet)); 67 68 // create the German name collections 69 date_facet::input_collection_type short_months, long_months, 70 short_weekdays, long_weekdays; 71 std::copy(&de_short_month_names[0], &de_short_month_names[11], 72 std::back_inserter(short_months)); 73 std::copy(&de_long_month_names[0], &de_long_month_names[11], 74 std::back_inserter(long_months)); 75 std::copy(&de_short_weekday_names[0], &de_short_weekday_names[6], 76 std::back_inserter(short_weekdays)); 77 std::copy(&de_long_weekday_names[0], &de_long_weekday_names[6], 78 std::back_inserter(long_weekdays)); 79 80 // replace the default names with ours 81 // NOTE: date_generators and special_values were not replaced as 82 // they are not used in this example 83 german_facet->short_month_names(short_months); 84 german_facet->long_month_names(long_months); 85 german_facet->short_weekday_names(short_weekdays); 86 german_facet->long_weekday_names(long_weekdays); 87 88 // output the date in German using short month names 89 german_facet->format("%d.%m.%Y"); 90 std::cout << d1 << std::endl; //01.10.2002 91 92 german_facet->month_format("%B"); 93 std::cout << m << std::endl; //Oktober 94 95 german_facet->weekday_format("%A"); 96 std::cout << wd << std::endl; //Dienstag 97 98 99 // Output the same gregorian objects using US names 100 date_facet* us_facet = new date_facet(); 101 std::cout.imbue(std::locale(std::locale::classic(), us_facet)); 102 103 us_facet->format("%m/%d/%Y"); 104 std::cout << d1 << std::endl; // 10/01/2002 105 106 // English names, iso order (year-month-day), '-' separator 107 us_facet->format("%Y-%b-%d"); 108 std::cout << d1 << std::endl; // 2002-Oct-01 109 110 return 0; 111 112 } 113 ]]> 114 </programlisting> 115</section> 116