Tôi đang làm việc trên một dự án đa ngôn ngữ với Zend Framework (tiếng Đức và tiếng Anh), nơi tôi có một biểu mẫu nhỏ để đặt hàng một sản phẩm. Người dùng sẽ có thể:Thực tiễn tốt nhất để xử lý ngôn ngữ bằng các công cụ chuyển tiền và ngôn ngữ
- đổi tiền tệ ưa thích của mình cho giá sản phẩm
- Thay đổi ngôn ngữ ưa thích của mình cho toàn bộ trang web
Tại thời điểm này tôi sử dụng Zend_Locale :: findLocale() để lấy ngôn ngữ của người dùng. Với cài đặt trình duyệt của tôi, tôi nhận được 'de_CH' và hoạt động tốt. Nhưng có một số vấn đề càng sớm càng:
- Người dùng đã cấu hình trình duyệt của mình để chỉ cho tôi mã ngôn ngữ ('de' thay vì 'de_CH')
- Người dùng thích một ngôn ngữ mà không được hỗ trợ bởi trang web của tôi
- người dùng là từ một đất nước mà họ nhận được một đồng tiền mà không được hỗ trợ bởi mẫu đơn đặt hàng sản phẩm của tôi
Chỉ cần mã ngôn ngữ mã ngôn ngữ là đủ để xử lý Zend_Translate, b ut Zend_Currency cần thêm thông tin. Tôi nghĩ rằng không có giải pháp nào để có được ngôn ngữ đầy đủ với mã quốc gia từ mọi người dùng có thể. Câu hỏi của tôi là: làm thế nào để bạn xử lý các tình huống này? Bạn có kiểm tra trong bootstrap của bạn _initLocale() nếu một mã quốc gia bị thiếu và sử dụng một mã quốc gia mặc định? Có bất kỳ phương pháp Zend Framework nào để làm điều đó không?
Ngôn ngữ không được hỗ trợ Nếu ngôn ngữ người dùng là 'fr', tôi muốn sử dụng ngôn ngữ mặc định vì trang web của chúng tôi không hỗ trợ tiếng Pháp. Có một khả năng tốt hơn để thêm một mảng danh sách trắng trong bootstrap? Ví dụ một phương thức từ Zend_Translate?
Đơn vị tiền tệ không được hỗ trợ Điều gì sẽ xảy ra nếu ngôn ngữ của người dùng được hỗ trợ chứ không phải tiền tệ của người đó? Tôi có nên thay đổi ngôn ngữ trong bootstrap hay tôi nên tạo một bản sao của miền địa phương và thay đổi nó cho Zend_Currency?
Vấn đề chính Tôi nghĩ vấn đề chính của tôi là tôi không chắc chắn cách xử lý tất cả các vấn đề địa phương khác nhau này. Cách tiếp cận ưa thích của tôi là xác minh miền địa phương được đặt trong bootstrap's _initLocale(), vì vậy tôi có thể chắc chắn rằng tôi có thể hỗ trợ ngôn ngữ và tiền tệ của nó.
Cảm ơn lời khuyên của bạn.
Trân trọng, Nico
Editing 1 Tôi đã thực hiện bản thân mình một vài suy nghĩ thêm về một cách để xử lý những vấn đề này. Bạn nghĩ gì về phương pháp này?
Zend_Locale()
: lọc tất cả ngôn ngữ ngắn (không có mã quốc gia) và sử dụng danh sách trắng với ngôn ngữ mà ứng dụng của bạn hỗ trợ (chỉ mã ngôn ngữ). Nếu không có kết quả phù hợp, hãy sử dụng ứng dụng mặc định của bạn.Zend_Translate
: bắt đầu bằng mã ngôn ngữ từ ngôn ngữ.Nhưng nếu người dùng thay đổi ngôn ngữ ưa thích, hãy để lại ngôn ngữ như vậy (có lẽ không có ngôn ngữ phù hợp dựa trên mã ngôn ngữ mới và mã quốc gia cũ) và chỉ thay đổi mã ngôn ngữ trongZend_Translate
.Zend_Currency
: Sử dụng ngôn ngữ làm mặc định. Nếu người dùng thay đổi đơn vị tiền tệ ưa thích, chỉ cần thay đổi đơn vị tiền tệ chứ không thay đổi ngôn ngữ. Vì vậy, định dạng sẽ vẫn dựa trên ngôn ngữ cũ vì thay đổi đơn vị tiền tệ không có nghĩa là người dùng cũng muốn thay đổi ngôn ngữ của mình.
Cách tiếp cận này có thể chấp nhận được không? Có một vấn đề với bước 1 nếu trình duyệt miền địa phương được thiết lập như thế này:
- de
- en_US
Có lẽ ứng dụng không hỗ trợ tiếng Đức, nhưng vì nó là một miền địa phương ngắn, ứng dụng sẽ sử dụng en_US để thay thế. Nhưng tôi không biết giải pháp nào sẽ khắc phục vấn đề này, bởi vì tôi không thể 'nâng cấp' một ngôn ngữ ngắn thành một miền địa phương đầy đủ.
Tôi không chắc chắn nếu điều này sẽ giúp, nhưng là một người sử dụng tôi ghét cay ghét đắng các ứng dụng và các trang web mà cố gắng để tìm ra ngôn ngữ của tôi cho tôi. Tôi nghĩ tốt hơn hết là nên có một nút ngôn ngữ hoặc thả xuống trên trang web của bạn. Lợi ích cho bạn là bạn không phải lo lắng về việc phát hiện các kết hợp ngôn ngữ kỳ lạ. – Matt
+1 về đề xuất của Matt. Tôi bối rối là tại sao bạn muốn hỗ trợ mọi ngôn ngữ và tiền tệ. Bạn có thể sẽ dịch trang web của mình chỉ còn tối đa 5 đến 10 ngôn ngữ. Vì vậy, cố gắng để 'phát hiện' một miền địa phương và làm bất cứ điều gì kỳ diệu là cần thiết để tìm đúng ngôn ngữ có thể là không cần thiết. Điều gì về những người đến từ Amsterdam, những người thích tiếng Anh hoặc tiếng Pháp, nhưng trang web của bạn phát hiện họ sẽ hiểu tiếng Hà Lan nhiều khả năng nhất? Tôi bỏ phiếu cho một bộ chọn ngôn ngữ/tiền tệ. HÔN. –
OK, nhưng để có thể tạo ra ngôn ngữ đầy đủ, người dùng cũng phải chọn quốc gia của mình. Hoặc người nào khác tôi sẽ sản xuất tiền tệ được chọn một cách sai lầm (12.000 EUR - thay vì 12'000 EUR chẳng hạn). Nhưng có, có lẽ K.I.S.S. là đường bên phải ở đây ;-). Cảm ơn bạn đã gợi ý. – Nico