2012-04-10 26 views
6

Tôi đang xây dựng một ứng dụng web đa ngôn ngữ bằng cách sử dụng mẫu MVC làm vị trí bắt đầu. Ứng dụng này có một số biểu mẫu mà người dùng sẽ tương tác và nhiều biểu mẫu trong số này sẽ có các trường tra cứu từ bảng cơ sở dữ liệu, ví dụ như 'Tỉnh'.Bản dịch ngôn ngữ phù hợp với mẫu MVC ở đâu?

Nếu tôi cần các tùy chọn trong các danh sách này sẽ được hiển thị bằng ngôn ngữ của người dùng trên màn hình, tôi có thể thấy một vài cách để làm điều này:

  1. Trong mô hình. Khi truy vấn mô hình, tôi có thể cung cấp ngôn ngữ mà tôi muốn kết quả được trả về. Điều này sẽ cho phép sử dụng bản dịch ở mọi nơi mà dữ liệu từ mô hình được hiển thị mà không có thay đổi. Tuy nhiên, điều này cũng có nghĩa là mô hình tỉnh trong ví dụ của tôi (cộng với tất cả các mô hình ứng dụng khác) bây giờ cần biết cách thực hiện các bản dịch ngôn ngữ.
  2. Trong bộ điều khiển. Tôi có thể truy vấn mô hình trong hành động của trình điều khiển như bình thường và sau đó tạo đối tượng 'Translator' để tôi có thể chuyển kết quả vào trước khi hoàn thành tác vụ. Điều này có nghĩa là mỗi hành động điều khiển có khả năng sẽ nhân bản cùng một mã dịch, vi phạm nguyên tắc DRY.
  3. Trong chế độ xem. Do trình bày của ứng dụng thường được dự kiến ​​tồn tại trong các khung nhìn, và ngôn ngữ của người dùng không ảnh hưởng đến logic nghiệp vụ của hệ thống, một lập luận có thể được thực hiện rằng các bản dịch ngôn ngữ thuộc về đây. Đặc biệt xem xét rằng một trang cũng có thể chứa nội dung tĩnh cần được dịch. Nhược điểm của điều này là nó sẽ làm phức tạp các quan điểm một chút, đặc biệt là cho các nhà thiết kế front-end, những người sẽ phải làm việc xung quanh các mã dịch mới.

Có một phương pháp hay nhất được chấp nhận cho các bản dịch văn bản thuộc mẫu MCV cho các ứng dụng web không? Liệu sự thay đổi này có xảy ra nếu tôi đang tải các tùy chọn danh sách lựa chọn thông qua một cuộc gọi AJAX thay vì tại thời gian tải trang?

Cảm ơn sự giúp đỡ!

Trả lời

1

Nếu bạn cần dịch một phần giao diện người dùng của mình, khi đó tôi sẽ tạo phương thức trợ giúp có thể đọc tệp tài nguyên và xuất chuỗi đã dịch cho tài nguyên đó. Ví dụ.

@Translate("NewUserHeading") 

Vì vậy, liên quan đến giao diện người dùng, bạn nên xử lý điều này trong giao diện người dùng.

Nếu dữ liệu bạn định dịch tại một thời điểm nào đó có thể được hiển thị trong ứng dụng Flash hoặc ứng dụng dành cho thiết bị di động thì nó sẽ được dịch bởi máy chủ và không cần phải làm gì với ứng dụng MVC của bạn.

0

Thành thật mà nói, mọi tương tác với cơ sở dữ liệu phải được xử lý trong mô hình và đó là điều duy nhất được xử lý trong mô hình. Giải thích/tổ chức dữ liệu đó phải được xử lý trong bộ điều khiển. Tôi đoán nhiều thông tin hơn sẽ cần đến khi bản dịch này đến từ đâu và cách thức hoạt động để thực sự đưa ra một câu trả lời chắc chắn.

+0

Tôi cho rằng điều này sẽ mở ra cuộc tranh luận giữa các mô hình chất béo/bộ điều khiển gầy và bộ điều khiển mô hình/chất béo gầy. Tôi đúng rằng bạn sẽ có logic kinh doanh của bạn trong bộ điều khiển? –

+1

@WallyLawless Không bao giờ nghe bất cứ ai tranh luận về bộ điều khiển chất béo. Bộ điều khiển là một lớp mỏng dịch từ xem sang mô hình và mô hình để xem. Bộ điều khiển thường không được tái sử dụng, chúng chỉ là keo dán, không điền mã của bạn bằng keo. –

5

Nơi tốt nhất để xử lý nó ở chế độ xem. Câu hỏi của bạn chỉ tham chiếu dữ liệu động từ cơ sở dữ liệu, nhưng bạn cũng phải xử lý thông tin tĩnh trong các khung nhìn của bạn. Tốt nhất để xử lý cả hai người ở cùng một nơi. Một thực tế phổ biến trong MVC để xử lý nhiều ngôn ngữ là chuỗi tài nguyên, các chế độ xem riêng biệt cho mỗi ngôn ngữ hoặc kết hợp cả hai. Đối với thông tin từ các chuỗi tài nguyên cơ sở dữ liệu sẽ hoạt động tốt. Bạn sẽ lưu trữ mã thông báo trong cơ sở dữ liệu cho các tùy chọn trong danh sách (mã thông báo đó có thể là bản dịch tiếng Anh) và chế độ xem sẽ nhận được bản dịch thích hợp từ tài nguyên cho quốc gia/miền địa phương được chỉ định. Có một giải thích chi tiết về cách tiếp cận này trong this blog post.

0

Chế độ xem sẽ chỉ hiển thị chuỗi từ tệp tài nguyên. Bao gồm tệp tài nguyên chính xác cho ngôn ngữ nên làm điều đó. Trong các ứng dụng Web, thường là một tệp JS ngôn ngữ đơn định nghĩa các chuỗi giao diện người dùng cho mỗi miền địa phương, ví dụ: strings.en-us.js, strings.pt-br.js, v.v.

Một số chuỗi đến từ máy chủ động, bộ điều khiển không cần biết về nó, mô hình chỉ cần lấy các chuỗi được bản địa hóa và trả về là một phần của yêu cầu dữ liệu.

Vì vậy, chế độ xem hoặc trong chế độ xem (nếu tĩnh) hoặc trong mô hình, (nếu nó là động). Bộ điều khiển chỉ cần dịch dữ liệu từ chế độ xem sang mô hình và từ mô hình sang chế độ xem

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