|
|
| Auteur |
Bericht |
Stannieman
|
|
Onderwerp: Combobox met meertalig programma
Geplaatst: 24 jan 2010 - 15:12
|
|
Rookie Developer
Geregistreerd op: 24-jan-2010
Berichten: 18
Status: Offline
|
|
Hallo,
Ik zal proberen mijn probleem een beetje duidelijk uit te leggen.
Ik heb een programma(tje) gemaakt dat automatisch je pc afsluit na een ingegeven tijd. Bij de propperties van het form staat localiza op true en language op default, daarna heb ik heel het programma in het Engels gemaakt. Er staat een combobox met 4 opties (shutdown, reboot, log off en hibernate). Als je dan op ok klikt doet die:
actie = cstr(cboCombobox.text), daarna gaat die aan de hand van wat actie is het juiste doen.
Dat werkt allemaal, tot ik ook in het Nederlands begin (dus language van default naar Dutch). Ik pas heel de interface, inclusief items in de combobox aan naar Nederlands, maar de code achter de ok knop blijft nog altijd de Engelse dingen doen. Dus als je dan in de combobox Afsluiten selecteerd, dan zegt die: actie = "afsluiten". Maar afsluiten is geen actie, die moet shutdown zijn. Als ik dan alles aanpas aan het Nederlands, klopt de Engelse weer niet meer.
Weer er iemand hier een oplossing voor? Dat bv. sommige delen van de code zelf ook gebonden zijn aan de taal, en niet alleen de inhoud van labels enzo?
Alvast bedankt, Stan |
|
|
| |
|
|
|
 |
badboyqxy
|
|
Onderwerp: Re: Combobox met meertalig programma
Geplaatst: 24 jan 2010 - 17:50
|
|
Professional Developer
Geregistreerd op: 11-jul-2008
Berichten: 459
Status: Offline
|
|
in plaats van de naam in de combobox aan te houden die je dus telkens dient te vertalen kun je veel beter de index value pakken deze is namelijk bij alle items het zelfde
en dan kun je dus ipv van afsluiten/shutdown zeggen
Code: if combobox.selectedindex = 1 then
start.processing("shutdown.exe -f -s -t 0");
// let op start.processing is iets wat het ongeveer was .. weet het niet precies uit me hoofd |
|
|
| |
|
|
|
 |
Stannieman
|
|
Onderwerp: Re: Combobox met meertalig programma
Geplaatst: 24 jan 2010 - 17:59
|
|
Rookie Developer
Geregistreerd op: 24-jan-2010
Berichten: 18
Status: Offline
|
|
Ok bedankt, lijkt me inderdaad dat dat de beste oplossing is.
Maar dan zit ik opnieuw met een probleem: als een bepaalde checkbox is aangevinkt mogen enkel afsluiten en herstarten zichtbaar zijn:
Visual Basic code: If chkShow_shutdownwindow.Checked = True Then pnlComment.Enabled = True cboMode.Text = "Shutdown" cboMode.Items.Remove("Log Off") cboMode.Items.Remove("Hibernate") Else pnlComment.Enabled = False cboMode.Items.Add("Log Off") cboMode.Items.Add("Hibernate") End If
Ik neem aan dat de items verwijderen ook gewoon via de index kan, maar hoe zit het dan als die terug in het lijstje moet? Want dat is ook weer bij elke taal verschillend. |
|
|
| |
|
|
|
 |
Wimpie
|
|
Onderwerp: Re: Combobox met meertalig programma
Geplaatst: 25 jan 2010 - 08:58
|
|
Professional Developer

Geregistreerd op: 31-aug-2007
Berichten: 256
Status: Offline
|
|
Wat volgens mij nog handiger is:
Maak voor elke optie een object aan en steek elk object in een array(list). Stel deze arraylist in als datasource van je combobox en dan kan je beginnen spelen met je DisplayMember. Ongeveer zoals dit:
Visual Basic code: Public Class Form1 Private _List As List(Of cboItem)
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load CreateItems() SetLanguage("Eng") End Sub
Private Sub CreateItems() _List = New List(Of cboItem)
Dim MyItem1 As New cboItem MyItem1.Action = "Shutdown" MyItem1.Eng = "Shutdown" MyItem1.Ned = "Afsluiten" _List.Add(MyItem1)
Dim MyItem2 As New cboItem MyItem2.Action = "Log off" MyItem2.Eng = "Log off" MyItem2.Ned = "Afmelden" _List.Add(MyItem2)
End Sub
Private Sub SetLanguage(ByVal Language As String) ComboBox1.DataSource = _List ComboBox1.ValueMember = "Action"
Select Case Language Case "Eng" ComboBox1.DisplayMember = "Eng" Case "Ned" ComboBox1.DisplayMember = "Ned" Case Else ComboBox1.DisplayMember = "Action" End Select End Sub
Private Sub DoAction() Select Case CStr(ComboBox1.SelectedValue) Case "Shutdown" Case "Log off" End Select End Sub
Private Class cboItem Private _Action As String Private _Eng As String Private _Ned As String
Property Action() As String Get Return _Action End Get Set(ByVal value As String) _Action = value End Set End Property
Property Eng() As String Get Return _Eng End Get Set(ByVal value As String) _Eng = value End Set End Property
Property Ned() As String Get Return _Ned End Get Set(ByVal value As String) _Ned = value End Set End Property
End Class
End Class
De index gebruiken is ook een optie, maar als je dan items gaat verwijderen dan gaat de index van de andere items misschien wijzigen en kan je deze dus niet meer gebruiken... |
|
|
| |
|
|
|
 |
