Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Ulkomaankielelle

AimoKulaus [25.11.2007 15:19:21]

#

Jos halutaan lokalisoida eli kääntää Visual Basic 2005 -ohjelmalla tehdyn ohjelman nappien yms kieli joksikin muuksi, vaikkapa ruåtsiksi, niin tähän lienee Microsoftilla olemassa systeemit.

Mutta kun lueskelin ohjeita, niin missään ei selvinnyt, että voidaanko kieltä vaihtaa lennosta, eli asetussivulla voisi valita kielen, ja samassa ohjelma olisikin jo ko kielen mukainen. Liekö tämä mahdollista?

Entä pitääkö aina kääntää (=build) projekti Visual Basicissa erikseen kullekin kielelle?

Antti Laaksonen [25.11.2007 15:29:28]

#

Monikielisen ohjelman tekeminen omin keinoin on sen verran helppoa, että minä en turvautuisi mihinkään valmiisiin järjestelmiin, joita ei kenties saa toimimaan aivan sillä tavalla kuin haluaisi. Yksinkertainen ohjelman tekstien lukeminen valitun kielen mukaisesta tiedostosta toimii täysin varmasti, ja kieltä voi ongelmitta vaihtaa ohjelman suorituksen aikana.

AimoKulaus [25.11.2007 21:32:39]

#

Olen samaa mieltä. Allaoleva ohjelmapläjäys etsii formilta kaikki testit ja kirjoittaa ne muuttujataulukkoon, josta ne voi sitten vaikkapa tallentaa. Aliohjelmaan annetaan parametrinä formin nimi.
Jostain syystä tuo ei osaa etsiä menujen tai toolstrippien alakohtia, eikä itse lomakkeen nimeä.

Vähintään yhtä juhlava pläjäys voidaan tehdä lukemaan tekstit tiedostosta ja laittamaan takaisin lomakkeelle.

Itselleni mieluisampi vaihtoehto on tehdä ohjelma, joka kirjoittaa minulle valmiiksi koodia, jonka vain copy-pastean Form_loadiin, ja voilá

Private Sub EtsiTekstit(ByVal parent As Control)

Dim i As Integer
Dim c As Control

For Each c In parent.Controls
  If c.Text <> "" Then                           ' Ei tyhjiä
    If IsNumeric(Mid(c.Text, 1, 1)) = False Then ' Ei numeroita
      If InStr("...;TrueFalse", c.Text) = 0 Then ' Ei näitä merkkejä tai sanoja
        If Mid(c.Text, 1, 2) <> "C:" Then        ' Ei hakemistoja
          If Mid(c.Name, 1, 2) <> "XX" Then      ' Jos ei haluta kääntää esim ohjelman nimeä tai copyrightiä
            For i = 0 To Tekstienmäärä
              If Viesti(i) = Trim(c.Text) Then Exit For
              If Viesti(i) = "" Then
                Viesti(i) = Trim(c.Text)
                Exit For
              End If
            Next
          End If
        End If
      End If
    End If
  End If
  If c.HasChildren Then
    EtsiTekstit(c)          ' Rekursiivinen kutsu
  End If
Next

End Sub

Antti Laaksonen [25.11.2007 22:08:56]

#

Ohjelman tekstien penkominen tuolla tavalla on ehkä vähän hankala ratkaisu. Minä luultavasti kirjoittaisin ihan käsin koodin, joka laittaa tiedostosta luetut tekstit oikeiden kontrollien oikeiden ominaisuuksien arvoiksi. Onhan siinä jonkin verran työtä, mutta harvemmin tekstejä kuitenkaan on ihan käsittämättömiä määriä.

Grez [26.11.2007 02:45:50]

#

Itse teen niin, että kirjoittelen lokalisoitaviksi tarkoitetut tekstit alkamaan ja loppumaan tietyllä merkillä ja sitten oma pikku softakikkare käy ne läpi ja korvaa komennolla, joka lataa ne tiedostosta (ja tietty poimii ne erikoismerkkien välissä olevat tekstit sinne tiedostoon)

AimoKulaus [26.11.2007 12:39:15]

#

Tosimiehen tuntee siitä, että hän väsää kaksi päivää ohjelmaa joka tekee homman automaattisesti. Tosin käsin tekemällä homman tekisi puolessa päivässä...

Joka tapauksessa tein muutaman ohjelmanpätkän, joka hakee kaikissa lomakkeissa olevat tekstit, laittaa ne tiedostoon, ja tekee minulle valmiiksi ohjelmakoodit suoraan formeihin liitettäviksi.

Asetuslomakkeen teko on yleensä kaikkein tympein homma koko ohjelmassa, siihenhän pitää kirjoittaa hirmuisesti koodia, jotta textboksien arvot saa päivitettyä oikeisiin muuttujiin ja päinvastoin.

Sain tämänkin automatisoitua. Ainoa vaatimus on se, että textboksin nimi on sama kuin muuttujalla, mutta siinä on etuliite txt. Siis muuttujaa Oletuskansio vastaa textboksi txtOletuskansio.
(Tämä toimii muuten, mutta jos on radiobuttoneita tai checkbokseja, niin viereen täytyy tehdä näkymätön textboksi, jossa siis lukee True tai false)

Tässäkin ohjelma tekee valmista koodia, jonka voi liittää suoraan alkuperäiseen ohjelmaan.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta