Forum: Italian Ruby user group Globalize, i18n.locale in maiuscolo

Posted by Mattia nil (michx)
on 2012-11-23 10:31
Attachment: event_i18n.jpg (17,7 KB)
Ciao,
ho una classe così definita:

>   class Event < ActiveRecord::Base
>        translates :nome, :descrizione
>        # other stuff...
>    end

Su database ho definito la tabella di traduzione con campo locale di
tipo enum('IT', 'EN') , come da screenshot allegata. Il problema è che
Globalize2 (Rails2) costruisce le query con campo locale in minuscolo e
non trova la corrispondenza corretta.

Questo è un esempio di query generata da Globalize2:

SELECT * FROM `event_translations` WHERE (`event_translations`.`locale`
IN ('it')) AND (`event_translations`.event_id = 1406)

Io vorrei diventasse così:

SELECT * FROM `event_translations` WHERE (`event_translations`.`locale`
IN ('IT')) AND (`event_translations`.event_id = 1406)

Ho provato a forzare da controller la variabile i18n.locale in maiuscolo
a 'IT', ma non funziona. Avete suggerimenti?
Posted by Paolo Montrasio (pmontrasio)
on 2012-11-24 09:47
Se globalize insiste per usare i nomi minuscoli (scommetto che c'è di
mezzo una Symbol#to_s) e se per qualche ragione non sei obbligato ad
usarli maiuscoli (es altra applicazione che deve accedere al db) allora
potresti risolvere il problema usando le minuscole nell'enum.

Prova effettuata con mysql 5.5:

mysql> create table tabella (language enum('it','en'));
Query OK, 0 rows affected (0.93 sec)

mysql> insert into tabella values('it');
Query OK, 1 row affected (0.05 sec)

mysql> select * from tabella;
+----------+
| language |
+----------+
| it       |
+----------+
1 row in set (0.00 sec)

mysql> insert into tabella values('IT');
Query OK, 1 row affected (0.04 sec)

mysql> select * from tabella;
+----------+
| language |
+----------+
| it       |
| it       |
+----------+
2 rows in set (0.00 sec)


Paolo

Mattia nil wrote in post #1085981:
> Ciao,
> ho una classe così definita:
>
>>   class Event < ActiveRecord::Base
>>        translates :nome, :descrizione
>>        # other stuff...
>>    end
>
> Su database ho definito la tabella di traduzione con campo locale di
> tipo enum('IT', 'EN') , come da screenshot allegata. Il problema è che
> Globalize2 (Rails2) costruisce le query con campo locale in minuscolo e
> non trova la corrispondenza corretta.
>
> Questo è un esempio di query generata da Globalize2:
>
> SELECT * FROM `event_translations` WHERE (`event_translations`.`locale`
> IN ('it')) AND (`event_translations`.event_id = 1406)
>
> Io vorrei diventasse così:
>
> SELECT * FROM `event_translations` WHERE (`event_translations`.`locale`
> IN ('IT')) AND (`event_translations`.event_id = 1406)
>
> Ho provato a forzare da controller la variabile i18n.locale in maiuscolo
> a 'IT', ma non funziona. Avete suggerimenti?
Posted by Mattia nil (michx)
on 2012-11-24 16:27
Purtroppo, come identificato da te, i requisiti sull'applicazione sono 
di mantenere maiuscoli i valori ENUM, in quanto la tabella stessa viene 
interrogata da altri servizi.

Quel tipo di soluzione è ottima, peraltro già adottata in altri casi, se 
non ci fosse questa specifica.

Grazie
Posted by Paolo Montrasio (pmontrasio)
on 2012-11-26 16:09
Se è così non ti resta che modificare la gemma.
Globalize2 probabilmente non è più sviluppata, e se è quella che vedo
qui
https://github.com/joshmh/globalize2/blob/master/l...
dovresti modificare i riferimenti a locale, da e per il database,
facendone delle upcase.
Meglio se te ne fai una tua versione e la metti in vendor/plugin, che
forse era la best practice per Rails2.

Paolo
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.