Add multi-language functionality and don't create unnecessary variables in the contact controller

This commit is contained in:
Kevin MacMartin 2017-02-06 23:44:07 -05:00
parent 93ac8b5697
commit 54613bf60b
8 changed files with 96 additions and 9 deletions

View file

@ -1,6 +1,8 @@
SITE_NAME='Hypothetical Template'
SITE_DESC='A website template'
DEFAULT_LANGUAGE=en
APP_ENV=local
APP_DEBUG=true
APP_LOG_LEVEL=debug

View file

@ -14,14 +14,10 @@ class ContactController extends Controller {
'message' => 'required'
]);
$name = $request['name'];
$email = $request['email'];
$message = $request['message'];
$contact = new Contact;
$contact->name = $name;
$contact->email = $email;
$contact->message = $message;
$contact->name = $request['name'];
$contact->email = $request['email'];
$contact->message = $request['message'];
$contact->save();
// Send the email if the MAIL_SENDTO variable is set

View file

@ -2,6 +2,7 @@
namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
@ -13,7 +14,9 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot()
{
//
Blade::directive('lang', function($expression) {
return "<?php echo Language::select($expression); ?>";
});
}
/**

View file

@ -0,0 +1,57 @@
<?php
namespace App\Utilities;
class Language
{
/**
* The language cookie name
*
* @var string
*/
public static $language_cookie = 'locale';
/**
* Retrieve the language from the cookie or fall back on the default
*
* @return string
*/
public static function getSessionLanguage()
{
return session(self::$language_cookie, env('DEFAULT_LANGUAGE', 'en'));
}
/**
* Set the configured language cookie
*
* @param string
* @return boolean
*/
public static function setSessionLanguage($language)
{
session([ self::$language_cookie => $language ]);
return self::getSessionLanguage() == $language;
}
/**
* Take an array of strings and return the string associated with
* the currently configured language or fall back on the default
*
* @param array
* @return string
*/
public static function select($string_array)
{
$session_language = self::getSessionLanguage();
$default_language = env('DEFAULT_LANGUAGE');
$string = '';
if (array_key_exists($session_language, $string_array)) {
$string = $string_array[$session_language];
} else if (array_key_exists($default_language, $string_array)) {
$string = $string_array[$default_language];
}
return $string;
}
}

View file

@ -240,6 +240,7 @@ return [
'Newsletter' => Spatie\Newsletter\NewsletterFacade::class,
'Image' => Intervention\Image\Facades\Image::class,
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
'Language' => App\Utilities\Language::class,
]

View file

@ -2,6 +2,27 @@
The Hypothetical website template
## Utilities
### Language
The default language is set by the `DEFAULT_LANGUAGE` variable in the `.env` file. This will be the language used until it is changed, which can be done using the `/language/{lang}` route or directly using `Language::setSessionLanguage($lang)` where in both cases `lang` is the language code for a given language.
In the view, a block of text can be configured with multiple languages using the following syntax:
```php
@lang([
'en' => "This is a sentence",
'fr' => "C'est une phrase"
])
```
or
```php
{{ Language::select([ 'en' => "This is a sentence", 'fr' => "C'est une phrase" ]) }}
```
## Dashboard
Unless otherwise stated all examples in this section are to be added to `app/Http/Controllers/DashboardController.php`.

View file

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en">
<html lang="{{ Language::getSessionLanguage() }}">
@set('page_title', (isset($title) ? $title . ' - ' : '') . env('SITE_NAME'))
@set('device_mobile', preg_match('/Mobi/', Request::header('User-Agent')) || preg_match('/iP(hone|ad|od);/', Request::header('User-Agent')))

View file

@ -1,5 +1,7 @@
<?php
use App\Utilities\Language;
/*
|--------------------------------------------------------------------------
| Web Routes
@ -25,6 +27,11 @@ Route::get('/contact', function() {
return view('website.contact');
});
Route::get('/language/{lang}', function($lang) {
Language::setSessionLanguage($lang);
return redirect()->back();
});
/*
|--------------------------------------------------------------------------
| Authentication Routes