Toon posts:

[asp.net]multilanguage label

Pagina: 1
Acties:

Verwijderd

Topicstarter
Voor een meertalige site was ik op zoek naar een manier om de UI in meerdere talen voor te stellen (nederlands, frans en engels).

In asp.net bestaat er een mogelijkheid om zelf je user-controls aan te maken en dus kwam ik zo op het idee om een label "multilanguageLabel" te maken met volgende properties:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<Designer(GetType(MultiLanguageControlDesigner)), DefaultPropertyAttribute("text"), Description("Label voor verschillende talen"), ToolboxData("<{0}:MultilanguageLabel nederlands='' frans='' engels='' runat=server></{0}:MultilanguageLabel>")> Public Class MultiLanguageLabel
    Inherits System.Web.UI.WebControls.Label
    Private _nederlands As String
    Private _frans As String
    Private _engels As String
#Region "properties"
    <Bindable(True), Category("taal"), DefaultValue("")> Public Property nederlands() As String
        Get
            Return _nederlands
        End Get
        Set(ByVal Value As String)
            _nederlands = Value
        End Set
    End Property

    <Bindable(True), Category("taal"), DefaultValue("")> Property frans() As String
        Get
            Return _frans
        End Get
        Set(ByVal Value As String)
            _frans = Value
        End Set
    End Property

    <Bindable(True), Category("taal"), DefaultValue("")> Property engels() As String
        Get
            Return _engels
        End Get
        Set(ByVal Value As String)
            _engels = Value
        End Set
    End Property
#End Region

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
        Try
            Dim ci As CultureInfo = Thread.CurrentThread.CurrentCulture
            Select Case ci.CurrentUICulture.DisplayName
                Case "nl-BE"
                    Text = nederlands
                Case "fr-FR"
                    Text = frans
                Case "en-US"
                    Text = engels
            End Select
        Catch

        Finally
            MyBase.Render(writer)
        End Try
    End Sub
End Class


Nu werkt dit perfect!

Resource files kon ik ook gaan gebruiken maar deze hebben geen design time support!

Mijn eigenlijke vraag is: heb ik gekozen voor een goede oplossing of hebben jullie betere voorstellen?

(voor de data: deze wordt bewaard in db's in verschillende talen - geen probleem)

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Ik vind het geen goeie oplossing eerlijk gezegd, je bent nu nl. beperkt tot 3 talen.

Waarom maak je gewoon geen gebruik van een resource-manager die de juiste taal voor iedere control gaat gaan ophalen?

Je kan je verschillende texten in de DB bewaren, en mbhv een ResourceWriter kan je die data uit je database naar een resource-file gaan wegschrijven.
Je kan dan gewoon een loopje maken die alle controls op je pagina overloopt, en de juiste text voor die control gaat gaan zetten, dan werkt het ook voor buttons, labels, .....

https://fgheysels.github.io/


  • Folkert
  • Registratie: September 2001
  • Laatst online: 27-05 19:26
Onderschat de kracht niet van de resource manager. Goed schaalbaar!
check:
http://www.dotnetjunkies....us/doc/resourcefiles.aspx

In de laatste asp.net pro magazine(oid) stond een erg interessant artikel over het gebruik van de resourcemanager in combinatie met meertalige sites.

Verwijderd

Topicstarter
Ik heb de control lokalizer eens bekeken (http://www.winformreports.co.uk/features_loc.htm). Dit is een control die je op je form asp.net form sleept en waarin je de huidige taal kan selecteren. Als die taal al bestand worden al de texten verandert (design-time) naar de geselecteerde taal (tekst wordt geladen uit resource file).
Als die taal nog niet bestond,werd er automatisch een nieuw resource-bestand aangemaakt.

Hoe zouden ze dit hebben gemaakt?
je kan een event laten lopen, nadat de taal van je control is gewijzigd.
Dan kijken of dat bestand al bestaat (formnaam.taal.resource), indien niet moet je dit aanmaken.
Anders moet je elk component van je form overlopen (for each) en via reflection proberen te zien of het een property "text" heeft. Voor elke element ook zijn chilc-controls overlopen.

Zijn er een aantal stappen die ik hier overslaag?

  • tijn
  • Registratie: Februari 2000
  • Laatst online: 25-05 12:24
Misschien is Esperantus ook wel wat in dit geval: http://sourceforge.net/projects/esperantus

Cuyahoga .NET website framework