2012-05-04 28 views
5

Hôm qua, chúng tôi đã có bản trình bày Play 2.0 tại địa phương JUG nhưng chúng tôi không thể tìm ra liệu có thể có URL được bản địa hóa (cho mục đích SEO) hay không.URL được bản địa hóa trong Play 2.0?

Ví dụ/trợ giúp,/hilfe v.v. nên trỏ đến cùng một bộ điều khiển nhưng mẫu phải được hiển thị với nội dung ngôn ngữ khác.

Có cách nào để thực hiện việc này trong Play 2.0 không?

+0

Câu hỏi thú vị. –

Trả lời

3

Tôi thích câu hỏi của bạn, bởi vì nó là sáng tạo ít nhất đối với tôi :) Kiểm tra phương pháp này nó làm việc cho tôi:

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

Có thể trong Play 1.2.x, không phải bằng 2.x theo như tôi biết. Ý tôi là, không thể sao chép các ánh xạ trong tệp của bạn, thêm một cho EN, một cho DE, v.v.

Cách thay thế đơn giản hơn cho SEO có thể là "giả mạo" trong tệp Sơ đồ trang web của bạn.

Vì vậy, tập tin đường của bạn có

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

nên seo-string sẽ bị bỏ qua trong chế biến, và bạn có thể tạo một số liên kết trong hồ sơ Sitemaps của bạn:

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

Điều này sẽ thiết lập các công cụ tìm kiếm. Đối với người dùng, vì vậy họ thấy url bằng ngôn ngữ phù hợp, bạn có thể thay đổi URL bằng lịch sử HTML 5.

Đó là việc làm thêm, nhưng nếu bạn thực sự muốn nó ...

1

(Đây là cách tiếp cận khác so với previous answer, do đó thêm vào như là một riêng biệt)

Bạn cũng có thể tạo ra một số loại mapping table trong DB nơi bạn có thể lưu trữ đường dẫn đầy đủ đến hồ sơ với params khác nhau:

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

hơn trong conf/routes tập tin bạn cần phải sử dụng quy tắc cho phép bạn sử dụng Dynamic parts spanning several / (xem routing doc) ví dụ:

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

Bạn cũng có thể kết hợp cả hai - tiêu chuẩn mechanismus định tuyến với tùy chỉnh một bằng cách đặt trên nguyên tắc vào cuối tập tin conf/routes của bạn nếu không có quy tắc 'tĩnh' sẽ có sẵn, sau đó nó sẽ cố gắng tìm nó trong bảng ánh xạ hoặc sẽ trả về kết quả notFound().

1

Bạn sử dụng từ GlobalSettings.onHandlerNotFound() và kiểm tra xem phiên bản đã dịch của url chưa. Sau đó, bạn có thể thực hiện chuyển hướng. Tuy nhiên, điều này kết thúc bằng url bằng ngôn ngữ mặc định.

Trình dọn dẹp khác sẽ sử dụng số GlobalSettings.onRouteRequest nơi bạn có thể triển khai logic của riêng mình để có được trình xử lý.

Ngoài ra, bạn có thể tạo bộ định tuyến của riêng mình. Đã có một cuộc thảo luận về nó tại google-groups với một số scala solution.

Các vấn đề liên quan