'Get name of Language instead of Locale name (in Laravel)?

How do I fetch name of locale (language) not just a locale string, but rather the name of that language in LARAVEL?

{{ app()->getLocale() }}


Solution 1:[1]

I resolved this by adding an entry to a translation file using Laravel Localization.

https://laravel.com/docs/5.7/localization

In AppServiceProvider@boot :

$language = Settings::get('language'); // Fetch saved language preference
$language = ($language === null) ? config('app.locale','ENG') : $language->value;

App::setLocale($language);

$languages = Cache::rememberForever('languages',
    function () {

        $walkable = File::directories(App()->basePath() . '/resources/lang');
        $output = [];

        array_walk($walkable,
            function($value) use (&$output) {

                $parts = explode('/', $value);
                $key = end( $parts );

                $require = $value . '/language.php';

                if (file_exists($require)) {
                    $output[$key] = require($require);
                }

            }
        );

    return $output;
});

config(['app.languages' => $languages]); 

I then have an entry for each language in dir resources/lang/LOCALE_ISO_3 (ENG/SPA/ITA...)/language.php

<?php // Spanish (SPA)

return [
    'default' => 'Spanish',
    'locale' => 'Español'
];

enter image description here

To then get a list of available languages:

dd( config('app.languages') );

Results in:

array:3 [?
  "ENG" => array:2 [?
    "default" => "English"
    "locale" => "English"
  ]
  "ITA" => array:2 [?
    "default" => "Italian"
    "locale" => "Italiano"
  ]
  "SPA" => array:2 [?
    "default" => "Spanish"
    "locale" => "Español"
  ]
]

To get current active language:

dd(trans('language'));

Gives you:

array:2 [?
  "default" => "English"
  "locale" => "English"
]

Solution 2:[2]

You can use PHP's Locale::getDisplayLanguage() function to do this. The first parameter is the locale, the second is the language you want to output in.

<?php
echo Locale::getDisplayName("en", "fr");
// Output: anglais
echo Locale::getDisplayName("en", "de");
// output: Englisch
echo Locale::getDisplayName("fr", "en");
// output: French

Solution 3:[3]

Laravel doesn't have this information. You need to add it manually by creating table or config with locales and their languages names.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Marc
Solution 2 miken32
Solution 3 IndianCoding