「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Laravel の列挙型言語

Laravel の列挙型言語

2024 年 11 月 7 日に公開
ブラウズ:938

報告
私が取り組んだプロジェクトには、変更されない値が定義された選択フィールドがありました。そこで、この選択内の項目をリストするために、列挙クラスを作成し、これらの値を記述することにしました。ただし、プロジェクトは英語とスペイン語をサポートする必要があり、選択オプションのテキストは、それぞれの列挙項目への参照を失わずにこれに適応する必要がありました。言い換えれば、項目「馬」を選択した場合、システムは、この項目が「馬」または「馬」として表示されていても「馬」であることを認識する必要がありました。データの整合性を維持するために、プロジェクト内の enum と lang を統合する次の構造を作成しました。

列挙型とは
簡単な紹介。 PHP バージョン 8.1 以降、値を列挙するための特別なクラスが導入されました。実際には、これはプロパティ値が定数になるクラスを作成できることを意味します。例としてステータスがあります。これを自由のままにすると、コード全体でおそらく「アクティブ」ステータス、別の「アクティブ」ステータス、別の「アクティブ」ステータスなどが表示されることになります。しかし、ステータスを列挙型に結び付け、文字列を入力する代わりに列挙型を使用すると、コード内のどこにいても、値は常に列挙型の値になります。

enum Status
{
    case ATIVO = "ativo";
    case INATIVO = "inativo";
    case PENDENTE = "pendente";
}

列挙型と言語
enum はクラスなので、通常どおりクラスのメソッドを作成できます。そこで、enum 項目の元の値を変更せずに、enum 値の視覚化を処理し、ユーザーが使用している言語に適応させる、display() メソッドを作成しました。つまり、ユーザーにとってステータスは「保留中」、「保留中」、または「保留中」と表示されます。しかし、データベースには「保留中」としてのみ保存されます。これは元の値であり、それを通じて列挙型から項目を取得し、その項目から表示メソッドを使用して翻訳された項目をユーザーに表示できます。
ただし、例を示す前に、Laravel lang について説明します。 lang は、プロジェクトがサポートする翻訳を保存するプロジェクト ルート内のフォルダーです。各言語にはフォルダーがあり、そのフォルダー内に翻訳コンテキストのファイルが含まれています。これらのファイルには配列があり、キーは単語の表現、値はそれぞれの言語への翻訳です。

Enums e lang no Laravel

表示方法の設定
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

結論
これにより、コード内で列挙値が一定のままであることが保証されますが、データの整合性を失うことなく、表示メソッドを使用してユーザーの言語に適応します。システムに新しい言語を追加した場合でも、柔軟性は維持されます。今回も楽しんでいただければ幸いです。また次回お会いしましょう。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/eunael/enums-e-lang-no-laravel-43am?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3