Nano Hash - криптовалюты, майнинг, программирование

Ошибка при попытке разместить папку в Resources/lang/en: Laravel 5.2

У меня есть код ниже в моем контроллере.

public function AllCountries() {
    $Countries = (new \App\DataAccess\CountryData())->GetAllCountries();
    app()->setLocale('fr');
    return view('Country.List')->with('Countries', $Countries->getData()->CountryList);
}

Определение метода получения данных приведено ниже.

public function GetAllCountries() {
    return response()->json(['CountryList' => \App\Models\CountryModel::all()]);
}

Ниже приведен снимок экрана, показывающий массив перевода.

введите здесь описание изображения

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

введите здесь описание изображения

Когда я запускаю приложение, я получаю следующую ошибку.

Использование неопределенной константы CountryList — предполагается, что «CountriesList» (представление: C:\xampp\htdocs\MyAccount\resources\views\Country\List.blade.php)

Обычно, когда мы видим веб-сайты, язык которых не установлен в нашем браузере по умолчанию. Мы видим уведомление о переводе страницы при загрузке страницы. Смотрите скриншот ниже.

введите здесь описание изображения

Но это не на моей стороне. Хотя я вижу французский язык, но уведомление о переводе не приходит. Почему?

22.04.2016

  • Вы имеете в виду, что вы вырезали views/Country/List.blade.php на lang/en? 23.04.2016
  • Я перемещаю папку Country из View в Resources/lang/en 23.04.2016
  • А есть еще views/Country/List.blade.php ? Если это так, то я думаю, что 404, которые вы получаете, не связаны с представлением или языком. Я не пробовал использовать заглавные буквы при создании языковых файлов. Может быть, попробуйте использовать только строчные буквы. Если у вас есть файл lang/en/Country.php, вы можете получить его как trans(Country. ‹translation_keyword›) 23.04.2016
  • Вы исправили очевидную синтаксическую ошибку? {!! trans(CountriesList.CountryName) !!} до {!! trans("CountriesList.CountryName") !!} (обратите внимание на кавычки)? 25.04.2016
  • Да, но теперь другая проблема. Уведомление не отображается для перевода, как показано здесь: i.stack.imgur.com/fqPIV.png Это похоже на то, что одна проблема исправлена, а другая появится. 25.04.2016

Ответы:


1

Подробнее о том, как работает локализация в Laravel, читайте здесь:

https://laravel.com/docs/5.2/localization#introduction

Если вы действительно хотите переопределить весь шаблон, вы можете сделать это самостоятельно:

$app->getLocale()
App::getLocale()

(но я не утверждаю, что это обычно хорошая идея - обычно лучше переводить строки.)

Эти функции возвращают локаль, поэтому вы можете использовать ее для получения соответствующего представления (например, поместив все представления jp в каталог jp/).

Вы можете использовать метод exists() ViewFactory, чтобы проверить, существует ли он, и реализовать резервную логику по своему усмотрению. Возможно, имеет смысл реализовать это в вашем собственном базовом классе контроллера (который будет наследоваться от фреймворка) и создать подклассы всех ваших контроллеров для этого нового базового класса. Таким образом, логика может быть разделена.

Примерно так, например:

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesResources;

class Controller extends BaseController
{
    use AuthorizesRequests, AuthorizesResources, DispatchesJobs, ValidatesRequests;

    protected function localeViewResponse($view, $data = [], $mergeData = [])
    {
        $factory = view();
        $locale = app()->getLocale();

        if ($view->exists($locale . '.' . $view)) {
            return $view->make($locale . '.' . $view, $data, $mergeData);
        }

        return $view->make($view, $data, $mergeData);
    }
}

При этом, опять же, вы должны действительно подумать, нужно ли вам это делать. Метод Ангада будет понятен другим людям, знакомым с Laravel, и, как правило, является лучшим подходом. Если у вас возникли проблемы с «неопределенной константой», убедитесь, что вы правильно цитируете, и попробуйте обновить свой вопрос кодом, который вы пытались использовать.

25.04.2016
  • Можете ли вы поделиться примером кода на стороне контроллера? Я пишу код в контроллере, чтобы вернуть представление. В вашей ссылке, я думаю, используется файл маршрута. Я хочу показать французский язык по умолчанию. 25.04.2016
  • Я добавил пример. Вы также можете поместить это в отдельный класс и внедрить его в конструктор контроллера или т.д. 25.04.2016
  • Я сделал модификацию, чтобы сделать мой вопрос более ясным. Пожалуйста, проверьте сейчас, 25.04.2016
  • Вы заметите в документации, что значения должны быть указаны в кавычках - например. trans('messages.welcome'). trans(CountriesList.CountryName) отсутствуют кавычки. 25.04.2016
  • Обычно, когда мы видим веб-сайты, язык которых не установлен в нашем браузере по умолчанию. Мы видим уведомление о переводе страницы при загрузке страницы. Смотрите скриншот ниже. i.stack.imgur.com/fqPIV.png Но это не приходит на мой сторона. Хотя я вижу французский язык, но уведомление о переводе не приходит. Почему? 25.04.2016
  • Это действительно отдельный вопрос, но на него можно ответить здесь: stackoverflow.com/questions/10691734/ 26.04.2016
  • Я разместил это здесь: stackoverflow.com/questions/36851759/ Можете ли вы сказать, что там не так? 27.04.2016

  • 2

    Вы поступаете неправильно.

    Laravel, как и большинство других mvc-фреймворков, предоставляет поддержку локализации «из коробки»: https://laravel.com/docs/5.2/localization

    Таким образом, следующий подход был бы лучшим:

    Создайте языковые файлы для языков, предлагаемых вашим приложением (например, для английского и французского).

    resources
      | lang
        | en
          | countries.php
        | fr
          | countries.php
    

    В каждом из языковых файлов вы должны соответствующим образом поместить переводы для переменных:

    // resources/lang/en/countries.php
    return [
        'india' => "India"
    ];
    
    
    // resources/lang/fr/countries.php
    return [
        'india' => "Inde"
    ];
    

    Примечание. Я не знаю французского, для этого примера я использую переводчик Google

    Тогда на ваш взгляд:

    {{ trans('countries.india') }}
    

    Это отобразит значение из соответствующего языкового файла в зависимости от настройки приложения.

    Вы можете изменить язык приложения следующим образом:

    Route::get('countries/{locale}', function ($locale) {
        App::setLocale($locale);
    
        return view('countries.list');
    });
    
    23.04.2016
  • Я знаю, что не могу сравнивать WordPress(CMS) с Laravel. В Wordpress мы могли бы создать другую страницу для английского языка и другую страницу для другого языка. Таким образом, нет необходимости создавать один файл для перевода и другой файл для просмотра, чтобы получить перевод. Есть ли лучший способ реализовать перевод? может быть что-то вроде Wordpress? 24.04.2016
  • @Helper На мой взгляд, этот метод упрощает поддержку и расширение локализации. Конечно, вы видите преимущество использования этого над тем, как это делает WordPress. 24.04.2016
  • @Helper Вы упоминаете, что в wordpress вам нужно создать 1 представление для каждого языка. Не лучше ли создать 1 языковой файл для каждого языка и иметь только 1 представление? 24.04.2016
  • В Wordpress будет всего 2 файла, если есть 2 языка. В Ларавеле. будет 3 файла. 1 файл просмотра и 2 файла для языков. 25.04.2016
  • Когда я реализовал выше, он говорит: Use of undefined constant countries - assumed 'countries' 25.04.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..