Dates heures et langues

Contenu du snippet

Les visiteurs de site Web indiquent la langue qu il utilise dans leur nagivateur.
Nous pouvons la connaître avec Request.ServerVariables("HTTP_ACCEPT_LANGUAGE").

Entre les tables windows langue et culture les valeurs sont presques communes.
Pourtant il faut indiquer des culture non neutre aux instructions:
Thread.CurrentThread.CurrentCulture
Thread.CurrentThread.CurrentUICulture

Et les langages inclut des cultures neutres.
Exemple:
Fr Français neutre
Fr-Be français belge non-neutre

Description du résultat:
La premiere ligne indique l'heure sur le poste client, l'heure de Greenwish (GMT), et leur d'un serveur
à fuseau horaire GMT-7. C'est un javascript, donc il est mis à jour coté client.

Sur la deuxieme ligne, une liste déroulante permet de choisir la langue d'affichage du premier tableau.

La langue d'affichage du deuxième tableau est celle indiquée en premier dans la liste
des préférences de langage de votre navigateur(outils/options/langues).

Source / Exemple :


1) créer une Webform nommée "Webform1.aspx"
2) dans sa page HTML remplacer tout le code sauf la premiere ligne par:
------------------------------------
<!-- votre première ligne -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//FR">
<HTML>
	<HEAD>
		<TITLE>Francois Rossello</TITLE>
		<META http-equiv="content-language" content="fr">
		<META http-equiv="Content-Type" content="text/html;charset=window-1252">
		<META http-equiv="Pragma" content="no-cache">
		<META http-equiv="Expires" content="0">
		<META name="LANGUAGE" content="fr">
		<META name="HTTP.LANGUAGE" content="FRENCH">
		<META name="description" content="">
		<META name="KEYWORDS" content="">
		<META name="AUTHOR" content="Francois Rossello">
		<META name="reply-to" content="frossello@frossello.Com">
		<META name="publisher" content="Francois Rossello">
		<META name="copyright" content="Francois Rossello">
		<META content="JavaScript" name="vs_defaultClientScript">
		<META content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
		<META name="robots" content="index,follow">
		<META name="revisit-after" content="10">
	</HEAD>
	<body bgColor="#ffffff" MS_POSITIONING="GridLayout" topMargin="0" rightMargin="0">
	<FONT face='Trebuchet MS' size='2'>
	<div align="center">
		Dates et heures
		<form id="Form1" method="post" runat="server">
			<table>
				<TBODY>
					<tr>
						<td>
							Client&nbsp; <INPUT id="txtClientTime" size="10" name="txtClientTime"> GMT <INPUT id="txtGMTTime" type="text" size="10" name="Text1">
							Server <INPUT id="txtServerTime" type="text" size="10" name="Text2">
						</td>
					</tr>
				</TBODY>
			</table>
			<br>
			<asp:Label id="Label1" runat="server">Langue affichage</asp:Label>
			<asp:DropDownList id="cbo_Culture" runat="server" AutoPostBack="True"></asp:DropDownList>
			<a HREF='#' onclick="JavaScript:window.open('DateHeure_culture.aspx','Logo','width=790,height=540,top=0,left=0,scrollbars=yes,resizable=yes');return(false)">
				<INPUT type="submit" id="Btn_Culture" name="Button1" runat="server" value="Table des cultures">
			</a>
		<%Show_Date%>
		</form>
		</div>
		<script language="javascript">
		function clock() {
		cTime= new Date();
		cHours = cTime.getHours();
		cMinutes = cTime.getMinutes();
		cSecondes = cTime.getSeconds();
		cUTCHours = cTime.getUTCHours();
		cUTCMinutes = cTime.getUTCMinutes();
		cUTCSecondes = cTime.getUTCSeconds();
		cTime.setHours(cTime.getUTCHours()-7)
		cServerHours = cTime.getHours();
		cServerMinutes = cTime.getMinutes();
		cServerSecondes = cTime.getSeconds();
				
		document.Form1.txtClientTime.value=((cHours<10)?'0':'') + cHours + ':' + ((cMinutes<10)?'0':'') + cMinutes + ':' + ((cSecondes<10)?'0':'') + cSecondes;
		document.Form1.txtGMTTime.value=((cUTCHours<10)?'0':'') + cUTCHours + ':' + ((cUTCMinutes<10)?'0':'') + cUTCMinutes + ':' + ((cUTCSecondes<10)?'0':'') + cUTCSecondes;
		document.Form1.txtServerTime.value=((cServerHours<10)?'0':'') + cServerHours + ':' + ((cServerMinutes<10)?'0':'') + cServerMinutes + ':' + ((cServerSecondes<10)?'0':'') + cServerSecondes;
		setTimeout('clock()',1000);
		}  
		clock();
			</script>
		</FONT>
	</body>
