[web] (fout)meldingen in webapp.. hoe doen jullie het?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • xces
  • Registratie: Juli 2001
  • Laatst online: 20-09 16:56

xces

To got or not to got..

Topicstarter
Aangezien ik met 2 programmeertalen werk, heb ik het even ve-ralgemeniseerd.

Stel; je hebt een webapp met een template parser en een x aantal formulieren. Op die formulieren heb je diverse busines rules aangebracht, bijv. een naam mag niet leeg zijn of een foto moet minimaal x kb groot zijn etc.

Stel dat er dan fouten of meldigen getoond moeten worden, dan kun je die foutmeldingen op een paar manieren doen;
a) (fout)meldingen zijn gedefinieerd in de code file
b) (fout)meldingen zijn gedefinieerd in een aparte file
c) (fout)meldingen zijn gedefinieerd in de template en worden enkel getoond indien dat vereist is.
d) (fout)meldingen zijn in de templates gedefinieerd.

Eerst had ik de foutmeldingen in de aspx/php files staan, bij de validatie.
- Slecht voor meertaligheid en slecht te onderhouden
- Geen meertaligheid
- Text/code niet gescheiden

Toen had ik ze allemaal in aparte files gezet als constants en daarnaar refereerde ik.
- Nog niet zo goed te onderhouden, want dit geeft erg veel files
- Geen meertaligheid
- Text/code deels gescheiden

Nu heb ik ze in een XML file staan, en ik laad (en parse) deze XML file als deze wijzigd of als deze nog niet in de sessie zit en vervolgens sla ik hem in de sessie / viewstate op.
- Door de naam van de pagina in de error te verwerken heb ik dus feitelijk meertaligheid ingebouwd
- Alle meldingen op 1 plaats, gesplitst in: "errors" / "messages" / "formerrors"

Maar ik denk eraan om hier ook vanaf het stappen, want wat als er geen sessie gebruikt worden?

Nu zit ik erover te denken om de (fout)meldingen (de text dus) in de template te stoppen; en deze puur visible te maken als er fouten zijn. Dan kan ik per template / taal zelf de foutmeldingen invoeren.
- Beter te onderhouden
- Meertaligheid (lees: per template)
- Text/code gescheiden
- Geen sessies meer nodig
- Nadeel: Indien 2 of meer files hetzelfde zijn dien je de foutmelding in alle files te kopieeren

Toch denk ik dat deze laatste methode nog helemaal niet zo slecht is. Wat vinden jullie, of belangrijker, hoe doen jullie dit soort zaken oplossen?