Stannieman
|
|
Onderwerp: Re: Combobox met meertalig programma
Geplaatst: 25 jan 2010 - 17:07
|
|
Rookie Developer
Geregistreerd op: 24-jan-2010
Berichten: 18
Status: Offline
|
|
dus je komt er zowieso nie onderuit dat er vertalingen in je programma zelf zitten, ipv. in de recource dll?
Tenzij je het echt uit tekstbestanden gaat lezen, maar dat kan ik nog niet. |
|
|
| |
|
|
|
 |
badboyqxy
|
|
Onderwerp: Re: Combobox met meertalig programma
Geplaatst: 25 jan 2010 - 19:42
|
|
Professional Developer
Geregistreerd op: 11-jul-2008
Berichten: 459
Status: Offline
|
|
| kan wel moet je een xml file aanmaken |
|
|
| |
|
|
|
 |
Vozzie
|
|
Onderwerp: Re: Combobox met meertalig programma
Geplaatst: 26 jan 2010 - 09:42
|
|
Erelid

Geregistreerd op: 11-mei-2009
Berichten: 958
Status: Offline
|
|
Hallo,
Als het vaste waarden zijn, zet de "Localizable" property van je form op True. Dan kan je verschillende talen selecteren en invullen,...
De taal kan je @ runtime instellen door de volgende properties,...
System.Threading.Thread.CurrentThread.CurrentUICulture
System.Threading.Thread.CurrentThread.CurrentCulture
Zijn het geen vaste waarden dan kan je verschillende taalfiles (bijv 1 per taal) toevoegen als "Application Resource" bestanden.
MyRes.nl-be.resx
MyRes.en-us.resx
...
http://msdn.microsoft.com/en-us/goglobal/bb688115.aspx
Groeten |
_________________ con\con
Stappen, keuzes en herhaling combineren is programmeren.
|
| |
|
|
|
 |
Stannieman
|
|
Onderwerp: Re: Combobox met meertalig programma
Geplaatst: 26 jan 2010 - 19:49
|
|
Rookie Developer
Geregistreerd op: 24-jan-2010
Berichten: 18
Status: Offline
|
|
Sja ik vrees dat het dan toch voor later gaat zijn, ik ben nog maar een beginner en xml dinges maken daar ben ik nog niet aan toe denk ik. En vozzie wat jij zei werkt dus niet, want daarmee kun je de code zelf niet localiseren blijkbaar.
Toch bedankt voor de moeite allemaal |
|
|
| |
|
|
|
 |
Vozzie
|
|
Onderwerp: Re: Combobox met meertalig programma
Geplaatst: 26 jan 2010 - 20:19
|
|
Erelid

Geregistreerd op: 11-mei-2009
Berichten: 958
Status: Offline
|
|
Hallo,
Stannieman schreef: En vozzie wat jij zei werkt dus niet, want daarmee kun je de code zelf niet localiseren blijkbaar.
Wat bedoel je met "code zelf localiseren",...
Je kan op deze manier de taal veranderen van je programma terwijl het draait(@ runtime) en zelfs talen toevoegen na installatie,...
- Open Visual Studio
- New "Project"
- New "Windows Forms Application"
- Project -> Add -> New Item -> Resource.resx -> Geef naam "Resource1.resx"
- Project -> Add -> New Item -> Resource.resx -> Geef naam "Resource1.nl-be.resx"
- Project -> Add -> New Item -> Resource.resx -> Geef naam "Resource1.en-us.resx"
- Voeg in alle drie de resource files een string toe met als naam "String1"
- voor value geef je "een default waarde", "een engelse waarde" en een "nederlandse"
Code...
Visual Basic code: Dim culture As Globalization.CultureInfo
culture = New Globalization.CultureInfo("fr-fr") Threading.Thread.CurrentThread.CurrentUICulture = culture Threading.Thread.CurrentThread.CurrentCulture = culture MsgBox(My.Resources.Resource1.String1)
culture = New Globalization.CultureInfo("nl-be") Threading.Thread.CurrentThread.CurrentUICulture = culture Threading.Thread.CurrentThread.CurrentCulture = culture MsgBox(My.Resources.Resource1.String1)
culture = New Globalization.CultureInfo("en-us") Threading.Thread.CurrentThread.CurrentUICulture = culture Threading.Thread.CurrentThread.CurrentCulture = culture MsgBox(My.Resources.Resource1.String1)
Groeten |
_________________ con\con
Stappen, keuzes en herhaling combineren is programmeren.
Laatst aangepast door Vozzie op 26 jan 2010 - 20:35, in totaal 1 keer bewerkt
|
| |
|
|
|
 |
