Toon posts:

[C++ Builder] Meertalige GUI / software met versleuteling*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Mijn bedoeling is in Borland C-Builder een applicatie te schrijven die meerdere talen en landen ondersteund, dus niet alleen strings, maar ook conversie naar andere eenheden. De bedoeling is voor iedere taal een aparte file op te nemen. Bij het starten van de applicatie dient de juiste file te worden ingelezen. Deze file dient echter wel versleuteld te zijn, zodat deze niet door een leek uitgelezen kan worden.

Zijn er op dit gebied richtlijnen of handleidingen, of hoe zou dit globaal het best kunnen worden aangepakt. Nu werk ik met compiler directives die voor het compilen de juiste taal en instellingen kiezen, maar dit is voor uitbreidbaarheid niet geschikt, aangezien ik liever via een apart tooltje de language files wil kunnen aanmaken.

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 17:30

Reptile209

- gers -

Als het alleen om een blokkade tegen leken gaat, zou ik je strings e.d. gewoon in een binair bestand opslaan. Gooi er wat complete structuren en classes doorheen, en geen enkele leek zal 'm makkelijk editten.
Eventueel kan je dan de file nog door een byte-voor-byte XOR heenhalen om het nog wat spannender te maken. Om hem dan weer uit te lezen, laat je je applicatie eerst een temp-bestand aanmaken waarin de XOR ongedaan gemaakt wordt, om die dan weer binair in te lezen.
Hoe geheim wil je je strings eigenlijk maken? :?

Zo scherp als een voetbal!


Verwijderd

Topicstarter
Ow dat is op zich al een goed idee, maar waar het mij vooral om gaat is toch de meertalige aanpak op zich, dus inderdaad met structures, classes, of zelfs versleuteldelde .inf files o.i.d. Ik heb nog geen ervaring op dit gebied, dus ben benieuwd hoe dit over het algemeen wordt aangepakt.

Dus in de implementatie moeten variabelen of functies worden gebruikt die de variabele in de juiste taal genereren, bijvoorbeeld:

#engels
_MODE = "You have entered mode ";

#nederlands
_MODE = "Je bent nu aangekomen in mode ";


int my_Mode = 0;
char[xx] my_Output;
...
my_Output = getLang("_MODE") + intToStr(my_Mode);

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Hier boven ga je al de mist in: in lang niet alle talen kan je de mode waarin je aangekomen bent achteraan in de zin zetten. Dit zal je dus flexibeler moeten oplossen. Ik heb het idee dat je niet helemaal doorhebt wat er allemaal komt kijken bij i18n en i10n... Ik heb hier al één probleem genoemd. Nog een aardige is deze: sommige talen hebben verschillende woordvormen voor verschillende aantallen. In het Nederlands bestaat alleen het verschil tussen 1 en 0 of >1, maar er zijn talen met 3 of zelfs meer vormen. Een voorbeeld in het Tsjechisch, waar de vervoeging veranderd bij 5 of meer. Veel plezier! >:)

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Dat met vervoegingen is een beetje lastig, weer wat geleerd over talen :) Lijkt me dat je dat soort dingen kunt oplossen door voor iedere foutmelding een functie te maken die de errorstring teruggeeft, gegeven een aantal parameters. Die mik je vervolgens in een DLL. Is wel een takkewerk lijkt me trouwens.
Als je er even vanuit gaat dat vervoegingen altijd gelijk zijn, dan kun je gebruik maken van sprintf. Je slaat gewoon op "You have entered mode %d" en vervolgens doe je sprintf(targetString, getLang("_MODE"), myMode) ofzoiets. Op deze manier ben je iig qua plaats flexibel. Kijk wel uit voor buffer overflows met sprintf!

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Dat is beter opgelost in (bijvoorbeeld) het systeem dat KDE gebruikt voor haar vertalingen. Je kan daar per vertaalde string meerdere alternatieven opgeven die afhankelijk van de waarde van de parameters worden gebruikt. Dat is niet eenvoudig om even te maken. Overigens wordt wel het systeem van %1...%n gebruikt. Een string met parameters zou je daar zo in je code zetten:
C++:
1
MyLabel->setLabel( i18n ("Writing track %1 of %2. Please wait.")).arg(trackNumber).arg(trackCount));

Voor het weergeven van tijden, valuta, grote of gebroken getallen, etc. heb je ook speciale classes die gebruik maken van de instellingen van de gebruiker voor localisatie voor het correct formateren.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Verwijderd

Topicstarter
Het ligt dan idd niet zo eenvoudig als ik gedacht had, dus waarschijnlijk wordt het voor iedere taal een class maken met daarin de benodigde basis-zins-constructies, die met behulp van parameters worden aangevuld. En door vervolgens van deze class een .dll te maken kan het een en ander versleuteld worden. Ik ben in ieder geval al een aardig stuk op weg geholpen, maar suggesties en tips blijven uiteraard altijd welkom.
Pagina: 1