Spatie quản lý các bản dịch trong các ứng dụng Laravel bằng cách tích hợp với hệ thống nội địa hóa của Laravel và cung cấp các cách linh hoạt để lưu trữ và truy xuất các bản dịch dựa trên địa phương hiện tại của ứng dụng.
Cách Spatie xử lý các bản dịch khi ứng dụng Locale thay đổi
1. Lưu trữ và truy xuất dịch
-Spatie cung cấp một gói có tên là Trình tải Laravel-Translation cho phép lưu trữ các bản dịch trong cơ sở dữ liệu thay vì chỉ các tệp ngôn ngữ. Gói này thay thế nhà cung cấp dịch vụ dịch thuật mặc định của Laravel bằng nhà cung cấp của Spatie, cho phép các bản dịch được tìm nạp động từ cơ sở dữ liệu [1].
.
- Khi bạn gọi chức năng của Laravelâ s `__ ()` với khóa dịch, trình tải Spatie đã tìm thấy bản dịch cho locale hiện tại được đặt trong ứng dụng. Ví dụ: nếu ngôn ngữ ứng dụng là `'nl'`,` __ (' Actident.Required ') `trả về bản dịch Hà Lan từ cơ sở dữ liệu [1].
2. Chuyển đổi địa phương
- Locale ứng dụng có thể được thay đổi khi chạy bằng cách sử dụng phương thức `app ()-> setLocale ('locale_code')`.
- Khi ngôn ngữ được thay đổi, tất cả các truy xuất dịch tiếp theo thông qua `__ ()` hoặc các hàm dịch khác sẽ tự động trả lại văn bản trong ngôn ngữ mới được đặt.
- Nếu một bản dịch bị thiếu cho ngôn ngữ hiện tại trong cơ sở dữ liệu, cơ chế địa phương dự phòng của Laravel có thể trả về bản dịch từ ngôn ngữ mặc định, trừ khi bị vô hiệu hóa rõ ràng [1] [8].
3. Bản dịch cấp độ mô hình với lưu trữ JSON
- Một gói spatie khác, có thể dịch rất nhiều, được thiết kế cho các mô hình hùng hồn để làm cho các thuộc tính có thể dịch được.
- Các bản dịch được lưu trữ dưới dạng JSON trong một cột cơ sở dữ liệu cho mỗi thuộc tính có thể dịch, mà không cần thêm bảng [3].
- Khi ngôn ngữ ứng dụng thay đổi, việc truy cập thuộc tính có thể dịch trên mô hình sẽ tự động trả về giá trị cho locale hiện tại. Ví dụ: `$ newsitem-> name` sẽ trả về bản dịch cho địa phương hiện tại được đặt trong ứng dụng [4].
- Bạn có thể nhận hoặc đặt các bản dịch một cách rõ ràng cho các địa phương cụ thể bằng các phương thức như `getTranslation (thuộc tính, locale)` và `setTranslation (thuộc tính, locale, giá trị)` [4].
4. Ngăn tạm và Thiếu các bản dịch
- Gói có thể dịch của Spatie hỗ trợ các địa phương dự phòng, vì vậy nếu thiếu bản dịch cho địa phương hiện tại, nó có thể trả về bản dịch từ một địa phương khác (thường là mặc định) [8].
- Hành vi này có thể được kiểm soát bằng cách chuyển cờ Boolean cho 'getTranslation` để vô hiệu hóa dự phòng và nhận được một chuỗi trống nếu bản dịch bị thiếu [8].
Bản tóm tắt
Khi ngôn ngữ ứng dụng thay đổi, các gói dịch của Spatie sẽ tự động phục vụ bản dịch phù hợp từ các dòng ngôn ngữ được lưu trữ cơ sở dữ liệu hoặc các thuộc tính mô hình được lưu trữ JSON, tận dụng cài đặt ngôn ngữ của Laravel. Tích hợp liền mạch này đảm bảo rằng các chức năng truy xuất dịch trả về chuỗi cục bộ chính xác dựa trên ngôn ngữ ứng dụng hiện tại, với các cơ chế dự phòng có sẵn nếu thiếu dịch.
Cách tiếp cận này cho phép chuyển đổi địa phương động khi chạy và hỗ trợ lưu trữ các bản dịch theo những cách linh hoạt, trong các bảng cơ sở dữ liệu hoặc các cột JSON, tùy thuộc vào gói được sử dụng.
Tài liệu tham khảo: [1] [3] [4] [8]
Trích dẫn:
[1)
[2] https://spatie.be/docs/laravel-translatable/v6/introduction
[3] https://github.com/spatie/laravel-pranslatable
[4] https://spatie.be/docs/laravel-translatable/v6/basic-usage/getting-and-settings-translations
[5] https://filamentphp.com/plugins/filament-patie-translatable
[6] https://github.com/filamentphp/filament/discussions/6913
[7] https://laraveldaily.com/lesson/multi-language-laravel/spatie-laravel-translation-loader
[8] https://stackoverflow.com/questions/65252615/spatie-laravel-translatable-shows-the-default-locale-when-i-try-to-retrieve-th