views:

222

answers:

6

Assume that I only have a country code (en, de, fr) and I need to display the weekdays in this language. I know about RegionInfo and CultureInfo - but I can't find a solution. If I create a country info from (for an example) "en" I have no DateTime info in it. It would also be OK to just take the first matching Region. For an example en-US for en or de-DE for de.

I don't know if there are differences in DayNames but I know there are some for the months. de-DE Februar - de-AT Feber -- anyhow I don't care. Event if it may be "a bit different" (to see Februar instead of Feber) - it is still German.

And that's what I want to achive - get en an write Monday - get de and write Montag...

Is there a way to create a region just from a language code?

+3  A: 

It's usually when you say "I don't care" that you start fighting the APIs.

Anyway, this should work:

var list = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
var ci = list.FirstOrDefault(c => c.IetfLanguageTag.StartsWith("de"));

var ri = new RegionInfo(ci.Name);
Console.WriteLine("Today = {0:dddd MMMM yyyy}", DateTime.Today);
Henk Holterman
+1, but you should use `CultureTypes.NeutralCultures` rather than `SpecificCultures`.
Randolpho
@Randolpho: No, the next step is creating a RegionInfo and that throws when you use a neutral culture. We need a (random) specific culture for a language name.
Henk Holterman
@Henk Holterman: You're right; I take it back. :)
Randolpho
A: 

Dim days As String() Dim months As String() Dim cul As New System.Globalization.CultureInfo("de-DE") months = cul.DateTimeFormat.MonthNames days = cul.DateTimeFormat.DayNames

eschneider
The problem is supplying the "-DE" part (for any given language).
Henk Holterman
A: 

Try this:-

string culture = "your culture"

CultureInfo myCulture = new CultureInfo(culture);

DateTimeFormatInfo dtfi = myCulture .DateTimeFormat;

dayString = dtfi.GetDayName( your date here.. );

Charlie G

Charlie Grillo
+4  A: 

This piece may be helpful: to go from "en" to the CultureInfo, a quicker way is

CultureInfo ci = CultureInfo.CreateSpecificCulture("en")

For the second part, I believe you are asking for day names, so you would write

string[] names = ci.DateTimeFormat.DayNames 
Jennifer Zouak
+1 - each neutral culture ("en", "de") is associated with a default specific culture ("en-US", "de-DE").
Jeff Sternal
OK, that is better than my FirstOrDefault.
Henk Holterman
Thank you Jennifer - soooo easy :) and also thank you to Henk - runner-up slot :)
ManniAT
A: 

As "de" is a NeutralCulture it won't be possible to get the DayNames out of the DateTimeFormat if you try CultureInfo.GetCultureInfo("de").

I would suggest that you run the CultureInfo.CreateSpecificCulture("de") in this case since it'll create a non-neutral culture...in case of "de" I got a culture of "de-DE" back from the .NET gods :D

    CultureInfo tmp = CultureInfo.CreateSpecificCulture("de");

    string[] names = tmp.DateTimeFormat.DayNames;
    foreach(string name in names)
    {
        Console.WriteLine(name);
    }
cyberzed
Haven't figure the fallback/lookup in this method though
cyberzed
A: 

This will give you a list of cultures:

    Dim ci As CultureInfo
    For Each ci In CultureInfo.GetCultures(CultureTypes.SpecificCultures)
        Console.WriteLine(ci.Name)
    Next

OUTPUT: ar-SA bg-BG ca-ES zh-TW cs-CZ da-DK de-DE el-GR en-US fi-FI fr-FR he-IL hu-HU is-IS it-IT ja-JP ko-KR nl-NL nb-NO pl-PL pt-BR ro-RO ru-RU hr-HR sk-SK sq-AL sv-SE th-TH tr-TR ur-PK id-ID uk-UA be-BY sl-SI et-EE lv-LV lt-LT fa-IR vi-VN hy-AM az-Latn-AZ eu-ES mk-MK af-ZA ka-GE fo-FO hi-IN ms-MY kk-KZ ky-KG sw-KE uz-Latn-UZ tt-RU pa-IN gu-IN ta-IN te-IN kn-IN mr-IN sa-IN mn-MN gl-ES kok-IN syr-SY dv-MV ar-IQ zh-CN de-CH en-GB es-MX fr-BE it-CH nl-BE nn-NO pt-PT sr-Latn-CS sv-FI az-Cyrl-AZ ms-BN uz-Cyrl-UZ ar-EG zh-HK de-AT en-AU es-ES fr-CA sr-Cyrl-CS ar-LY zh-SG de-LU en-CA es-GT fr-CH ar-DZ zh-MO de-LI en-NZ es-CR fr-LU ar-MA en-IE es-PA fr-MC ar-TN en-ZA es-DO ar-OM en-JM es-VE ar-YE en-029 es-CO ar-SY en-BZ es-PE ar-JO en-TT es-AR ar-LB en-ZW es-EC ar-KW en-PH es-CL ar-AE es-UY ar-BH es-PY ar-QA es-BO es-SV es-HN es-NI es-PR sma-NO bn-BD bs-Cyrl-BA tg-Cyrl-TJ en-SG en-MY mn-Mong-CN prs-AF wo-SN rw-RW qut-GT sah-RU gsw-FR co-FR rm-CH mi-NZ ug-CN br-FR moh-CA arn-CL ga-IE ii-CN sma-SE sr-Latn-BA quz-PE ig-NG kl-GL lb-LU ba-RU nso-ZA quz-BO yo-NG sms-FI ha-Latn-NG hr-BA fil-PH ps-AF fy-NL ne-NP am-ET iu-Cans-CA quz-EC si-LK smj-SE lo-LA km-KH cy-GB bo-CN se-SE smj-NO as-IN ml-IN se-FI or-IN sr-Cyrl-BA bn-IN en-IN dsb-DE tk-TM smn-FI oc-FR es-US se-NO mt-MT bs-Latn-BA zu-ZA xh-ZA tn-ZA tzm-Latn-DZ iu-Latn-CA hsb-DE

eschneider
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.getcultures.aspx
eschneider