├── .editorconfig ├── .gitattributes ├── .gitignore ├── .styleci.yml ├── LICENSE.md ├── README.md ├── composer.json └── src ├── Config └── language.php ├── Controllers └── Language.php ├── Facade.php ├── Language.php ├── Middleware └── SetLocale.php ├── Migrations └── 2020_01_01_000000_add_locale_column.php ├── Provider.php ├── Resources ├── assets │ └── img │ │ └── flags │ │ ├── al.png │ │ ├── am.png │ │ ├── at.png │ │ ├── au.png │ │ ├── bd.png │ │ ├── be.png │ │ ├── bg.png │ │ ├── br.png │ │ ├── ca.png │ │ ├── ch.png │ │ ├── cn.png │ │ ├── cs.png │ │ ├── cz.png │ │ ├── de.png │ │ ├── dk.png │ │ ├── ee.png │ │ ├── es.png │ │ ├── eu.png │ │ ├── fi.png │ │ ├── fr.png │ │ ├── gb.png │ │ ├── ge.png │ │ ├── gr.png │ │ ├── hk.png │ │ ├── hr.png │ │ ├── hu.png │ │ ├── id.png │ │ ├── ie.png │ │ ├── il.png │ │ ├── in.png │ │ ├── ir.png │ │ ├── it.png │ │ ├── jp.png │ │ ├── kr.png │ │ ├── lt.png │ │ ├── lv.png │ │ ├── mk.png │ │ ├── mx.png │ │ ├── my.png │ │ ├── ng.png │ │ ├── nl.png │ │ ├── no.png │ │ ├── np.png │ │ ├── pk.png │ │ ├── pl.png │ │ ├── pt.png │ │ ├── ro.png │ │ ├── rs.png │ │ ├── ru.png │ │ ├── sa.png │ │ ├── se.png │ │ ├── sg.png │ │ ├── sk.png │ │ ├── sl.png │ │ ├── th.png │ │ ├── tr.png │ │ ├── tw.png │ │ ├── ua.png │ │ ├── us.png │ │ ├── uz.png │ │ └── vn.png └── views │ ├── flag.blade.php │ └── flags.blade.php ├── Routes └── web.php └── helpers.php /.editorconfig: -------------------------------------------------------------------------------- 1 | ; This file is for unifying the coding style for different editors and IDEs. 2 | ; More information at https://editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | charset = utf-8 8 | indent_size = 4 9 | indent_style = space 10 | end_of_line = lf 11 | insert_final_newline = true 12 | trim_trailing_whitespace = true 13 | 14 | [*.md] 15 | trim_trailing_whitespace = false 16 | 17 | [*.yml] 18 | indent_size = 2 -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set the default behavior, in case people don't have core.autocrlf set. 2 | * text eol=lf 3 | 4 | # Explicitly declare text files you want to always be normalized and converted 5 | # to native line endings on checkout. 6 | *.c text 7 | *.h text 8 | 9 | # Declare files that will always have CRLF line endings on checkout. 10 | *.sln text eol=crlf 11 | 12 | # Denote all files that are truly binary and should not be modified. 13 | *.png binary 14 | *.jpg binary 15 | *.otf binary 16 | *.eot binary 17 | *.svg binary 18 | *.ttf binary 19 | *.woff binary 20 | *.woff2 binary 21 | 22 | *.css linguist-vendored 23 | *.scss linguist-vendored 24 | *.js linguist-vendored 25 | CHANGELOG.md export-ignore 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.idea 2 | /.history 3 | /.vscode 4 | /.vagrant 5 | /vendor 6 | composer.phar 7 | composer.lock 8 | .DS_Store 9 | -------------------------------------------------------------------------------- /.styleci.yml: -------------------------------------------------------------------------------- 1 | preset: psr2 2 | 3 | enabled: 4 | - concat_with_spaces -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Aitor Riba Archilla 4 | 5 | Copyright (c) 2017 Akaunting 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Language switcher package for Laravel 2 | 3 | ![Downloads](https://img.shields.io/packagist/dt/akaunting/laravel-language) 4 | [![StyleCI](https://github.styleci.io/repos/102290249/shield?style=flat&branch=master)](https://styleci.io/repos/102290249) 5 | [![Quality](https://img.shields.io/scrutinizer/quality/g/akaunting/laravel-language?label=quality)](https://scrutinizer-ci.com/g/akaunting/laravel-language) 6 | [![License](https://img.shields.io/github/license/akaunting/laravel-language)](LICENSE.md) 7 | 8 | This package allows switching locale easily on Laravel projects. It's so simple to use, once it's installed, your App locale will change only by passing routes into SetLanguage middleware. 9 | 10 | **Top features:** 11 | 12 | - Change automatically app locale depending on user browser configuration 13 | - Language flags built-in for easy implementation 14 | - Get language name like 'English' or 'Español' from codes such as 'en' or 'es' 15 | - Option to choose short (en) or long (en-GB) language code 16 | - Store locale on users table 17 | - Restrict users to set languages you don't have translations 18 | - Helper functions for clean, simple and easy to read API 19 | - Supports Carbon and Date packages 20 | 21 | ## Getting Started 22 | 23 | ### 1. Install 24 | 25 | Run the following command: 26 | 27 | ``` 28 | composer require akaunting/laravel-language 29 | ``` 30 | 31 | ### 2. Register (for Laravel < 5.5) 32 | 33 | Register the service provider in ``config/app.php`` 34 | 35 | ```php 36 | Akaunting\Language\Provider::class, 37 | ``` 38 | 39 | Add alias if you want to use the facade. 40 | 41 | ```php 42 | 'Language' => Akaunting\Language\Facade::class, 43 | ``` 44 | 45 | ### 3. Publish 46 | 47 | Publish config, migration and blade files. 48 | 49 | ``` 50 | php artisan vendor:publish --tag=language 51 | ``` 52 | 53 | ### 4. Migrate 54 | 55 | 56 | Add locale column to users table: 57 | 58 | ``` 59 | php artisan migrate 60 | ``` 61 | 62 | 63 | ### 5. Configure 64 | 65 | Default values can be modified also on `config/language.php` 66 | 67 | #### Keys 68 | 69 | - route: Makes route available 70 | - carbon: Sets briannesbitt/carbon translator language 71 | - date: Sets jenssegers/date translator language 72 | - home: Make home route available 73 | - auto: Sets language automatically depending on user's browser config 74 | - prefix: Prefix of routes URI to set locale 75 | - middleware: default middleware to set locale 76 | - controller: default controller to handle locale 77 | - flags: Settings such as width, class etc for flags 78 | - mode: The language code and name mode 79 | - allowed: Allowed language codes 80 | - all: Available language names and codes 81 | 82 | ## Usage 83 | 84 | ### Middleware 85 | 86 | All routes in which you want to set language should be under the `language` 87 | middleware to set at each request to App locale. 88 | 89 | ```php 90 | Route::group(['middleware' => 'language'], function () { 91 | 92 | // Here your routes 93 | 94 | }); 95 | ``` 96 | 97 | ### URL 98 | 99 | - Via URL with return home: /languages/{locale}/home 100 | - Via URL with return back: /languages/{locale}/back 101 | 102 | **Tip:** */languages prefix can be changed from ```config/language.php```* 103 | 104 | ## Methods 105 | 106 | ### language()->allowed() 107 | 108 | Returns an array with ```[$code => $name]``` for all allowed 109 | languages of config. Example usage on blade: 110 | 111 | ```php 112 | @foreach (language()->allowed() as $code => $name) 113 | {{ $name }} 114 | @endforeach 115 | ``` 116 | 117 | ### language()->flags() 118 | 119 | Returns an output with flags for all allowed languages of config. 120 | Output can be changed from ```resources/views/vendor/language``` folder 121 | 122 | ### language()->flag() 123 | 124 | Returns the flag of the current locale. 125 | Output can be changed from ```resources/views/vendor/language``` folder 126 | 127 | ### language()->names($codes = null) 128 | 129 | Get an array like ```[$code => $name]``` from an array of only $codes. 130 | 131 | 132 | ### language()->codes($langs = null) 133 | 134 | Get an array like ```[$name => $code]``` from an array of only $langs. 135 | 136 | ### language()->back($code) 137 | 138 | Returns the URL to set up language and return back: ```back()``` 139 | 140 | Also if you prefer to use directly route() function you can use it 141 | as following code: 142 | 143 | ```php 144 | {{ route('language::back', ['locale' => $code]) }} 145 | ``` 146 | 147 | ### language()->home($code) 148 | 149 | Returns the URL to set language and return to home: ```url('/')``` 150 | 151 | Also if you prefer to use directly route() function you can use it 152 | as following code: 153 | 154 | ```php 155 | {{ route('language::home', ['locale' => $code]) }} 156 | ``` 157 | 158 | ### language()->getName($code = 'default') 159 | 160 | Returns the language name of ```$code``` if specified or the current 161 | language set if not. 162 | 163 | **Tip:** *Use app()->getLocale() to get the current locale* 164 | 165 | ### language()->getCode($name = 'default') 166 | 167 | Returns the language code of ```$name``` if specified or the current 168 | language set if not. 169 | 170 | ## Changelog 171 | 172 | Please see [Releases](../../releases) for more information what has changed recently. 173 | 174 | ## Contributing 175 | 176 | Pull requests are more than welcome. You must follow the PSR coding standards. 177 | 178 | ## Security 179 | 180 | If you discover any security related issues, please email security@akaunting.com instead of using the issue tracker. 181 | 182 | ## Credits 183 | 184 | - [Denis Duliçi](https://github.com/denisdulici) 185 | - [All Contributors](../../contributors) 186 | 187 | ## License 188 | 189 | The MIT License (MIT). Please see [LICENSE](LICENSE.md) for more information. 190 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "akaunting/laravel-language", 3 | "description": "Language switcher package for Laravel", 4 | "keywords": [ 5 | "laravel", 6 | "language", 7 | "switcher" 8 | ], 9 | "license": "MIT", 10 | "authors": [ 11 | { 12 | "name": "Denis Duliçi", 13 | "email": "info@akaunting.com", 14 | "homepage": "https://akaunting.com", 15 | "role": "Developer" 16 | } 17 | ], 18 | "require": { 19 | "php": ">=5.6.4", 20 | "laravel/framework": ">=5.4.0", 21 | "jenssegers/agent": "2.6.*" 22 | }, 23 | "autoload": { 24 | "psr-4": { 25 | "Akaunting\\Language\\": "./src" 26 | }, 27 | "files": [ 28 | "src/helpers.php" 29 | ] 30 | }, 31 | "extra": { 32 | "laravel": { 33 | "providers": [ 34 | "Akaunting\\Language\\Provider" 35 | ], 36 | "aliases": { 37 | "Language": "Akaunting\\Language\\Facade" 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/Config/language.php: -------------------------------------------------------------------------------- 1 | true, 14 | 15 | /* 16 | |-------------------------------------------------------------------------- 17 | | Enable Language Home Route 18 | |-------------------------------------------------------------------------- 19 | | 20 | | This option enable language route to set language and return 21 | | to url('/') 22 | | 23 | */ 24 | 'home' => true, 25 | 26 | /* 27 | |-------------------------------------------------------------------------- 28 | | Add Language Code 29 | |-------------------------------------------------------------------------- 30 | | 31 | | This option will add the language code to the redirected url 32 | | 33 | */ 34 | 'url' => false, 35 | 36 | /* 37 | |-------------------------------------------------------------------------- 38 | | Set strategy 39 | |-------------------------------------------------------------------------- 40 | | 41 | | This option will determine the strategy used to determine the back url. 42 | | It can be 'session' (default) or 'referer' 43 | | 44 | */ 45 | 'back' => 'session', 46 | 47 | /* 48 | |-------------------------------------------------------------------------- 49 | | Carbon Language 50 | |-------------------------------------------------------------------------- 51 | | 52 | | This option the language of carbon library. 53 | | 54 | */ 55 | 'carbon' => true, 56 | 57 | /* 58 | |-------------------------------------------------------------------------- 59 | | Date Language 60 | |-------------------------------------------------------------------------- 61 | | 62 | | This option the language of jenssegers/date library. 63 | | 64 | */ 65 | 'date' => false, 66 | 67 | /* 68 | |-------------------------------------------------------------------------- 69 | | Auto Change Language 70 | |-------------------------------------------------------------------------- 71 | | 72 | | This option allows to change website language to user's 73 | | browser language. 74 | | 75 | */ 76 | 'auto' => true, 77 | 78 | /* 79 | |-------------------------------------------------------------------------- 80 | | Routes Prefix 81 | |-------------------------------------------------------------------------- 82 | | 83 | | This option indicates the prefix for language routes. 84 | | 85 | */ 86 | 'prefix' => 'languages', 87 | 88 | /* 89 | |-------------------------------------------------------------------------- 90 | | Middleware 91 | |-------------------------------------------------------------------------- 92 | | 93 | | This option indicates the middleware to change language. 94 | | 95 | */ 96 | 'middleware' => 'Akaunting\Language\Middleware\SetLocale', 97 | 98 | /* 99 | |-------------------------------------------------------------------------- 100 | | Controller 101 | |-------------------------------------------------------------------------- 102 | | 103 | | This option indicates the controller to be used. 104 | | 105 | */ 106 | 'controller' => 'Akaunting\Language\Controllers\Language', 107 | 108 | /* 109 | |-------------------------------------------------------------------------- 110 | | Flags 111 | |-------------------------------------------------------------------------- 112 | | 113 | | This option indicates the flags features. 114 | | 115 | */ 116 | 'flags' => ['width' => '22px', 'ul_class' => '', 'li_class' => '', 'img_class' => ''], 117 | 118 | /* 119 | |-------------------------------------------------------------------------- 120 | | Language code mode 121 | |-------------------------------------------------------------------------- 122 | | 123 | | This option indicates the language code and name to be used, short/long 124 | | and english/native. 125 | | Short: language code (en) 126 | | Long: languagecode-COUNTRYCODE (en-GB) 127 | | 128 | */ 129 | 'mode' => ['code' => 'short', 'name' => 'native'], 130 | 131 | /* 132 | |-------------------------------------------------------------------------- 133 | | Allowed languages 134 | |-------------------------------------------------------------------------- 135 | | 136 | | This options indicates the language allowed languages. 137 | | 138 | */ 139 | 'allowed' => ['en', 'es', 'fr', 'de', 'it'], 140 | 141 | /* 142 | |-------------------------------------------------------------------------- 143 | | All Languages 144 | |-------------------------------------------------------------------------- 145 | | 146 | | This option indicates the language codes and names. 147 | | 148 | */ 149 | 'all' => [ 150 | ['short' => 'ar', 'long' => 'ar-SA', 'direction' => 'rtl', 'english' => 'Arabic', 'native' => 'العربية'], 151 | ['short' => 'az', 'long' => 'az-AZ', 'direction' => 'ltr', 'english' => 'Azerbaijani', 'native' => 'Azərbaycan'], 152 | ['short' => 'bg', 'long' => 'bg-BG', 'direction' => 'ltr', 'english' => 'Bulgarian', 'native' => 'български'], 153 | ['short' => 'bn', 'long' => 'bn-BD', 'direction' => 'ltr', 'english' => 'Bengali', 'native' => 'বাংলা'], 154 | ['short' => 'bs', 'long' => 'bs-BA', 'direction' => 'ltr', 'english' => 'Bosnian', 'native' => 'Bosanski'], 155 | ['short' => 'ca', 'long' => 'ca-ES', 'direction' => 'ltr', 'english' => 'Catalan', 'native' => 'Català'], 156 | ['short' => 'cn', 'long' => 'zh-CN', 'direction' => 'ltr', 'english' => 'Chinese (S)', 'native' => '简体中文'], 157 | ['short' => 'cs', 'long' => 'cs-CZ', 'direction' => 'ltr', 'english' => 'Czech', 'native' => 'Čeština'], 158 | ['short' => 'da', 'long' => 'da-DK', 'direction' => 'ltr', 'english' => 'Danish', 'native' => 'Dansk'], 159 | ['short' => 'de', 'long' => 'de-DE', 'direction' => 'ltr', 'english' => 'German', 'native' => 'Deutsch'], 160 | ['short' => 'de', 'long' => 'de-AT', 'direction' => 'ltr', 'english' => 'Austrian', 'native' => 'Österreichisches Deutsch'], 161 | ['short' => 'fi', 'long' => 'fi-FI', 'direction' => 'ltr', 'english' => 'Finnish', 'native' => 'Suomi'], 162 | ['short' => 'fr', 'long' => 'fr-FR', 'direction' => 'ltr', 'english' => 'French', 'native' => 'Français'], 163 | ['short' => 'ea', 'long' => 'es-AR', 'direction' => 'ltr', 'english' => 'Spanish (Argentina)', 'native' => 'Español de Argentina'], 164 | ['short' => 'el', 'long' => 'el-GR', 'direction' => 'ltr', 'english' => 'Greek', 'native' => 'Ελληνικά'], 165 | ['short' => 'en', 'long' => 'en-AU', 'direction' => 'ltr', 'english' => 'English (AU)', 'native' => 'English (AU)'], 166 | ['short' => 'en', 'long' => 'en-CA', 'direction' => 'ltr', 'english' => 'English (CA)', 'native' => 'English (CA)'], 167 | ['short' => 'en', 'long' => 'en-GB', 'direction' => 'ltr', 'english' => 'English (GB)', 'native' => 'English (GB)'], 168 | ['short' => 'en', 'long' => 'en-US', 'direction' => 'ltr', 'english' => 'English (US)', 'native' => 'English (US)'], 169 | ['short' => 'es', 'long' => 'es-ES', 'direction' => 'ltr', 'english' => 'Spanish', 'native' => 'Español'], 170 | ['short' => 'et', 'long' => 'et-EE', 'direction' => 'ltr', 'english' => 'Estonian', 'native' => 'Eesti'], 171 | ['short' => 'he', 'long' => 'he-IL', 'direction' => 'rtl', 'english' => 'Hebrew', 'native' => 'עִבְרִית'], 172 | ['short' => 'hi', 'long' => 'hi-IN', 'direction' => 'ltr', 'english' => 'Hindi', 'native' => 'हिन्दी'], 173 | ['short' => 'hr', 'long' => 'hr-HR', 'direction' => 'ltr', 'english' => 'Croatian', 'native' => 'Hrvatski'], 174 | ['short' => 'hu', 'long' => 'hu-HU', 'direction' => 'ltr', 'english' => 'Hungarian', 'native' => 'Magyar'], 175 | ['short' => 'hy', 'long' => 'hy-AM', 'direction' => 'ltr', 'english' => 'Armenian', 'native' => 'Հայերեն',], 176 | ['short' => 'id', 'long' => 'id-ID', 'direction' => 'ltr', 'english' => 'Indonesian', 'native' => 'Bahasa Indonesia'], 177 | ['short' => 'is', 'long' => 'is-IS', 'direction' => 'ltr', 'english' => 'Icelandic', 'native' => 'Íslenska'], 178 | ['short' => 'it', 'long' => 'it-IT', 'direction' => 'ltr', 'english' => 'Italian', 'native' => 'Italiano'], 179 | ['short' => 'ir', 'long' => 'fa-IR', 'direction' => 'rtl', 'english' => 'Persian', 'native' => 'فارسی'], 180 | ['short' => 'jp', 'long' => 'ja-JP', 'direction' => 'ltr', 'english' => 'Japanese', 'native' => '日本語'], 181 | ['short' => 'ka', 'long' => 'ka-GE', 'direction' => 'ltr', 'english' => 'Georgian', 'native' => 'ქართული'], 182 | ['short' => 'ko', 'long' => 'ko-KR', 'direction' => 'ltr', 'english' => 'Korean', 'native' => '한국어'], 183 | ['short' => 'lt', 'long' => 'lt-LT', 'direction' => 'ltr', 'english' => 'Lithuanian', 'native' => 'Lietuvių'], 184 | ['short' => 'lv', 'long' => 'lv-LV', 'direction' => 'ltr', 'english' => 'Latvian', 'native' => 'Latviešu valoda'], 185 | ['short' => 'mk', 'long' => 'mk-MK', 'direction' => 'ltr', 'english' => 'Macedonian', 'native' => 'Македонски јазик'], 186 | ['short' => 'ms', 'long' => 'ms-MY', 'direction' => 'ltr', 'english' => 'Malay', 'native' => 'Bahasa Melayu'], 187 | ['short' => 'mx', 'long' => 'es-MX', 'direction' => 'ltr', 'english' => 'Mexico', 'native' => 'Español de México'], 188 | ['short' => 'nb', 'long' => 'nb-NO', 'direction' => 'ltr', 'english' => 'Norwegian', 'native' => 'Norsk Bokmål'], 189 | ['short' => 'ne', 'long' => 'ne-NP', 'direction' => 'ltr', 'english' => 'Nepali', 'native' => 'नेपाली'], 190 | ['short' => 'nl', 'long' => 'nl-NL', 'direction' => 'ltr', 'english' => 'Dutch', 'native' => 'Nederlands'], 191 | ['short' => 'pl', 'long' => 'pl-PL', 'direction' => 'ltr', 'english' => 'Polish', 'native' => 'Polski'], 192 | ['short' => 'pt-BR', 'long' => 'pt-BR', 'direction' => 'ltr', 'english' => 'Brazilian', 'native' => 'Português do Brasil'], 193 | ['short' => 'pt', 'long' => 'pt-PT', 'direction' => 'ltr', 'english' => 'Portuguese', 'native' => 'Português'], 194 | ['short' => 'ro', 'long' => 'ro-RO', 'direction' => 'ltr', 'english' => 'Romanian', 'native' => 'Română'], 195 | ['short' => 'ru', 'long' => 'ru-RU', 'direction' => 'ltr', 'english' => 'Russian', 'native' => 'Русский'], 196 | ['short' => 'sr', 'long' => 'sr-RS', 'direction' => 'ltr', 'english' => 'Serbian (Cyrillic)', 'native' => 'Српски језик'], 197 | ['short' => 'sr', 'long' => 'sr-CS', 'direction' => 'ltr', 'english' => 'Serbian (Latin)', 'native' => 'Српски језик'], 198 | ['short' => 'sq', 'long' => 'sq-AL', 'direction' => 'ltr', 'english' => 'Albanian', 'native' => 'Shqip'], 199 | ['short' => 'sk', 'long' => 'sk-SK', 'direction' => 'ltr', 'english' => 'Slovak', 'native' => 'Slovenčina'], 200 | ['short' => 'sl', 'long' => 'sl-SI', 'direction' => 'ltr', 'english' => 'Slovenian', 'native' => 'Slovenščina'], 201 | ['short' => 'sv', 'long' => 'sv-SE', 'direction' => 'ltr', 'english' => 'Swedish', 'native' => 'Svenska'], 202 | ['short' => 'th', 'long' => 'th-TH', 'direction' => 'ltr', 'english' => 'Thai', 'native' => 'ไทย'], 203 | ['short' => 'tr', 'long' => 'tr-TR', 'direction' => 'ltr', 'english' => 'Turkish', 'native' => 'Türkçe'], 204 | ['short' => 'tw', 'long' => 'zh-TW', 'direction' => 'ltr', 'english' => 'Chinese (T)', 'native' => '繁體中文'], 205 | ['short' => 'uk', 'long' => 'uk-UA', 'direction' => 'ltr', 'english' => 'Ukrainian', 'native' => 'Українська'], 206 | ['short' => 'ur', 'long' => 'ur-PK', 'direction' => 'rtl', 'english' => 'Urdu (Pakistan)', 'native' => 'اردو'], 207 | ['short' => 'uz', 'long' => 'uz-UZ', 'direction' => 'ltr', 'english' => 'Uzbek', 'native' => 'O\'zbek'], 208 | ['short' => 'vi', 'long' => 'vi-VN', 'direction' => 'ltr', 'english' => 'Vietnamese', 'native' => 'Tiếng Việt'], 209 | ], 210 | ]; 211 | -------------------------------------------------------------------------------- /src/Controllers/Language.php: -------------------------------------------------------------------------------- 1 | allowed($locale)) { 21 | $locale = config('app.locale'); 22 | } 23 | 24 | if (Auth::check()) { 25 | Auth::user()->setAttribute('locale', $locale)->save(); 26 | } else { 27 | $request->session()->put('locale', $locale); 28 | } 29 | } 30 | 31 | /** 32 | * Set locale and return home url. 33 | * 34 | * @param string $locale 35 | * @param \Illuminate\Http\Request $request 36 | * 37 | * @return string 38 | **/ 39 | public function home($locale, Request $request) 40 | { 41 | $this->setLocale($locale, $request); 42 | 43 | $url = config('language.url') ? url('/' . $locale) : url('/'); 44 | 45 | return redirect($url); 46 | } 47 | 48 | /** 49 | * Set locale and return back. 50 | * 51 | * @param string $locale 52 | * @param \Illuminate\Http\Request $request 53 | * 54 | * @return string 55 | **/ 56 | public function back($locale, Request $request) 57 | { 58 | $this->setLocale($locale, $request); 59 | 60 | $url = config('language.back', 'session') === 'referer' 61 | ? $this->getUrlFromReferer($locale, $request) 62 | : $this->getUrlFromSession($locale, $request); 63 | 64 | return redirect( 65 | $url 66 | ? $url 67 | : (config('language.url') ? url('/' . $locale) : url('/')) 68 | ); 69 | } 70 | 71 | private function getUrlFromSession($locale, Request $request) 72 | { 73 | $session = $request->session(); 74 | 75 | if (config('language.url')) { 76 | $previous_url = substr(str_replace(env('APP_URL'), '', $session->previousUrl()), 7); 77 | 78 | if (strlen($previous_url) == 3) { 79 | $previous_url = substr($previous_url, 3); 80 | } else { 81 | $previous_url = substr($previous_url, strrpos($previous_url, '/') + 1); 82 | } 83 | 84 | $url = rtrim(env('APP_URL'), '/') . '/' . $locale . '/' . ltrim($previous_url, '/'); 85 | 86 | $session->setPreviousUrl($url); 87 | } 88 | 89 | return $session->previousUrl(); 90 | } 91 | 92 | private function getUrlFromReferer($locale, Request $request) 93 | { 94 | $url = $request->headers->get('referer'); 95 | 96 | if (config('language.url')) { 97 | $url = substr(str_replace(env('APP_URL'), '', $url), 7); 98 | 99 | if (strlen($url) === 3) { 100 | $url = substr($url, 3); 101 | } else { 102 | $url = substr($url, strrpos($url, '/') + 1); 103 | } 104 | 105 | $url = rtrim(env('APP_URL'), '/') . '/' . $locale . '/' . ltrim($url, '/'); 106 | } 107 | 108 | return $url; 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /src/Facade.php: -------------------------------------------------------------------------------- 1 | app = $app; 40 | $this->version = $app->version(); 41 | $this->is_lumen = Str::contains($this->version, 'Lumen'); 42 | } 43 | 44 | /** 45 | * Get single flags view. 46 | * 47 | * @param string $code 48 | * 49 | * @return mixed 50 | **/ 51 | public static function flag($code = 'default') 52 | { 53 | if ($code == 'default') { 54 | $code = app()->getLocale(); 55 | } 56 | 57 | $name = self::getName($code); 58 | $code = self::country($code); 59 | 60 | return view('vendor.language.flag', compact('code', 'name')); 61 | } 62 | 63 | /** 64 | * Get country code based on locale. 65 | * 66 | * @param string $locale 67 | * 68 | * @return mixed 69 | **/ 70 | public static function country($locale = 'default') 71 | { 72 | if ($locale == 'default') { 73 | $locale = app()->getLocale(); 74 | } 75 | 76 | if (config('language.mode.code', 'short') == 'short') { 77 | $code = strtolower(substr(self::getLongCode($locale), 3)); 78 | } else { 79 | $code = strtolower(substr($locale, 3)); 80 | } 81 | 82 | return $code; 83 | } 84 | 85 | /** 86 | * Get all flags view. 87 | * 88 | * @return mixed 89 | **/ 90 | public static function flags() 91 | { 92 | return view('vendor.language.flags'); 93 | } 94 | 95 | /** 96 | * Return true if $code is an allowed lang. 97 | * Get all allowed languages. 98 | * 99 | * @param string $locale 100 | * 101 | * @return bool|array 102 | **/ 103 | public static function allowed($locale = null) 104 | { 105 | if ($locale) { 106 | return in_array($locale, array_keys(self::allowed())); 107 | } 108 | 109 | if (config('language.allowed')) { 110 | return self::names(array_merge(config('language.allowed'), [config('app.locale')])); 111 | } else { 112 | return self::names([config('app.locale')]); 113 | } 114 | } 115 | 116 | /** 117 | * Add names to an array of language codes as [$code => $language]. 118 | * 119 | * @param array $codes 120 | * 121 | * @return array 122 | **/ 123 | public static function names($codes) 124 | { 125 | // Get mode 126 | $mode = config('language.mode'); 127 | 128 | // Get languages from config 129 | $languages = config('language.all'); 130 | 131 | $array = []; 132 | 133 | // Generate an array with $code as key and $code language as value 134 | foreach ($codes as $code) { 135 | $lang_name = 'Unknown'; 136 | 137 | foreach ($languages as $language) { 138 | if ($language[$mode['code']] == $code) { 139 | $lang_name = $language[$mode['name']]; 140 | } 141 | } 142 | 143 | $array[$code] = $lang_name; 144 | } 145 | 146 | return $array; 147 | } 148 | 149 | /** 150 | * Add names to an array of language codes as [$language => $code]. 151 | * 152 | * @param array $langs 153 | * 154 | * @return array 155 | **/ 156 | public static function codes($langs) 157 | { 158 | // Get mode 159 | $mode = config('language.mode'); 160 | 161 | // Get languages from config 162 | $languages = config('language.all'); 163 | 164 | $array = []; 165 | 166 | // Generate an array with $lang as key and $lang code as value 167 | foreach ($langs as $lang) { 168 | $lang_code = 'unk'; 169 | 170 | foreach ($languages as $language) { 171 | if ($language[$mode['name']] == $lang) { 172 | $lang_code = $language[$mode['code']]; 173 | } 174 | } 175 | 176 | $array[$lang] = $lang_code; 177 | } 178 | 179 | return $array; 180 | } 181 | 182 | /** 183 | * Add directions to an array of language codes as [$code => $direction]. 184 | * 185 | * @param array $codes 186 | * 187 | * @return array 188 | **/ 189 | public static function directions($codes) 190 | { 191 | // Get mode 192 | $mode = config('language.mode'); 193 | 194 | // Get languages from config 195 | $languages = config('language.all'); 196 | 197 | $array = []; 198 | 199 | // Generate an array with $code as key and $code language as value 200 | foreach ($codes as $code) { 201 | $direction = 'ltr'; 202 | 203 | foreach ($languages as $language) { 204 | if ($language[$mode['code']] == $code) { 205 | $direction = $language['direction']; 206 | } 207 | } 208 | 209 | $array[$code] = $direction; 210 | } 211 | 212 | return $array; 213 | } 214 | 215 | /** 216 | * Returns the url to set up language and return back. 217 | * 218 | * @param string $code 219 | * 220 | * @return string 221 | **/ 222 | public static function back($code) 223 | { 224 | return route('language::back', ['locale' => $code]); 225 | } 226 | 227 | /** 228 | * Returns the url to set up language and return to url('/'). 229 | * 230 | * @param string $code 231 | * 232 | * @return string 233 | **/ 234 | public static function home($code) 235 | { 236 | return route('language::home', ['locale' => $code]); 237 | } 238 | 239 | /** 240 | * Returns the language code. 241 | * 242 | * @param string $name 243 | * 244 | * @return string 245 | **/ 246 | public static function getCode($name = 'default') 247 | { 248 | if ($name == 'default') { 249 | $name = self::getName(); 250 | } 251 | 252 | return self::codes([$name])[$name]; 253 | } 254 | 255 | /** 256 | * Returns the language long code. 257 | * 258 | * @param string $short 259 | * 260 | * @return string 261 | **/ 262 | public static function getLongCode($short = 'default') 263 | { 264 | if ($short == 'default') { 265 | $short = app()->getLocale(); 266 | } 267 | 268 | $long = 'en-GB'; 269 | 270 | // Get languages from config 271 | $languages = config('language.all'); 272 | 273 | foreach ($languages as $language) { 274 | if ($language['short'] != $short) { 275 | continue; 276 | } 277 | 278 | $long = $language['long']; 279 | } 280 | 281 | return $long; 282 | } 283 | 284 | /** 285 | * Returns the language short code. 286 | * 287 | * @param string $long 288 | * 289 | * @return string 290 | **/ 291 | public static function getShortCode($long = 'default') 292 | { 293 | if ($long == 'default') { 294 | $long = app()->getLocale(); 295 | } 296 | 297 | $short = 'en'; 298 | 299 | // Get languages from config 300 | $languages = config('language.all'); 301 | 302 | foreach ($languages as $language) { 303 | if ($language['long'] != $long) { 304 | continue; 305 | } 306 | 307 | $short = $language['short']; 308 | } 309 | 310 | return $short; 311 | } 312 | 313 | /** 314 | * Returns the language name. 315 | * 316 | * @param string $code 317 | * 318 | * @return string 319 | **/ 320 | public static function getName($code = 'default') 321 | { 322 | if ($code == 'default') { 323 | $code = app()->getLocale(); 324 | } 325 | 326 | return self::names([$code])[$code]; 327 | } 328 | 329 | /** 330 | * Returns the language direction. 331 | * 332 | * @param string $code 333 | * 334 | * @return string 335 | **/ 336 | public static function direction($code = 'default') 337 | { 338 | if ($code == 'default') { 339 | $code = app()->getLocale(); 340 | } 341 | 342 | return self::directions([$code])[$code]; 343 | } 344 | } 345 | -------------------------------------------------------------------------------- /src/Middleware/SetLocale.php: -------------------------------------------------------------------------------- 1 | allowed($locale)) { 19 | $locale = config('app.locale'); 20 | } 21 | 22 | // Set app language 23 | \App::setLocale($locale); 24 | 25 | // Set carbon language 26 | if (config('language.carbon')) { 27 | // Carbon uses only language code 28 | if (config('language.mode.code') == 'long') { 29 | $locale = explode('-', $locale)[0]; 30 | } 31 | 32 | \Carbon\Carbon::setLocale($locale); 33 | } 34 | 35 | // Set date language 36 | if (config('language.date')) { 37 | // Date uses only language code 38 | if (config('language.mode.code') == 'long') { 39 | $locale = explode('-', $locale)[0]; 40 | } 41 | 42 | \Date::setLocale($locale); 43 | } 44 | } 45 | 46 | public function setDefaultLocale() 47 | { 48 | if (config('language.auto')) { 49 | $languages = (new Agent())->languages(); 50 | 51 | $this->setLocale(reset($languages)); 52 | } else { 53 | $this->setLocale(config('app.locale')); 54 | } 55 | } 56 | 57 | public function setUserLocale() 58 | { 59 | $user = auth()->user(); 60 | 61 | if ($user->locale) { 62 | $this->setLocale($user->locale); 63 | } else { 64 | $this->setDefaultLocale(); 65 | } 66 | } 67 | 68 | public function setSystemLocale($request) 69 | { 70 | if ($request->session()->has('locale')) { 71 | $this->setLocale(session('locale')); 72 | } else { 73 | $this->setDefaultLocale(); 74 | } 75 | } 76 | 77 | /** 78 | * Handle an incoming request. 79 | * 80 | * @param \Illuminate\Http\Request $request 81 | * @param \Closure $next 82 | * 83 | * @return mixed 84 | */ 85 | public function handle($request, Closure $next) 86 | { 87 | if ($request->has('lang')) { 88 | $this->setLocale($request->get('lang')); 89 | } elseif (auth()->check()) { 90 | $this->setUserLocale(); 91 | } else { 92 | $this->setSystemLocale($request); 93 | } 94 | 95 | return $next($request); 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /src/Migrations/2020_01_01_000000_add_locale_column.php: -------------------------------------------------------------------------------- 1 | string('locale')->default(config('app.locale')); 16 | }); 17 | } 18 | 19 | /** 20 | * Reverse the migrations. 21 | * 22 | * @return void 23 | */ 24 | public function down() 25 | { 26 | Schema::table('users', function ($table) { 27 | $table->dropColumn('locale'); 28 | }); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/Provider.php: -------------------------------------------------------------------------------- 1 | app->routesAreCached()) { 21 | require __DIR__ . '/Routes/web.php'; 22 | } 23 | 24 | $this->publishes([ 25 | __DIR__ . '/Config/language.php' => config_path('language.php'), 26 | __DIR__ . '/Migrations/2020_01_01_000000_add_locale_column.php' => database_path('migrations/2020_01_01_000000_add_locale_column.php'), 27 | __DIR__ . '/Resources/views/flag.blade.php' => resource_path('views/vendor/language/flag.blade.php'), 28 | __DIR__ . '/Resources/views/flags.blade.php' => resource_path('views/vendor/language/flags.blade.php'), 29 | ], 'language'); 30 | 31 | $router->aliasMiddleware('language', config('language.middleware')); 32 | 33 | $this->app->register(AgentServiceProvider::class); 34 | 35 | $this->app->singleton('language', function ($app) { 36 | return new Language($app); 37 | }); 38 | } 39 | 40 | /** 41 | * Register the application services. 42 | * 43 | * @return void 44 | */ 45 | public function register() 46 | { 47 | $this->mergeConfigFrom(__DIR__ . '/Config/language.php', 'language'); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/al.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/al.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/am.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/am.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/at.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/at.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/au.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/au.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/bd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/bd.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/be.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/be.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/bg.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/br.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/br.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/ca.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/ch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/ch.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/cn.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/cs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/cs.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/cz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/cz.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/de.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/dk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/dk.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/ee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/ee.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/es.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/es.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/eu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/eu.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/fi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/fi.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/fr.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/gb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/gb.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/ge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/ge.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/gr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/gr.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/hk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/hk.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/hr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/hr.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/hu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/hu.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/id.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/ie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/ie.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/il.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/il.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/in.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/ir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/ir.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/it.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/it.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/jp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/jp.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/kr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/kr.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/lt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/lt.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/lv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/lv.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/mk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/mk.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/mx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/mx.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/my.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/my.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/ng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/ng.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/nl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/nl.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/no.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/no.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/np.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/np.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/pk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/pk.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/pl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/pl.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/pt.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/ro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/ro.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/rs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/rs.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/ru.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/ru.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/sa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/sa.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/se.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/se.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/sg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/sg.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/sk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/sk.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/sl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/sl.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/th.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/th.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/tr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/tr.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/tw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/tw.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/ua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/ua.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/us.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/uz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/uz.png -------------------------------------------------------------------------------- /src/Resources/assets/img/flags/vn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akaunting/laravel-language/83285fb4ad450b406f2df8570090828e4326ee1a/src/Resources/assets/img/flags/vn.png -------------------------------------------------------------------------------- /src/Resources/views/flag.blade.php: -------------------------------------------------------------------------------- 1 | {{ $name }} -------------------------------------------------------------------------------- /src/Resources/views/flags.blade.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Routes/web.php: -------------------------------------------------------------------------------- 1 | ['web', 'language'], 9 | 'as' => 'language::', 10 | 'prefix' => config('language.prefix'), 11 | ], function () { 12 | $controller = config('language.controller'); 13 | 14 | Route::get('/{locale}/back', $controller . '@back')->name('back'); 15 | 16 | if (config('language.home')) { 17 | Route::get('/{locale}/home', $controller . '@home')->name('home'); 18 | } 19 | }); 20 | -------------------------------------------------------------------------------- /src/helpers.php: -------------------------------------------------------------------------------- 1 |