</HTML>

------------------------------------
3) dans son fichier .vb replacer tout le code par:
------------------------------------
Imports System.Threading
Imports System.Globalization

Public Class DateHeure_LCID
    Inherits System.Web.UI.Page
    Protected WithEvents Label1 As System.Web.UI.WebControls.Label
    Protected WithEvents Btn_Culture As System.Web.UI.HtmlControls.HtmlInputButton
    Protected WithEvents Form1 As System.Web.UI.HtmlControls.HtmlForm
    Protected WithEvents cbo_Culture As System.Web.UI.WebControls.DropDownList

#Region " Code généré par le Concepteur Web Form "

    'Cet appel est requis par le Concepteur Web Form.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN : cet appel de méthode est requis par le Concepteur Web Form
        'Ne le modifiez pas en utilisant l'éditeur de code.
        InitializeComponent()
    End Sub

#End Region

    Public Sub Show_Date()
        Dim cFR As New System.Globalization.CultureInfo("fr-FR")

        ' DATE ET HEURE :   GMT, SERVEUR,, VISITEUR, FRANCE
        Response.Write("<TABLE CELLPADDING=4 CELLSPACING=4 BORDER=2 NOWRAP>")
        Response.Write("<TR>")
        Response.Write("<TD >Libellé</TD>")
        Response.Write("<TD>LCID</TD>")
        Response.Write("<TD>")
        Response.Write("Valeur")
        Response.Write("</TD>")
        Response.Write("</TR>")

        Response.Write("<TR>")
        Response.Write("<TD >GMT Maintenant</TD>")
        Response.Write("<TD>" & Session.LCID & "</TD>")
        Response.Write("<TD>")
        Response.Write(System.DateTime.UtcNow.ToString("D") & " à " & System.DateTime.UtcNow.ToString("t"))
        Response.Write("</TD>")
        Response.Write("</TR>")

        Response.Write("<TR>")
        Response.Write("<TD>Serveur Maintenant</TD>")
        Response.Write("<TD>" & Session.LCID & "</TD>")
        Response.Write("<TD>" & Format(System.DateTime.Now, "D") & " à " & Format(System.DateTime.Now, "t"))
        Response.Write("</TD>")
        Response.Write("</TR>")

        Response.Write("<TR>")
        Response.Write("<TD>Serveur Fuseau</TD>")
        Response.Write("<TD>" & Session.LCID & "</TD>")
        Response.Write("<TD>GMT " & System.DateTime.Now.ToLocalTime.Subtract(System.DateTime.Now).Hours)
        Response.Write("</TD>")
        Response.Write("</TR>")

        'Session.LCID = 1036
        'Response.Write("<TR>")
        'Response.Write("<TD>France court</TD>")
        'Response.Write("<TD>" & Session.LCID & "</TD>")
        'Response.Write("<TD>" & System.DateTime.Now.ToUniversalTime.AddHours(2).ToString)
        'Response.Write("</TD>")
        'Response.Write("</TR>")
        'Session.LCID = 1033

        Session.LCID = 1036
        Response.Write("<TR>")
        Response.Write("<TD>Français date longue</TD>")
        Response.Write("<TD>" & Session.LCID & "</TD>")
        Response.Write("<TD>" & System.DateTime.Now.ToUniversalTime.AddHours(2).ToString("f"))
        Response.Write("</TD>")
        Response.Write("</TR>")
        Session.LCID = 1033

        Response.Write("<TR>")
        Response.Write("<TD>")
        Response.Write("Région courante")
        Response.Write("</TD>")
        Response.Write("<TD>")
        Response.Write("&nbsp;")
        Response.Write("</TD>")
        Response.Write("<TD>")
        Response.Write(System.Globalization.RegionInfo.CurrentRegion())
        Response.Write("</TD>")
        Response.Write("</TR>")

        Response.Write("<TR>")
        Response.Write("<TD>")
        Response.Write("Culture courante")
        Response.Write("</TD>")
        Response.Write("<TD>")
        Response.Write("&nbsp;")
        Response.Write("</TD>")
        Response.Write("<TD>")
        Response.Write(Thread.CurrentThread.CurrentUICulture)
        Response.Write("</TD>")
        Response.Write("</TR>")

        Response.Write("</TABLE>")

        Set_Language()
        Response.Write("Culture configurée par défaut sur le serveur : " & Thread.CurrentThread.CurrentUICulture.ToString & "")

        ' DATE ET HEURE :   GMT, SERVEUR,, VISITEUR, FRANCE
        Response.Write("<TABLE CELLPADDING=4 CELLSPACING=4 BORDER=2 NOWRAP>")
        Response.Write("<TR>")
        Response.Write("<TD >GMT Maintenant</TD>")
        Response.Write("<TD>" & Session.LCID & "</TD>")
        Response.Write("<TD>")
        Response.Write(System.DateTime.UtcNow.ToString("D") & " à " & System.DateTime.UtcNow.ToString("t"))
        Response.Write("</TD>")
        Response.Write("</TR>")

        Response.Write("<TR>")
        Response.Write("<TD>Serveur Maintenant</TD>")
        Response.Write("<TD>" & Session.LCID & "</TD>")
        Response.Write("<TD>" & Format(System.DateTime.Now, "D") & " à " & Format(System.DateTime.Now, "t"))
        Response.Write("</TD>")
        Response.Write("</TR>")

        Response.Write("<TR>")
        Response.Write("<TD>Serveur Fuseau</TD>")
        Response.Write("<TD>" & Session.LCID & "</TD>")
        Response.Write("<TD>GMT " & System.DateTime.Now.ToLocalTime.Subtract(System.DateTime.Now).Hours)
        Response.Write("</TD>")
        Response.Write("</TR>")

        'Session.LCID = 1036
        'Response.Write("<TR>")
        'Response.Write("<TD>France court</TD>")
        'Response.Write("<TD>" & Session.LCID & "</TD>")
        'Response.Write("<TD>" & System.DateTime.Now.ToUniversalTime.AddHours(2).ToString)
        'Response.Write("</TD>")
        'Response.Write("</TR>")
        'Session.LCID = 1033

        Session.LCID = 1036
        Response.Write("<TR>")
        Response.Write("<TD>Français date longue</TD>")
        Response.Write("<TD>" & Session.LCID & "</TD>")
        Response.Write("<TD>" & System.DateTime.Now.ToUniversalTime.AddHours(2).ToString("f"))
        Response.Write("</TD>")
        Response.Write("</TR>")
        Session.LCID = 1033

        Response.Write("<TR>")
        Response.Write("<TD>")
        Response.Write("Région courante")
        Response.Write("</TD>")
        Response.Write("<TD>")
        Response.Write("&nbsp;")
        Response.Write("</TD>")
        Response.Write("<TD>")
        Response.Write(System.Globalization.RegionInfo.CurrentRegion())
        Response.Write("</TD>")
        Response.Write("</TR>")

        Response.Write("<TR>")
        Response.Write("<TD>")
        Response.Write("Culture courante")
        Response.Write("</TD>")
        Response.Write("<TD>")
        Response.Write("&nbsp;")
        Response.Write("</TD>")
        Response.Write("<TD>")
        Response.Write(Thread.CurrentThread.CurrentUICulture)
        Response.Write("</TD>")
        Response.Write("</TR>")

        Response.Write("</TABLE>") 
        'Response.Write("<script language=javascript>parent.contents.history.go(0)</script>")

    End Sub

    Private Sub Set_Language()
        Dim strTMP As String
        Dim lngPOS As Long

        strTMP = Request.ServerVariables("HTTP_ACCEPT_LANGUAGE").ToString()
        lngPOS = InStr(strTMP, ",", CompareMethod.Text)
        If lngPOS > 0 Then strTMP = Mid(strTMP, 1, lngPOS - 1)

        lngPOS = InStr(strTMP, ";", CompareMethod.Text)
        If lngPOS > 0 Then strTMP = Mid(strTMP, 1, lngPOS - 1)

        If Len(strTMP) = 2 Then
            Select Case strTMP
                Case "fr"
                    strTMP = "fr-FR"
                Case "ar"
                    strTMP = "ar-KW"
                Case "en"
                    strTMP = "en-US"
                Case "ca"
                    strTMP = "ca-ES"
                Case "zh-CHS", "zh-CHT"
                    strTMP = "zh-CN"
                Case "ca"
                    strTMP = "ca-ES"
                Case "cs"
                    strTMP = "cs-CZ"
                Case "da"
                    strTMP = "da-DK"
                Case "el"
                    strTMP = "el-GR"
                Case "en"
                    strTMP = "en-US"
                Case "he"
                    strTMP = "he-IL"
                Case "ja"
                    strTMP = "ja-JP"
                Case "ko"
                    strTMP = "ko-KR"
                Case "no"
                    strTMP = "nb-NO"
                Case "sq"
                    strTMP = "sq-AL"
                Case "sv"
                    strTMP = "sv-SE"
                Case "ur"
                    strTMP = "ur-PK"
                Case "uk"
                    strTMP = "uk-UA"
                Case "be"
                    strTMP = "be-BY"
                Case "et"
                    strTMP = "et-EE"
                Case "fa"
                    strTMP = "fa-IR"
                Case "vi"
                    strTMP = "vi-VN"
                Case "hy"
                    strTMP = "hy-AM"
                Case "az"
                    strTMP = "az-AZ-Cyrl"
                Case "eu"
                    strTMP = "eu-ES"
                Case "af"
                    strTMP = "af-ZA"
                Case "ka"
                    strTMP = "ka-GE"
                Case "hi"
                    strTMP = "hi-IN"
                Case "ms"
                    strTMP = "ms-MY"
                Case "kk"
                    strTMP = "kk-KZ"
                Case "ky"
                    strTMP = "ky-KZ"
                Case "sw"
                    strTMP = "sw-KE"
                Case "uz"
                    strTMP = "uz-UZ_Latn"
                Case "tt"
                    strTMP = "tt-RU"
                Case "pa"
                    strTMP = "pa-IN"
                Case "gu"
                    strTMP = "gu-IN"
                Case "ta"
                    strTMP = "ta-IN"
                Case "te"
                    strTMP = "te-IN"
                Case "kn"
                    strTMP = "kn-IN"
                Case "mr"
                    strTMP = "mr-IN"
                Case "sa"
                    strTMP = "sa-IN"
                Case "gl"
                    strTMP = "gl-ES"
                Case "kok"
                    strTMP = "kok-IN"
                Case "syr"
                    strTMP = "syr-SI"
                Case "div"
                    strTMP = "div-MV"
                Case Else
                    strTMP = strTMP & "-" & UCase(strTMP)
            End Select
        End If

        'Response.Write("LANGAGE: " & strTMP & "<BR>")
        Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo(strTMP)
        Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo(strTMP)

    End Sub

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If Request.QueryString("SHOWMENU") = 1 Then Server.Execute("../visiteur/top.aspx?dest=none")
        Dim maCulture As System.Globalization.CultureInfo
0:
        If cbo_Culture.Items.Count = 0 Then
            cbo_Culture.Items.Clear()

            For Each maCulture In System.Globalization.CultureInfo.GetCultures(Globalization.CultureTypes.AllCultures)
                If Not maCulture.IsNeutralCulture Then
                    cbo_Culture.Items.Add(maCulture.Name)
                End If
            Next
        End If
    End Sub

    Private Sub cbo_Culture_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbo_Culture.SelectedIndexChanged
        Dim strTMP As String
        Dim lngPOS As Long

        strTMP = cbo_Culture.SelectedItem.Text

        lngPOS = InStr(strTMP, ",", CompareMethod.Text)
        If lngPOS > 0 Then strTMP = Mid(strTMP, 1, lngPOS - 1)
        If Len(strTMP) = 2 Then strTMP = strTMP & "-" & UCase(strTMP)
        'Response.Write("LANGAGE: " & strTMP & "<BR>")
        Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo(strTMP)
        Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo(strTMP)

    End Sub

End Class

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (captainmagic)