Eu tenho um site multilíngue com o Drupal 7 usando subdomínios como en.example.com para detectar o idioma. Tudo funciona como o esperado, mas eu tenho uma versão móvel do site, que quero estar acessível por domínios como en.m.example.com etc. Como faço para isso? Posso definir admin/config/regional/language
apenas um domínio por idioma, mas precisaria definir dois para que isso funcionasse, como:
for English:
en.example.com & en.m.example.com
for German:
de.example.com & de.m.example.com
etc.
(Gostaria de ter a mesma estrutura da Wikipedia.) O problema é que, usando subdomínios para seleção de idioma, o Drupal cria todos os links internos como caminhos absolutos. Por exemplo, um link de menu será criado 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>
Assim, eu poderia criar um alias de domínio com o Apache, para enviar solicitações de en.m.example.com para en.example.com, mas todos os links internos trariam o usuário de volta da versão móvel para o normal. Como posso resolver este problema?
Respostas:
Depois de configurar o Drupal para servir idiomas diferentes em domínios diferentes, você precisa instruir seu servidor da Web para enviar solicitações de vários domínios ao mesmo site do Drupal.
No Apache, você precisará editar o
.conf (httpd.conf)
arquivo e adicionar aliases a todos os diferentes domínios. Por exemplo:Além disso, você também precisará apontar o servidor de nomes de domínio (DNS) para o servidor para todos os nomes de domínio em diferentes idiomas.
fonte
A resposta é: o uso de vários domínios para um idioma não é possível com o Drupal 7 e, até onde eu sei, não existe módulo que adicione essa funcionalidade.
Mas, para atingir esse objetivo de qualquer maneira, existe uma solução alternativa: como mencionado acima, o problema com domínios de idioma é que todos os caminhos internos que possuem um alias de caminho específico ao idioma e são criados com a função principal do Drupal url () são criados como caminhos absolutos. Responsável por esse comportamento é a função :
Não defina um domínio de idioma para esse idioma padrão. Se você não fizer isso, o Drupal não criará caminhos absolutos para o idioma padrão se - por exemplo - usar o domínio xyz.example.com , em que xyz.example.com não estiver definido como domínio para nenhum idioma, o Drupal criará todos os URLs relativos e, portanto, clicar em qualquer link interno manterá o subdomínio. Mas você não pode usar esse método se quiser ter subdomínios sensíveis ao idioma, conforme descrito acima:
para inglês: pt.exemplo.com e pt.mexemplo.com
para alemão: de.example.com e de.m.example.com etc.
Portanto, o segundo método seria alterar o idioma atual de todos os tipos com a função: hook_language_init . Eu uso o código a seguir, para obter o exemplo acima funcionando:
:
fonte
custom_api
e o ganchohook_language_init()
. Juntos é issocustom_api_language_init()
. Pode ser que isso seja confuso, então editei o exemplo para deixar esse ponto claro. Você está certo, usar ´hook_language_switch_links_alter () ´ pode ser a melhor maneira. Mas, como parece que quase ninguém está interessado nesse problema, acho que pode não valer a pena reescrever este exemplo.