Tengo un sitio multilingüe con Drupal 7 que utiliza subdominios como en.example.com para detectar el idioma. Todo funciona como se esperaba, pero tengo una versión móvil del sitio web que quiero que sea accesible por dominios como en.m.example.com, etc. ¿Cómo hago esto? Puedo configurar admin/config/regional/language
solo un dominio por idioma, pero tendría que configurar dos para que funcione, como:
for English:
en.example.com & en.m.example.com
for German:
de.example.com & de.m.example.com
etc.
(Me gustaría tener la misma estructura que Wikipedia). El problema es que, al usar subdominios para la selección de idioma, Drupal crea todos los enlaces internos como patrones absolutos. Por ejemplo, se creará un enlace de menú como:
<li class="menu-773"><a href="http://en.example.com/test" >test</a></li>
and not as
<li class="menu-773"><a href="/test" >test</a></li>
Por lo tanto, podría crear un alias de dominio con Apache, para enviar solicitudes de en.m.example.com a en.example.com, pero todos los enlaces internos devolverían al usuario de la versión móvil a la normalidad. ¿Como puedó resolver esté problema?
Respuestas:
Una vez que haya configurado Drupal para servir diferentes idiomas en diferentes dominios, debe indicarle a su servidor web que envíe solicitudes de múltiples dominios al mismo sitio de Drupal.
En Apache, deberá editar el
.conf (httpd.conf)
archivo y agregar alias a todos los dominios diferentes. Por ejemplo:Además de esto, también deberá apuntar el servidor de nombres de dominio (DNS) a su servidor para todos los nombres de dominio en diferentes idiomas.
fuente
La respuesta es: el uso de múltiples dominios para un idioma no es posible con Drupal 7 y, hasta donde yo sé, no hay ningún módulo que agregue esa funcionalidad.
Pero para lograr este objetivo de todos modos, hay una solución alternativa: como se mencionó anteriormente, el problema con los dominios del lenguaje es que todas las rutas internas que tienen un alias de ruta específico del idioma y se crean con la función principal de Drupal url () se crean como rutas absolutas. El responsable de ese comportamiento es la función :
No establezca un dominio de idioma para ese idioma predeterminado. Si no hace eso, Drupal no creará parches absolutos para el idioma predeterminado si, por ejemplo, usa el dominio xyz.example.com , donde xyz.example.com no está configurado como dominio para ningún idioma, Drupal creará todo es relativo y, por lo tanto, al hacer clic en cualquier enlace interno se mantendrá el subdominio. Pero no puede usar ese método, si desea tener subdominios sensibles al lenguaje como se describe anteriormente:
para inglés: en.example.com y en.m.example.com
para alemán: de.example.com y de.m.example.com etc.
Entonces, el segundo método sería alterar el idioma actual de todos los tipos con la función: hook_language_init . Utilizo el siguiente código para que funcione el ejemplo anterior:
:
fuente
custom_api
y el ganchohook_language_init()
. Juntos lo escustom_api_language_init()
. Puede ser confuso, así que edité el ejemplo para aclarar ese punto. Tienes razón, usar 'hook_language_switch_links_alter ()' puede ser la mejor manera. Pero como parece que casi nadie está interesado en este problema, creo que no valdría la pena volver a escribir este ejemplo.