Отчет
В проекте, над которым я работал, было поле выбора, в котором были определены значения, которые не изменялись. Итак, чтобы перечислить элементы в этом выборе, я решил создать класс перечисления, а затем описать эти значения. Однако проект должен был поддерживать английский и испанский языки, а текст выбранных параметров необходимо было адаптировать к этому, не теряя при этом ссылки на соответствующий элемент перечисления. Другими словами, если бы я выбрал элемент «лошадь», мне нужно было, чтобы система знала, что этот элемент по-прежнему является «лошадью», даже если он отображается как «лошадь» или «кабалло». Чтобы сохранить целостность данных, я создал следующую структуру, объединяющую перечисление и язык в проекте.
Что такое перечисления
Краткое введение. Начиная с версии PHP 8.1 для перечисления значений был введен специальный класс. На практике это означает, что мы можем создать класс, значения свойств которого будут постоянными. Примером может служить статус, потому что если вы оставите его свободным, по всему коду у вас наверняка будет статус «активный», еще один «Активный», еще один «Активный» и т. д. Но если вы привяжете статус к перечислению и будете использовать перечисление вместо ввода строки, я буду уверен, что в любом месте кода значение всегда будет тем же, что и в перечислении.
enum Status { case ATIVO = "ativo"; case INATIVO = "inativo"; case PENDENTE = "pendente"; }
Перечисления и язык
Поскольку перечисление является классом, я могу обычным образом создавать методы для своего класса. Итак, я создал метод display(), который будет отвечать за обработку визуализации моего значения перечисления, адаптируя его к языку, который использует пользователь, однако без изменения исходного значения в моем элементе перечисления. Другими словами, для пользователя отображается статус «Ожидание», или «Ожидание», или «Ожидание»; но в базе данных он сохраняется только как «ожидающий» - это исходное значение, и с помощью него я могу получить свой элемент из перечисления и из этого элемента использовать метод отображения, чтобы показать его переведенным пользователю.
Но прежде чем показать пример, давайте познакомимся с языком Laravel. lang — это папка в корне проекта для хранения переводов, которые будет поддерживать ваш проект. Для каждого языка есть папка, в которой хранятся файлы контекстов перевода. Эти файлы имеют массив, где ключ — это представление слова, а значение — перевод на соответствующий язык.
Настройка способа отображения
В папке lang я создам файл status.php для каждой языковой папки со следующим массивом:
value => "Ativo", Status::INATIVO->value => "Inativo", Status::PENDENTE->value => "Pendente", ];
Я исправляю значения массива на соответствующие переводы соответствующего языка.
И мой метод отображения получит перевод элемента перечисления в этих файлах status.php и вернет это значение.
public function display(): string { return trans('status.'.$this->value); }
Пример использования:
// EN echo Status::ATIVO->display(); // Active // PT_BR echo Status::INATIVO->display(); // Inativo // ES echo Status::PENDENTE->display(); // Pediente
Заключение
При этом я гарантирую, что мое значение перечисления остается постоянным в моем коде, но оно адаптируется к языку пользователя с помощью метода отображения без потери целостности данных. Она также останется гибкой, если я добавлю в систему новый язык. Надеюсь, вам понравилось и увидимся в следующий раз.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3