Results 1 to 9 of 9

Thread: Hmmm tja... getallen die niet Arabisch zijn...

  1. #1
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708

    Hmmm tja... getallen die niet Arabisch zijn...

    Dit is iets dat ik nog nooit ben tegengekomen en waar ik, tot op heden, geen weet van had, maar: er bestaan landen die (standaard) andere getallen gebruiken dan de doorgaans gebruikelijke Arabische karakters.
    En dan heb ik het niet over de oude (en al heel erg dode) Romeinen met hun I, V, C, D en X, maar over mensen in landen die nog bestaan.

    Vorige week heb ik de applicatie van het bedrijf waarvoor ik werk "Locale"-proof gemaakt.
    Dat wil zeggen dat de applicatie onafhankelijk van de "Regional settings" instellingen van Windows een eigen instelling (instelbaar per gebruiker) kan aannemen.
    Dit is nodig omdat we onze applicatie ook via RDP willen gaan aanbieden, waarbij de gebruiker dus inlogd op een server van ons, en gewoon lekker met zijn eigen formaat van getallen en datum en tijd kan blijven werken ongeacht de instellingen van de server.

    Tot zover geen probleem: ik loop (na veel testen en herschrijven) nergens meer tegenaan en alles werkt als een tierelier.
    Tot het moment dat ik het resultaat aan onze tester overgeef, inclusief tips over hoe je de code potentieel over de zeik zou kunnen helpen.
    En ja hoor: de tester doet weer, heel irritant altijd, een "Grappige ontdekking": de code en formaten werken perfect, maar er blijken landen te zijn die andere cijfers hebben dan normaal en ik weet niet hoe ik deze "Feature" kan tegengaan.

    Om het een en andere te verduidelijken heb ik een klein testprojectje gemaakt:
    Name:  NLDGetallen_1.png
Views: 524
Size:  14.7 KB
    In de DPR wordt Application.UpdateFormatSettings op False gezet om aan te geven dat ik niet wil dat FormatSettings worden aangepast wanneer dit in Windows gebeurt.
    Dit staat eigenlijk los van het probleem, maar het viel bij dit onderwerp op, dus heb het in het testproject meegenomen.
    Wanneer je regional settings van Windows tijdens het starten gewoon op Nederlands (Nederland) oid zet, dan ziet de form er als boven uit.

    Druk nu echter op de "Regional formats"-knop (dit opent het formaatinstellingen scherm van Windows) en stel een taal in dat andere karakters gebruikt voor de getallen, zoals "Khmer (Cambodia)" of "Dzongkha (Bhutan)"
    Click image for larger version. 

Name:	NLDGetallen_3.png 
Views:	73 
Size:	34.4 KB 
ID:	8090

    Het scherm van de testapplicatie ziet er dan ineens zo uit:
    Name:  NLDGetallen_2.png
Views: 301
Size:  15.6 KB
    Bij de TSpinEdit moet je even met je muis over de control heen voordat dit zichtbaar wordt.
    Bovenstaande code is getest op nog een oude Windows 7 installatie, maar ik kwam het probleem oorsprokelijk tegen op Windows 10; de Windows versie is dus niet relevant (al kent Windows 7 minder regions, dan Windows 10).

    Is er iemand die een manier weet om niet alleen de formatsettings van Windows te negeren, maar ook de karakterset van getallen?
    Ik heb het idee dat dit door Windows zelf (omdat bijna alles afgeleid is van normale Windows controls) gedaan wordt, maar hoop op een mirakel.

    Help!
    Attached Files Attached Files
    TMemoryLeak.Create(Nil);

  2. #2
    Formatsetting van Windows negeren kan meestal door een TFormatSettings parameter mee te geven met conversies etc.
    Totaal andere tekens voor getallen? Geen idee hoe je dat moet oplossen.
    Met een beetje pech dan ook niet decimaal.
    Er zal wel geen simpele 1 op 1 vertaling vane afwijkend teken naar 0..9 zijn gok ik.

    Bart

  3. #3

  4. #4
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Delphi Code:
    1. getlocaleformatsettings(lcid,formatsettings);

    als eerste regel in je dpr, met lcid uit deze lijst: https://docs.microsoft.com/en-us/ope...b-56532684c37f

  5. #5
    Quote Originally Posted by VideoRipper View Post
    Ik heb het idee dat dit door Windows zelf (omdat bijna alles afgeleid is van normale Windows controls) gedaan wordt, maar hoop op een mirakel.
    Waarom hoop je op een mirakel? Het is in de praktijk toch geen probleem voor jou? Als je bij jou op de server Engels instelt gaat alles toch prima.

    Alleen als een klant uit Cambodia of Bhutan zijn eigen land instelt wil die natuurlijk die nummers zien. Dat zal een heel stuk moeilijker zijn denk ik

    (Of laat je dan onjuist de Engelse getallen zien?)

  6. #6
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Voor de duidelijkheid: het heeft niet met format settings te maken, het was dat ik daarmee bezig was toen onze tester erachter kwam.

    Quote Originally Posted by rvk View Post
    Alleen als een klant uit Cambodia of Bhutan zijn eigen land instelt wil die natuurlijk die nummers zien. Dat zal een heel stuk moeilijker zijn denk ik
    Dat is inderdaad het probleem: onze server is gewoon "en-US" (dus met gewone Arabische cijfers), maar we hebben bijvoorbeeld (als voorbeeld, ik zit in de hotelbusiness) klanten in landen waar ze Farsi spreken.
    Wanneer deze inloggen, en hun locale staat netjes ingevuld op "fa-IR", dan krijgen ze datum, tijd en getalnotatie zoals ze verwachten, maar getallen in het Arabisch.

    Het probleem is dus eigenlijk andersom, maar met het testproject kon ik het op die manier het meerst eenvoudig laten zien.

    Quote Originally Posted by luigi View Post
    De link van Luigi is inderdaad het probleem dat ik bedoel, maar er lijkt geen eenvoudige oplossing te zijn helaas.
    Bedankt voor het meedenken in ieder geval, @allen!
    TMemoryLeak.Create(Nil);

  7. #7
    Counting your refs Paul-Jan's Avatar
    Join Date
    Feb 2002
    Location
    Lage Zwaluwe
    Posts
    2,160
    Je hebt er niks aan, maar ik vind 't wel een heeeele stoere vraag . Wat typisch dat dit stukje door al die jaren heen nooit is gladgestreken, daar is Windows meestal juist zo goed in.

    Er is ook nog deze invalshoek aan deze problematiek (waar je natuurlijk niks aan hebt, want het zijn niet jouw controls), zelfs binnen een string zit er nog magic in het renderen van de digits:

    https://devblogs.microsoft.com/oldne...226-00/?p=1653

  8. #8
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Ik heb nog wat gezocht en wat te proberen valt:

    https://stackoverflow.com/questions/...t-substitution

  9. #9
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Grappig leesvoer inderdaad.

    Nah, we gaan er hier geen tijd in investeren: het is een heel groot project (wanneer niet?) van 20 jaar oud en eigenlijk zouden alleen klanten er last van hebben die andere digits zouden willen, als deze er al zouden zijn (de meesten gebruiken naast hun "Oude" tekens, ook Arabische tekens). Daarnaast zijn het doorgaans wereldwijde ketens waar de voertaal Engels of Spaans is, dus eigenlijk is het de moeite totaal niet waard.

    Bedankt voor de input in ieder geval, heren.
    TMemoryLeak.Create(Nil);

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •