diff --git a/.gitignore b/.gitignore index afaccac04..bb37dc555 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 889ab507a..dc461fc81 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 cf1ddcb7b..5cd2d5d13 100644 --- a/app/Http/Controllers/ItemController.php +++ b/app/Http/Controllers/ItemController.php @@ -138,11 +138,20 @@ public function store(Request $request) '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 @@ public function update(Request $request, $id) 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 @@ public function destroy(Request $request, $id) } return redirect()->route('items.index') - ->with('success','Item deleted successfully'); + ->with('success',__('alert.success.item_deleted')); } /** @@ -235,6 +244,26 @@ public function restore($id) ->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 7fa0e21b1..3da34556d 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -40,7 +40,7 @@ public function edit($id) ]); } else { return redirect()->route('settings.list')->with([ - 'error' => 'This Setting does not exist.', + 'error' => __('app.alert.error.not_exist'), ]); } } @@ -74,11 +74,11 @@ public function update(Request $request, $id) $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 @@ public function clear($id) $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 1c2d114e2..de4a4c37b 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 2121698de..3c3063631 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 @@ public function scopePinned($query) { 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 fa04991c0..502b28f33 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -46,6 +46,9 @@ public function boot() } 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 d734f6ef0..8eae80dd4 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 @@ public function getListValueAttribute() 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 @@ public function getEditValueAttribute() 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 @@ public function getEditValueAttribute() 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 @@ public static function search() $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 31fe5e580..99ddb1b7b 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 000000000..34de49e19 --- /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 d6ad7157e..850fe8a4c 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(); + } else { + $setting_group->title = 'app.settings.system'; + $setting_group->save(); } - if(!SettingGroup::find(2)) { + if(!$setting_group = SettingGroup::find(2)) { $setting_group = new SettingGroup; $setting_group->id = 2; - $setting_group->title = 'Appearance'; + $setting_group->title = 'app.settings.appearance'; $setting_group->order = 1; $setting_group->save(); + } else { + $setting_group->title = 'app.settings.appearance'; + $setting_group->save(); } - if(!SettingGroup::find(3)) { + 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 @@ public function run() $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 @@ public function run() $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 e9b1cfca7..536bcd7e2 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 834be77c8..7dfd6f33d 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 1fa7d8ebe..4b09ab380 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 ade498999..2ba905500 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 1eb4981bc..76fbd503b 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 f687f6bbb..10ace957b 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 000000000..adaeb1e42 --- /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 000000000..6379cbe60 --- /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 000000000..dd7c632a5 --- /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 000000000..478591e59 --- /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 000000000..639b24b38 --- /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 000000000..44bfbc813 --- /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 13ad4b655..ce3e27641 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 1067ee403..60fb00558 100644 --- a/resources/views/app.blade.php +++ b/resources/views/app.blade.php @@ -15,7 +15,7 @@