Làm cách nào để tôi có được ngôn ngữ ứng dụng trong Laravel?
Mặc dù Laravel rất phù hợp với nhiều loại ứng dụng, nhưng nó là một framework có mục đích chung. Điều này có nghĩa là chúng ta có thể cần xây dựng các lớp của riêng mình trên Laravel để phù hợp nhất với các ứng dụng web tùy chỉnh của chúng ta. Đối với quốc tế hóa (i18n), nó cung cấp một số trợ giúp ngay lập tức. Tuy nhiên, chúng tôi muốn cung cấp cho bạn một số mẹo và thủ thuật Laravel i18n bổ sung Show
Laravel PHP framework không cần giới thiệu. Nó đã vươn lên dẫn đầu trong gói PHP MVC và vì lý do chính đáng. Laravel là một trong những framework được thiết kế tốt nhất hiện có. Nó đơn giản, nhiều lớp và được ghi chép đầy đủ. Laravel chỉ là một niềm vui để sử dụng Tôi giả định rằng bạn đã biết kiến thức cơ bản về Laravel và đã đọc tài liệu về bản địa hóa của nó. Do đó, chúng tôi có thể chuyển sang một số thông tin chi tiết sẽ giúp ích cho bạn với ứng dụng Laravel được bản địa hóa của bạn
Đặt đất. Thư viện ngôn ngữ đơn giảnLaravel cung cấp cho chúng ta một số cấu hình ngôn ngữ trong if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }3 và các phương thức if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }4 và if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }5 của nó. Những điều này tốt cho các ứng dụng đơn giản, nhưng khi ứng dụng của chúng tôi phát triển qua một vài trang, chúng tôi có thể thấy mình lặp lại mã nếu chúng tôi không đưa một số kiến trúc quốc tế hóa cơ bản vào vị trí Mở rộng cấu hình ngôn ngữ cơ bảnNgay lập tức, Laravel nhận biết ngôn ngữ, cung cấp cho chúng tôi các tùy chọn cấu hình if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }6 và if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }7. Chúng tôi có thể thêm tùy chọn if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }8 để cung cấp cho chúng tôi một nguồn thông tin chính xác duy nhất cho ngôn ngữ mà ứng dụng của chúng tôi xử lý Của chúng ta if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }3 khi đó sẽ trông như thế này (đoạn trích) 'locale' => 'en', 'fallback_locale' => 'en', /* |-------------------------------------------------------------------------- | Supported Application Locales |-------------------------------------------------------------------------- | | Our supported locales will have available frontend and model | translations. | */ 'supported_locales' => [ 'en' => [ 'name' => 'English', 'dir' => 'ltr', ], 'ar' => [ 'name' => 'Arabic', 'dir' => 'rtl' ], ], Thiết lập này sẽ ghép nối với một lớp 0 mà chúng tôi sẽ tạo và chứa mọi thứ chúng tôi cần để hiển thị một ngôn ngữ trên giao diện người dùng. Mã ngôn ngữ của nó, tên của nó trong ngôn ngữ mặc định và hướng của nó để giải thích cho các ngôn ngữ từ phải sang tráiTạo một lớp bản địaBây giờ chúng ta có thể viết API bản địa hóa hấp dẫn, mạnh mẽ hơn bằng cách sử dụng cấu hình này. Một lớp học 0 cơ bản có thể giúp chúng ta bắt đầuTrong 2if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }1 Lớp 0 của chúng tôi sử dụng một phiên bản của ứng dụng Laravel cơ bản để hiển thị một thư viện các phương thức trợ giúp giúp làm việc với các ngôn ngữ dễ dàng hơn nhiều. Nó cũng có thể giữ cho mã của chúng tôi đẹp và KHÔ (Không lặp lại chính mình) bằng cách trở thành API truy cập của chúng tôi để xử lý các ngôn ngữ
Sử dụng nhà cung cấp dịch vụ để tái sử dụng và rõ ràngHiện tại, chúng tôi phải khởi tạo một phiên bản mới của lớp 0 và thêm phiên bản ứng dụng của chúng tôi mỗi khi chúng tôi cần một trong các phương thức của nóif ((new App\Locale(app())->isSupported('es')) { // Spanish is supported } Đây có thể là một vấn đề khó khăn và chúng ta có thể giảm bớt khó khăn này một chút bằng cách sử dụng Larvel Nhà cung cấp dịch vụ. Đây chỉ là một cách để đăng ký chức năng với Laravel để tái sử dụng và đảo ngược quyền kiểm soát (IoC). Họ có thể làm cho mã của chúng tôi dễ kiểm tra hơn và dễ suy luận hơn Để tạo trình cung cấp, chúng ta có thể sử dụng công cụ dòng lệnh Artisan tích hợp sẵn ________số 8Điều này sẽ tạo ra lớp soạn sẵn tại 5Chúng ta có thể cập nhật phương thức 6 của lớp này để liên kết lớp 0 của chúng ta trong vùng chứa IoC của Laravel 5if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }0 Nhận một bản sao của lớp LocaleServiceProvider dưới dạng Gist Chúng tôi liên kết một singleton với tên lớp của chúng tôi để chúng tôi không xây dựng một thể hiện nhiều lần trong một yêu cầu. Chúng tôi cũng tạo một nguồn sự thật duy nhất để xây dựng lớp bằng cách cung cấp phiên bản ứng dụng của chúng tôi ở một nơi Bây giờ chúng tôi có thể đăng ký nhà cung cấp dịch vụ mới của chúng tôi Trong if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }3 (đoạn trích) if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }2 Giờ đây, Laravel sẽ liên kết singleton của chúng ta với tên của lớp trong mọi yêu cầu. Chúng ta có thể sử dụng liên kết này để truy cập lớp học của mình if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }3 Sử dụng Hàm trợ giúp toàn cầu hoặc Mặt tiền cho Mã sạchMặc dù điều này tốt hơn so với việc viết_______200, nhưng việc gọi bộ chứa IoC theo cách thủ công mỗi khi chúng tôi muốn làm việc với thư viện ngôn ngữ của mình là điều không lý tưởng. Chúng ta có thể làm cho cuộc sống của mình dễ dàng hơn bằng cách viết một hàm trợ giúp toàn cầu Đầu tiên, chúng tôi tạo if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }01. Trong đó, chúng ta có thể đặt chức năng đơn giản này if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }6 Tiếp theo, chúng tôi đăng ký tệp của mình để được tự động tải bằng cách cập nhật cấu hình Trình soạn thảo của chúng tôi if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }02 (đoạn trích) if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }8
Sau đó, chúng tôi có thể chạy if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }03 từ dòng lệnh để cung cấp chức năng mới cho mã của chúng tôi Và kìa if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }0 Sạch sẽ hơn nhiều, phải không? . Điều này có lợi thế là không gây ô nhiễm không gian tên toàn cầu. Tuy nhiên, việc lựa chọn sử dụng chức năng toàn cầu hoặc mặt tiền chủ yếu là vấn đề sở thích cá nhân Để sử dụng mặt tiền, chúng tôi viết một tệp nhỏ tại if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }04 if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }10 Bây giờ chúng ta có thể sử dụng thư viện của mình thông qua các cuộc gọi phương thức tĩnh if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }11
Lộ trìnhVới thư viện gọn gàng của chúng tôi, chúng tôi có thể đi sâu vào công việc quốc tế hóa của mình. Ứng dụng của chúng tôi cần một cách để xác định ngôn ngữ của người dùng hiện tại. Chúng tôi có thể thực hiện việc này thông qua các tiêu đề đã nhận, địa chỉ IP của người dùng hoặc URI hiện được yêu cầu Xác định ngôn ngữ từ URIChúng tôi sẽ tập trung vào phương pháp URI ở đây vì nó khá phổ biến và đơn giản nhất để thực hiện Giả sử chúng ta có một ứng dụng cửa hàng âm nhạc và chúng ta có các tuyến đường như if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }07 mà chúng ta muốn quốc tế hóa, thì chúng ta có thể thiết lập ngôn ngữ làm thông số trong các tuyến đường của mình Trong if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }08 (đoạn trích) if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }12 Bạn có thể nhận thấy rằng chúng tôi đang lặp lại khá nhiều ở đây và điều này có nghĩa là bộ điều khiển của chúng tôi sẽ phải xử lý cài đặt ngôn ngữ của chúng tôi. Một if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }09 nên giao dịch với các nghệ sĩ, không phải địa phương Sử dụng tiền tố định tuyến và nhóm để giữ mọi thứ KHÔChúng ta có thể sử dụng các nhóm tuyến đường để loại bỏ sự lặp lại này Trong if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }08 (đoạn trích) if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }13 Điều đó có vẻ tốt hơn rất nhiều, phải không?
Hãy cẩn thận với thứ tự tham số tuyến đườngTiếp tục ví dụ trên, nếu bạn viết phương thức if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }26 như thế này if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }14 bạn sẽ thấy rằng giá trị ngôn ngữ nằm trong tham số if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }27. Chúng ta có thể viết lại phương thức này để giải quyết vấn đề này if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }15 Sử dụng Middleware để phân tách mối quan tâm và hành vi tài liệuĐể thực sự đặt ngôn ngữ, chúng tôi cần thông báo cho ứng dụng của mình về mã ngôn ngữ mà chúng tôi tìm thấy trong URI. Cách đơn giản nhất để thực hiện việc này là sử dụng phần mềm trung gian Chúng ta có thể tạo một lớp phần mềm trung gian mới bằng Artisan trên dòng lệnh if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }16 Thao tác này sẽ tạo một bản soạn sẵn tại if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }28. Chúng tôi có thể cập nhật phương thức if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }29 của phần mềm trung gian mới để đặt ngôn ngữ if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }17 Chúng tôi chỉ lấy if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }30 từ if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }31, kiểm tra xem chúng tôi có hỗ trợ hay không và dự phòng cho một ngôn ngữ đã định cấu hình nếu chúng tôi không hỗ trợ. Trong mọi trường hợp, khi phần mềm trung gian này xử lý yêu cầu, ngôn ngữ của chúng tôi sẽ được đặt. Tuy nhiên, trước tiên, chúng ta cần đăng ký nó với Laravel Trong if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }32 (đoạn trích) if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }18 Chúng tôi đặt phần mềm trung gian của mình chạy ngay sau khi chúng tôi kiểm tra chế độ bảo trì. Tất nhiên, nếu trang chế độ bảo trì của bạn cần được bản địa hóa, bạn có thể di chuyển if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }33 phần mềm trung gian lên trên ngăn xếp Giờ đây, ngôn ngữ của chúng tôi sẽ được đặt theo từng yêu cầu của ứng dụng và chúng tôi có thể truy xuất ngôn ngữ đó bằng cách sử dụng if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }34. Hơn nữa, tồn tại một tệp và lớp chuyên dụng để ghi lại hành vi này để các nhà phát triển trong tương lai (bao gồm cả chúng tôi) có thể dễ dàng suy luận về cách ứng dụng của chúng tôi xác định địa phương của nó. Điều này tốt hơn là chôn mã đó trong tệp định tuyến Giao diện người dùngLaravel chứng minh khả năng bản địa hóa giao diện người dùng của nó khá tốt. Và với thư viện ngôn ngữ nhỏ của chúng tôi, chế độ xem Blade của chúng tôi có thể trông sạch sẽ Một chung if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }35 (đoạn trích) if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }19 Thẻ ở trên sẽ luôn có ngôn ngữ và hướng được hỗ trợ ('ltr' hoặc 'rtl'). Cái sau rất quan trọng đối với các ngôn ngữ viết từ phải sang trái như tiếng Ả Rập và tiếng Do Thái vì toàn bộ bố cục trang sẽ thay đổi đối với những ngôn ngữ đó. Sử dụng chuỗi dịch làm khóa cho mã giao diện người dùng tự nhiênCác tệp dịch mặc định mà Laravel sử dụng có thể làm cho chế độ xem ứng dụng của chúng tôi và quy trình quốc tế hóa/địa phương hóa của chúng tôi trở nên khá rắc rối if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }36 (đoạn trích) if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }0 Thay vào đó, chúng tôi có thể sử dụng các tệp dịch if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }37 JSON để làm cho chế độ xem của chúng tôi trông tự nhiên hơn nhiều if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }38 (đoạn trích) if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }1 Mặc dù phương pháp này có thể hơi dài dòng, nhưng nó làm cho quan điểm của chúng ta dễ đọc hơn nhiều. Nó cũng giúp chúng tôi không phải viết bản dịch cho ngôn ngữ mặc định của chúng tôi. Trong ví dụ trên, chúng tôi sẽ không có tệp if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }39. Nếu ứng dụng của chúng tôi chỉ hỗ trợ tiếng Ả Rập và tiếng Anh, chúng tôi chỉ có thể có một tệp dịch if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }60 (đoạn trích) if ((new App\Locale(app())->isSupported('es')) { // Spanish is supported }2 Bạn có thể trộn và khớp các tệp dịch PHP và JSON dựa trên mảng Kết thúcViết mã để bản địa hóa ứng dụng của bạn là một nhiệm vụ, nhưng làm việc với bản dịch lại là một câu chuyện hoàn toàn khác. Nhiều bản dịch cho nhiều ngôn ngữ có thể nhanh chóng khiến bạn choáng ngợp, dẫn đến sự nhầm lẫn của người dùng. May mắn thay, Phrase có thể giúp cuộc sống của bạn với tư cách là nhà phát triển dễ dàng hơn. Vui lòng tìm hiểu thêm về Cụm từ, tham khảo Bộ bản địa hóa cụm từ Tôi hy vọng những lời khuyên này đã giúp bạn trong hành trình của mình với Laravel i18n. Đây là một chủ đề lớn và chúng ta có thể đi sâu vào việc bản địa hóa các lớp khác của ứng dụng Laravel, chẳng hạn như lớp mô hình và lớp dữ liệu. Tôi hy vọng chúng ta có thể làm điều đó trong một bài báo sắp tới. Giữ nguyên. . ) Ngôn ngữ trong laravel là gì?Các tính năng bản địa hóa của Laravel cung cấp một cách thuận tiện để truy xuất các chuỗi bằng nhiều ngôn ngữ khác nhau, cho phép bạn dễ dàng hỗ trợ nhiều ngôn ngữ trong ứng dụng của mình . Laravel cung cấp hai cách để quản lý chuỗi dịch.
Làm cách nào để sử dụng bản địa hóa trong laravel?Tính năng bản địa hóa của Laravel hỗ trợ các ngôn ngữ khác nhau được sử dụng trong ứng dụng. Bạn cần lưu trữ tất cả các chuỗi ngôn ngữ khác nhau trong một tệp và các tệp này được lưu trữ tại thư mục resource/views. Bạn nên tạo một thư mục riêng cho từng ngôn ngữ được hỗ trợ
Làm cách nào để thay đổi nội địa hóa trong laravel?Laravel cung cấp cho bạn tùy chọn thay đổi ngôn ngữ cho một Yêu cầu http duy nhất bằng cách thực thi phương thức setLocale trên Ứng dụng Mặt tiền ứng dụng. setLocale($locale); , Nhưng điều gì sẽ xảy ra nếu một khi ngôn ngữ được thay đổi, bạn không muốn lo lắng về việc đặt Ngôn ngữ và điều này sẽ được xử lý bằng logic mã tự động.
Bản địa hóa trong PHP là gì?Bản địa hóa trong công nghệ phần mềm là quá trình điều chỉnh nội dung của hệ thống cho một ngôn ngữ cụ thể để đối tượng mục tiêu ở ngôn ngữ đó có thể hiểu được. It is not just about changing content from one language to another. |