| <?xml version="1.0" encoding="utf-8"?> |
| <!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" |
| "../../../tools/boostbook/dtd/boostbook.dtd"> |
| |
| <!-- Copyright (c) 2001-2005 CrystalClear Software, Inc. |
| 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) |
| --> |
| |
| <section id="date_time.examples.localization"> |
| <title>Localization Demonstration</title> |
| |
| <para> |
| The boost::date_time library provides the ability to create customized locale facets. Date ordering, language, seperators, and abbreviations can be customized. |
| </para> |
| <!-- <para> |
| 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>). |
| </para> --> |
| <programlisting> |
| <![CDATA[ |
| /* 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; |
| |
| } |
| ]]> |
| </programlisting> |
| </section> |