Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Spatie จัดการการแปลอย่างไรเมื่อแอป Locale เปลี่ยนไป


Spatie จัดการการแปลอย่างไรเมื่อแอป Locale เปลี่ยนไป


Spatie จัดการการแปลในแอพพลิเคชั่น Laravel โดยรวมเข้ากับระบบการแปลของ Laravel และให้วิธีที่ยืดหยุ่นในการจัดเก็บและดึงการแปลตามสถานที่ปัจจุบันของแอพ

Spatie จัดการการแปลอย่างไรเมื่อแอป Locale เปลี่ยนไป

1. ที่เก็บข้อมูลการแปลและการดึงข้อมูล

-Spatie เสนอแพ็คเกจที่เรียกว่า Laravel-Translation-Loader ซึ่งอนุญาตให้จัดเก็บการแปลในฐานข้อมูลแทนไฟล์ภาษา แพ็คเกจนี้แทนที่ผู้ให้บริการการแปลเริ่มต้นของ Laravel กับผู้ให้บริการของ Spatie ทำให้การแปลเป็นแบบไดนามิกจากฐานข้อมูล [1]
- การแปลจะถูกเก็บไว้ในตาราง (โดยปกติ `language_lines`) โดยที่แต่ละรายการมีกลุ่ม (เช่น" การตรวจสอบ ") คีย์ (เช่น" ต้องการ ") และการแปลวัตถุ JSON สำหรับหลาย ๆ ตำแหน่ง (เช่น` en '=>' นี่คือฟิลด์ที่จำเป็น '
- เมื่อคุณโทรหาฟังก์ชั่น Laravel `__ ()` ด้วยคีย์การแปลตัวโหลด spatie จะดึงการแปลสำหรับสถานที่ปัจจุบันที่ตั้งไว้ในแอปพลิเคชัน ตัวอย่างเช่นหากสถานที่ตั้งแอปคือ `'nl'`,` __ (' ตรวจสอบความถูกต้อง ') `ส่งคืนการแปลดัตช์จากฐานข้อมูล [1]

2. การสลับสถานที่

- สถานที่ตั้งแอพสามารถเปลี่ยนแปลงได้ที่รันไทม์โดยใช้แอปLaravelâ s ``)-> setLocale ('locale_code') `เมธอด
- เมื่อสถานที่เปลี่ยนแปลงการดึงการแปลที่ตามมาทั้งหมดผ่าน `__ ()` หรือฟังก์ชั่นการแปลอื่น ๆ จะส่งกลับข้อความโดยอัตโนมัติในสถานที่ตั้งใหม่
- หากการแปลหายไปสำหรับสถานที่ปัจจุบันในฐานข้อมูลกลไกทางเลือกของ Laravel สามารถส่งคืนการแปลจากสถานที่เริ่มต้นเว้นแต่จะปิดการใช้งานอย่างชัดเจน [1] [8]

3. การแปลระดับรุ่นด้วย JSON Storage

- แพ็คเกจ Spatie อื่น Laravel-Translatable ได้รับการออกแบบมาสำหรับรุ่นที่มีคารมคมคายเพื่อให้แอตทริบิวต์แปลได้
- การแปลจะถูกเก็บไว้เป็น JSON ในคอลัมน์ฐานข้อมูลเดียวต่อแอตทริบิวต์การแปลโดยไม่จำเป็นต้องใช้ตารางเพิ่มเติม [3]
- เมื่อสถานที่ตั้งของแอปเปลี่ยนไปการเข้าถึงแอตทริบิวต์ที่แปลได้ในรุ่นจะส่งคืนค่าสำหรับสถานที่ปัจจุบันโดยอัตโนมัติ ตัวอย่างเช่น `$ newsitem-> name` จะส่งคืนการแปลสำหรับสถานที่ปัจจุบันที่ตั้งไว้ในแอพ [4]
- คุณสามารถรับหรือตั้งค่าการแปลอย่างชัดเจนสำหรับสถานที่เฉพาะโดยใช้วิธีการเช่น `getTranslation (แอตทริบิวต์สถานที่)` และ `setTranslation (แอตทริบิวต์สถานที่ตั้งค่า)` [4]

4. การแปลทางเลือกและขาดหายไป

- แพ็คเกจการแปลของ Spatie รองรับสถานที่ทางเลือกทางเลือกดังนั้นหากการแปลหายไปสำหรับสถานที่ปัจจุบันสามารถส่งคืนการแปลจากสถานที่อื่น (โดยปกติจะเป็นค่าเริ่มต้น) [8]
- พฤติกรรมนี้สามารถควบคุมได้โดยการส่งธงบูลีนไปยัง `getTranslation` เพื่อปิดการใช้งานทางเลือกและรับสตริงที่ว่างเปล่าหากการแปลหายไป [8]

สรุป

เมื่อสถานที่ตั้งของแอพเปลี่ยนไปแพ็คเกจการแปลของ Spatie จะให้บริการการแปลที่เหมาะสมโดยอัตโนมัติจากบรรทัดภาษาที่เก็บฐานข้อมูลหรือแอตทริบิวต์โมเดล JSON ที่เก็บไว้ได้โดยใช้ประโยชน์จากการตั้งค่าสถานที่ของ Laravel การรวมที่ไร้รอยต่อนี้ช่วยให้มั่นใจได้ว่าฟังก์ชั่นการดึงการแปลจะส่งคืนสตริงที่ถูกต้องตามท้องถิ่นที่ถูกต้องตามสถานที่ตั้งแอพปัจจุบันโดยมีกลไกทางเลือกหากมีการแปลหายไป

วิธีการนี้ช่วยให้การสลับสถานที่ตั้งแบบไดนามิกที่รันไทม์และรองรับการจัดเก็บการแปลในรูปแบบที่ยืดหยุ่นไม่ว่าจะเป็นในตารางฐานข้อมูลหรือคอลัมน์ JSON ขึ้นอยู่กับแพ็คเกจที่ใช้

ข้อมูลอ้างอิง: [1] [3] [4] [8]

การอ้างอิง:
[1] https://github.com/spatie/laravel-translation-loader
[2] https://spatie.be/docs/laravel-translatable/v6/introduction
[3] https://github.com/spatie/laravel-translatable
[4] https://spatie.be/docs/laravel-translatable/v6/basic-usage/getting-and-settings-translations
[5] https://filamentphp.com/plugins/filament-spatie-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-to-thrieve-th