Globalizando Mephisto (3ª Parte)

Bienvenido a la tercera parte de la serie de artículos Globalizando Mephisto donde hablare de como utilizar este plugin con una instancia de mephisto multi site.

He actualizado el plugin para proporcionar soporte completo para mephisto multi site:

  • Todas los ‘rake tasks’ ya tiene soporte completo para multi site, permitiendote convertir una instancia mephisto globalizada a una instancia multi site con poco esfuerzo.
  • Ahora también puedes especificar una lista distinta de locales soportadas para cada sitio que permite que el sitio 1 suporta ingles, francés y alemán, y el sitio 2: castellano y catalán y el sitio sitio 3: klingon, esperanto y élfico.
  • La clase SupportedLocales ahora carga los locales ‘perezosamente’.

Mono-site a Multi-site.

Crear una nueva instancia de site

Crear una nueva instancia de site. p.ej:

1
2
3
s = Site.create(:host => "webtypes.com", :title => "Webtypes", :subtitle => 'We do web, and you?')
s.sections << Section.create(:name=>"Home", :path =>'', :template=>"home.liquid")
s.save

Añadir lo siguiente al fichero config/environment.rb:

1
2
3
4

Site.multi_sites_enabled = true
SupportedLocales.define_by_key('saimonmoore.net',['el-GR', 'es-ES', 'ca-ES'],'en-GB')
SupportedLocales.define_by_key('webtypes.com',['es-ES','nl-NL'],'en-GB')

Crear sub-raices

Si todavía no has globalizado tu mephisto entonces sigue los mismos pasos descritos en el articulo asegurándote que el paso anterior (activar multi site) ya esta hecho. Si estas actualizando un mephisto globalizado mono site entonces solo ejecuta:

1
2
3

svn up vendor/plugins/mephisto_i18n
rake mephisto:i18n:ui:setup_subroots

Esto creará todos los necesarios “sub-raices” dentro de /public/cache/saimonmoore.net, /public/cache/webtypes.com. También, añadirá symlinks a public/assets para que dentro del sitio, puedes acceder a /assets/2007/10/3/myimage.png.

Asi es como mi directorio public parece después de haber ejecutado setup_subroots para un mephisto multi sitio:

