2012-05-04 28 views
5

Ayer tuvimos una presentación de Play 2.0 en nuestro local JUG pero no pudimos determinar si es posible tener URL localizadas (para fines de SEO).URL localizadas en Play 2.0?

Por ejemplo/help,/hilfe, etc. deben apuntar al mismo controlador pero la plantilla debe mostrarse con contenido de idioma diferente.

¿Hay alguna manera de hacer esto en Play 2.0?

+0

Interesante pregunta. –

Respuesta

3

me gusta su pregunta, porque era creativa, al menos para mí :) Compruebe este enfoque funciona para mí:

conf/routes:

GET  /help  controllers.Application.helpIndex(lang = "en") 
GET  /hilfe controllers.Application.helpIndex(lang = "de") 

GET  /help/:id  controllers.Application.helpTopic(lang = "en", id: Long) 
GET  /hilfe/:id controllers.Application.helpTopic(lang = "de", id: Long) 

controllers/Application.java:

public static Result helpIndex(String lang) { 
    return ok("Display help's index in " + lang.toUpperCase()); 
} 

public static Result helpTopic(String lang, Long id) { 
    return ok("Display details of help topic no " + id + " in " + lang.toUpperCase()); 
} 

views/someView.scala.html:

<a href="@routes.Application.helpIndex("en")">Help index</a><br/> 
<a href="@routes.Application.helpIndex("de")">Hilfe index</a><br/> 

<a href="@routes.Application.helpTopic("en", 12)">Help topic no 12</a><br/> 
<a href="@routes.Application.helpTopic("de", 12)">Hilfe topic no 12</a> 
0

era posible de Juego 1.2.x, no en 2.x por lo que yo sé. Quiero decir, no es posible sin duplicar las asignaciones en su archivo, agregando uno para EN, uno para DE, etc.

Una alternativa más simple para SEO puede ser "falsificar" las URL en su archivo Sitemaps.

Así que el archivo de rutas tiene

GET /action/:param/:seo-string Controller.methodAction(param) 

por lo seo-string serán ignorados en algún proceso y generar varios enlaces en el archivo de Sitemaps:

/action/1/english-text 
/action/1/german-text 

Esto establecería los motores de búsqueda. Para los usuarios, para que vean la URL en el idioma correcto, puede cambiar la URL con el historial de HTML 5.

Es un trabajo extra, pero si de verdad quieres ...

1

(Este es el enfoque diferente que en previous answer, por lo tanto, añadido como separados uno)

También puede crear algún tipo de mapping table en el PP donde se puede almacenar rutas completas a los registros con diferentes parametros:

urlpath    record_id lang 
/help/some-topic  12   en 
/hilfe/ein-topic  12   de 

que en conf/routes archivo es necesario utilizar la regla que le permite utilizar Dynamic parts spanning several / (ver routing doc), es decir:

GET /:topic controller.Application.customDbRouter(topic:String) 

También se pueden mezclar ambos - mechanismus enrutamiento de serie con uno personalizado colocando por encima de la regla al final de su archivo conf/routes si hay una regla 'estático' estará disponible, entonces se tratará de encontrar en la tabla de asignación o devolverá notFound() Resultado.