Spatie จัดการการแปลด้วยทั้งฐานข้อมูลและไฟล์ภาษาส่วนใหญ่ผ่านแพ็คเกจ Laravel-Translation-Loader ซึ่งรวมเข้ากับระบบการแปลดั้งเดิมของ Laravel
ทำงานอย่างไรเมื่อใช้ทั้งฐานข้อมูลและไฟล์ภาษา
- แพ็คเกจช่วยให้คุณสามารถจัดเก็บการแปลในฐานข้อมูลโดยใช้ตารางเฉพาะ (`language_lines`) แต่ละรายการการแปลแสดงด้วยอินสแตนซ์ `languageline 'ซึ่งรวมถึง:
- `group`: กลุ่มการแปล (เช่น" การตรวจสอบ "หรือ" auth ")
- `key`: คีย์การแปลภายในกลุ่ม
- `text`: การแปลอาร์เรย์สำหรับสถานที่ต่าง ๆ (เช่น` ['en' => 'นี่คือฟิลด์ที่ต้องการ', 'nl' => 'dit คือ verplicht veld'] `)
- เมื่อคุณขอการแปลโดยใช้ฟังก์ชั่นการแปลตามปกติของ Laravel เช่น `trans ()` หรือ `__ ()` แพ็คเกจแรกจะตรวจสอบฐานข้อมูลสำหรับการแปลก่อน หากพบรายการที่ตรงกันจะส่งคืนเวอร์ชันฐานข้อมูล
- หากไม่พบการแปลในฐานข้อมูลมันจะกลับไปที่ไฟล์ภาษาดั้งเดิมที่เก็บไว้ในไดเรกทอรีทรัพยากร/lang` ของ Laravel
- นี่หมายถึงการแปลฐานข้อมูลแทนที่การแปลไฟล์ภาษาหากทั้งคู่มีอยู่สำหรับคีย์และสถานที่เดียวกัน
- แพ็คเกจรองรับทั้งการแปลตามกลุ่ม (เช่น `การตรวจสอบความถูกต้อง required`) และการแปล JSON โดยใช้ชื่อกลุ่มพิเศษ` '*' `สำหรับสายการแปล JSON
คุณสมบัติและพฤติกรรมเพิ่มเติม
- กลุ่มแพ็คเกจแคชของการแปลเพื่อเพิ่มประสิทธิภาพประสิทธิภาพลดการสืบค้นฐานข้อมูลเกี่ยวกับคำขอการแปลซ้ำ แคชจะไม่ถูกต้องเมื่อมีการสร้างการแปลอัปเดตหรือลบ
- มันสามารถขยายได้: คุณสามารถเพิ่มผู้ให้บริการการแปลที่กำหนดเอง (เช่น Yaml, CSV) โดยใช้อินเทอร์เฟซการแปลแพ็คเกจของแพ็คเกจซึ่งช่วยให้การแปลโหลดจากแหล่งข้อมูลอื่นนอกเหนือจากฐานข้อมูลและไฟล์ภาษา
- คุณสามารถใช้ผู้ช่วยการแปลเริ่มต้นของ Laravel และคำสั่งใบมีด (`@lang`,` trans () `,` __ () `) โดยไม่ต้องแก้ไข
สรุป
แพ็คเกจการแปลการแปลของ Spatie ผสานการแปลที่เก็บฐานข้อมูลอย่างมีประสิทธิภาพกับการแปลตามไฟล์ดั้งเดิมของ Laravel โดยการจัดลำดับความสำคัญของรายการฐานข้อมูล สิ่งนี้ช่วยให้การแก้ไขการแปลแบบไดนามิกผ่าน UI ที่ได้รับการสนับสนุนฐานข้อมูลในขณะที่ยังคงรักษาทางเลือกไปยังไฟล์ภาษาคงที่ การรวมกันนั้นราบรื่นต้องมีการเปลี่ยนแปลงน้อยที่สุดในการโทรแปลที่มีอยู่และเสนอการแคชและการขยายความสามารถในการใช้งานขั้นสูง [1] [3] [5] [6] [7]
การอ้างอิง:
[1] https://github.com/spatie/laravel-translation-loader
[2] https://spatie.be/docs/laravel-translatable/v6/introduction
[3] https://laravel-news.com/translation-loader-package
[4] https://github.com/spatie/laravel-translatable
[5] https://www.laravelblogs.com/courses/multi-language-laravel/spatie-laravel-translation-loader
[6] https://packagist.org/packages/spatie/laravel-translation-loader
[7] https://freek.dev/593-a-laravel-package-to-store-liny-lines-in-the-database
[8] https://laraveldaily.com/lesson/multi-language-laravel/spatie-laravel-translatable