diff --git a/.gitignore b/.gitignore index afaccac0..bb37dc55 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ Homestead.json Homestead.yaml npm-debug.log yarn-error.log + +storage/app/public/.DS_Store diff --git a/CHANGELOG.md b/CHANGELOG.md index 889ab507..dc461fc8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Release Notes +## v1.1.2 (2018-02-05) + +### Added +- Translation support +- Initial "Supported" application support + +### Changed +- button layout and behaviour + +### Fixed +- Bottom of button too short in some browsers +- Icon not loading back in when required fields not filled in + + ## v1.1.0 (2018-02-05) ### Added diff --git a/app/Http/Controllers/ItemController.php b/app/Http/Controllers/ItemController.php index cf1ddcb7..5cd2d5d1 100644 --- a/app/Http/Controllers/ItemController.php +++ b/app/Http/Controllers/ItemController.php @@ -138,11 +138,20 @@ class ItemController extends Controller 'icon' => $path ]); } + + $config = json_encode($request->input('config')); + if($config) { + $request->merge([ + 'description' => $config + ]); + } + + //die(print_r($request->input('config'))); Item::create($request->all()); return redirect()->route('dash') - ->with('success','Item created successfully'); + ->with('success', __('alert.success.item_created')); } /** @@ -197,7 +206,7 @@ class ItemController extends Controller Item::find($id)->update($request->all()); return redirect()->route('dash') - ->with('success','Item updated successfully'); + ->with('success',__('alert.success.item_updated')); } /** @@ -219,7 +228,7 @@ class ItemController extends Controller } return redirect()->route('items.index') - ->with('success','Item deleted successfully'); + ->with('success',__('alert.success.item_deleted')); } /** @@ -235,6 +244,26 @@ class ItemController extends Controller ->where('id', $id) ->restore(); return redirect()->route('items.index') - ->with('success','Item restored successfully'); + ->with('success',__('alert.success.item_restored')); } + + /** + * Return details for supported apps + * + * @return Json + */ + public function appload(Request $request) + { + $app = $request->input('app'); + if($app) { + $all_supported = Item::supportedList(); + $app_details = new $all_supported[$app]; + } + $output['icon'] = $app_details->icon(); + $output['colour'] = $app_details->defaultColour(); + $output['config'] = $app_details->configDetails(); + return json_encode($output); + } + + } diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 7fa0e21b..3da34556 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -40,7 +40,7 @@ class SettingsController extends Controller ]); } else { return redirect()->route('settings.list')->with([ - 'error' => 'This Setting does not exist.', + 'error' => __('app.alert.error.not_exist'), ]); } } @@ -74,11 +74,11 @@ class SettingsController extends Controller $setting->save(); return redirect()->route('settings.index')->with([ - 'success' => 'You have successfully edited this Setting!', + 'success' => __('app.alert.success.setting_updated'), ]); } else { return redirect()->route('settings.index')->with([ - 'error' => 'This Setting does not exist.', + 'error' => __('app.alert.error.not_exist'), ]); } } @@ -95,7 +95,7 @@ class SettingsController extends Controller $setting->save(); } return redirect()->route('settings.index')->with([ - 'success' => 'You have successfully edited this Setting!', + 'success' => __('app.alert.success.setting_updated'), ]); } diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index 1c2d114e..de4a4c37 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -13,6 +13,7 @@ class VerifyCsrfToken extends Middleware */ protected $except = [ // - 'order' + 'order', + 'appload' ]; } diff --git a/app/Item.php b/app/Item.php index 2121698d..3c306363 100644 --- a/app/Item.php +++ b/app/Item.php @@ -26,8 +26,14 @@ class Item extends Model public static function supportedList() { return [ - 'NZBGet' => App\SupportedApps\Nzbget::class, - 'Plex' => App\SupportedApps\Plex::class, + 'Duplicati' => \App\SupportedApps\Duplicati::class, + 'Emby' => \App\SupportedApps\Emby::class, + 'NZBGet' => \App\SupportedApps\Nzbget::class, + 'pFsense' => \App\SupportedApps\Pfsense::class, + 'Pihole' => \App\SupportedApps\Pihole::class, + 'Plex' => \App\SupportedApps\Plex::class, + 'UniFi' => \App\SupportedApps\Unifi::class, + 'Portainer' => \App\SupportedApps\Portainer::class, ]; } public static function supportedOptions() @@ -45,4 +51,19 @@ class Item extends Model { return $query->where('pinned', 1); } + + public function getConfigAttribute() + { + $output = null; + if(isset($this->description) && !empty($this->description)){ + $output = json_decode($this->description); + if(isset($output->type) && !empty($output->type)) { + $class = $output->type; + $sap = new $class(); + $view = $sap->configDetails(); + } + $output->view = $view; + } + return (object)$output; + } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index fa04991c..502b28f3 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -46,6 +46,9 @@ class AppServiceProvider extends ServiceProvider } else { Artisan::call('migrate', array('--path' => 'database/migrations', '--force' => true, '--seed' => true)); } + $lang = Setting::fetch('language'); + \App::setLocale($lang); + } view()->share('alt_bg', $alt_bg); diff --git a/app/Setting.php b/app/Setting.php index d734f6ef..8eae80dd 100644 --- a/app/Setting.php +++ b/app/Setting.php @@ -15,6 +15,10 @@ class Setting extends Model */ protected $table = 'settings'; + protected $fillable = [ + 'id', 'group_id', 'key', 'type', 'options', 'label', 'value', 'order', 'system' + ]; + /** * Tell the Model this Table doesn't support timestamps. * @@ -45,28 +49,28 @@ class Setting extends Model switch($this->type) { case 'image': if(!empty($this->value)) { - $value = 'View'; + $value = ''.__('app.settings.view').''; } else { - $value = '- not set -'; + $value = __('app.options.none'); } break; case 'boolean': if((bool)$this->value === true) { - $value = 'Yes'; + $value = __('app.options.yes'); } else { - $value = 'No'; + $value = __('app.options.no'); } break; case 'select': if(!empty($this->value) && $this->value !== 'none') { $options = (array)json_decode($this->options); - $value = $options[$this->value]; + $value = __($options[$this->value]); } else { - $value = '- not set -'; + $value = __('app.options.none'); } break; default: - $value = $this->value; + $value = __($this->value); break; } @@ -80,11 +84,11 @@ class Setting extends Model case 'image': $value = ''; if(isset($this->value) && !empty($this->value)) { - $value .= ''; + $value .= ''; } $value .= Form::file('value', ['class' => 'form-control']); if(isset($this->value) && !empty($this->value)) { - $value .= 'Reset back to default'; + $value .= ''.__('app.settings.reset').''; } break; @@ -102,6 +106,9 @@ class Setting extends Model break; case 'select': $options = json_decode($this->options); + foreach($options as $key => $opt) { + $options->$key = __($opt); + } $value = Form::select('value', $options, null, ['class' => 'form-control']); break; default: @@ -199,8 +206,8 @@ class Setting extends Model $output .= '
'; $output .= Form::open(['url' => $url, 'method' => 'get']); $output .= '
'; - $output .= Form::text($var, null, ['class' => 'homesearch', 'placeholder' => $name.' search...']); - $output .= ''; + $output .= Form::text($var, null, ['class' => 'homesearch', 'placeholder' => __($name).' '.__('app.settings.search').'...']); + $output .= ''; $output .= '
'; $output .= Form::close(); $output .= '
'; diff --git a/app/SupportedApps/Contracts/Applications.php b/app/SupportedApps/Contracts/Applications.php index 31fe5e58..99ddb1b7 100644 --- a/app/SupportedApps/Contracts/Applications.php +++ b/app/SupportedApps/Contracts/Applications.php @@ -3,5 +3,9 @@ interface Applications { public function defaultColour(); + + public function icon(); + + public function configDetails(); } \ No newline at end of file diff --git a/app/SupportedApps/Duplicati.php b/app/SupportedApps/Duplicati.php new file mode 100644 index 00000000..34de49e1 --- /dev/null +++ b/app/SupportedApps/Duplicati.php @@ -0,0 +1,16 @@ + env('APP_NAME', 'Heimdall'), - 'version' => '1.1.0', + 'version' => '1.2.0', /* |-------------------------------------------------------------------------- diff --git a/database/seeds/SettingsSeeder.php b/database/seeds/SettingsSeeder.php index d6ad7157..850fe8a4 100644 --- a/database/seeds/SettingsSeeder.php +++ b/database/seeds/SettingsSeeder.php @@ -14,29 +14,39 @@ class SettingsSeeder extends Seeder public function run() { // Groups - if(!SettingGroup::find(1)) { + if(!$setting_group = SettingGroup::find(1)) { $setting_group = new SettingGroup; $setting_group->id = 1; - $setting_group->title = 'System'; + $setting_group->title = 'app.settings.system'; $setting_group->order = 0; $setting_group->save(); - } - if(!SettingGroup::find(2)) { - $setting_group = new SettingGroup; - $setting_group->id = 2; - $setting_group->title = 'Appearance'; - $setting_group->order = 1; + } else { + $setting_group->title = 'app.settings.system'; $setting_group->save(); } - if(!SettingGroup::find(3)) { + if(!$setting_group = SettingGroup::find(2)) { + $setting_group = new SettingGroup; + $setting_group->id = 2; + $setting_group->title = 'app.settings.appearance'; + $setting_group->order = 1; + $setting_group->save(); + } else { + $setting_group->title = 'app.settings.appearance'; + $setting_group->save(); + } + if(!$setting_group = SettingGroup::find(3)) { $setting_group = new SettingGroup; $setting_group->id = 3; - $setting_group->title = 'Miscellaneous'; + $setting_group->title = 'app.settings.miscellaneous'; $setting_group->order = 2; $setting_group->save(); + } else { + $setting_group->title = 'app.settings.miscellaneous'; + $setting_group->save(); } if($version = Setting::find(1)) { + $version->label = 'app.settings.version'; $version->value = config('app.version'); $version->save(); } else { @@ -45,37 +55,45 @@ class SettingsSeeder extends Seeder $setting->group_id = 1; $setting->key = 'version'; $setting->type = 'text'; - $setting->label = 'Version'; + $setting->label = 'app.settings.version'; $setting->value = config('app.version'); $setting->system = true; $setting->save(); } - if(!Setting::find(2)) { + if(!$setting = Setting::find(2)) { $setting = new Setting; $setting->id = 2; $setting->group_id = 2; $setting->key = 'background_image'; $setting->type = 'image'; - $setting->label = 'Background Image'; + $setting->label = 'app.settings.background_image'; + $setting->save(); + } else { + $setting->label = 'app.settings.background_image'; $setting->save(); } - if(!Setting::find(3)) { + if(!$setting = Setting::find(3)) { $setting = new Setting; $setting->id = 3; $setting->group_id = 3; $setting->key = 'homepage_search'; $setting->type = 'boolean'; - $setting->label = 'Homepage Search'; + $setting->label = 'app.settings.homepage_search'; + $setting->save(); + } else { + $setting->label = 'app.settings.homepage_search'; $setting->save(); } - if(!Setting::find(4)) { - $options = json_encode([ - 'none' => '- not set -', - 'google' => 'Google', - 'ddg' => 'DuckDuckGo', - 'bing' => 'Bing' - ]); + + $options = json_encode([ + 'none' => 'app.options.none', + 'google' => 'app.options.google', + 'ddg' => 'app.options.ddg', + 'bing' => 'app.options.bing' + ]); + + if(!$setting = Setting::find(4)) { $setting = new Setting; $setting->id = 4; @@ -83,9 +101,38 @@ class SettingsSeeder extends Seeder $setting->key = 'search_provider'; $setting->type = 'select'; $setting->options = $options; - $setting->label = 'Search Provider'; + $setting->label = 'app.settings.search_provider'; + $setting->save(); + } else { + $setting->options = $options; + $setting->label = 'app.settings.search_provider'; $setting->save(); } + + + $language_options = json_encode([ + 'de' => 'Deutsch (German)', + 'en' => 'English', + 'fi' => 'Suomi (Finnish)', + 'fr' => 'Français (French)', + 'sv' => 'Svenska (Swedish)', + 'es' => 'Español (Spanish)', + ]); + if($languages = Setting::find(5)) { + $languages->options = $language_options; + $languages->save(); + } else { + $setting = new Setting; + $setting->id = 5; + $setting->group_id = 1; + $setting->key = 'language'; + $setting->type = 'select'; + $setting->label = 'app.settings.language'; + $setting->options = $language_options; + $setting->value = 'en'; + $setting->save(); + } + } } diff --git a/public/css/app.css b/public/css/app.css index e9b1cfca..536bcd7e 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -724,7 +724,7 @@ body { } div.create { - padding: 30px; + padding: 30px 15px; display: -webkit-box; display: -ms-flexbox; display: flex; @@ -733,7 +733,7 @@ div.create { } div.create .input { - width: 260px; + width: 280px; margin: 20px; } @@ -877,11 +877,25 @@ input:checked + .slider:before { } } +@keyframes autofill { + to { + background: #f5f5f5; + color: #fff; + } +} + input:-webkit-autofill { -webkit-animation-name: autofill; -webkit-animation-fill-mode: both; } +input:autofill { + -webkit-animation-name: autofill; + animation-name: autofill; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + button.link { border: none; -webkit-appearance: none; @@ -937,6 +951,7 @@ a.settinglink { -webkit-box-shadow: 0px 0px 5px 0 rgba(0, 0, 0, 0.4); box-shadow: 0px 0px 5px 0 rgba(0, 0, 0, 0.4); overflow: hidden; + position: relative; } .searchform input { @@ -949,12 +964,12 @@ a.settinglink { .searchform button { position: absolute; - right: 14px; - top: 14px; + right: 0px; + top: 0px; border: none; font-size: 16px; padding: 7px 15px; - line-height: 37px; + line-height: 38px; font-weight: 500; border-top-right-radius: 5px; border-bottom-right-radius: 5px; @@ -963,6 +978,119 @@ a.settinglink { background: #d64d55; } +.ui-autocomplete { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + float: left; + display: none; + min-width: 160px; + padding: 4px 0; + margin: 0 0 10px 25px; + list-style: none; + background-color: #ffffff; + border-color: #ccc; + border-color: rgba(0, 0, 0, 0.2); + border-style: solid; + border-width: 1px; + border-radius: 5px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + background-clip: padding-box; + *border-right-width: 2px; + *border-bottom-width: 2px; +} + +.ui-menu-item { + display: block; + padding: 3px 15px; + clear: both; + font-weight: normal; + line-height: 18px; + color: #555555; + white-space: nowrap; + text-decoration: none; +} + +.ui-state-hover, +.ui-state-active { + font-weight: 700; +} + +#appimage img { + max-width: 150px; +} + +#sapconfig { + display: none; + width: 100%; +} + +#sapconfig h2 { + background: #f2f3f6; + padding: 18px 25px; + margin-left: -15px; + width: calc(100% + 30px); + /* margin-right: -30px; */ + border-top: 1px solid #dbdce3; + border-bottom: 1px solid #dbdce3; + font-size: 18px; + color: #5b5b5b; + font-weight: 500; +} + +#sapconfig .items { + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} + +hr { + margin: 23px 0 18px; + height: 0; + border-style: none; + border-width: 0; + border-top: 1px solid #eaeaea; + border-bottom: 1px solid #fff; +} + +.upload-btn-wrapper { + position: relative; + overflow: hidden; + display: inline-block; +} + +.btn { + border: none; + color: white; + background-color: #d64d55; + padding: 8px 12px; + border-radius: 8px; + font-size: 16px; +} + +.upload-btn-wrapper input[type=file] { + font-size: 100px; + position: absolute; + left: 0; + top: 0; + opacity: 0; +} + +.icon-container { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.icon-container img { + margin-right: 15px; +} + /*! Huebee v2.0.0 http://huebee.buzz ---------------------------------------------- */ diff --git a/public/js/app.js b/public/js/app.js index 834be77c..7dfd6f33 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -34,11 +34,6 @@ $.when( $.ready ).then(function() { $("#sortable").sortable("disable"); - $('.color-picker').each( function( i, elem ) { - var hueb = new Huebee( elem, { - // options - }); - }); $('#app').on('click', '#config-button', function(e) { e.preventDefault(); var app = $('#app'); diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 1fa7d8eb..4b09ab38 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -1,4 +1,4 @@ { - "/css/app.css": "/css/app.css?id=2102f4e7317cba78bff5", - "/js/app.js": "/js/app.js?id=2dffa24cf7255229e085" + "/css/app.css": "/css/app.css?id=4f5b9f5ba0f1f57405c8", + "/js/app.js": "/js/app.js?id=559585a774e3f088503a" } \ No newline at end of file diff --git a/readme.md b/readme.md index ade49899..2ba90550 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,6 @@ ![alt text](https://i.imgur.com/aUpMns5.jpg) ## About - Heimdall is a way to organise all those links to your most used web sites and web applications in a simple way. Simplicity is the key to Heimdall. @@ -12,11 +11,26 @@ Why not use it as your browser start page? It even has the ability to include a If you want to see a quick video of it in use, go to https://drive.google.com/file/d/1cijXgmjem_q2OfKMp36qVuXRiyOzvhWC/view ## Installing - Apart from the Laravel dependencies, namely PHP >= 7.0.0, OpenSSL PHP Extension, PDO PHP Extension, Mbstring PHP Extension, Tokenizer PHP Extension and XML PHP Extension, the only other thing Heimdall needs is sqlite support. Installation is as simple as cloning the repository somewhere, or downloading and extracting the zip/tar and pointing your httpd document root to it. For simple testing you could just go to the folder and type `php artisan serve` +## Languages +The app has been translated into several languages, however the quality of the translations could do with work, if you would like to improve them or help with other translations they are stored in /resources/lang/ + +To create a new one, create a new folder with the ISO 3166-1 alpha-2 code as the name, copy app.php from /resources/lang/en/app.php into your new folder and replace the english strings. + +When you are finished create a pull request. + +Currently added languages are + +- English +- German +- Finnish +- French +- Swedish +- Spanish + ## Web Server Configuration ### Apache diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js index 1eb4981b..76fbd503 100644 --- a/resources/assets/js/app.js +++ b/resources/assets/js/app.js @@ -25,11 +25,6 @@ $.when( $.ready ).then(function() { $("#sortable").sortable("disable"); - $('.color-picker').each( function( i, elem ) { - var hueb = new Huebee( elem, { - // options - }); - }); $('#app').on('click', '#config-button', function(e) { e.preventDefault(); var app = $('#app'); diff --git a/resources/assets/sass/_app.scss b/resources/assets/sass/_app.scss index f687f6bb..10ace957 100644 --- a/resources/assets/sass/_app.scss +++ b/resources/assets/sass/_app.scss @@ -393,11 +393,11 @@ body { } } div.create { - padding: 30px; + padding: 30px 15px; display: flex; flex-wrap: wrap; .input { - width: 260px; + width: 280px; margin: 20px; label:not(.switch) { width: 100%; @@ -517,17 +517,27 @@ div.create { } @-webkit-keyframes autofill { - to { - background:#f5f5f5; - color:#fff; - } - } - - input:-webkit-autofill { - -webkit-animation-name: autofill; - -webkit-animation-fill-mode: both; - } - + to { + background:#f5f5f5; + color:#fff; + } +} + @keyframes autofill { + to { + background:#f5f5f5; + color:#fff; + } + } + + input:-webkit-autofill { + -webkit-animation-name: autofill; + -webkit-animation-fill-mode: both; + } + input:autofill { + animation-name: autofill; + animation-fill-mode: both; + } + button.link { border: none; appearance: none; @@ -570,7 +580,8 @@ div.create { background: white; border-radius: 5px; box-shadow: 0px 0px 5px 0 rgba(0,0,0,0.4); - overflow: hidden; + overflow: hidden; + position: relative; } input { padding: 17px 15px; @@ -581,12 +592,12 @@ div.create { } button { position: absolute; - right: 14px; - top: 14px; + right: 0px; + top: 0px; border: none; font-size: 16px; padding: 7px 15px; - line-height: 37px; + line-height: 38px; font-weight: 500; border-top-right-radius: 5px; border-bottom-right-radius: 5px; @@ -594,4 +605,116 @@ div.create { text-transform: uppercase; background: $app-red; } + } + + .ui-autocomplete { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + float: left; + display: none; + min-width: 160px; + padding: 4px 0; + margin: 0 0 10px 25px; + list-style: none; + background-color: #ffffff; + border-color: #ccc; + border-color: rgba(0, 0, 0, 0.2); + border-style: solid; + border-width: 1px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; + *border-right-width: 2px; + *border-bottom-width: 2px; + +} + +.ui-menu-item { + display: block; + padding: 3px 15px; + clear: both; + font-weight: normal; + line-height: 18px; + color: #555555; + white-space: nowrap; + text-decoration: none; +} + +.ui-state-hover, .ui-state-active { + font-weight: 700; + +} + +#appimage { + img { + max-width: 150px; + } +} + +#sapconfig { + display: none; + width: 100%; + h2 { + background: #f2f3f6; + padding: 18px 25px; + margin-left: -15px; + width: calc(100% + 30px); + /* margin-right: -30px; */ + border-top: 1px solid #dbdce3; + border-bottom: 1px solid #dbdce3; + font-size: 18px; + color: #5b5b5b; + font-weight: 500; + } + .items { + display: flex; + } +} +hr { + margin: 23px 0 18px; + height: 0; + border-style: none; + border-width: 0; + border-top: 1px solid #eaeaea; + border-bottom: 1px solid #fff; + +} + +.upload-btn-wrapper { + position: relative; + overflow: hidden; + display: inline-block; + } + + .btn { + border: none; + color: white; + background-color: $app-red; + padding: 8px 12px; + border-radius: 8px; + font-size: 16px; + } + + .upload-btn-wrapper input[type=file] { + font-size: 100px; + position: absolute; + left: 0; + top: 0; + opacity: 0; + } + + .icon-container { + display: flex; + align-items: center; + img { + margin-right: 15px; + } } \ No newline at end of file diff --git a/resources/lang/de/app.php b/resources/lang/de/app.php new file mode 100644 index 00000000..adaeb1e4 --- /dev/null +++ b/resources/lang/de/app.php @@ -0,0 +1,58 @@ + 'System', + 'settings.appearance' => 'Aussehen', + 'settings.miscellaneous' => 'Sonstiges', + 'settings.version' => 'Ausführung', + 'settings.background_image' => 'Hintergrundbild', + 'settings.homepage_search' => 'Homepage Suchen', + 'settings.search_provider' => 'Suchanbieter', + 'settings.language' => 'Sprache', + 'settings.reset' => 'Zurücksetzen auf Standard zurück', + 'settings.remove' => 'Entfernen', + 'settings.search' => 'suche', + 'settings.no_items' => 'Keine Elemente gefunden', + 'settings.label' => 'Etikett', + 'settings.value' => 'Wert', + 'settings.edit' => 'Bearbeiten', + 'settings.view' => 'Ansicht', + 'options.none' => '- nicht festgelegt -', + 'options.google' => 'Google', + 'options.ddg' => 'DuckDuckGo', + 'options.bing' => 'Bing', + 'options.yes' => 'Ja', + 'options.no' => 'Nein', + 'buttons.save' => 'Speichern', + 'buttons.cancel' => 'Abbrechen', + 'buttons.add' => 'Hinzufügen', + 'buttons.upload' => 'Hochladen einer Datei', + 'dash.pin_item' => 'Element auf dem Dashboard anheften', + 'dash.no_apps' => 'Derzeit gibt es keine angeheftete Anwendungen :link1 oder :link2', + 'dash.link1' => 'Hinzufügen einer Anwendung hier', + 'dash.link2' => 'Heften Sie ein Element auf dem Armaturenbrett', + 'dash.pinned_items' => 'Angeheftete Elemente', + 'apps.app_list' => 'Anwendungsliste', + 'apps.view_trash' => 'Ansicht Papierkorb', + 'apps.add_application' => 'Anwendung hinzufügen', + 'apps.application_name' => 'Anwendungsname', + 'apps.colour' => 'Farbe', + 'apps.icon' => 'Symbol', + 'apps.pinned' => 'Festgesteckt', + 'apps.title' => 'Titel', + 'apps.hex' => 'Hex-Farbe', + 'apps.username' => 'Benutzername', + 'apps.password' => 'Passwort', + 'apps.config' => 'Konfig', + 'url' => 'Url', + 'title' => 'Titel', + 'delete' => 'Löschen', + 'optional' => 'Wahlweise', + 'restore' => 'Wiederherstellen', + 'alert.success.item_created' => 'Element erfolgreich erstellt', + 'alert.success.item_updated' => 'Artikel erfolgreich aktualisiert', + 'alert.success.item_deleted' => 'Element erfolgreich gelöscht', + 'alert.success.item_restored' => 'Element erfolgreich wiederhergestellt', + 'alert.success.setting_updated' => 'Sie haben diese Einstellung erfolgreich bearbeitet', + 'alert.error.not_exist' => 'Diese Einstellung existiert nicht.', +); \ No newline at end of file diff --git a/resources/lang/en/app.php b/resources/lang/en/app.php new file mode 100644 index 00000000..6379cbe6 --- /dev/null +++ b/resources/lang/en/app.php @@ -0,0 +1,78 @@ + 'System', + 'settings.appearance' => 'Appearance', + 'settings.miscellaneous' => 'Miscellaneous', + + 'settings.version' => 'Version', + 'settings.background_image' => 'Background Image', + 'settings.homepage_search' => 'Homepage Search', + 'settings.search_provider' => 'Search Provider', + 'settings.language' => 'Language', + 'settings.reset' => 'Reset back to default', + 'settings.remove' => 'Remove', + 'settings.search' => 'search', + 'settings.no_items' => 'No items found', + + + 'settings.label' => 'Label', + 'settings.value' => 'Value', + 'settings.edit' => 'Edit', + 'settings.view' => 'View', + + 'options.none' => '- not set -', + 'options.google' => 'Google', + 'options.ddg' => 'DuckDuckGo', + 'options.bing' => 'Bing', + 'options.yes' => 'Yes', + 'options.no' => 'No', + + 'buttons.save' => 'Save', + 'buttons.cancel' => 'Cancel', + 'buttons.add' => 'Add', + 'buttons.upload' => 'Upload a file', + + 'dash.pin_item' => 'Pin item to dashboard', + 'dash.no_apps' => 'There are currently no pinned applications, :link1 or :link2', + 'dash.link1' => 'Add an application here', + 'dash.link2' => 'Pin an item to the dash', + 'dash.pinned_items' => 'Pinned Items', + + 'apps.app_list' => 'Application list', + 'apps.view_trash' => 'View trash', + 'apps.add_application' => 'Add application', + 'apps.application_name' => 'Application name', + 'apps.colour' => 'Colour', + 'apps.icon' => 'Icon', + 'apps.pinned' => 'Pinned', + 'apps.title' => 'Title', + 'apps.hex' => 'Hex colour', + 'apps.username' => 'Username', + 'apps.password' => 'Password', + 'apps.config' => 'Config', + + 'url' => 'Url', + 'title' => 'Title', + 'delete' => 'Delete', + 'optional' => 'Optional', + 'restore' => 'Restore', + + 'alert.success.item_created' => 'Item created successfully', + 'alert.success.item_updated' => 'Item updated successfully', + 'alert.success.item_deleted' => 'Item deleted successfully', + 'alert.success.item_restored' => 'Item restored successfully', + + 'alert.success.setting_updated' => 'You have successfully edited this Setting', + 'alert.error.not_exist' => 'This Setting does not exist.', + + +]; diff --git a/resources/lang/es/app.php b/resources/lang/es/app.php new file mode 100644 index 00000000..dd7c632a --- /dev/null +++ b/resources/lang/es/app.php @@ -0,0 +1,58 @@ + 'Sistema', + 'settings.appearance' => 'Apariencia', + 'settings.miscellaneous' => 'Miscelánea', + 'settings.version' => 'Versión', + 'settings.background_image' => 'Imagen De Fondo', + 'settings.homepage_search' => 'Página De Inicio De Búsqueda', + 'settings.search_provider' => 'Proveedor de búsqueda', + 'settings.language' => 'Idioma', + 'settings.reset' => 'Restablecer a predeterminado', + 'settings.remove' => 'Quitar', + 'settings.search' => 'búsqueda', + 'settings.no_items' => 'No se encontraron elementos', + 'settings.label' => 'Etiqueta', + 'settings.value' => 'Valor', + 'settings.edit' => 'Editar', + 'settings.view' => 'Ver', + 'options.none' => '- no establecido -', + 'options.google' => 'Google', + 'options.ddg' => 'DuckDuckGo', + 'options.bing' => 'Bing', + 'options.yes' => 'Sí', + 'options.no' => 'No', + 'buttons.save' => 'Guardar', + 'buttons.cancel' => 'Cancelar', + 'buttons.add' => 'Añadir', + 'buttons.upload' => 'Cargar un archivo', + 'dash.pin_item' => 'Pin elemento al tablero', + 'dash.no_apps' => 'Actualmente no hay anclados aplicaciones :link1 o :link2', + 'dash.link1' => 'Agregue una aplicación aquí', + 'dash.link2' => 'Pin de un elemento en el tablero', + 'dash.pinned_items' => 'Elementos Anclados', + 'apps.app_list' => 'Lista de aplicaciones', + 'apps.view_trash' => 'Vista de la basura', + 'apps.add_application' => 'Agregar aplicación', + 'apps.application_name' => 'Nombre de la aplicación', + 'apps.colour' => 'Color', + 'apps.icon' => 'Icono', + 'apps.pinned' => 'Fijado', + 'apps.title' => 'Título', + 'apps.hex' => 'Hexagonal de color', + 'apps.username' => 'Nombre de usuario', + 'apps.password' => 'Contraseña', + 'apps.config' => 'Config', + 'url' => 'Url', + 'title' => 'Título', + 'delete' => 'Borrar', + 'optional' => 'Opcional', + 'restore' => 'Restaurar', + 'alert.success.item_created' => 'Elemento creado con éxito', + 'alert.success.item_updated' => 'Artículo actualizado con éxito', + 'alert.success.item_deleted' => 'Elemento eliminado correctamente', + 'alert.success.item_restored' => 'Elemento restaurado con éxito', + 'alert.success.setting_updated' => 'Ha editado con éxito esta configuración', + 'alert.error.not_exist' => 'Esta configuración no existe.', +); \ No newline at end of file diff --git a/resources/lang/fi/app.php b/resources/lang/fi/app.php new file mode 100644 index 00000000..478591e5 --- /dev/null +++ b/resources/lang/fi/app.php @@ -0,0 +1,58 @@ + 'Järjestelmä', + 'settings.appearance' => 'Ulkonäkö', + 'settings.miscellaneous' => 'Sekalainen', + 'settings.version' => 'Versio', + 'settings.background_image' => 'Tausta Kuva', + 'settings.homepage_search' => 'Kotisivu Haku', + 'settings.search_provider' => 'Hakupalvelu', + 'settings.language' => 'Kieli', + 'settings.reset' => 'Palauta takaisin default', + 'settings.remove' => 'Poista', + 'settings.search' => 'haku', + 'settings.no_items' => 'Kohteita ei löytynyt', + 'settings.label' => 'Etiketti', + 'settings.value' => 'Arvo', + 'settings.edit' => 'Muokkaa', + 'settings.view' => 'Näkymä', + 'options.none' => '- ole asetettu -', + 'options.google' => 'Google', + 'options.ddg' => 'DuckDuckGo', + 'options.bing' => 'Bing', + 'options.yes' => 'Kyllä', + 'options.no' => 'Ei', + 'buttons.save' => 'Tallenna', + 'buttons.cancel' => 'Peruuta', + 'buttons.add' => 'Lisää', + 'buttons.upload' => 'Lataa tiedosto', + 'dash.pin_item' => 'Kiinnitä kohde kojelautaan', + 'dash.no_apps' => 'Tällä hetkellä ei ole kiinnitettyjä sovelluksia :link1 tai :link2', + 'dash.link1' => 'Lisää sovellus tähän', + 'dash.link2' => 'Kiinnitä kohde kojelautaan', + 'dash.pinned_items' => 'Kiinnitetyt Kohteet', + 'apps.app_list' => 'Sovellus luettelosta', + 'apps.view_trash' => 'Näytä roskakori', + 'apps.add_application' => 'Lisää sovellus', + 'apps.application_name' => 'Sovelluksen nimi', + 'apps.colour' => 'Väri', + 'apps.icon' => 'Kuvake', + 'apps.pinned' => 'Puristuksiin', + 'apps.title' => 'Otsikko', + 'apps.hex' => 'Hex väri', + 'apps.username' => 'Käyttäjätunnus', + 'apps.password' => 'Salasana', + 'apps.config' => 'Config', + 'url' => 'Url', + 'title' => 'Otsikko', + 'delete' => 'Poistaa', + 'optional' => 'Valinnainen', + 'restore' => 'Palauttaa', + 'alert.success.item_created' => 'Tuote luotiin onnistuneesti', + 'alert.success.item_updated' => 'Kohde on päivitetty onnistuneesti', + 'alert.success.item_deleted' => 'Kohde poistettu onnistuneesti', + 'alert.success.item_restored' => 'Tuote palautettiin onnistuneesti', + 'alert.success.setting_updated' => 'Olet muokannut tätä asetusta', + 'alert.error.not_exist' => 'Tätä asetusta ei ole olemassa.', +); \ No newline at end of file diff --git a/resources/lang/fr/app.php b/resources/lang/fr/app.php new file mode 100644 index 00000000..639b24b3 --- /dev/null +++ b/resources/lang/fr/app.php @@ -0,0 +1,58 @@ + 'Système', + 'settings.appearance' => 'Apparence', + 'settings.miscellaneous' => 'Divers', + 'settings.version' => 'Version', + 'settings.background_image' => 'Image D\'Arrière-Plan', + 'settings.homepage_search' => 'La Page D\'Accueil De Recherche', + 'settings.search_provider' => 'Fournisseur de recherche', + 'settings.language' => 'Langue', + 'settings.reset' => 'Réinitialiser aux valeurs par défaut', + 'settings.remove' => 'Supprimer', + 'settings.search' => 'chercher', + 'settings.no_items' => 'Pas d\'articles trouvés', + 'settings.label' => 'Étiquette', + 'settings.value' => 'Valeur', + 'settings.edit' => 'Modifier', + 'settings.view' => 'Vue', + 'options.none' => '- non défini -', + 'options.google' => 'Google', + 'options.ddg' => 'DuckDuckGo', + 'options.bing' => 'Bing', + 'options.yes' => 'Oui', + 'options.no' => 'Non', + 'buttons.save' => 'Enregistrer', + 'buttons.cancel' => 'Annuler', + 'buttons.add' => 'Ajouter', + 'buttons.upload' => 'Télécharger un fichier', + 'dash.pin_item' => 'Épingler l\'élément au tableau de bord', + 'dash.no_apps' => 'Il n\'existe actuellement aucun épinglé applications :link1 ou :link2', + 'dash.link1' => 'Ajouter une application ici', + 'dash.link2' => 'Pin un élément au tableau de bord', + 'dash.pinned_items' => 'Éléments épinglés', + 'apps.app_list' => 'Liste des applications', + 'apps.view_trash' => 'Voir la corbeille', + 'apps.add_application' => 'Ajouter une application', + 'apps.application_name' => 'Nom de l\'application', + 'apps.colour' => 'Couleur', + 'apps.icon' => 'Icône', + 'apps.pinned' => 'Épinglé', + 'apps.title' => 'Titre', + 'apps.hex' => 'Hexadécimal de la couleur', + 'apps.username' => 'Nom d\'utilisateur', + 'apps.password' => 'Mot de passe', + 'apps.config' => 'Config', + 'url' => 'Url', + 'title' => 'Titre', + 'delete' => 'Effacer', + 'optional' => 'Optionnel', + 'restore' => 'Restaurer', + 'alert.success.item_created' => 'Élément créé avec succès', + 'alert.success.item_updated' => 'Article mis à jour avec succès', + 'alert.success.item_deleted' => 'Élément supprimé avec succès', + 'alert.success.item_restored' => 'Élément à restaurer avec succès', + 'alert.success.setting_updated' => 'Vous avez modifié ce paramètre avec succès', + 'alert.error.not_exist' => 'Ce paramètre n\'existe pas.', +); \ No newline at end of file diff --git a/resources/lang/sv/app.php b/resources/lang/sv/app.php new file mode 100644 index 00000000..44bfbc81 --- /dev/null +++ b/resources/lang/sv/app.php @@ -0,0 +1,58 @@ + 'Systemet', + 'settings.appearance' => 'Utseende', + 'settings.miscellaneous' => 'Övrigt', + 'settings.version' => 'Version', + 'settings.background_image' => 'Bakgrundsbild', + 'settings.homepage_search' => 'Startsida Sök', + 'settings.search_provider' => 'Sök Leverantör', + 'settings.language' => 'Språk', + 'settings.reset' => 'Återställ tillbaka till standard', + 'settings.remove' => 'Avlägsna', + 'settings.search' => 'sök', + 'settings.no_items' => 'Inga poster hittades', + 'settings.label' => 'Etikett', + 'settings.value' => 'Värde', + 'settings.edit' => 'Ändra', + 'settings.view' => 'Visa', + 'options.none' => '- inte sätta -', + 'options.google' => 'Google', + 'options.ddg' => 'DuckDuckGo', + 'options.bing' => 'Bing', + 'options.yes' => 'Ja', + 'options.no' => 'Nej', + 'buttons.save' => 'Spara', + 'buttons.cancel' => 'Avbryt', + 'buttons.add' => 'Lägg till', + 'buttons.upload' => 'Ladda upp en fil', + 'dash.pin_item' => 'Pin objekt till instrumentpanelen', + 'dash.no_apps' => 'Det finns för närvarande inga fästa applikationer, :link1 eller :link2', + 'dash.link1' => 'Lägg till en ansökan här', + 'dash.link2' => 'Pin-ett objekt till dash', + 'dash.pinned_items' => 'Fasta Objekt', + 'apps.app_list' => 'Applikationslista', + 'apps.view_trash' => 'Visa papperskorgen', + 'apps.add_application' => 'Lägg till applikation', + 'apps.application_name' => 'Ansökan namn', + 'apps.colour' => 'Färg', + 'apps.icon' => 'Ikonen', + 'apps.pinned' => 'Nålas', + 'apps.title' => 'Titel', + 'apps.hex' => 'Hex-färg', + 'apps.username' => 'Användarnamn', + 'apps.password' => 'Lösenord', + 'apps.config' => 'Config', + 'url' => 'Url', + 'title' => 'Titel', + 'delete' => 'Radera', + 'optional' => 'Frivillig', + 'restore' => 'Återställa', + 'alert.success.item_created' => 'Objekt som skapats', + 'alert.success.item_updated' => 'Föremålet uppdaterades framgångsrikt', + 'alert.success.item_deleted' => 'Objekt som har tagits bort', + 'alert.success.item_restored' => 'Artikeln återställdes framgångsrikt', + 'alert.success.setting_updated' => 'Du har framgångsrikt redigerat denna inställning', + 'alert.error.not_exist' => 'Denna inställning existerar inte.', +); \ No newline at end of file diff --git a/resources/views/add.blade.php b/resources/views/add.blade.php index 13ad4b65..ce3e2764 100644 --- a/resources/views/add.blade.php +++ b/resources/views/add.blade.php @@ -1,4 +1,4 @@
- Pin item to dash + {{ __('app.dash.pin_item') }}
diff --git a/resources/views/app.blade.php b/resources/views/app.blade.php index 1067ee40..60fb0055 100644 --- a/resources/views/app.blade.php +++ b/resources/views/app.blade.php @@ -15,7 +15,7 @@