Get Culture Info from Language Name

L

lucky

hi guys,
right now i'm going through System.Globalization Namespace. and i
found very intersting class there called CultureInfo.

i was trying to get cultureInfo on the basis of name but i didnt find
the way to do it. for example, if i pass the language name
"Danish","German",Russian", i'm suppose to get the cultureInfo object
of the language.

can anyone help me out here?
i would appriciate any help.

thanks,
Lucky
 
C

Cor Ligthert \(MVP\)

Hi,

"NL-nl" Holland
"NL-be" Belgium
"EN-uk" Greath Brittain

is this what you mean?

Cor
 
R

rossum

hi guys,
right now i'm going through System.Globalization Namespace. and i
found very intersting class there called CultureInfo.

i was trying to get cultureInfo on the basis of name but i didnt find
the way to do it. for example, if i pass the language name
"Danish","German",Russian", i'm suppose to get the cultureInfo object
of the language.

can anyone help me out here?
i would appriciate any help.

thanks,
Lucky
There is a full set of "Culture Names and Identifiers" in .NET, they
are shown if you search the internal Help for the CultureInfo class.

"The culture names follow the RFC 1766 standard in the format
"<languagecode2>-<country/regioncode2>", where <languagecode2> is a
lowercase two-letter code derived from ISO 639-1 and
<country/regioncode2> is an uppercase two-letter code derived from ISO
3166. For example, U.S. English is "en-US". In cases where a
two-letter language code is not available, the three-letter code
derived from ISO 639-2 is used; for example, the three-letter code
"div" is used for cultures that use the Dhivehi language. Some culture
names have suffixes that specify the script; for example, "-Cyrl"
specifies the Cyrillic script, "-Latn" specifies the Latin script."

Remember that what you program sees initially might not be "German"
but "Deutsch" and that "Russian" could well be in Cyrillic characters.
In general this is not a simple problem.

rossum
 
G

Guest

lucky said:
hi guys,
right now i'm going through System.Globalization Namespace. and i
found very intersting class there called CultureInfo.

i was trying to get cultureInfo on the basis of name but i didnt find
the way to do it. for example, if i pass the language name
"Danish","German",Russian", i'm suppose to get the cultureInfo object
of the language.

foreach ( CultureInfo ci in
CultureInfo.GetCultures(CultureTypes.NeutralCultures) ) {

if (ci.EnglishName == "Danish") {

....

}

}
 
J

Juan T. Llibre

Or, you could simply use these :

CultureInfo.CurrentCulture.EnglishName
CultureInfo.CurrentCulture.DisplayName
CultureInfo.CurrentCulture.NativeName
 
G

Guest

The OP wants to create a new CultureInfo from EnglishName which can not be
done easily. I do not think that CurrentCulture is of much use here.

:) Jakob.
 
J

Juan T. Llibre

re:
You might want to post the code here for the OP to see?

Why not?

If I had a nickel for every line of code I've given away for free here
....well, you know how the rest of that goes. :)

Here's the crux...and the trick.

<%@ Page Language="VB" uiculture="auto" %>
<%@ Import Namespace="System.Threading" %>
<%@ Import Namespace="System.Globalization" %>

<script runat="server">
Protected Overrides Sub InitializeCulture()
If Request.Form("ListBox1") IsNot Nothing Then
Dim selectedLanguage As String = Request.Form("ListBox1")
UICulture = Request.Form("ListBox1")
Culture = Request.Form("ListBox1")
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage)
Thread.CurrentThread.CurrentUICulture = New CultureInfo(selectedLanguage)
End If
MyBase.InitializeCulture()
End Sub
</script>

<form id="form1" runat="server">
<div>
<asp:ListBox ID="ListBox1" runat="server">
<asp:ListItem Value="en-US" Selected="True">English</asp:ListItem>
<asp:ListItem Value="es-MX">Español</asp:ListItem>
<asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
</asp:ListBox><br />
<asp:Button ID="Button1" runat="server"
Text="Set Language"
meta:resourcekey="Button1" />
<br />
</div>

The trick, as should be obvious by now, is that you don't *need* to pass the EnglishName.

The value that we *do* pass is CultureInfo.CurrentCulture.Name,
but we *display* whatever name we want to display to the user.

That way, it's transparent to the user *and* easy to program as well.

One of the most difficult concepts to grasp in programming
is that we should not attempt to lock a route to the desired result.

As long as we get where we want to get to, any route is OK.

Some routes are impossible and some are a waste,
but getting to where we want to get, with the least effort expended, is what counts.
 
G

Guest

Aaah, but you still have not solved Lucky's problem (the OP). You are just
using the culture name (i.e. "en-US" etc.) as I suggested in my first reply
to the OP. Lucky wants to create the CultureInfo directly from the string
"Danish" or "Russian". Nobody says that he can do what you did.

:) Jakob.
 
J

Juan T. Llibre

Still, working around a programming task is better than not doing anything, right ?

What I'm saying ( and it's a bit hard to understand, I know )
is that we should not get hung up on a particular way of doing a task.

As long as we deliver a solution, it's OK.

The OP certainly won't be needing to deliver a solution
for *all* the possible languages/cultures, right ?

So, the proposed solution I coded *will* work for a fairly large
subset of the available languages/cultures ( the ones which
will fit into the Listbox without making it an unwieldy instrument ).
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,009
Latest member
GidgetGamb

Latest Threads

Top