Как отображать название модели на разных языках в laravel

У меня есть модель под названием «сотрудники», у которой есть имя на латыни и арабском языке, поэтому я использовал это в своей миграции:

  public function up()
    {
        Schema::create('employees', function (Blueprint $table) {
            $table->id();
            $table->string('picture');
            $table->string('name');
            $table->string('name_ar');
            $table->string('name_fr');
            $table->string('position');
            $table->string('position_ar');
            $table->string('position_fr');
            $table->timestamps();
        });
    }

И я хочу отображать правильное имя на языке в зависимости от локализации, например, если локализация 'fr', я должен отображать name_fr или name_ar для 'ar', я использую пакет локализации .

На данный момент я придумал это:

@if (Lang::locale() == 'ar')

            <h4 class = "text-white"> {{ $employee->name_ar }} </h4>
            <div class = "flex items-center gap-x-1">
                <img src = "{{ asset('assets/eye-icon.svg') }}" alt = "eye">
                <p class = "text-white text-sm">{{ $employee->position_ar }}</p>
            </div>

        @elseif (Lang::locale() == 'fr')

            <h4 class = "text-white"> {{ $employee->name_fr }} </h4>
            <div class = "flex items-center gap-x-1">
                <img src = "{{ asset('assets/eye-icon.svg') }}" alt = "eye">
                <p class = "text-white text-sm">{{ $employee->position_fr }}</p>
            </div>

        @else

            <h4 class = "text-white"> {{ $employee->name }} </h4>
            <div class = "flex items-center gap-x-1">
                <img src = "{{ asset('assets/eye-icon.svg') }}" alt = "eye">
                <p class = "text-white text-sm">{{ $employee->position }}</p>
            </div>

@endif

Есть ли лучший способ отобразить имя на правильном языке, например, в контроллере или в каталоге Lang?.

Laravel допускает локализацию строк, которая может быть полезна для меток и системных сообщений, вы можете посмотреть здесь laravel.com/docs/9.x/localization

Farid 13.02.2023 23:11

То, что у вас есть сейчас, функционально, но пакет, который вы используете, предназначен для переводов Laravel (то есть вещей, найденных в папках resources/lang/{locale}), а не для переводов моделей. github.com/Astrotomic/laravel-translatable или github.com/spatie/laravel-translatable — распространенные пакеты для правильной обработки этого.

Tim Lewis 13.02.2023 23:12
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Laravel - это мощный PHP-фреймворк, используемый для создания масштабируемых и надежных веб-приложений. Одним из преимуществ Laravel является его...
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Laravel с Turbo JS
Laravel с Turbo JS
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием...
Аутсорсинг разработки PHP для индивидуальных веб-решений
Аутсорсинг разработки PHP для индивидуальных веб-решений
Услуги PHP-разработки могут быть экономически эффективным решением для компаний, которые ищут высококачественные услуги веб-разработки по доступным...
Еще один бенчмарк PHP
Еще один бенчмарк PHP
Сегодня я наткнулся на забавный пост на r/ProgrammerHumor, который заставил меня задуматься об одной вещи, которая меня всегда интересовала....
Преобразование данных с помощью красноречивых аксессоров и мутаторов в Laravel
Преобразование данных с помощью красноречивых аксессоров и мутаторов в Laravel
Laravel поставляется с мощной функцией под названием "Eloquent Accessors and Mutators".
0
2
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы могли бы добиться этого с помощью одной строки, подобной этой

{{ $employee->{'name_' . app()->getLocale()} ?? $employee->name }}

Спасибо @Tim Lewis за упоминание об этом.

В миграции, если вы проверите после name, это name_ar и name_fr, а также в лезвии он должен перевести имя, а не столбец имени

Mohammad Edris Raufi 13.02.2023 23:18

Кроме того, $employee[name_.Lang::locale()] является синтаксической ошибкой; name_ не определен, . является неожиданным токеном и т. д. Правильным синтаксисом будет {{ $employee->{'name_' . app()->locale()} }} (или аналогичный)

Tim Lewis 13.02.2023 23:23

Я обновил свой ответ, теперь он должен работать

Mohammad Edris Raufi 13.02.2023 23:26
{locale} принесет ar или fr, тогда имя станет таким name_ar или name_fr таким образом, чтобы он мог использовать вот так в лезвии `{{$employee->name}}
Mohammad Edris Raufi 13.02.2023 23:32

Вот что я сделал, вдохновившись вашим решением @MohammadEdrisRaufi: {{ $employee->{Lang::locale() == 'en' ? 'name' : 'name_' . Lang::locale()} }}

AbdiMed 14.02.2023 15:29

Не делайте эту проверку на доступность ключа, потому что, если в будущем, если у вас будет язык, отличный от вашего кода, он сломается, используйте ответ, он проверит, доступен ли ключ, он покажет, иначе он покажет только имя

Mohammad Edris Raufi 14.02.2023 15:48

Другие вопросы по теме