├── .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 | 
4 | [](https://styleci.io/repos/102290249)
5 | [](https://scrutinizer-ci.com/g/akaunting/laravel-language)
6 | [](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 |
--------------------------------------------------------------------------------
/src/Resources/views/flags.blade.php:
--------------------------------------------------------------------------------
1 |