[ Voor 6% gewijzigd door xces op 30-04-2009 09:06 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Ik werk zelf met java en daar zit standaard een MessageResource in. Daarmee kun je enkele property bestanden maken met hierin je teksten. Door de locale in de bestandsnaam op te nemen wordt de meertaligheid automatisch voor je geregeld. Deze meldingen kun je trouwens overal gebruiken en zijn niet specifiek voor foutmeldingen oid.

Voor het plaatsen van de foutmeldingen gebruik ik de standaard JSF functionaliteit waarbij je in je jsf pagina enkele placeholders opneemt. Dit kan een globale placeholder zijn, maar ook specifiek voor een formulier veld.

Ik kan me niet voorstellen dat zoiets niet in .NET zit en heb daarom ook een beetje het gevoel dat je het wiel opnieuw aan het uitvinden bent.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je kan gewoon gebruik maken van Resource files ( En de ResourceManager ). Die kunnen in meerdere talen meegeleverd worden, en aan de hand van de Culture settings op je Thread worden de juiste waardes terug gegeven.

edit:
Dat is dus in .NET, aangezien Janoz dat aanhaalde. Ik zie dat je niet over een specifieke taal hebt. Dergelijke functionaliteit is natuurlijk ook zelf te bouwen.

Maar wil je nu voor zowel ASP.NET als PHP de localisatie uit dezelfde bestanden halen, of is het niet erg om op verschillende platformen verschillende oplossingen te hebben? In PHP kan je volgens mij gebruik maken van gettext, maar daar heb ik zelf geen ervaring mee.

Voor ASP.NET loopt er trouwens net een topic over localisatie: \[ASP.NET] Meertalig *

[ Voor 66% gewijzigd door Woy op 30-04-2009 13:59 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • xces
  • Registratie: Juli 2001
  • Laatst online: 20-09 16:56

xces

To got or not to got..

Topicstarter
In PHP is zoiets dus niet of nauwelijks, vandaar dat ik eens wilde weten hoe anderen het wiel gebouwd hebben. Het is inderdaad niet nodig dat zowel PHP als .NET het uit hetzelfde systeem halen.

Acties:
  • 0 Henk 'm!

  • PainkillA
  • Registratie: Augustus 2004
  • Laatst online: 26-08 19:26
heb een error placeholder in mijn template. Elke action genereerd een eigen error en renderd deze in de placeholder. Omdat ik zend framework gebruik word deze string opgenomen in het vertaalproces en dan krijgt de gebruiker de error in de juiste taal te zien.

Ik zit er nog over te denken om deze error te loggen in een database oid. Maar heb geen errorcode eigenlijk.

Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 22:05

pietje63

RTFM

Dit is bij mij een onderdeel van mijn language files (plain text bestanden met alle mogelijke teksten die bij een template horen).

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 18-09 22:40

Nick_S

++?????++ Out of Cheese Error

xces schreef op donderdag 30 april 2009 @ 09:03:
Nu heb ik ze in een XML file staan, en ik laad (en parse) deze XML file als deze wijzigd of als deze nog niet in de sessie zit en vervolgens sla ik hem in de sessie / viewstate op.
Dit is zowiezo iets wat niet sessie gevoelig is, dus ik zou het niet opslaan in de sessie. Dit is algemene informatie en kan dus ook in een algemene cache.

Zelf hebben we deze foutmeldingen in een xml bestand in onze repository zitten, zodat webredacteurs dit ook kunnen aanpassen naar gelieve. Deze kunnen wel documenten in de repository aanpassen, maar niet de code. Elke foutmelding heeft een codenummer en in dit XML bestand kunnen ze aangeven welke tekst erbij hoort en of dit een warning of error is (andere weergave).

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

  • Gersomvg
  • Registratie: December 2005
  • Laatst online: 16:07
Wat je ook kan doen is een functie message(); maken

en dan zoiets:

Je code
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function message($errorNumber){
   require_once('errors.php');
   $errors .= '<p>'.$error[$errorNumber].'</p>';
}

Hier gaat iets mis:
message(1);

Hier komt dan dus:
print $errors;
'Er is iets misgegaan.'
?>


errors.php
PHP:
1
2
3
4
5
<?php
$error[1] = 'Er is iets misgegaan.';
$error[2] = 'Er zijn velden leeggelaten.';
$error[3] = 'Het ingevulde e-mailadres heeft geen correcte indeling.';
?>

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
xces schreef op donderdag 30 april 2009 @ 19:49:
In PHP is zoiets dus niet of nauwelijks, vandaar dat ik eens wilde weten hoe anderen het wiel gebouwd hebben. Het is inderdaad niet nodig dat zowel PHP als .NET het uit hetzelfde systeem halen.
Ok dus voor ASP.NET zou ik dan gewoon gebruik maken van het hele Resource/ResourceManager systeem. Dan blijft alleen nog de vraag over hoe je het in PHP zou oplossen.

Zelf doe ik nooit zo veel met PHP maar ik heb wel vaker gehoord dat mensen het met http://nl3.php.net/gettext oplossen.

Op zich kun je zoiets ook wel zelf implementeren, want het is niet extreem complex. Je hebt een methode die een string terug geeft aan de hand van een key. Die methode hoeft alleen aan de hand van de ingestelde taal de juiste terug te geven, en als die niet bestaat bijvoorbeeld een default waarde.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Woy schreef op vrijdag 01 mei 2009 @ 11:50:
Zelf doe ik nooit zo veel met PHP maar ik heb wel vaker gehoord dat mensen het met http://nl3.php.net/gettext oplossen.
getText is niet threadsave. Voor meerdere talen is het dus compleet onbruikbaar.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
gersompie schreef op vrijdag 01 mei 2009 @ 11:32:
errors.php
PHP:
1
2
3
4
5
<?php
$error[1] = 'Er is iets misgegaan.';
$error[2] = 'Er zijn velden leeggelaten.';
$error[3] = 'Het ingevulde e-mailadres heeft geen correcte indeling.';
?>
Code != data.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Janoz: de gettext van Zend Framework is wel threadsafe dus dat is zeker een optie. Zelf werk ik met een custom Zend_Translate class die vertalingen haalt uit de database ipv. uit losse files.

Meer info: Zend_Translate_Adapter_Gettext

[ Voor 9% gewijzigd door Cartman! op 01-05-2009 12:15 ]


Acties:
  • 0 Henk 'm!

  • Gersomvg
  • Registratie: December 2005
  • Laatst online: 16:07
Bij mij wel :+
Het maakt me echt niet uit of ik die errormeldingen moet gaan zitten wijzigen in een php bestand of een xml bestand.

[ Voor 28% gewijzigd door Gersomvg op 01-05-2009 12:41 ]

Pagina: 1