報告
在我從事的一個專案中,有一個選擇欄位定義了不會更改的值。因此,為了列出此選擇中的項目,我決定建立一個枚舉類,然後描述這些值。但是,該項目需要支援英語和西班牙語,並且選擇選項的文本需要適應這一點,同時又不丟失對相應枚舉項的引用。換句話說,如果我選擇了“馬”這個項目,我需要係統知道這個項目仍然是“馬”,即使它顯示為“馬”或“caballo”。為了保持資料的完整性,我在專案中創建了以下整合枚舉和語言的結構。
什麼是枚舉
簡單介紹一下。從 PHP 8.1 版本開始,引入了一個特殊的類別用於枚舉值。實際上,這意味著我們可以創建一個屬性值恆定的類別。一個例子是狀態,因為如果你讓它自由,在整個程式碼中你可能會有一個“活動”狀態,另一個“活動”,另一個“活動”等等。但是,如果您將狀態綁定到枚舉並使用枚舉而不是鍵入字串,我將確保程式碼中任何位置的值將始終是枚舉中的值。
enum Status { case ATIVO = "ativo"; case INATIVO = "inativo"; case PENDENTE = "pendente"; }
列舉與語言
由於枚舉是一個類,因此我可以正常為我的類別建立方法。因此,我創建了 display() 方法,該方法將負責處理枚舉值的可視化,使其適應使用者正在使用的語言,但不會更改枚舉項中的原始值。也就是說,對於用戶來說,狀態出現“待處理”,或者“待處理”,或者“待處理”;但在資料庫中,它僅保存為“待處理” - 這是原始值,通過它我可以從枚舉中取得我的項目,並從該項目使用顯示方法將其翻譯給使用者顯示。
但在展示範例之前,先介紹一下 Laravel lang。 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