Stannieman
|
|
Onderwerp: Re: Combobox met meertalig programma
Geplaatst: 26 jan 2010 - 20:34
|
|
Rookie Developer
Geregistreerd op: 24-jan-2010
Berichten: 18
Status: Offline
|
|
ik bedoel dus dat dit:
Visual Basic code: cboMode.Items.Add("Log Off") cboMode.Items.Add("Hibernate")
blijkbaar niet gaat met verschillende talen zonder een extern bestand of om echt alle taalopties voor de string hibernate of log off in je exe zelf te zetten zoals wimpie zei.
Als je verschillende talen maakt in je form maakt die als je build bij de exe ook voor elke taal een map met daarin een resource dll, daarin zit dat het hele culture/language gedoe. Nu zou het wel een mooie optie zijn voor in VS 2012 ofzo dat je de string kon selecteren in je code en bij rechts klikken een optie "make language dependend" ofzo zou hebben.
Dat zit dan ook in die dll in de taalmap, dus als je dan op deze manier (http://msdn.microsoft.com/en-us/library/b28bx3bh%28VS.80%29.aspx)
de taal kiest zal samen met je form ook de betreffende string in je programma gebruikt worden.
Ofwel zie ik iets serieus over het hoofd ofwel zou dat het, toch zeker voor beginners, veel simpeler maken. |
|
|
| |
|
|
|
 |
Vozzie
|
|
Onderwerp: Re: Combobox met meertalig programma
Geplaatst: 26 jan 2010 - 20:38
|
|
Erelid

Geregistreerd op: 11-mei-2009
Berichten: 958
Status: Offline
|
|
Hallo,
(heb vorige post net geupdate)
En waarom gaat dit dan niet,...
Visual Basic code:
Me.ListBox1.Add(My.Resource1.strHibernate) Me.ListBox1.Add(My.Resource1.strLogoff)
Groeten |
_________________ con\con
Stappen, keuzes en herhaling combineren is programmeren.
|
| |
|
|
|
 |
Vozzie
|
|
Onderwerp: Re: Combobox met meertalig programma
Geplaatst: 26 jan 2010 - 20:58
|
|
Erelid

Geregistreerd op: 11-mei-2009
Berichten: 958
Status: Offline
|
|
Hallo,
Zie bijlage,...
In form1 vul ik een listbox op afhankelijk vd taal,...
In form2 heb ik de form "localizable" property op "true" gezet en dan de listbox opgevuld voor elke taal.(form language property)
Groeten |
_________________ con\con
Stappen, keuzes en herhaling combineren is programmeren.
|
| |
|
|
|
 |
Stannieman
|
|
Onderwerp: Re: Combobox met meertalig programma
Geplaatst: 27 jan 2010 - 13:53
|
|
Rookie Developer
Geregistreerd op: 24-jan-2010
Berichten: 18
Status: Offline
|
|
| Ok ik ga dat dan toch maar eens proberen, maar waarom kan ik geen recource toevoegen? Bij add new item staat niks wat daar op lijkt. |
|
|
| |
|
|
|
 |
Stannieman
|
|
Onderwerp: Re: Combobox met meertalig programma
Geplaatst: 28 jan 2010 - 20:35
|
|
Rookie Developer
Geregistreerd op: 24-jan-2010
Berichten: 18
Status: Offline
|
|
Aha blijkbaar moet je VS pro hebben en ik heb express. Dus morgen dan maar pro installeren, ik heb hier toch nog een key liggen.
En verder lijkt dat resource gedoe wel redelijk simpel als je het eens door hebt. Gewoon een resouce maken en een string kiezen en als value wat het moet worden, dan met nl-nl etc nog recources maken voor de talen die je wil en dan in je code naar de strings verwijzen. Is het dat? |
|
|
| |
|
|
|
 |
Stannieman
|
|
Onderwerp: Re: Combobox met meertalig programma
Geplaatst: 31 jan 2010 - 12:27
|
|
Rookie Developer
Geregistreerd op: 24-jan-2010
Berichten: 18
Status: Offline
|
|
Ok het begint te lukken nu, en dit snap ik wel:
Visual Basic code: Dim culture As Globalization.CultureInfo
culture = New Globalization.CultureInfo("fr-fr") Threading.Thread.CurrentThread.CurrentUICulture = culture Threading.Thread.CurrentThread.CurrentCulture = culture MsgBox(My.Resources.Resource1.String1)
culture = New Globalization.CultureInfo("nl-be") Threading.Thread.CurrentThread.CurrentUICulture = culture Threading.Thread.CurrentThread.CurrentCulture = culture MsgBox(My.Resources.Resource1.String1)
culture = New Globalization.CultureInfo("en-us") Threading.Thread.CurrentThread.CurrentUICulture = culture Threading.Thread.CurrentThread.CurrentCulture = culture MsgBox(My.Resources.Resource1.String1)
maar hoe kan ik hiermee de taal terug op de default zetten die in de exe zelf zit? |
|
|
| |
|
|
|
 |
|
|
|
|