Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Πώς η Spatie διαχειρίζεται τις μεταφράσεις όταν αλλάζει η τοπική εφαρμογή


Πώς η Spatie διαχειρίζεται τις μεταφράσεις όταν αλλάζει η τοπική εφαρμογή


Η Spatie διαχειρίζεται τις μεταφράσεις σε εφαρμογές Laravel ενσωματώνοντας με το σύστημα εντοπισμού του Laravel και παρέχοντας ευέλικτους τρόπους αποθήκευσης και ανάκτησης μεταφράσεων με βάση την τρέχουσα τοπική τοποθέτηση της εφαρμογής.

Πώς η Spatie χειρίζεται τις μεταφράσεις όταν αλλάζει η τοπική εφαρμογή

1. Αποθήκευση και ανάκτηση μετάφρασης

-Η Spatie προσφέρει ένα πακέτο που ονομάζεται Laravel-Trafanslation-Loader που επιτρέπει την αποθήκευση μεταφράσεων σε μια βάση δεδομένων αντί για αρχεία γλώσσας. Αυτό το πακέτο αντικαθιστά τον προεπιλεγμένο πάροχο υπηρεσιών μετάφρασης του Laravel με τον πάροχο της Spatie, επιτρέποντας τη λήψη μεταφράσεων δυναμικά από τη βάση δεδομένων [1].
- Οι μεταφράσεις αποθηκεύονται σε έναν πίνακα (συνήθως `language_lines ') όπου κάθε καταχώρηση περιέχει μια ομάδα (όπως η" επικύρωση "), ένα κλειδί (όπως το" απαιτούμενο ") και ένα αντικείμενο JSON που συγκρατεί μεταφράσεις για πολλαπλές τοποθεσίες (π.χ.,' en '=>' αυτό είναι ένα απαιτούμενο πεδίο ',' nl '=>' dit είναι een verplicht '') [1].
- Όταν καλείτε τη λειτουργία Laravel's `__ ()` με ένα κλειδί μετάφρασης, ο Spatie's Loader μεταφέρει τη μετάφραση για το τρέχον τοπικό σετ στην εφαρμογή. Για παράδειγμα, εάν η τοπική app είναι `'nl'`, __ (' validation.required ')` Επιστρέφει την ολλανδική μετάφραση από τη βάση δεδομένων [1].

2. Εναλλαγή τοπίου

- Η τοπική app μπορεί να αλλάξει κατά το χρόνο εκτέλεσης χρησιμοποιώντας τη μέθοδο Laravelâ `app ()-> setLocale ('locale_code').
- Μόλις αλλάξει η τοπική ρύθμιση, όλες οι επακόλουθες ανάκτηση μετάφρασης μέσω `__ ()` ή άλλων λειτουργιών μετάφρασης επιστρέφουν αυτόματα το κείμενο στο νεοσυσταθέν τοπικό τοπίο.
- Εάν λείπει μια μετάφραση για την τρέχουσα τοπική τοποθέτηση στη βάση δεδομένων, ο μηχανισμός τοποθέτησης Laravel's Fallback μπορεί να επιστρέψει τη μετάφραση από την προεπιλεγμένη τοποθεσία, εκτός αν απενεργοποιηθεί ρητά [1] [8].

3. Μεταφράσεις σε επίπεδο μοντέλου με αποθήκευση JSON

- Ένα άλλο πακέτο Spatie, Laravel-Translatable, έχει σχεδιαστεί για εύγλωττα μοντέλα για να καταστήσει τα χαρακτηριστικά μεταφραστικά.
- Οι μεταφράσεις αποθηκεύονται ως JSON σε μία στήλη βάσης δεδομένων ανά μεταφρασμένο χαρακτηριστικό, χωρίς να χρειάζονται επιπλέον πίνακες [3].
- Όταν αλλάζει η τοπική εφαρμογή, η πρόσβαση σε ένα μεταφραστικό χαρακτηριστικό στο μοντέλο επιστρέφει αυτόματα την τιμή για την τρέχουσα τοπική ρύθμιση. Για παράδειγμα, το `$ newsitem-> name` θα επιστρέψει τη μετάφραση για την τρέχουσα τοποθεσία locale στην εφαρμογή [4].
- Μπορείτε να λάβετε ή να ορίσετε μεταφράσεις για συγκεκριμένες τοποθεσίες χρησιμοποιώντας μεθόδους όπως `getTranslation (χαρακτηριστικό, locale)` και `setTranslation (χαρακτηριστικό, locale, value)` [4].

4. Εμπορική και λείπουν μεταφράσεις

- Το μεταφραστικό πακέτο Spatie υποστηρίζει τις τοπικές τοποθεσίες, οπότε αν λείπει μια μετάφραση για την τρέχουσα τοπική ρύθμιση, μπορεί να επιστρέψει τη μετάφραση από μια άλλη τοπική (συνήθως την προεπιλογή) [8].
- Αυτή η συμπεριφορά μπορεί να ελεγχθεί με τη διέλευση μιας σημαίας Boolean στην `getTranslation 'για να απενεργοποιήσει την υποστήριξη και να πάρει μια κενή συμβολοσειρά εάν η μετάφραση λείπει [8].

Περίληψη

Όταν αλλάζει η τοπική εφαρμογή, τα πακέτα μετάφρασης της εφαρμογής εξυπηρετούν αυτόματα την κατάλληλη μετάφραση είτε από τις γραμμές γλωσσών που αποθηκεύονται από τη βάση δεδομένων είτε από τα χαρακτηριστικά μοντέλου που έχουν αποθηκευτεί από το 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://filamenphp.com/plugins/filament-spatie-translatable
[6] https://github.com/filamamperphp/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