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

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ại thời điểm viết bài, tôi đang sử dụng PHP 7. 3, ấu trùng 5. 7 và Mysql 5. 7

Đặt đất. Thư viện ngôn ngữ đơn giản

Laravel 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ản

Ngay 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 

php artisan make:provider LocaleServiceProvider
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ái

Tạo một lớp bản địa

Bâ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 

php artisan make:provider LocaleServiceProvider
0 cơ bản có thể giúp chúng ta bắt đầu

Trong 

php artisan make:provider LocaleServiceProvider
2

if [[new App\Locale[app[]]->isSupported['es']] {

    // Spanish is supported

}
1

Lớp

php artisan make:provider LocaleServiceProvider
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ữ

Nhận một bản sao của lớp Locale dưới dạng Gist

Sử dụng nhà cung cấp dịch vụ để tái sử dụng và rõ ràng

Hiệ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

php artisan make:provider LocaleServiceProvider
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 

php artisan make:provider LocaleServiceProvider
5

Chúng ta có thể cập nhật phương thức 

php artisan make:provider LocaleServiceProvider
6 của lớp này để liên kết lớp 
php artisan make:provider LocaleServiceProvider
0 của chúng ta trong vùng chứa IoC của Laravel

php artisan make:provider LocaleServiceProvider
5

if [[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ạch

Mặ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

Thực sự chỉ nên có một số chức năng toàn cầu trong ứng dụng của chúng tôi, nếu không, chúng tôi có nguy cơ làm ô nhiễm không gian tên toàn cầu và va chạm với khung hoặc mã của bên thứ ba

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

Để tránh xung đột với lớp 

php artisan make:provider LocaleServiceProvider
0 được tích hợp sẵn trong PHP, chúng ta có thể đặt tên cho lớp là 
if [[new App\Locale[app[]]->isSupported['es']] {

    // Spanish is supported

}
06

Lộ trình

Vớ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ừ URI

Chú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?

Lưu ý » Một số trình duyệt sẽ tích cực chuyển hướng 301 vào bộ đệm giống như chuyển hướng chúng tôi đã xác định ở trên. Vì vậy, nếu một khách truy cập đến tuyến đường gốc

if [[new App\Locale[app[]]->isSupported['es']] {

    // Spanish is supported

}
22 và URI của cô ấy chuyển thành
if [[new App\Locale[app[]]->isSupported['es']] {

    // Spanish is supported

}
23, thì cô ấy có thể tiếp tục đến
if [[new App\Locale[app[]]->isSupported['es']] {

    // Spanish is supported

}
23 ngay cả sau khi chúng tôi đã cập nhật ngôn ngữ hiện tại của mình trong
if [[new App\Locale[app[]]->isSupported['es']] {

    // Spanish is supported

}
3. Một cách để giải quyết vấn đề này là luôn bao gồm chuyển đổi ngôn ngữ thủ công cho khách truy cập trang web

Hãy cẩn thận với thứ tự tham số tuyến đường

Tiế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ùng

Laravel 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ên

Cá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úc

Viế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.

Chủ Đề