# Globalize, i18n.locale in maiuscolo

**URL:** <https://www.ruby-forum.com/t/globalize-i18n-locale-in-maiuscolo/224722>\
**Category:** IT\
**Created:** [November 23, 2012, 10:31am UTC](https://www.ruby-forum.com/t/globalize-i18n-locale-in-maiuscolo/224722 "2012-11-23T10:31:57Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![aris](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/258eb7/32.png) [@aris](https://www.ruby-forum.com/u/aris)\
**Post date:** [November 23, 2012, 10:31am UTC](https://www.ruby-forum.com/t/globalize-i18n-locale-in-maiuscolo/224722/1 "2012-11-23T10:31:57Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![michx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/73ab20/32.png) [@michx](https://www.ruby-forum.com/u/michx)\
**Post date:** [November 24, 2012, 9:47am UTC](https://www.ruby-forum.com/t/globalize-i18n-locale-in-maiuscolo/224722/2 "2012-11-24T09:47:52Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![michx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/73ab20/32.png) [@michx](https://www.ruby-forum.com/u/michx)\
**Post date:** [November 24, 2012, 4:27pm UTC](https://www.ruby-forum.com/t/globalize-i18n-locale-in-maiuscolo/224722/3 "2012-11-24T16:27:27Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![michx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/73ab20/32.png) [@michx](https://www.ruby-forum.com/u/michx)\
**Post date:** [November 26, 2012, 4:09pm UTC](https://www.ruby-forum.com/t/globalize-i18n-locale-in-maiuscolo/224722/4 "2012-11-26T16:09:10Z")

</div>

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/lib/globalize/active_record/adapter.rb>

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
