reCaptcha – localizzazione

In luglio dello scorso anno raccontavo come integrare il controllo reCaptcha. Nel commentare il post risultava come limite la mancanza della localizzazione. Ringrazio oggi il commento che è stato fatto al post in cui si fa notare la possibilità di usare le reCaptcha Client API per applicare una traduzione personalizzata al controllo, in particolare impostando l’opzione custom_translations.

A questo punto il problema: come integare le Client API con il control per asp.net che viene fornito? Il controllo offre la possibilità di impostare solo poche opzioni della variabile “RecaptchaOptions”, necessaria per la personalizzazione del widget reCaptcha.

Accertato che avrebbe poco senso un’estensione per ridefinire il render del controllo, ho valutato 3 opzioni: (1)  reverse del controllo e personalizzazione dello stesso (2) registrare blocchi client per aggiungere modifiche alla variabile “RecaptchaOptions” – ho mollato dopo un paio di tentativi falliti (3) provare a iniettare codice javascript.

Non posso definire “sane” ne l’opzione (1) ne la (3) ma probabilmente la (1) sarebbe la più pulita... ma tutto sommato per quello che mi serve al momento, e soprattutto per fare una primo test per vedere se effettivamente funziona, è troppo effort. Analizzando il codice con reflector ho giudicato più rapido iniettare del codice javascript usando impropriamente alcune proprietà. Riporto i passi e le osservazioni per arrivare ad avere il controllo localizzato italiano.

Questo è come appare il RenderContents del RecaptchaControl. Il controllo renderizza esplicitamente javascript.

image

Questo è il risultato del metodo qui sopra decompilato.

image

La proprietà Theme si presta all’hack. Qui è come sono intervenuto per iniettare il codice che mi serve per la localizzazione in italiano, codice che ho preso AS IS direttamente dalla documentazione http://wiki.recaptcha.net/index.php/I18n, dove si legge “In the above example, we added the option lang : 'it' because the audio challenge for italian people is difficult if in English: so setting the language it, although reCaptcha doesn't have italian speech, at least a list of English numbers is needed to recognize from partially sighted people.

image

Da  notare che il codice andrà a inserirsi esattamente all’interno degli apici del theme senza modificare il comportamento del controllo e aggiungendo le opzioni mancanti. Faccio notare inoltre la partenza con l’apice e la chiusura senza apice, la dove sembra servirebbe... una sorta di hack sulla scia del noto SQL Injection.

Ovviamente... non dobbiamo dimenticare di invocare il metodo sopra definito nel Load della pagina.

image

... ed ecco infine il risultato.

image

oO0( ...rimango in attesa che arricchiscano il controllo con le opzioni mancanti...)

posted @ martedì 23 marzo 2010 0.18

Print

Comments on this entry:

# re: reCaptcha – localizzazione

Left by fabrizio at 23/03/2010 8.10
Gravatar
Molto interessante ma.... recaptcha.SetCulture(Thread.CurrentThread.CurrentCulture)
imposta ReCaptcha nella lingua del processo Asp.net che gira sul server. E non sulla lingua del client.
... o mi sono perso qualcosa? :)

fabrizio

# re: reCaptcha – localizzazione

Left by markino at 23/03/2010 9.02
Gravatar
Si, ho estratto l'articolo da un caso di uso reale e ho omesso alcuni dettagli. In genere imposto la cultura programmaticamente in modo che il thread corrente della richiesta sia allineato con la cultura del browser dell'utente e/o la cultura scelta dall'utente per la visualizzazione del sito. Sull'argomento avevo scritto un tip tempo fà - di cui non trovo il link - ma puoi fare riferimento anche a questo articolo su MSDN msdn.microsoft.com/en-us/library/bz9tc508.aspx, vedi il paragrafo "To set the culture and UI culture for an ASP.NET Web page programmatically".

Your comment:



 (will not be displayed)


 
 
 
Please add 5 and 4 and type the answer here:
 

Live Comment Preview:

 
«febbraio»
domlunmarmergiovensab
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910