(Nota: he mantenido los sub-raices anteriores que se utilizaban para la mono instancia (los directorios ca,es,el, pero en un sistema multi site la raiz principal es /public/cache/site_host)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
saimon@iris:~/dev/projects/saimonmoore.net$ ll public/
total 32K
-rw-r--r-- 1 saimon  619 2007-04-20 17:04 404.html
-rw-r--r-- 1 saimon  684 2007-04-20 17:04 500.html
drwxr-xr-x 6 saimon  160 2007-05-14 13:57 assets/
drwxr-xr-x 3 saimon  304 2007-04-20 17:04 ca/
drwxr-xr-x 5 saimon  136 2007-05-14 14:02 cache/
-rwxr-xr-x 1 saimon  479 2007-04-20 17:04 dispatch.cgi*
-rwxr-xr-x 1 saimon  859 2007-04-20 17:04 dispatch.fcgi*
-rwxr-xr-x 1 saimon  479 2007-04-20 17:04 dispatch.rb*
drwxr-xr-x 5 saimon  120 2007-04-20 17:04 documents/
drwxr-xr-x 3 saimon  304 2007-04-20 17:04 el/
drwxr-xr-x 3 saimon  304 2007-04-20 17:04 es/
-rw-r--r-- 1 saimon    0 2007-04-20 17:04 favicon.ico
drwxr-xr-x 4 saimon   96 2007-05-11 13:46 images/
-rw-r--r-- 1 saimon 3.3K 2007-04-20 17:04 install.html
drwxr-xr-x 4 saimon   96 2007-04-20 17:04 javascripts/
-rw-r--r-- 1 saimon   99 2007-04-20 17:04 robots.txt
-rw-r--r-- 1 saimon  631 2007-04-20 17:04 sitemap.txt
drwxr-xr-x 4 saimon  136 2007-05-14 09:27 stylesheets/


saimon@iris:~/dev/projects/saimonmoore.net$ ll public/cache/
total 0
drwxr-xr-x 6 saimon 400 2007-05-14 14:02 saimonmoore.net/
drwxr-xr-x 5 saimon 376 2007-05-14 14:02 webtypes.com/


saimon@iris:~/dev/projects/saimonmoore.net$ ll public/cache/saimonmoore.net/
total 0
lrwxrwxrwx 1 saimon  24 2007-05-18 13:48 404.html -> ../../../public/404.html
lrwxrwxrwx 1 saimon  24 2007-05-18 13:48 500.html -> ../../../public/500.html
lrwxrwxrwx 1 saimon  38 2007-05-18 13:48 assets -> ../../../public/assets/saimonmoore.net/
drwxr-xr-x 3 saimon 232 2007-05-18 13:50 ca/
drwxr-xr-x 3 saimon 232 2007-05-18 13:50 el/
drwxr-xr-x 3 saimon 232 2007-05-18 13:50 es/
drwxr-xr-x 3 saimon  72 2007-05-18 13:54 images/
drwxr-xr-x 3 saimon  72 2007-05-18 13:54 javascripts/
drwxr-xr-x 3 saimon  72 2007-05-18 13:54 stylesheets/


saimon@iris:~/dev/projects/saimonmoore.net$ ll public/cache/webtypes.com/
total 0
lrwxrwxrwx 1 saimon  24 2007-05-18 13:48 404.html -> ../../../public/404.html
lrwxrwxrwx 1 saimon  24 2007-05-18 13:48 500.html -> ../../../public/500.html
lrwxrwxrwx 1 saimon  35 2007-05-18 13:48 assets -> ../../../public/assets/webtypes.com/
drwxr-xr-x 3 saimon 232 2007-05-18 13:50 es/
drwxr-xr-x 3 saimon  72 2007-05-18 13:54 images/
drwxr-xr-x 3 saimon  72 2007-05-18 13:54 javascripts/
drwxr-xr-x 3 saimon 232 2007-05-18 13:50 nl/
drwxr-xr-x 3 saimon  72 2007-05-18 13:54 stylesheets/

saimon@iris:~/dev/projects/saimonmoore.net$ ll public/cache/webtypes.com/javascripts/
total 0
lrwxrwxrwx 1 saimon 39 2007-05-18 17:35 mephisto -> ../../../../public/javascripts/mephisto/

saimon@iris:~/dev/projects/saimonmoore.net$ ll public/cache/webtypes.com/images/
total 0
lrwxrwxrwx 1 saimon 34 2007-05-18 17:35 mephisto -> ../../../../public/images/mephisto/

saimon@iris:~/dev/projects/saimonmoore.net$ ll public/cache/webtypes.com/stylesheets/
total 0
lrwxrwxrwx 1 saimon 39 2007-05-18 17:35 mephisto -> ../../../../public/stylesheets/mephisto/

Actualizar tu servidor web

Finalmente, actualiza tu servidor web para apuntar a los nuevos sub-raices. Para los que utilizan el muy recomendado servidor nginx eso seria:

1
2
3
4
5
6
7
8
9
server {
    listen       80;

   #Spanish locale: es subdomain
    server_name es.webtypes.com;

    root /var/www/apps/saimonmoore.net/current/public/cache/webtypes.com/es;
    ...
}

mostrando el cambio necesario para el host virtual ‘es’ (castellano). Actualiza el resto de los hosts virtuales según necesario.

Otros arreglos.

  • Arreglos para los vínculos de “cambiar locale” que se generan automáticamente a través de:
    {{ i18n.switch_to_locale_links }}

    Estos vínculos ya funcionan cuando estas navegando los archivos/etiquetas, buscando artículos o utilizando cualquier ‘controller’ customizado. ¡ATENCIÓN!: Como resultado de estos cambios es necesario actualizar tu esquema (lo cual básicamente localiza site.search_path/tag_path) a través de:

    
    
    {{ rake mephisto:i18n:update_schema }}

    Ademas, para que la funcionalidad de búsqueda sea correctamente localizado, necesitas asegurar el url de submit del formulario de búsqueda es localizado (y que la traducción view es la misma que la traducción model de site.search_path )

    p.ej.

    1
    2
    
    
    <form method="get" id="sform" action="/{{'search' | t: 'urls'}}">
    
    Toma nota del uso del namespace ‘urls’....
  • Dentro de la interfaz admin, cuando cambias al locale base, el cambiador del locale automáticamente cambiara a www.mydomain.com en vez de p.ej. en.mydomain.com si el locale base es ingles.
  • Se han movido algunos rake tasks relacionados cambios del esquema al namespace mephisto:i18n.
  • Actualizado rake tasks. mephisto:i18n:un/install_schema para aceptar el variable de entorno LANGS para que sea fácil añadir mas idiomas al esquema.
  • Ya no es necesario añadir manualmente el dominio de la sesión (ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS.update(:session_domain => ’.saimonmoore.net’)) en environments/production.rb ya que esto se hace automaticamente.
  • Varios arreglos al modulo de Traducciones incluyendo ordenar sin tomar en cuenta la capitalización, arreglar el problema que no encontraba llaves interpoladas (‘bla %s ..’), ahora se busca sobre contenido traducido y no por llave.

Controllers Customizados

Si estas utilizando otro plugin para mephisto que utiliza su propio controller y rutas (p.ej. el plugin contact form) y te gustaria localizar su url, entonces simplemente añadir algo como lo siguiente a tu fichero config/routes.rb:

1
2
3
4
5
6

ActionController::Routing::Routes.draw do |map|
  map.contact_form 'contact' >> :urls, :controller => 'contact_form', :action => 'contact_form'
  map.contact_submit 'contact_submit', :controller => 'contact_form', :action => 'contact_submit', :conditions => { :method => :post }
  Mephisto::Routing.connect_with map
end

Nota: Los urls en las rutas son localizados asi que es necesario que los traduzcas en la pestaña ‘Traducciones’. Esto depende en código del siguiente plugin que ha sido incorporado a este plugin.

Bichos/limitaciones conocidos

Actualmente, si el modo multisite esta activado, tienes que utilizar “SupportedLocales.define_key()” para definir los locales soportados para cada site, aunque todos los sites utilizarán los mismos locales. i.e. Tendrás que duplicar las entradas:

1
2
SupportedLocales.define_by_key('saimonmoore.net',['es-ES','nl-NL'],'en-GB')
SupportedLocales.define_by_key('webtypes.com',['es-ES','nl-NL'],'en-GB')
Intentaré arreglar esto lo antes posible para que solo sea necesario definir:

SupportedLocales.define(['es-ES','nl-NL'],'en-GB') 

y todos los sites soportarán los mismos locales.

Planes para el futuro

  • Se ha hablado mucho últimamente el el foro de mephisto sobre utilizar una librería alternativa de localización para localizar mephisto lo cual se incorporara a trunk. Ya he expresado mis opiniones sobre este tema así que no lo repitiré aquí, solo diré que si eso sucede continuare de soportar y mantener el plugin mephisto_i18n. Desde luego, sera una putada y tendré que haqear bastante pero estoy entregado a esto (ya que lo utlizco para las aplicaciones de mis clientes).
  • “Actualizar para soportar la próxima versión de globalize”. Nosotros estamos haciendo muchos cambios para lo próxima versión de globalize y esto sera disponible dento de poco. Cuando esto sucede, actualizare este plugin para compatibilidad con el nuevo globalize.
  • “Soporte para Edge-Rails”. He decidido solo mantener soporte para el uso del plugin con Rails 1.2.x por ahora. Cuando la próximo gran entrega de rails ocurre, actualizare el plugin. Dicho eso, si alguien quiere proporcionar patches para soporte de edge-rails son mas que bienvenidos. (Los patches son bienvenidos generalmente :)
  • “Soporte para permitir tus lectores traducir tu contenido para ti”. Estoy trabajando en un plugin aparte para permitir esta funcionalidad. Obviamente dependerá de este pero prefiero mantenerlo aparte por ahora. O lo tendría que juntar con este mismo?
  • “Soporte para publicar/ocultar contenido sin traducciones”. Actualmente, contenido sin traducción es visible y mostrado en el idioma base. Con esta funcionalidad, podrás ocultar/mostrar contenido selectivamente que no tiene traducción para todo un locale o individualmente. Ademas, estoy experimentado con la idea de proporcionar “place holders” para contenido sin traducción.

Sitios web utilizando el plugin mephisto_i18n

Nosotros tenemos 4 sitios web en producción utilizando este plugin:

Otros sites

  • onlinevortex.com & bitmapped.onlinevortex.com. (Este site de Carlos Mendoza está ejecutando una versión customizada del plugin que permite nombrar dominios específicos para indicar el idioma en vez de utilizar el prefijo del código del idioma.)

Si tu tienes un sitio web que lo utiliza, por favor avisa me para que lo pueda añadir a la lists. Ademas, si lo has configurado con otros servidores de web/aplicaciones, me gustaría saberlo. Deja tu comentario aquí.

Prefieres utilizar un parámetro del path para definir el locale activo? Lea la 4ª Parte

Saimon Moore (también en Griego, Ingles y Catalán :)

Deja tu comentario