Merge remote-tracking branch 'origin/v2' into oasis

# Conflicts:
#	app/Http/Controllers/User/AccountController.php
#	app/Http/helpers.php
#	public/mix-manifest.json
#	resources/js/components/FilesView/Icons/AlphabetIcon.vue
#	resources/js/components/FilesView/MobileActionButton.vue
#	resources/js/views/Admin/AppSettings/AppSettingsTabs/Appearance.vue
#	resources/js/views/Admin/Users/UserTabs/UserDetail.vue
#	resources/js/views/Upgrade/UpgradeBilling.vue
#	resources/views/index.blade.php
#	resources/views/vuefilemanager/invoice.blade.php
#	resources/views/vuefilemanager/others/color-template.blade.php
This commit is contained in:
Peter Papp
2021-04-01 10:45:10 +02:00
124 changed files with 3745 additions and 3576 deletions

View File

@@ -5,7 +5,6 @@ namespace App\Actions\Fortify;
use App\Models\Setting;
use App\Models\User;
use App\Models\UserSettings;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Laravel\Fortify\Contracts\CreatesNewUsers;
@@ -44,7 +43,7 @@ class CreateNewUser implements CreatesNewUsers
$user = User::create([
'email' => $input['email'],
'password' => Hash::make($input['password']),
'password' => bcrypt($input['password']),
]);
UserSettings::unguard();

View File

@@ -2,7 +2,6 @@
namespace App\Actions\Fortify;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Laravel\Fortify\Contracts\ResetsUserPasswords;
@@ -24,7 +23,7 @@ class ResetUserPassword implements ResetsUserPasswords
])->validate();
$user->forceFill([
'password' => Hash::make($input['password']),
'password' => bcrypt($input['password']),
])->save();
}
}

View File

@@ -29,7 +29,7 @@ class UpdateUserPassword implements UpdatesUserPasswords
})->validateWithBag('updatePassword');
$user->forceFill([
'password' => Hash::make($input['password']),
'password' => bcrypt($input['password']),
])->save();
}
}

View File

@@ -4,15 +4,12 @@ namespace App\Console\Commands;
use App\Models\File;
use App\Models\Folder;
use App\Models\Page;
use App\Models\Share;
use App\Services\HelperService;
use App\Services\SetupService;
use App\Models\Setting;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Hash;
use Faker;
use Illuminate\Support\Str;
@@ -24,6 +21,7 @@ class SetupDevEnvironment extends Command
* @var string
*/
protected $signature = 'setup:dev';
protected $license = 'Extended';
/**
* The console command description.
@@ -66,7 +64,8 @@ class SetupDevEnvironment extends Command
$this->info('Storing default settings and content...');
$this->store_default_settings();
$this->setup->seed_default_pages();
$this->setup->seed_default_settings('Extended');
$this->setup->seed_default_settings($this->license);
$this->setup->seed_default_language();
$this->info('Creating default admin...');
$this->create_admin();
@@ -97,7 +96,7 @@ class SetupDevEnvironment extends Command
$user = User::forceCreate([
'role' => 'admin',
'email' => 'howdy@hi5ve.digital',
'password' => Hash::make('vuefilemanager'),
'password' => bcrypt('vuefilemanager'),
]);
$user
@@ -138,7 +137,7 @@ class SetupDevEnvironment extends Command
$newbie = User::forceCreate([
'role' => 'user',
'email' => $this->faker->email,
'password' => Hash::make('vuefilemanager'),
'password' => bcrypt('vuefilemanager'),
]);
$newbie
@@ -184,7 +183,7 @@ class SetupDevEnvironment extends Command
"group" => "Travel & Places",
"subgroup" => "transport-air"
],
'created_at' => Carbon::now(),
'created_at' => now(),
]);
Share::factory(Share::class)
@@ -220,7 +219,7 @@ class SetupDevEnvironment extends Command
'group' => 'Objects',
'subgroup' => 'light & video',
],
'created_at' => Carbon::now()->subMinutes(1),
'created_at' => now()->subMinutes(1),
]);
$nature = Folder::factory(Folder::class)
@@ -261,7 +260,7 @@ class SetupDevEnvironment extends Command
'user_id' => $user->id,
'author' => 'user',
'name' => 'Playable Media',
'created_at' => Carbon::now()->subMinutes(2),
'created_at' => now()->subMinutes(2),
]);
$video = Folder::factory(Folder::class)
@@ -286,7 +285,7 @@ class SetupDevEnvironment extends Command
'user_id' => $user->id,
'author' => 'user',
'name' => 'Multi Level Folder',
'created_at' => Carbon::now()->subMinutes(3),
'created_at' => now()->subMinutes(3),
]);
$first_level = Folder::factory(Folder::class)
@@ -319,7 +318,7 @@ class SetupDevEnvironment extends Command
'user_id' => $user->id,
'author' => 'user',
'name' => 'Documents',
'created_at' => Carbon::now()->subMinutes(4),
'created_at' => now()->subMinutes(4),
]);
Share::factory(Share::class)
@@ -339,7 +338,7 @@ class SetupDevEnvironment extends Command
'user_id' => $user->id,
'author' => 'user',
'name' => 'Videohive by MakingCG',
'created_at' => Carbon::now()->subMinutes(5),
'created_at' => now()->subMinutes(5),
]);
$user
@@ -391,7 +390,7 @@ class SetupDevEnvironment extends Command
'author' => 'user',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'created_at' => Carbon::now()->subMinutes(rand(1, 5)),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -435,7 +434,7 @@ class SetupDevEnvironment extends Command
'author' => 'user',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'created_at' => Carbon::now()->subMinutes(rand(1, 5)),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -469,7 +468,7 @@ class SetupDevEnvironment extends Command
'author' => 'user',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'created_at' => Carbon::now()->subMinutes(rand(1, 5)),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -528,7 +527,7 @@ class SetupDevEnvironment extends Command
'author' => 'visitor',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'created_at' => Carbon::now()->subMinutes(rand(1, 5)),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -556,7 +555,7 @@ class SetupDevEnvironment extends Command
'author' => 'user',
'mimetype' => 'mp4',
'filesize' => rand(1000000, 4000000),
'created_at' => Carbon::now()->subMinutes(rand(1, 5)),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -581,7 +580,7 @@ class SetupDevEnvironment extends Command
'author' => 'user',
'mimetype' => 'mp4',
'filesize' => rand(1000000, 4000000),
'created_at' => Carbon::now()->subMinutes(rand(1, 5)),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -606,7 +605,7 @@ class SetupDevEnvironment extends Command
'author' => 'user',
'mimetype' => 'mp3',
'filesize' => rand(1000000, 4000000),
'created_at' => Carbon::now()->subMinutes(rand(1, 5)),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -645,7 +644,7 @@ class SetupDevEnvironment extends Command
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'thumbnail' => $this->helper->create_image_thumbnail("files/$user->id/$basename", $file, $user->id),
'created_at' => Carbon::now()->subMinutes(rand(1, 5)),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -679,7 +678,7 @@ class SetupDevEnvironment extends Command
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'thumbnail' => $this->helper->create_image_thumbnail("files/$user->id/$basename", $file, $user->id),
'created_at' => Carbon::now()->subMinutes(rand(1, 5)),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
@@ -717,7 +716,7 @@ class SetupDevEnvironment extends Command
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'thumbnail' => $this->helper->create_image_thumbnail("files/$user->id/$basename", $file, $user->id),
'created_at' => Carbon::now()->subMinutes(rand(1, 5)),
'created_at' => now()->subMinutes(rand(1, 5)),
]);
});
}
@@ -793,6 +792,14 @@ class SetupDevEnvironment extends Command
'name' => 'app_favicon',
'value' => 'system/favicon.png',
],
[
'name' => 'app_og_image',
'value' => 'system/og-image.jpg',
],
[
'name' => 'app_touch_icon',
'value' => 'system/touch-icon.png',
],
[
'name' => 'google_analytics',
'value' => '',
@@ -823,7 +830,7 @@ class SetupDevEnvironment extends Command
],
[
'name' => 'license',
'value' => 'Extended',
'value' => $this->license,
],
[
'name' => 'purchase_code',
@@ -869,7 +876,7 @@ class SetupDevEnvironment extends Command
});
// Get system images
collect(['logo.svg', 'logo-horizontal.svg', 'favicon.png'])
collect(['logo.svg', 'logo-horizontal.svg', 'favicon.png', 'og-image.jpg', 'touch-icon.png'])
->each(function ($file) {
\File::copy(storage_path("demo/app/$file"), storage_path("app/system/$file"));
});

View File

@@ -0,0 +1,136 @@
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Resources\LanguageCollection;
use App\Http\Resources\LanguageResource;
use App\Models\Language;
use App\Http\Controllers\Controller;
use App\Models\Setting;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Http\Response;
use App\Http\Requests\Languages\UpdateStringRequest;
use App\Http\Requests\Languages\CreateLanguageRequest;
use App\Http\Requests\Languages\UpdateLanguageRequest;
class LanguageController extends Controller
{
/**
* Get all languages for admin translate
*
* @return array|Application|ResponseFactory|Response
*/
public function get_languages()
{
return response(
new LanguageCollection(Language::sortable(['created_at', 'DESC'])->get()), 200
);
}
/**
* Get all language strings for admin translate
*
* @param Language $language
*/
public function get_language(Language $language)
{
return response(
new LanguageResource($language), 200
);
}
/**
* Create new language
*
* @param CreateLanguageRequest $request
* @return string
*/
public function create_language(CreateLanguageRequest $request)
{
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
$language = Language::create([
'name' => $request->input('name'),
'locale' => $request->input('locale')
]);
return response(
new LanguageResource($language), 201
);
}
/**
* Update language
*
* @param UpdateLanguageRequest $request
* @param Language $language
*/
public function update_language(UpdateLanguageRequest $request, Language $language)
{
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
$language->update(make_single_input($request));
return response(
new LanguageResource($language), 201
);
}
/**
* Update string for language
*
* @param UpdateStringRequest $request
* @param Language $language
* @return Application|ResponseFactory|Response
*/
public function update_string(UpdateStringRequest $request, Language $language)
{
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
$language
->languageTranslations()
->where('key', $request->name)
->update([
'value' => $request->value
]);
cache()->forget("language-translations-{$language->locale}");
return response(
'Done', 204
);
}
/**
* Delete the language with all children strings
*
* @param Language $language
* @return ResponseFactory|Response
*/
public function delete_language(Language $language)
{
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
if ($language->locale === 'en') {
abort(401, "Sorry, you can't delete default language.");
}
// If user try to delete language used as default,
// then set en language as default
if ($language->locale === get_setting('language')) {
Setting::whereName('language')->first()
->update(['value' => 'en']);
}
$language->delete();
return response(
'Done', 204
);
}
}

View File

@@ -51,9 +51,8 @@ class PagesController extends Controller
*/
public function update(Request $request, Page $page)
{
if (is_demo()) {
return $this->demo->response_with_no_content();
}
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
$page->update(
make_single_input($request)

View File

@@ -110,9 +110,8 @@ class PlanController extends Controller
*/
public function update(Request $request, $id)
{
if (is_demo()) {
return $this->demo->response_with_no_content();
}
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
// Update plan
$this->stripe->updatePlan($request, $id);
@@ -131,9 +130,8 @@ class PlanController extends Controller
*/
public function delete($id)
{
if (is_demo()) {
return $this->demo->response_with_no_content();
}
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
// Delete plan
$this->stripe->deletePlan($id);

View File

@@ -49,9 +49,8 @@ class SettingController extends Controller
*/
public function update(Request $request)
{
if (is_demo()) {
return $this->demo->response_with_no_content();
}
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
// Store image if exist
if ($request->hasFile($request->name)) {
@@ -84,9 +83,8 @@ class SettingController extends Controller
public function set_email(Request $request)
{
// TODO: pridat validator do requestu
if (is_demo()) {
return $this->demo->response_with_no_content();
}
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
if (!app()->runningUnitTests()) {
@@ -178,9 +176,8 @@ class SettingController extends Controller
*/
public function flush_cache()
{
if (is_demo()) {
return $this->demo->response_with_no_content();
}
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
if (!app()->runningUnitTests()) {
Artisan::call('cache:clear');

View File

@@ -22,7 +22,6 @@ use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Password;
use Storage;
@@ -182,7 +181,7 @@ class UserController extends Controller
$user = User::forceCreate([
'role' => $request->role,
'email' => $request->email,
'password' => Hash::make($request->password),
'password' => bcrypt($request->password),
]);
UserSettings::unguard();

View File

@@ -7,6 +7,7 @@ use App\Http\Mail\SendContactMessage;
use App\Http\Resources\PricingCollection;
use App\Http\Requests\PublicPages\SendContactMessageRequest;
use App\Http\Resources\PageResource;
use App\Models\Language;
use App\Models\Setting;
use App\Models\Page;
use App\Models\Share;
@@ -163,17 +164,10 @@ class AppFunctionsController extends Controller
*/
public function get_storage_plans()
{
if (Cache::has('pricing')) {
// Get pricing from cache
$pricing = Cache::get('pricing');
} else {
// Store pricing to cache
$pricing = Cache::rememberForever('pricing', function () {
return $this->stripe->getActivePlans();
});
}
// Get pricing from cache
$pricing = Cache::rememberForever('pricing', function () {
return $this->stripe->getActivePlans();
});
// Format pricing to collection
$collection = new PricingCollection($pricing);
@@ -184,4 +178,21 @@ class AppFunctionsController extends Controller
->values()
->all();
}
/**
* Get language translations for frontend app
*
* @param $lang
* @return array
*/
public function get_translations($lang)
{
$translations = Cache::rememberForever("language-translations-$lang", function () use ($lang) {
return Language::whereLocale($lang)
->firstOrFail()
->languageTranslations;
});
return map_language_translations($translations);
}
}

View File

@@ -21,7 +21,6 @@ use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;
use Schema;
@@ -346,6 +345,14 @@ class SetupWizardController extends Controller
'name' => 'app_favicon',
'value' => store_system_image($request, 'favicon'),
],
[
'name' => 'app_og_image',
'value' => store_system_image($request, 'og_image'),
],
[
'name' => 'app_touch_icon',
'value' => store_system_image($request, 'touch_icon'),
],
[
'name' => 'google_analytics',
'value' => $request->googleAnalytics,
@@ -405,7 +412,7 @@ class SetupWizardController extends Controller
$user = User::forceCreate([
'role' => 'admin',
'email' => $request->email,
'password' => Hash::make($request->password),
'password' => bcrypt($request->password),
]);
$user
@@ -439,6 +446,7 @@ class SetupWizardController extends Controller
// Set up application
$this->setup->seed_default_pages();
$this->setup->seed_default_settings($request->license);
$this->setup->seed_default_language();
// Login account
if (Auth::attempt($request->only(['email', 'password']))) {

View File

@@ -3,14 +3,8 @@
namespace App\Http\Controllers\Auth;
use App\Http\Requests\Auth\CheckAccountRequest;
use App\Models\Setting;
use App\Models\User;
use App\Models\UserSettings;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Route;
class AuthController extends Controller
{
@@ -28,7 +22,7 @@ class AuthController extends Controller
->first();
if (! $user) {
return response(__('vuefilemanager.user_not_fount'), 404);
return response(__t('user_not_fount'), 404);
}
return [

View File

@@ -182,7 +182,7 @@ class BrowseController extends Controller
return [
[
'name' => __('vuefilemanager.home'),
'name' => __t('home'),
'location' => 'base',
'folders' => $folders,
]

View File

@@ -82,9 +82,7 @@ class EditItemsController extends Controller
*/
public function delete_item(DeleteItemRequest $request)
{
if (is_demo_account('howdy@hi5ve.digital')) {
return $this->demo->response_with_no_content();
}
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
foreach ($request->input('items') as $item) {
$this->filemanager->delete_item($item, $item['id']);
@@ -117,9 +115,7 @@ class EditItemsController extends Controller
*/
public function move(MoveItemRequest $request)
{
if (is_demo_account('howdy@hi5ve.digital')) {
return $this->demo->response_with_no_content();
}
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
$this->filemanager->move($request, $request->to_id);

View File

@@ -12,10 +12,7 @@ use Illuminate\Contracts\Routing\ResponseFactory;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Notification;
use Illuminate\Support\Str;
use Validator;
class ShareController extends Controller
@@ -44,7 +41,7 @@ class ShareController extends Controller
{
// Create shared options
$shared = Share::create([
'password' => $request->has('password') ? Hash::make($request->password) : null,
'password' => $request->has('password') ? bcrypt($request->password) : null,
'type' => $request->type === 'folder' ? 'folder' : 'file',
'is_protected' => $request->isPassword,
'permission' => $request->permission ?? null,
@@ -87,7 +84,7 @@ class ShareController extends Controller
'permission' => $request->permission,
'is_protected' => $request->protected,
'expire_in' => $request->expiration,
'password' => $request->password ? Hash::make($request->password) : $shared->password,
'password' => $request->password ? bcrypt($request->password) : $shared->password,
]);
// Return shared record

View File

@@ -43,9 +43,7 @@ class TrashController extends Controller
// Get user id
$user_id = Auth::id();
if (is_demo($user_id)) {
return $this->demo->response_with_no_content();
}
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
foreach ($request->input('items') as $restore) {
@@ -96,9 +94,7 @@ class TrashController extends Controller
// Get user id
$user_id = Auth::id();
if (is_demo($user_id)) {
return $this->demo->response_with_no_content();
}
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
// Get files and folders
$folders = Folder::onlyTrashed()->where('user_id', $user_id)->get();

View File

@@ -81,7 +81,7 @@ class BrowseShareController extends Controller
->cookie('share_session', $cookie, 43200);
}
abort(401, __('vuefilemanager.incorrect_password'));
abort(401, __t('incorrect_password'));
}
/**
@@ -191,7 +191,7 @@ class BrowseShareController extends Controller
return [
[
'id' => $shared->item_id,
'name' => __('vuefilemanager.home'),
'name' => __t('home'),
'location' => 'public',
'folders' => $folders,
]

View File

@@ -121,9 +121,8 @@ class ManipulateShareItemsController extends Controller
*/
public function delete_item(DeleteItemRequest $request, Share $shared)
{
if (is_demo_account($shared->user->email)) {
return $this->demo->response_with_no_content();
}
abort_if(is_demo_account($shared->user->email), 204, 'Done.');
// Check ability to access protected share record
$this->helper->check_protected_share_record($shared);
@@ -195,9 +194,7 @@ class ManipulateShareItemsController extends Controller
*/
public function move(MoveItemRequest $request, Share $shared)
{
if (is_demo_account($shared->user->email)) {
return $this->demo->response_with_no_content();
}
abort_if(is_demo_account($shared->user->email), 204, 'Done.');
// Check ability to access protected share record
$this->helper->check_protected_share_record($shared);

View File

@@ -3,8 +3,6 @@
namespace App\Http\Controllers\User;
use App\Http\Requests\User\UpdateUserPasswordRequest;
use App\Models\File;
use App\Models\Folder;
use App\Http\Resources\InvoiceCollection;
use App\Http\Resources\StorageDetailResource;
use App\Http\Resources\UserResource;
@@ -14,10 +12,7 @@ use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Support\Facades\Validator;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use ByteUnits\Metric;
use App\Models\User;
class AccountController extends Controller
{
@@ -88,9 +83,7 @@ class AccountController extends Controller
$user = Auth::user();
// Check if is demo
if (is_demo($user->id)) {
return $this->demo->response_with_no_content();
}
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
// Update avatar
if ($request->hasFile('avatar')) {
@@ -123,12 +116,11 @@ class AccountController extends Controller
// Get user
$user = Auth::user();
if (is_demo($user->id)) {
return $this->demo->response_with_no_content();
}
// Check if is demo
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
// Change and store new password
$user->password = Hash::make($request->input('password'));
$user->password = bcrypt($request->input('password'));
$user->save();
return response('Changed!', 204);

View File

@@ -97,9 +97,7 @@ class PaymentMethodsController extends Controller
$user = Auth::user();
// Check if is demo
if (is_demo($user->id)) {
return $this->demo->response_with_no_content();
}
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
// Update DefaultPayment Method
$user->updateDefaultPaymentMethod($id);
@@ -147,9 +145,7 @@ class PaymentMethodsController extends Controller
$user = Auth::user();
// Check if is demo
if (is_demo($user->id)) {
return $this->demo->response_with_no_content();
}
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.');
// Get payment method
$paymentMethod = $user->findPaymentMethod($id);

View File

@@ -1,26 +0,0 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Gate;
class AdminCheck
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// Check if user have access to administration settings
if ( ! Gate::allows('admin-settings')) {
abort(403, 'You don\'t have access for this operation!');
}
return $next($request);
}
}

View File

@@ -1,30 +0,0 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class CookieAuth
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!$request->bearerToken()) {
if ($request->hasCookie('access_token')) {
$access_token = $request->cookie('access_token');
$request->headers->add(['Authorization' => 'Bearer ' . $access_token]);
}
}
return $next($request);
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Http\Requests\Languages;
use Illuminate\Foundation\Http\FormRequest;
class CreateLanguageRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required|string',
'locale' => 'required|string'
];
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Http\Requests\Languages;
use Illuminate\Foundation\Http\FormRequest;
class UpdateLanguageRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required|string',
'value' => 'required|string'
];
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Http\Requests\Languages;
use Illuminate\Foundation\Http\FormRequest;
class UpdateStringRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required|string',
'value' => 'required|string'
];
}
}

View File

@@ -0,0 +1,32 @@
<?php
namespace App\Http\Resources;
use App\Models\Language;
use Illuminate\Http\Resources\Json\ResourceCollection;
class LanguageCollection extends ResourceCollection
{
public $collects = LanguageResource::class;
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
$current_language = Language::with('languageTranslations')
->whereLocale(get_setting('language') ?? 'en')
->first();
return [
'data' => $this->collection,
'meta' => [
'current_language' => new LanguageResource($current_language),
'reference_translations' => get_default_language_translations()
],
];
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class LanguageResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'data' => [
'id' => $this->id,
'type' => 'languages',
'attributes' => [
'name' => $this->name,
'locale' => $this->locale,
'translations' => map_language_translations($this->languageTranslations),
'updated_at' => $this->updated_at,
'created_at' => $this->created_at,
]
],
];
}
}

View File

@@ -5,9 +5,12 @@ use App\Models\Folder;
use App\Models\Setting;
use App\Models\User;
use App\Models\Share;
use App\Models\Language;
use App\Models\LanguageTranslation;
use ByteUnits\Metric;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Intervention\Image\ImageManagerStatic as Image;
@@ -148,7 +151,7 @@ function get_invoice_number()
$invoices = \App\Invoice::all();
if ($invoices->isEmpty()) {
return Carbon::now()->year . '001';
return now()->year . '001';
} else {
return (int)$invoices->last()->order + 1;
}
@@ -277,7 +280,7 @@ function is_visitor($shared)
*/
function store_avatar($request, $name)
{
if (! $request->hasFile($name)) {
if (!$request->hasFile($name)) {
return null;
}
@@ -308,7 +311,7 @@ function store_avatar($request, $name)
*/
function store_system_image($request, $name)
{
if (! $request->hasFile($name)) {
if (!$request->hasFile($name)) {
return null;
}
@@ -523,6 +526,18 @@ function get_file_type($file_mimetype)
}
}
/**
* It map language translations as language key and language value
*
* @param $translations
* @return mixed
*/
function map_language_translations($translations)
{
return $translations->map(function ($string) {
return [$string->key => $string->value];
})->collapse();
}
/**
* Get file type from mimetype
@@ -571,16 +586,28 @@ function get_image_meta_data($file)
try {
// Try to get the exif data
return mb_convert_encoding(Image::make($file->getRealPath())->exif(),'UTF8', 'UTF8');
return mb_convert_encoding(Image::make($file->getRealPath())->exif(), 'UTF8', 'UTF8');
} catch ( \Exception $e) {
return null;
} catch (\Exception $e) {
return null;
}
}
}
/**
* @return Collection
*/
function get_default_language_translations()
{
return collect([
config("language-translations.extended"),
config("language-translations.regular"),
config("custom-language-translations")
])->collapse();
}
/**
* Check if app is in dev mode
*
@@ -588,7 +615,7 @@ function get_image_meta_data($file)
*/
function is_dev()
{
return env('APP_ENV') === 'local' ? 1 : 0;
return env('APP_ENV') === 'local';
}
/**
@@ -598,16 +625,16 @@ function is_dev()
function seems_utf8($str)
{
$length = strlen($str);
for ($i=0; $i < $length; $i++) {
for ($i = 0; $i < $length; $i++) {
$c = ord($str[$i]);
if ($c < 0x80) $n = 0; # 0bbbbbbb
elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb
elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb
elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb
elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb
elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b
elseif (($c & 0xE0) == 0xC0) $n = 1; # 110bbbbb
elseif (($c & 0xF0) == 0xE0) $n = 2; # 1110bbbb
elseif (($c & 0xF8) == 0xF0) $n = 3; # 11110bbb
elseif (($c & 0xFC) == 0xF8) $n = 4; # 111110bb
elseif (($c & 0xFE) == 0xFC) $n = 5; # 1111110b
else return false; # Does not match any model
for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
for ($j = 0; $j < $n; $j++) { # n bytes matching 10bbbbbb follow ?
if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80))
return false;
}
@@ -623,124 +650,125 @@ function seems_utf8($str)
* @param string $string Text that might have accent characters
* @return string Filtered string with replaced "nice" characters.
*/
function remove_accents($string) {
if ( !preg_match('/[\x80-\xff]/', $string) )
function remove_accents($string)
{
if (!preg_match('/[\x80-\xff]/', $string))
return $string;
if (seems_utf8($string)) {
$chars = array(
// Decompositions for Latin-1 Supplement
chr(195).chr(128) => 'A', chr(195).chr(129) => 'A',
chr(195).chr(130) => 'A', chr(195).chr(131) => 'A',
chr(195).chr(132) => 'A', chr(195).chr(133) => 'A',
chr(195).chr(135) => 'C', chr(195).chr(136) => 'E',
chr(195).chr(137) => 'E', chr(195).chr(138) => 'E',
chr(195).chr(139) => 'E', chr(195).chr(140) => 'I',
chr(195).chr(141) => 'I', chr(195).chr(142) => 'I',
chr(195).chr(143) => 'I', chr(195).chr(145) => 'N',
chr(195).chr(146) => 'O', chr(195).chr(147) => 'O',
chr(195).chr(148) => 'O', chr(195).chr(149) => 'O',
chr(195).chr(150) => 'O', chr(195).chr(153) => 'U',
chr(195).chr(154) => 'U', chr(195).chr(155) => 'U',
chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y',
chr(195).chr(159) => 's', chr(195).chr(160) => 'a',
chr(195).chr(161) => 'a', chr(195).chr(162) => 'a',
chr(195).chr(163) => 'a', chr(195).chr(164) => 'a',
chr(195).chr(165) => 'a', chr(195).chr(167) => 'c',
chr(195).chr(168) => 'e', chr(195).chr(169) => 'e',
chr(195).chr(170) => 'e', chr(195).chr(171) => 'e',
chr(195).chr(172) => 'i', chr(195).chr(173) => 'i',
chr(195).chr(174) => 'i', chr(195).chr(175) => 'i',
chr(195).chr(177) => 'n', chr(195).chr(178) => 'o',
chr(195).chr(179) => 'o', chr(195).chr(180) => 'o',
chr(195).chr(181) => 'o', chr(195).chr(182) => 'o',
chr(195).chr(182) => 'o', chr(195).chr(185) => 'u',
chr(195).chr(186) => 'u', chr(195).chr(187) => 'u',
chr(195).chr(188) => 'u', chr(195).chr(189) => 'y',
chr(195).chr(191) => 'y',
chr(195) . chr(128) => 'A', chr(195) . chr(129) => 'A',
chr(195) . chr(130) => 'A', chr(195) . chr(131) => 'A',
chr(195) . chr(132) => 'A', chr(195) . chr(133) => 'A',
chr(195) . chr(135) => 'C', chr(195) . chr(136) => 'E',
chr(195) . chr(137) => 'E', chr(195) . chr(138) => 'E',
chr(195) . chr(139) => 'E', chr(195) . chr(140) => 'I',
chr(195) . chr(141) => 'I', chr(195) . chr(142) => 'I',
chr(195) . chr(143) => 'I', chr(195) . chr(145) => 'N',
chr(195) . chr(146) => 'O', chr(195) . chr(147) => 'O',
chr(195) . chr(148) => 'O', chr(195) . chr(149) => 'O',
chr(195) . chr(150) => 'O', chr(195) . chr(153) => 'U',
chr(195) . chr(154) => 'U', chr(195) . chr(155) => 'U',
chr(195) . chr(156) => 'U', chr(195) . chr(157) => 'Y',
chr(195) . chr(159) => 's', chr(195) . chr(160) => 'a',
chr(195) . chr(161) => 'a', chr(195) . chr(162) => 'a',
chr(195) . chr(163) => 'a', chr(195) . chr(164) => 'a',
chr(195) . chr(165) => 'a', chr(195) . chr(167) => 'c',
chr(195) . chr(168) => 'e', chr(195) . chr(169) => 'e',
chr(195) . chr(170) => 'e', chr(195) . chr(171) => 'e',
chr(195) . chr(172) => 'i', chr(195) . chr(173) => 'i',
chr(195) . chr(174) => 'i', chr(195) . chr(175) => 'i',
chr(195) . chr(177) => 'n', chr(195) . chr(178) => 'o',
chr(195) . chr(179) => 'o', chr(195) . chr(180) => 'o',
chr(195) . chr(181) => 'o', chr(195) . chr(182) => 'o',
chr(195) . chr(182) => 'o', chr(195) . chr(185) => 'u',
chr(195) . chr(186) => 'u', chr(195) . chr(187) => 'u',
chr(195) . chr(188) => 'u', chr(195) . chr(189) => 'y',
chr(195) . chr(191) => 'y',
// Decompositions for Latin Extended-A
chr(196).chr(128) => 'A', chr(196).chr(129) => 'a',
chr(196).chr(130) => 'A', chr(196).chr(131) => 'a',
chr(196).chr(132) => 'A', chr(196).chr(133) => 'a',
chr(196).chr(134) => 'C', chr(196).chr(135) => 'c',
chr(196).chr(136) => 'C', chr(196).chr(137) => 'c',
chr(196).chr(138) => 'C', chr(196).chr(139) => 'c',
chr(196).chr(140) => 'C', chr(196).chr(141) => 'c',
chr(196).chr(142) => 'D', chr(196).chr(143) => 'd',
chr(196).chr(144) => 'D', chr(196).chr(145) => 'd',
chr(196).chr(146) => 'E', chr(196).chr(147) => 'e',
chr(196).chr(148) => 'E', chr(196).chr(149) => 'e',
chr(196).chr(150) => 'E', chr(196).chr(151) => 'e',
chr(196).chr(152) => 'E', chr(196).chr(153) => 'e',
chr(196).chr(154) => 'E', chr(196).chr(155) => 'e',
chr(196).chr(156) => 'G', chr(196).chr(157) => 'g',
chr(196).chr(158) => 'G', chr(196).chr(159) => 'g',
chr(196).chr(160) => 'G', chr(196).chr(161) => 'g',
chr(196).chr(162) => 'G', chr(196).chr(163) => 'g',
chr(196).chr(164) => 'H', chr(196).chr(165) => 'h',
chr(196).chr(166) => 'H', chr(196).chr(167) => 'h',
chr(196).chr(168) => 'I', chr(196).chr(169) => 'i',
chr(196).chr(170) => 'I', chr(196).chr(171) => 'i',
chr(196).chr(172) => 'I', chr(196).chr(173) => 'i',
chr(196).chr(174) => 'I', chr(196).chr(175) => 'i',
chr(196).chr(176) => 'I', chr(196).chr(177) => 'i',
chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij',
chr(196).chr(180) => 'J', chr(196).chr(181) => 'j',
chr(196).chr(182) => 'K', chr(196).chr(183) => 'k',
chr(196).chr(184) => 'k', chr(196).chr(185) => 'L',
chr(196).chr(186) => 'l', chr(196).chr(187) => 'L',
chr(196).chr(188) => 'l', chr(196).chr(189) => 'L',
chr(196).chr(190) => 'l', chr(196).chr(191) => 'L',
chr(197).chr(128) => 'l', chr(197).chr(129) => 'L',
chr(197).chr(130) => 'l', chr(197).chr(131) => 'N',
chr(197).chr(132) => 'n', chr(197).chr(133) => 'N',
chr(197).chr(134) => 'n', chr(197).chr(135) => 'N',
chr(197).chr(136) => 'n', chr(197).chr(137) => 'N',
chr(197).chr(138) => 'n', chr(197).chr(139) => 'N',
chr(197).chr(140) => 'O', chr(197).chr(141) => 'o',
chr(197).chr(142) => 'O', chr(197).chr(143) => 'o',
chr(197).chr(144) => 'O', chr(197).chr(145) => 'o',
chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe',
chr(197).chr(148) => 'R',chr(197).chr(149) => 'r',
chr(197).chr(150) => 'R',chr(197).chr(151) => 'r',
chr(197).chr(152) => 'R',chr(197).chr(153) => 'r',
chr(197).chr(154) => 'S',chr(197).chr(155) => 's',
chr(197).chr(156) => 'S',chr(197).chr(157) => 's',
chr(197).chr(158) => 'S',chr(197).chr(159) => 's',
chr(197).chr(160) => 'S', chr(197).chr(161) => 's',
chr(197).chr(162) => 'T', chr(197).chr(163) => 't',
chr(197).chr(164) => 'T', chr(197).chr(165) => 't',
chr(197).chr(166) => 'T', chr(197).chr(167) => 't',
chr(197).chr(168) => 'U', chr(197).chr(169) => 'u',
chr(197).chr(170) => 'U', chr(197).chr(171) => 'u',
chr(197).chr(172) => 'U', chr(197).chr(173) => 'u',
chr(197).chr(174) => 'U', chr(197).chr(175) => 'u',
chr(197).chr(176) => 'U', chr(197).chr(177) => 'u',
chr(197).chr(178) => 'U', chr(197).chr(179) => 'u',
chr(197).chr(180) => 'W', chr(197).chr(181) => 'w',
chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y',
chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z',
chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z',
chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z',
chr(197).chr(190) => 'z', chr(197).chr(191) => 's',
chr(196) . chr(128) => 'A', chr(196) . chr(129) => 'a',
chr(196) . chr(130) => 'A', chr(196) . chr(131) => 'a',
chr(196) . chr(132) => 'A', chr(196) . chr(133) => 'a',
chr(196) . chr(134) => 'C', chr(196) . chr(135) => 'c',
chr(196) . chr(136) => 'C', chr(196) . chr(137) => 'c',
chr(196) . chr(138) => 'C', chr(196) . chr(139) => 'c',
chr(196) . chr(140) => 'C', chr(196) . chr(141) => 'c',
chr(196) . chr(142) => 'D', chr(196) . chr(143) => 'd',
chr(196) . chr(144) => 'D', chr(196) . chr(145) => 'd',
chr(196) . chr(146) => 'E', chr(196) . chr(147) => 'e',
chr(196) . chr(148) => 'E', chr(196) . chr(149) => 'e',
chr(196) . chr(150) => 'E', chr(196) . chr(151) => 'e',
chr(196) . chr(152) => 'E', chr(196) . chr(153) => 'e',
chr(196) . chr(154) => 'E', chr(196) . chr(155) => 'e',
chr(196) . chr(156) => 'G', chr(196) . chr(157) => 'g',
chr(196) . chr(158) => 'G', chr(196) . chr(159) => 'g',
chr(196) . chr(160) => 'G', chr(196) . chr(161) => 'g',
chr(196) . chr(162) => 'G', chr(196) . chr(163) => 'g',
chr(196) . chr(164) => 'H', chr(196) . chr(165) => 'h',
chr(196) . chr(166) => 'H', chr(196) . chr(167) => 'h',
chr(196) . chr(168) => 'I', chr(196) . chr(169) => 'i',
chr(196) . chr(170) => 'I', chr(196) . chr(171) => 'i',
chr(196) . chr(172) => 'I', chr(196) . chr(173) => 'i',
chr(196) . chr(174) => 'I', chr(196) . chr(175) => 'i',
chr(196) . chr(176) => 'I', chr(196) . chr(177) => 'i',
chr(196) . chr(178) => 'IJ', chr(196) . chr(179) => 'ij',
chr(196) . chr(180) => 'J', chr(196) . chr(181) => 'j',
chr(196) . chr(182) => 'K', chr(196) . chr(183) => 'k',
chr(196) . chr(184) => 'k', chr(196) . chr(185) => 'L',
chr(196) . chr(186) => 'l', chr(196) . chr(187) => 'L',
chr(196) . chr(188) => 'l', chr(196) . chr(189) => 'L',
chr(196) . chr(190) => 'l', chr(196) . chr(191) => 'L',
chr(197) . chr(128) => 'l', chr(197) . chr(129) => 'L',
chr(197) . chr(130) => 'l', chr(197) . chr(131) => 'N',
chr(197) . chr(132) => 'n', chr(197) . chr(133) => 'N',
chr(197) . chr(134) => 'n', chr(197) . chr(135) => 'N',
chr(197) . chr(136) => 'n', chr(197) . chr(137) => 'N',
chr(197) . chr(138) => 'n', chr(197) . chr(139) => 'N',
chr(197) . chr(140) => 'O', chr(197) . chr(141) => 'o',
chr(197) . chr(142) => 'O', chr(197) . chr(143) => 'o',
chr(197) . chr(144) => 'O', chr(197) . chr(145) => 'o',
chr(197) . chr(146) => 'OE', chr(197) . chr(147) => 'oe',
chr(197) . chr(148) => 'R', chr(197) . chr(149) => 'r',
chr(197) . chr(150) => 'R', chr(197) . chr(151) => 'r',
chr(197) . chr(152) => 'R', chr(197) . chr(153) => 'r',
chr(197) . chr(154) => 'S', chr(197) . chr(155) => 's',
chr(197) . chr(156) => 'S', chr(197) . chr(157) => 's',
chr(197) . chr(158) => 'S', chr(197) . chr(159) => 's',
chr(197) . chr(160) => 'S', chr(197) . chr(161) => 's',
chr(197) . chr(162) => 'T', chr(197) . chr(163) => 't',
chr(197) . chr(164) => 'T', chr(197) . chr(165) => 't',
chr(197) . chr(166) => 'T', chr(197) . chr(167) => 't',
chr(197) . chr(168) => 'U', chr(197) . chr(169) => 'u',
chr(197) . chr(170) => 'U', chr(197) . chr(171) => 'u',
chr(197) . chr(172) => 'U', chr(197) . chr(173) => 'u',
chr(197) . chr(174) => 'U', chr(197) . chr(175) => 'u',
chr(197) . chr(176) => 'U', chr(197) . chr(177) => 'u',
chr(197) . chr(178) => 'U', chr(197) . chr(179) => 'u',
chr(197) . chr(180) => 'W', chr(197) . chr(181) => 'w',
chr(197) . chr(182) => 'Y', chr(197) . chr(183) => 'y',
chr(197) . chr(184) => 'Y', chr(197) . chr(185) => 'Z',
chr(197) . chr(186) => 'z', chr(197) . chr(187) => 'Z',
chr(197) . chr(188) => 'z', chr(197) . chr(189) => 'Z',
chr(197) . chr(190) => 'z', chr(197) . chr(191) => 's',
// Euro Sign
chr(226).chr(130).chr(172) => 'E',
chr(226) . chr(130) . chr(172) => 'E',
// GBP (Pound) Sign
chr(194).chr(163) => '');
chr(194) . chr(163) => '');
$string = strtr($string, $chars);
} else {
// Assume ISO-8859-1 if not UTF-8
$chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158)
.chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194)
.chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202)
.chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210)
.chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218)
.chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227)
.chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235)
.chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243)
.chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251)
.chr(252).chr(253).chr(255);
$chars['in'] = chr(128) . chr(131) . chr(138) . chr(142) . chr(154) . chr(158)
. chr(159) . chr(162) . chr(165) . chr(181) . chr(192) . chr(193) . chr(194)
. chr(195) . chr(196) . chr(197) . chr(199) . chr(200) . chr(201) . chr(202)
. chr(203) . chr(204) . chr(205) . chr(206) . chr(207) . chr(209) . chr(210)
. chr(211) . chr(212) . chr(213) . chr(214) . chr(216) . chr(217) . chr(218)
. chr(219) . chr(220) . chr(221) . chr(224) . chr(225) . chr(226) . chr(227)
. chr(228) . chr(229) . chr(231) . chr(232) . chr(233) . chr(234) . chr(235)
. chr(236) . chr(237) . chr(238) . chr(239) . chr(241) . chr(242) . chr(243)
. chr(244) . chr(245) . chr(246) . chr(248) . chr(249) . chr(250) . chr(251)
. chr(252) . chr(253) . chr(255);
$chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy";
@@ -752,6 +780,7 @@ function remove_accents($string) {
return $string;
}
/**
* Get all files from folder and get their folder location in VueFileManager directories
*
@@ -791,16 +820,16 @@ function get_files_for_zip($folders, $files, $path = [])
}
/**
* Set time by user timezone GMT
* Set time by user timezone GMT
*
* @param $time
* @return int
* @return Carbon
*/
function set_time_by_user_timezone($time)
{
$user = Auth::user();
if($user) {
if ($user) {
// Get the value of timezone if user have some
$time_zone = intval($user->settings->timezone * 60 ?? null);
@@ -809,5 +838,55 @@ function set_time_by_user_timezone($time)
}
return Carbon::parse($time);
}
/**
* Translate the given message.
*
* @param $key
* @param null $values
* @return string|string[]
*/
function __t($key, $values = null)
{
// Get current locale
$locale = cache()->rememberForever('language', function () {
return get_setting('language') ?? 'en';
});
$strings = cache()->rememberForever("language-translations-$locale", function () use ($locale) {
return Language::whereLocale($locale)->first()->languageTranslations ?? get_default_language_translations();
});
// Find the string by key
$string = $strings->get($key)
? $strings->get($key)
: $strings->firstWhere('key', $key)->value;
if ($values) {
return replace_occurrence($string, collect($values));
}
return $string;
}
/**
* Replace string occurrence in __t() by their values
*
* @param $string
* @param $values
* @return string|string[]
*/
function replace_occurrence($string, $values)
{
$occurrences = $values->map(function ($message, $key) {
return [
'key' => ":$key",
'message' => $message,
];
});
return str_ireplace(
$occurrences->pluck('key')->toArray(), $occurrences->pluck('message')->toArray(), $string
);
}

View File

@@ -69,7 +69,7 @@ class File extends Model
*/
public function getCreatedAtAttribute()
{
return format_date(set_time_by_user_timezone($this->attributes['created_at']), __('vuefilemanager.time'));
return format_date(set_time_by_user_timezone($this->attributes['created_at']), __t('time'));
}
/**
@@ -81,7 +81,7 @@ class File extends Model
{
if (!$this->attributes['deleted_at']) return null;
return format_date(set_time_by_user_timezone($this->attributes['deleted_at']), __('vuefilemanager.time'));
return format_date(set_time_by_user_timezone($this->attributes['deleted_at']), __t('time'));
}
/**

View File

@@ -104,7 +104,7 @@ class Folder extends Model
*/
public function getCreatedAtAttribute()
{
return format_date(set_time_by_user_timezone($this->attributes['created_at']), __('vuefilemanager.time'));
return format_date(set_time_by_user_timezone($this->attributes['created_at']), __t('time'));
}
/**
@@ -116,7 +116,7 @@ class Folder extends Model
{
if (!$this->attributes['deleted_at']) return null;
return format_date(set_time_by_user_timezone($this->attributes['deleted_at']), __('vuefilemanager.time'));
return format_date(set_time_by_user_timezone($this->attributes['deleted_at']), __t('time'));
}
/**

62
app/Models/Language.php Normal file
View File

@@ -0,0 +1,62 @@
<?php
namespace App\Models;
use App\Services\HelperService;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Eloquent\Model;
use Kyslik\ColumnSortable\Sortable;
/**
* @method static whereLocale(string $param)
*/
class Language extends Model
{
use Sortable;
public $sortable = [
'created_at',
];
protected $guarded = [
'id'
];
protected $keyType = 'string';
protected $primaryKey = 'id';
public $incrementing = false;
public function languageTranslations()
{
return $this->hasMany(LanguageTranslation::class, 'lang', 'locale');
}
protected static function boot()
{
parent::boot();
static::creating(function ($language) {
$language->id = Str::uuid();
resolve(HelperService::class)
->create_default_language_translations(
get_setting('license') ?? 'extended', $language->locale
);
});
static::updating(function ($language) {
cache()->forget("language-translations-$language->locale");
});
static::deleting(function ($language) {
DB::table('language_translations')
->whereLang($language->locale)
->delete();
cache()->forget("language-translations-$language->locale");
});
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class LanguageTranslation extends Model
{
public $timestamps = false;
public $primaryKey = null;
public $incrementing = false;
protected $fillable = [
'value'
];
}

View File

@@ -5,6 +5,9 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
/**
* @method static whereName(string $string)
*/
class Setting extends Model
{
use HasFactory;

View File

@@ -171,7 +171,7 @@ class User extends Authenticatable
*/
public function record_upload($file_size)
{
$now = Carbon::now();
$now = now();
$record = Traffic::whereYear('created_at', '=', $now->year)
->whereMonth('created_at', '=', $now->month)
@@ -191,7 +191,7 @@ class User extends Authenticatable
*/
public function record_download($file_size)
{
$now = Carbon::now();
$now = now();
$record = Traffic::whereYear('created_at', '=', $now->year)
->whereMonth('created_at', '=', $now->month)

View File

@@ -44,12 +44,12 @@ class ResetPassword extends Notification
$app_name = get_setting('app_title') ?? 'VueFileManager';
return (new MailMessage)
->subject(__('vuefilemanager.reset_password_subject') . $app_name)
->greeting(__('vuefilemanager.reset_password_greeting'))
->line(__('vuefilemanager.reset_password_line_1'))
->action(__('vuefilemanager.reset_password_action'), $reset_url)
->line(__('vuefilemanager.reset_password_line_2'))
->salutation(__('vuefilemanager.salutation') . ', ' . $app_name);
->subject(__t('reset_password_subject') . $app_name)
->greeting(__t('reset_password_greeting'))
->line(__t('reset_password_line_1'))
->action(__t('reset_password_action'), $reset_url)
->line(__t('reset_password_line_2'))
->salutation(__t('salutation') . ', ' . $app_name);
}
/**

View File

@@ -43,11 +43,11 @@ class SharedSendViaEmail extends Notification
public function toMail($notifiable)
{
return (new MailMessage)
->subject(__('vuefilemanager.shared_link_email_subject' , ['user' => $this->user->name]))
->greeting(__('vuefilemanager.shared_link_email_greeting'))
->line(__('vuefilemanager.shared_link_email_user', ['user' => $this->user->name, 'email' => $this->user->email]))
->action(__('vuefilemanager.shared_link_email_link'), url('/shared', ['token' => $this->token]))
->salutation(__('vuefilemanager.shared_link_email_salutation', ['app_name' => get_setting('app_title') ?? 'VueFileManager']));
->subject(__t('shared_link_email_subject', ['user' => $this->user->name]))
->greeting(__t('shared_link_email_greeting'))
->line(__t('shared_link_email_user', ['user' => $this->user->name, 'email' => $this->user->email]))
->action(__t('shared_link_email_link'), url('/shared', ['token' => $this->token]))
->salutation(__t('shared_link_email_salutation', ['app_name' => get_setting('app_title') ?? 'VueFileManager']));
}
/**

View File

@@ -39,8 +39,8 @@ class DemoService
'items' => '0',
'color' => isset($request->icon['color']) ? $request->icon['color'] : null,
'emoji' => isset($request->icon['emoji']) ? $request->icon['emoji'] : null,
'updated_at' => Carbon::now()->format('j M Y \a\t H:i'),
'created_at' => Carbon::now()->format('j M Y \a\t H:i'),
'updated_at' => now()->format('j M Y \a\t H:i'),
'created_at' => now()->format('j M Y \a\t H:i'),
];
}
@@ -111,24 +111,15 @@ class DemoService
'type' => $filetype,
'file_url' => 'https://vuefilemanager.hi5ve.digital/assets/vue-file-manager-preview.jpg',
'author' => $request->user() ? 'user' : 'visitor',
'created_at' => Carbon::now()->format('j M Y \a\t H:i'),
'updated_at' => Carbon::now()->format('j M Y \a\t H:i'),
'created_at' => now()->format('j M Y \a\t H:i'),
'updated_at' => now()->format('j M Y \a\t H:i'),
];
}
/**
* Return 204 status
*
* @return ResponseFactory|\Illuminate\Http\Response
*/
function response_with_no_content()
{
return response('Done!', 204);
}
/**
* Return 204 status
*
* @param $user
* @return ResponseFactory|\Illuminate\Http\Response
*/
function favourites($user)

View File

@@ -59,15 +59,15 @@ class HelperService
$accessible_folder_ids = Arr::flatten([filter_folders_ids($foldersIds), $shared->item_id]);
// Check user access
if ( is_array($requested_id) ) {
if (is_array($requested_id)) {
foreach ($requested_id as $id) {
if (!in_array($id, $accessible_folder_ids))
abort(403);
}
}
if (! is_array($requested_id)) {
if (! in_array($requested_id, $accessible_folder_ids))
if (!is_array($requested_id)) {
if (!in_array($requested_id, $accessible_folder_ids))
abort(403);
}
}
@@ -323,4 +323,35 @@ class HelperService
}
}
}
/**
* @param $license
* @param $locale
*/
function create_default_language_translations($license, $locale)
{
$translations = [
'extended' => collect([
config("language-translations.extended"),
config("language-translations.regular"),
config("custom-language-translations")
])->collapse(),
'regular' => collect([
config("language-translations.regular"),
config("custom-language-translations")
])->collapse(),
];
$translations = $translations[strtolower($license)]
->map(function ($value, $key) use ($locale) {
return [
'lang' => $locale,
'value' => $value,
'key' => $key,
];
})->toArray();
DB::table('language_translations')
->insert($translations);
}
}

View File

@@ -17,7 +17,7 @@ class SchedulerService
*/
public function delete_old_zips(): void
{
Zip::where('created_at', '<=', Carbon::now()->subDay()->toDateTimeString())
Zip::where('created_at', '<=', now()->subDay()->toDateTimeString())
->get()
->each(function ($zip) {
@@ -42,7 +42,7 @@ class SchedulerService
$created_at = Carbon::parse($share->created_at);
// If time was over, then delete share record
if ($created_at->diffInHours(Carbon::now()) >= $share->expire_in) {
if ($created_at->diffInHours(now()) >= $share->expire_in) {
$share->delete();
}
});
@@ -69,7 +69,7 @@ class SchedulerService
// Get diffInHours
$diff = Carbon::parse($last_modified)
->diffInHours(Carbon::now());
->diffInHours(now());
// Delete if file is in local storage more than 24 hours
if ($diff >= 24) {

View File

@@ -2,6 +2,7 @@
namespace App\Services;
use App\Models\Language;
use App\Models\Page;
use App\Models\Setting;
use Illuminate\Support\Facades\Storage;
@@ -48,4 +49,22 @@ class SetupService
Setting::forceCreate($content);
});
}
/**
* Store default VueFileManager settings into database
*
* @param $license
*/
public function seed_default_language()
{
Language::create([
'name' => 'English',
'locale' => 'en'
]);
Setting::create([
'name' => 'language',
'value' => 'en',
]);
}
}

View File

@@ -0,0 +1,11 @@
<?php
/*
* Place here your custom translations for your project.
* These translation will be automatically seeded after you
* run setup:dev script or installing app via Setup Wizard Tool
*/
return [
'custom' => 'translation'
];

View File

@@ -0,0 +1,680 @@
<?php
return [
'extended' => [
"activation.stripe.button" => "Set up your Stripe account",
"activation.stripe.description" => "To charge your users, please set up your Stripe account credentials.",
"activation.stripe.title" => "Your Stripe account is not set",
"admin_menu.invoices" => "Invoices",
"admin_menu.plans" => "Plans",
"admin_page_dashboard.w_total_premium.link" => "Show All Plans",
"admin_page_dashboard.w_total_premium.title" => "Total Premium Users",
"admin_page_invoices.empty.description" => "All customers invoices will be showed here.",
"admin_page_invoices.empty.title" => "You dont have any invoices yet",
"admin_page_invoices.table.number" => "Invoice Number",
"admin_page_invoices.table.payed" => "Payed",
"admin_page_invoices.table.plan" => "Plan",
"admin_page_invoices.table.total" => "Total",
"admin_page_invoices.table.user" => "User",
"admin_page_plans.create_plan_button" => "Create Plan",
"admin_page_plans.delete_plan_button" => "Delete Plan",
"admin_page_plans.disclaimer_delete_plan" => "You can delete this plan, but, pay attention! Your plan will be deleted, but users who are subscribed with this plan, will be still charged unless they cancel subscription.",
"admin_page_plans.disclaimer_edit_price" => "Price change for your plan is not available due to Stripe service design. If you wish change your price plan, please, create new plan.",
"admin_page_plans.empty.button" => "Create New Plan",
"admin_page_plans.empty.description" => "For create new plan, click on button below.",
"admin_page_plans.empty.title" => "You dont have any plan yet",
"admin_page_plans.form.description" => "Description (optional)",
"admin_page_plans.form.description_plac" => "Plan description",
"admin_page_plans.form.name" => "Name",
"admin_page_plans.form.name_delete_plac" => "Type plan name",
"admin_page_plans.form.name_plac" => "Plan name",
"admin_page_plans.form.price" => "Price",
"admin_page_plans.form.price_plac" => "Plan price",
"admin_page_plans.form.status" => "Status",
"admin_page_plans.form.status_help" => "Status of your plan availability on website.",
"admin_page_plans.form.storage" => "Storage Capacity in GB",
"admin_page_plans.form.storage_helper" => "You have to type only number e.g. value '5' means, user will have 5GB of storage capacity.",
"admin_page_plans.form.storage_plac" => "Storage capacity",
"admin_page_plans.form.title_delete" => "Delete Plan",
"admin_page_plans.form.title_details" => "Plan Details",
"admin_page_plans.form.title_pricing" => "Plan Pricing",
"admin_page_plans.subscribers.empty" => "There is no any subscriber yet.",
"admin_page_plans.table.name" => "Plan Name",
"admin_page_plans.table.price" => "Price",
"admin_page_plans.table.status" => "Status",
"admin_page_plans.table.storage_capacity" => "Storage Capacity",
"admin_page_plans.table.subscribers" => "Subscribers",
"admin_page_plans.tabs.delete" => "Delete Plan",
"admin_page_plans.tabs.settings" => "Settings",
"admin_page_plans.tabs.subscribers" => "Subscribers",
"admin_page_user.subscription.empty" => "User don't have any subscription yet.",
"admin_page_user.subscription.interval_mo" => "Monthly",
"admin_page_user.table.plan" => "Subscription Plan",
"admin_page_user.tabs.invoices" => "Invoices",
"admin_page_user.tabs.subscription" => "Subscription",
"admin_settings.billings.address" => "Billing Address",
"admin_settings.billings.address_plac" => "Type your billing address",
"admin_settings.billings.city" => "Billing City",
"admin_settings.billings.city_plac" => "Type your billing city",
"admin_settings.billings.company_name" => "Company Name",
"admin_settings.billings.company_name_plac" => "Type your company name",
"admin_settings.billings.country" => "Billing Country",
"admin_settings.billings.country_plac" => "Select your billing country",
"admin_settings.billings.phone_number" => "Billing Phone Number (optional)",
"admin_settings.billings.phone_number_plac" => "Type your billing phone number",
"admin_settings.billings.postal_code" => "Billing Postal Code",
"admin_settings.billings.postal_code_plac" => "Type your billing postal code",
"admin_settings.billings.section_billing" => "Billing Information",
"admin_settings.billings.section_company" => "Company Information",
"admin_settings.billings.state" => "Billing State",
"admin_settings.billings.state_plac" => "Type your billing state",
"admin_settings.billings.vat" => "VAT Number",
"admin_settings.billings.vat_plac" => "Type your VAT number",
"admin_settings.payments.allow_payments" => "Allow Subscription Payments",
"admin_settings.payments.button_submit" => "Test and Save Stripe",
"admin_settings.payments.button_testing" => "Testing Stripe Connection",
"admin_settings.payments.credentials_disclaimer" => "Your Stripe credentials is not showed because these values are secret and must not be revealed by stranger. You can change your Stripe credentials in your <b class='text-theme'>.env</b> file.",
"admin_settings.payments.section_payments" => "Stripe Payments",
"admin_settings.payments.stripe_create_acc" => "If you dont have stripe account, please <a href=\"https://dashboard.stripe.com/register\" target=\"_blank\">register here</a> and get your Publishable Key, Secret Key and create your webhook.",
"admin_settings.payments.stripe_create_webhook" => "You have to create webhook endpoint in your Stripe Dashboard. You can find it in <b class='text-theme'>Dashboard -> Developers -> Webhooks -> Add Endpoint</b>. In Endpoint URL please copy and paste url bellow. Make sure, this url is your public domain, not localhost. In events section, please click on <b class='text-theme'>receive all events</b>. That's all.",
"admin_settings.payments.stripe_currency" => "Stripe Currency",
"admin_settings.payments.stripe_currency_plac" => "Select your Stripe currency",
"admin_settings.payments.stripe_pub_key" => "Publishable Key",
"admin_settings.payments.stripe_pub_key_plac" => "Paste your publishable key",
"admin_settings.payments.stripe_sec_key" => "Secret Key",
"admin_settings.payments.stripe_sec_key_plac" => "Paste your secret key",
"admin_settings.payments.stripe_setup" => "Stripe Setup",
"admin_settings.payments.stripe_webhook_key_plac" => "Paste your stripe webhook secret",
"admin_settings.payments.webhook_url" => "Stripe webhook URL",
"admin_settings.tabs.billings" => "Billings",
"admin_settings.tabs.payments" => "Payments",
"global.monthly_ac" => "Mo.",
"global.premium" => "Premium",
"global.saas" => "Services",
"global.subscription" => "Subscription",
"global.upgrade_plan" => "Upgrade Plan",
"incomplete_payment.description" => "Your latest payment is incomplete. {0}",
"incomplete_payment.href" => "Please confirm your payment.",
"menu.invoices" => "Invoices",
"menu.payment_cards" => "Payment Cards",
"menu.subscription" => "Subscription",
"notice.stripe_activation" => "Your Stripe account is not set. To charging your users please {0}.",
"notice.stripe_activation_button" => "set up your Stripe account",
"page_pricing_tables.description" => "Choose plan witch perfect fit your needs. All plans is billed monthly automatically via your credit card.",
"page_pricing_tables.storage_capacity" => "Of Storage Capacity",
"page_pricing_tables.title" => "Choose Your Plan",
"page_pricing_tables.vat_excluded" => "Price displayed excludes VAT.",
"page_upgrade_account.change_payment.change_payment" => "change your default payment method",
"page_upgrade_account.change_payment.pay_by_new_card" => "pay by new credit card",
"page_upgrade_account.change_payment.you_can" => "Also you can",
"page_upgrade_account.desription" => "Choose plan witch perfect fit your needs. All plans is billed monthly automatically via your credit card.",
"page_upgrade_account.errors.pay_by_another_card" => "Please pay by another payment card",
"page_upgrade_account.section_billing" => "Billing Information",
"page_upgrade_account.section_card" => "Payment Card",
"page_upgrade_account.section_summary" => "Order Summary",
"page_upgrade_account.summary.period" => "Billed monthly",
"page_upgrade_account.summary.submit_button" => "Pay with credit card",
"page_upgrade_account.summary.submit_disclaimer" => "By submit form, you agree to save the payment method and billing information in your {app} account.",
"page_upgrade_account.summary.total_with_vat" => "Total with VAT",
"page_upgrade_account.summary.vat" => "VAT",
"page_upgrade_account.title" => "Choose Payment Method",
"popup_delete_card.message" => "This event is irreversible and your payment card will be delete forever",
"popup_delete_card.title" => "Are you sure?",
"popup_deleted_plan.message" => "Your plan was successfully deleted.",
"popup_deleted_plan.title" => "Plan was deleted",
"popup_set_card.message" => "Your card will be set as default and will be always charged for the next billings.",
"popup_set_card.title" => "Set as default card?",
"popup_subscription_cancel.button" => "I'm done",
"popup_subscription_cancel.message" => "You'll continue to have access to the features you've paid for until the end of your billing cycle.",
"popup_subscription_cancel.title" => "Subscription Was Canceled",
"popup_subscription_resumed.button" => "That's awesome!",
"popup_subscription_resumed.message" => "Your subscription was re-activated, and they will be billed on the original billing cycle.",
"popup_subscription_resumed.title" => "Subscription Was Resumed",
"routes_title.billings" => "Billings",
"routes_title.invoices" => "Invoices",
"routes_title.payment_methods" => "Payment Methods",
"routes_title.payments" => "Payments",
"routes_title.plan" => "Plan",
"routes_title.plan_create" => "Create Plan",
"routes_title.plan_delete" => "Plan Delete",
"routes_title.plan_settings" => "Plan Settings",
"routes_title.pricing_plans" => "Pricing Plans",
"routes_title.subscribers" => "Subscribers",
"routes_title.subscription" => "Subscription",
"routes_title.upgrade_billing" => "Billing",
"routes_title.upgrade_plan" => "Upgrade Plan",
"rows.card.expiration" => "Expiration Date",
"rows.card.number" => "Card Number",
"rows.card.status" => "Status",
"rows.invoice.number" => "Invoice Number",
"rows.invoice.payed" => "Payed",
"rows.invoice.plan" => "Plan",
"rows.invoice.total" => "Total",
"toaster.account_upgraded" => "Your account was successfully upgraded.",
"toaster.card_deleted" => "Your card was successfully deleted.",
"toaster.card_new_add" => "Your card was successfully added",
"toaster.card_set" => "Your card was successfully set as default.",
"toaster.plan_created" => "Your plan was successfully created!",
"toaster.stripe_set" => "Your Stripe account was successfully set!",
"user_invoices.empty" => "You don't have any invoices yet.",
"user_invoices.title" => "Invoices",
"user_payments.add_card" => "Add Payment Card",
"user_payments.card_field_title" => "Credit Card",
"user_payments.delete_card" => "Delete card",
"user_payments.empty" => "You don't have any payment cards yet.",
"user_payments.field_loading" => "Loading card field...",
"user_payments.set_as_default" => "Set as default card",
"user_payments.store_card" => "Store Payment Card",
"user_payments.title" => "Payment Methods",
"user_subscription.billed" => "Billed",
"user_subscription.cancel_plan" => "Cancel Plan",
"user_subscription.canceled_at" => "Canceled At",
"user_subscription.created_at" => "Created At",
"user_subscription.empty" => "You don't have any subscription yet.",
"user_subscription.ends_at" => "Ends At",
"user_subscription.plan" => "Plan",
"user_subscription.renews_at" => "Renews At",
"user_subscription.resume_plan" => "Resume Plan",
"user_subscription.status" => "Status",
'print_button' => 'Print Document',
'vat' => 'VAT',
'vat_included' => 'incl.',
'subtotal' => 'Subtotal',
'tax_exempted' => 'Tax is exempted',
'tax_be_paid_reverse' => 'Tax to be paid on reverse charge basis',
'invoice_title' => 'Invoice',
'date' => 'Date',
'product' => 'Product',
'subscription' => 'Subscription',
'invoice_number' => 'Invoice Number',
'seller' => 'Seller',
'client' => 'Client',
'seller_vat' => 'VAT number',
'seller_name' => 'Name',
'seller_phone' => 'Phone',
'name' => 'Name',
'phone' => 'Phone',
'address' => 'Address',
'city' => 'City',
'state' => 'State',
'postal_code' => 'Postal code',
'country' => 'Country',
'col_description' => 'Description',
'col_date' => 'Date',
'col_amount' => 'Amount',
'total' => 'Total',
],
'regular' => [
"actions.close" => "Close",
"actions.create_folder" => "Create folder",
"actions.delete" => "Delete item",
"actions.download" => "Download item",
"actions.info_panel" => "Info panel",
"actions.move" => "Move item",
"actions.preview" => "Change preview",
"actions.print" => "Print item",
"actions.share" => "Share item",
"actions.sorting_view" => "Sorting and View",
"actions.upload" => "Upload file",
"admin_menu.dashboard" => "Dashboard",
"admin_menu.pages" => "Pages",
"admin_menu.settings" => "Settings",
"admin_menu.users" => "Users",
"admin_menu.languages" => "Languages",
"admin_page_dashboard.backer_button" => "Help Us Improve",
"admin_page_dashboard.license" => "License",
"admin_page_dashboard.version" => "Version",
"admin_page_dashboard.w_latest_users.title" => "Latest Registrations",
"admin_page_dashboard.w_total_space.link" => "Show All Users",
"admin_page_dashboard.w_total_space.title" => "Total Space Used",
"admin_page_dashboard.w_total_users.link" => "Show All Users",
"admin_page_dashboard.w_total_users.title" => "Total Users",
"admin_page_user.change_capacity" => "Change Capacity",
"admin_page_user.create_user.avatar" => "Avatar",
"admin_page_user.create_user.group_details" => "Account Details",
"admin_page_user.create_user.group_settings" => "Account Settings",
"admin_page_user.create_user.label_conf_pass" => "Confirm password",
"admin_page_user.create_user.label_email" => "Type E-mail",
"admin_page_user.create_user.label_name" => "Type full name",
"admin_page_user.create_user.submit" => "Create User",
"admin_page_user.delete_user" => "Delete User",
"admin_page_user.invoices.empty" => "User don't have any invoices yet.",
"admin_page_user.label_change_capacity" => "Type storage capacity in GB",
"admin_page_user.label_delete_user" => "Type with Case Sensitive user name {user}",
"admin_page_user.label_person_info" => "Personal Information",
"admin_page_user.placeholder_delete_user" => "Type here",
"admin_page_user.save_role" => "Save Role",
"admin_page_user.select_role" => "Select user role",
"admin_page_user.send_password_link" => "Send Password Reset Link",
"admin_page_user.table.action" => "Action",
"admin_page_user.table.created_at" => "Registered",
"admin_page_user.table.name" => "User",
"admin_page_user.table.role" => "Role",
"admin_page_user.table.storage_capacity" => "Storage Capacity",
"admin_page_user.table.storage_used" => "Storage Used",
"admin_page_user.tabs.delete" => "Delete User",
"admin_page_user.tabs.detail" => "Detail",
"admin_page_user.tabs.password" => "Password",
"admin_page_user.tabs.storage" => "Storage Usage",
"admin_pages.form.content" => "Content",
"admin_pages.form.content_plac" => "Type your content here...",
"admin_pages.form.slug" => "Slug",
"admin_pages.form.title" => "Title",
"admin_pages.form.title_plac" => "Title name",
"admin_pages.form.visibility" => "Visibility",
"admin_pages.form.visibility_help" => "Status of your page visibility on website.",
"admin_pages.table.page" => "Page",
"admin_pages.table.slug" => "Slug",
"admin_pages.table.status" => "Status",
"admin_settings.appearance.description" => "App Description",
"admin_settings.appearance.description_plac" => "Type your app description",
"admin_settings.appearance.favicon" => "App Favicon (optional)",
"admin_settings.appearance.logo" => "App Logo (optional)",
"admin_settings.appearance.logo_horizontal" => "App Logo Horizontal (optional)",
"admin_settings.appearance.section_appearance" => "Appearance",
"admin_settings.appearance.section_general" => "General Settings",
"admin_settings.appearance.title" => "App Title",
"admin_settings.appearance.title_plac" => "Type your app title",
"admin_settings.email.driver" => "Mail Driver",
"admin_settings.email.driver_plac" => "Type your mail driver",
"admin_settings.email.email_disclaimer" => "This form is not fully pre-filled for security reasons. Your email settings is available in your <b class='text-theme'>.env</b> file. For apply new Email settings, please confirm your options by button at the end of formular.",
"admin_settings.email.encryption" => "Mail Encryption",
"admin_settings.email.encryption_plac" => "Select your mail encryption",
"admin_settings.email.host" => "Mail Host",
"admin_settings.email.host_plac" => "Type your mail host",
"admin_settings.email.password" => "Mail Password",
"admin_settings.email.password_plac" => "Type your mail password",
"admin_settings.email.port" => "Mail Port",
"admin_settings.email.port_plac" => "Type your mail port",
"admin_settings.email.save_button" => "Save Email Settings",
"admin_settings.email.section_email" => "Email Setup",
"admin_settings.email.username" => "Mail Username",
"admin_settings.email.username_plac" => "Type your mail username",
"admin_settings.others.allow_registration" => "Allow User Registration",
"admin_settings.others.allow_registration_help" => "You can disable public registration for new users. You will still able to <br/>create new users in administration panel.",
"admin_settings.others.cache_clear" => "Clear Cache",
"admin_settings.others.cache_disclaimer" => "Did you change anything in your .env file or change your Stripe credentials? Then clear your cache.",
"admin_settings.others.contact_email" => "Contact Email",
"admin_settings.others.contact_email_plac" => "Type your contact email",
"admin_settings.others.default_storage" => "Default Storage Space for User Accounts",
"admin_settings.others.default_storage_plac" => "Set default storage space in GB",
"admin_settings.others.google_analytics" => "Google Analytics Code (optional)",
"admin_settings.others.google_analytics_plac" => "Paste your Google Analytics Code",
"admin_settings.others.mimetypes_blacklist" => "Mimetypes Blacklist",
"admin_settings.others.mimetypes_blacklist_help" => "If you want to prevent upload some type of files, just add them to blacklist like this: x-php,mp3,jpeg <br/> Use a comma between each mimetype. Don't use a dot before mimetypes.",
"admin_settings.others.mimetypes_blacklist_plac" => "Add mimetypes to Blacklist",
"admin_settings.others.section_cache" => "Application Cache",
"admin_settings.others.section_others" => "Others Settings",
"admin_settings.others.section_user" => "Users and Storage",
"admin_settings.others.storage_limit" => "Storage Limitation",
"admin_settings.others.storage_limit_help" => "If this value is off, all users will have infinity storage capacity and you won't be <br/>able to charge your users for storage plan.",
"admin_settings.others.upload_limit" => "Upload Limit",
"admin_settings.others.upload_limit_help" => "If you want to set max file size limit on single upload, add size of your limit in MB. E.g. 100 means 100 MB and 2 000 means 2 000 MB limit.",
"admin_settings.others.upload_limit_plac" => "Type your upload limit in MB",
"admin_settings.tabs.appearance" => "Appearance",
"admin_settings.tabs.email" => "Email",
"admin_settings.tabs.others" => "Application",
"alerts.error_confirm" => "Thats horrible!",
"alerts.leave_to_sign_in" => "Do you really want to leave?",
"alerts.success_confirm" => "Awesome!",
"context_menu.add_folder" => "Add Folder",
"context_menu.add_to_favourites" => "Add to Favourites",
"context_menu.create_folder" => "Create Folder",
"context_menu.delete" => "Delete",
"context_menu.detail" => "Detail",
"context_menu.download" => "Download",
"context_menu.empty_trash" => "Empty Trash",
"context_menu.log_out" => "Log Out",
"context_menu.move" => "Move",
"context_menu.no_options" => "No Options Available",
"context_menu.profile_settings" => "Profile Settings",
"context_menu.remove_from_favourites" => "Remove Favourite",
"context_menu.rename" => "Rename",
"context_menu.restore" => "Restore",
"context_menu.select" => "Select",
"context_menu.share" => "Share",
"context_menu.share_cancel" => "Cancel Sharing",
"context_menu.share_edit" => "Edit Sharing",
"context_menu.upload" => "Upload",
"context_menu.zip_folder" => "Zip and Download",
"cookie_disclaimer.button" => "cookies policy",
"cookie_disclaimer.description" => "By browsing this website you are agreeing to our {0}.",
"datatable.paginate_info" => "Showing 1 - {visible} from {total} records",
"empty_page.call_to_action" => "Upload Files",
"empty_page.description" => "Upload some files here easily via upload button.",
"empty_page.title" => "Upload Your First File",
"errors.capacity_digit" => "The storage capacity must be lower than 10 digit number.",
"file_detail.author" => "Author",
"file_detail.author_participant" => "Public Participant",
"file_detail.created_at" => "Created at",
"file_detail.items" => "Items",
"file_detail.selected_multiple" => "Selected Multiple Items",
"file_detail.shared" => "Shared",
"file_detail.size" => "Size",
"file_detail.where" => "Where",
"file_detail_meta.aperature" => "F Number",
"file_detail_meta.aperture_value" => "Aperture Value",
"file_detail_meta.author" => "Author",
"file_detail_meta.camera_lens" => "Camera Lens",
"file_detail_meta.color_space" => "Color Space",
"file_detail_meta.dimension" => "Dimensions",
"file_detail_meta.exposure" => "Exposure Time",
"file_detail_meta.focal" => "Focal Length",
"file_detail_meta.iso" => "ISO",
"file_detail_meta.latitude" => "Latitude",
"file_detail_meta.longitude" => "Longitude",
"file_detail_meta.make" => "Camera",
"file_detail_meta.meta_data" => "Metadata",
"file_detail_meta.model" => "Model",
"file_detail_meta.resolution" => "Resolution",
"file_detail_meta.time_data" => "Content Created",
"folder.empty" => "Empty",
"folder.item_counts" => "{count} Item | {count} Items",
"global.active" => "Active",
"global.admin" => "Admin",
"global.cancel" => "Cancel",
"global.canceled" => "Canceled",
"global.confirm_action" => "Yes, I'm sure",
"global.default" => "Default",
"global.free" => "Free",
"global.get_it" => "Get It",
"global.incomplete" => "Incomplete",
"global.menu" => "Menu",
"global.or" => "or",
"global.total" => "Total",
"input_image.supported" => "Supported formats are .png, .jpg, .jpeg.",
"input_image.title" => "Upload Image",
"inputs.placeholder_search_files" => "Search files or folders...",
"item_thumbnail.deleted_at" => "Deleted {time}",
"item_thumbnail.original_location" => "Original Location",
"locations.home" => "Files",
"locations.logout" => "Log Out",
"locations.profile" => "Profile",
"locations.settings" => "Settings",
"locations.shared" => "Shared",
"locations.trash" => "Trash",
"menu.admin" => "Administration",
"menu.files" => "Files",
"menu.latest" => "Recent Uploads",
"menu.logout" => "Log Out",
"menu.password" => "Password",
"menu.profile" => "Profile Settings",
"menu.settings" => "Settings",
"menu.shared" => "Shared Files",
"menu.storage" => "Storage",
"menu.trash" => "Trash",
"messages.nothing_from_participants" => "You don't have any uploads from other users.",
"messages.nothing_to_preview" => "There is nothing to preview.",
"messages.nothing_was_found" => "Nothing was found.",
"mobile_selecting.deselect_all" => "Deselect All",
"mobile_selecting.done" => "Done",
"mobile_selecting.select_all" => "Select All",
"page_contact_us.description" => "Do you have any questions? Get in touch with us.",
"page_contact_us.error_message" => "Something went wrong, please try it again.",
"page_contact_us.form.email" => "Email",
"page_contact_us.form.email_plac" => "Type your email",
"page_contact_us.form.message" => "Message",
"page_contact_us.form.message_plac" => "Type your message here...",
"page_contact_us.form.submit_button" => "Send Message",
"page_contact_us.success_message" => "Your message was send successfully.",
"page_contact_us.title" => "Contact Us",
"page_create_password.button_update" => "Update Password",
"page_create_password.label_confirm_pass" => "Confirm password",
"page_create_password.label_email" => "Email",
"page_create_password.label_new_pass" => "New password",
"page_create_password.subtitle" => "Create your new password here",
"page_create_password.title" => "Only One Step to Log In",
"page_forgotten_password.button_get_link" => "Get Link",
"page_forgotten_password.pass_reseted_signin" => "Sign In",
"page_forgotten_password.pass_reseted_subtitle" => "Your password was reset successfully.",
"page_forgotten_password.pass_reseted_title" => "Awesome!",
"page_forgotten_password.pass_sennded_subtitle" => "We have e-mailed your password reset link!",
"page_forgotten_password.pass_sennded_title" => "Thank you!",
"page_forgotten_password.password_remember_button" => "Log In.",
"page_forgotten_password.password_remember_text" => "Remember your password?",
"page_forgotten_password.subtitle" => "Get reset link with your email",
"page_forgotten_password.title" => "Forgotten Password?",
"page_index.get_started_button" => "Sign Up Now",
"page_index.menu.contact_us" => "Contact Us",
"page_index.menu.log_in" => "Log In",
"page_index.menu.pricing" => "Pricing",
"page_index.menu.sign_in" => "Sign Up",
"page_index.sign_feature_1" => "No credit card required",
"page_index.sign_feature_2" => "{defaultSpace} Free storage space",
"page_index.sign_up_button" => "Sign Up Now",
"page_login.button_next" => "Next Step",
"page_login.placeholder_email" => "Type your E-mail",
"page_login.registration_button" => "Register account.",
"page_login.registration_text" => "Dont have an account?",
"page_login.subtitle" => "Please type your email to log in",
"page_login.title" => "Welcome Back!",
"page_registration.agreement" => "By clicking on 'Create Account' button I agree to the {0} and {1}.",
"page_registration.button_create_account" => "Create Account",
"page_registration.have_an_account" => "Do you have an account?",
"page_registration.label_confirm_pass" => "Confirm password",
"page_registration.label_email" => "Email",
"page_registration.label_name" => "Full Name",
"page_registration.label_pass" => "Create password",
"page_registration.placeholder_confirm_pass" => "Confirm your new password",
"page_registration.placeholder_email" => "Type your E-mail",
"page_registration.placeholder_name" => "Type your full name",
"page_registration.placeholder_pass" => "New password",
"page_registration.subtitle" => "Please fill registration to create account",
"page_registration.title" => "Create New Account",
"page_shared.download_file" => "Download File",
"page_shared.placeholder_pass" => "Type password",
"page_shared.submit" => "Submit",
"page_shared.subtitle" => "Please type the password to get shared content",
"page_shared.title" => "Your Share Link is Protected",
"page_shared_404.subtitle" => "The content you are finding was probably deleted.",
"page_shared_404.title" => "Not Found :(",
"page_sign_in.button_log_in" => "Log In",
"page_sign_in.password_reset_button" => "Reset Password.",
"page_sign_in.password_reset_text" => "Forgotten your password?",
"page_sign_in.placeholder_password" => "Type your password",
"page_sign_in.subtitle" => "Confirm you by your password",
"page_sign_in.title" => "Are You {name}?",
"popup_create_folder.folder_default_name" => "New Folder",
"popup_create_folder.label" => "Type Name",
"popup_create_folder.placeholder" => "Type your name",
"popup_create_folder.title" => "Create Folder",
"popup_deleted_user.message" => "Your user was deleted with all user data content.",
"popup_deleted_user.title" => "User was deleted",
"popup_deleted_user_aborted.message" => "You can't delete this account while user have active subscription.",
"popup_deleted_user_aborted.title" => "User wasn't deleted",
"popup_error.message" => "Something went wrong and we can't continue. Please contact us.",
"popup_error.title" => "Whooops, something went wrong!",
"popup_exceed_limit.message" => "Please contact your administrator to change your limit.",
"popup_exceed_limit.title" => "Whooops, you exceed storage limit :(",
"popup_mimetypes_blacklist.message" => "File of this type ({mimetype}) is not allowed to upload.",
"popup_mimetypes_blacklist.title" => "You are trying to upload unsupported file type",
"popup_move_item.cancel" => "Cancel",
"popup_move_item.submit" => "Move Item",
"popup_move_item.title" => "Move Item",
"popup_pass_changed.message" => "So now, you have awesome new password.",
"popup_pass_changed.title" => "Your password was changed!",
"popup_paylod_error.message" => "Sorry, your file is too large and can't be uploaded",
"popup_paylod_error.title" => "File is too large",
"popup_rename.select_emoji_label" => "Pick Your Emoji Icon",
"popup_rename.color_pick_label" => "Pick Your Color",
"popup_rename.emoji_list_not_found" => "Not Found",
"popup_rename.label" => "Edit Name",
"popup_rename.placeholder" => "Type your title",
"popup_rename.search_emoji_input_placeholder" => "Search your emoji...",
"popup_rename.set_emoji_input_placeholder" => "Emojis List...",
"popup_rename.tab_color_title" => "Folder Color",
"popup_rename.tab_emoji_title" => "Emoji as an Icon",
"popup_rename.title" => "Rename Your {item}",
"popup_share_create.title" => "Share Your {item}",
"popup_share_edit.change_pass" => "Change Password",
"popup_share_edit.confirm" => "Confirm",
"popup_share_edit.go_back" => "Go Back",
"popup_share_edit.save" => "Save Changes",
"popup_share_edit.send_to_recipients" => "Send to Recipients",
"popup_share_edit.stop" => "Cancel Sharing",
"popup_share_edit.title" => "Update sharing options",
"popup_signup_error.message" => "Please check your database connection if everything works correctly.",
"popup_signup_error.title" => "Server Error",
"popup_upload_limit.message" => "Size of your uploaded file exceed the upload limit ({uploadLimit}).",
"popup_upload_limit.title" => "You exceed upload limit on single file",
"popup_zipping.message" => "Please wait until your files start downloading.",
"popup_zipping.title" => "Zipping Your Files...",
"preview_sorting.grid_view" => "Grid View",
"preview_sorting.list_view" => "List View",
"preview_sorting.preview_sorting_button" => "View",
"preview_sorting.sort_alphabet" => "Sort By Aplhabet",
"preview_sorting.sort_date" => "Sort By Date",
"profile.change_pass" => "Change Password",
"profile.profile_info" => "Profile Information",
"profile.store_pass" => "Store New Password",
"pronouns.of" => "of",
"roles.admin" => "Admin",
"roles.user" => "User",
"routes.create_new_password" => "create-new-password",
"routes_title.appearance" => "Appearance",
"routes_title.dashboard" => "Dashboard",
"routes_title.email" => "Email",
"routes_title.languages" => "Languages",
"routes_title.others" => "Others",
"routes_title.page_edit" => "Edit Page",
"routes_title.pages" => "Pages",
"routes_title.profile" => "My Profile",
"routes_title.profile_settings" => "Profile Settings",
"routes_title.settings" => "Settings",
"routes_title.settings_mobile" => "Settings",
"routes_title.settings_password" => "Change Password",
"routes_title.settings_storage" => "Storage",
"routes_title.user_create" => "Create User",
"routes_title.users_delete" => "Delete User",
"routes_title.users_detail" => "Detail",
"routes_title.users_list" => "User Management",
"routes_title.users_password" => "Password",
"routes_title.users_storage_usage" => "Storage Usage",
"routes_title.users_user" => "User",
"shared.can_download" => "Can download file",
"shared.editor" => "Can edit and upload files",
"shared.empty_shared" => "You haven't shared anything yet.",
"shared.visitor" => "Can only view and download",
"shared_form.button_close_options" => "Close Options",
"shared_form.button_done" => "Awesome, Im done!",
"shared_form.button_folder_icon_open" => "Customize Folder Icon",
"shared_form.button_generate" => "Generate Link",
"shared_form.button_more_options" => "Set Expiration",
"shared_form.email_placeholder" => "Type your emails",
"shared_form.email_successfully_send_message" => "Your item was <b class='text-theme'>successfully sended</b> to recipients emails.",
"shared_form.expiration_day" => "{value}d.",
"shared_form.expiration_hour" => "{value}h.",
"shared_form.label_expiration" => "Link Expiration",
"shared_form.label_password_protection" => "Password Protected",
"shared_form.label_permission" => "Permission",
"shared_form.label_send_to_recipients" => "Send to Recipients",
"shared_form.label_share_vie_email" => "Get your link",
"shared_form.label_shared_url" => "Share url",
"shared_form.placeholder_permission" => "Select your permission",
"shared_form.recipients_label" => "Recipients",
"shared_form.share_by_email" => "Share by Email",
"shared_form.share_by_link" => "Share by Link",
"sidebar.favourites" => "Favourites",
"sidebar.favourites_empty" => "Drag here your favourite folder.",
"sidebar.folders_empty" => "Create some new folder.",
"sidebar.home" => "Files",
"sidebar.latest" => "Recent Uploads",
"sidebar.locations_title" => "Base",
"sidebar.my_shared" => "My Shared Items",
"sidebar.navigator_title" => "Navigator",
"sidebar.participant_uploads" => "Participant Uploads",
"sidebar.tools_title" => "Tools",
"storage.audios" => "Audios",
"storage.documents" => "Documents",
"storage.images" => "Images",
"storage.others" => "Others",
"storage.sec_capacity" => "Your disk Usage",
"storage.sec_details" => "Capacity Usage Details",
"storage.total_capacity" => "Your storage capacity is {capacity}",
"storage.total_used" => "Total used {used}",
"storage.videos" => "Videos",
"toaster.changed_capacity" => "You successfully changed user's storage size!",
"toaster.changed_user" => "You successfully changed user's role!",
"toaster.created_user" => "User was created successfully!",
"toaster.email_set" => "Your email settings was updated successfully",
"toaster.sended_password" => "You successfully send user email for reset password!",
"types.file" => "File",
"types.folder" => "Folder",
"upgrade_banner.button" => "Upgrade",
"upgrade_banner.description" => "You nearly reach your storage capacity.",
"upgrade_banner.title" => "You reach your storage capacity. Please upgrade.",
"uploading.cancel" => "Cancel Uploading",
"uploading.processing_file" => "Processing File...",
"uploading.progress" => "Uploading File {progress}% - {current}/{total}",
"uploading.progress_single_upload" => "Uploading File {progress}%",
"user_add_card.default_description" => "Your card will be charged for billing plans as first.",
"user_add_card.default_title" => "Set as Default Payment Method",
"user_box_delete.description" => "You can delete your user, but, pay attention! This event is irreversible and all user data include user files will be deleted.",
"user_box_delete.title" => "Delete User",
"user_box_password.description" => "You can send password reset email via button bellow. User will be redirected to page where he can update password for his account.",
"user_box_password.title" => "Change User Password",
"user_box_role.description" => "You can change role for current user. Admin role can edit or create new users, change storage capacity and any other application settings.",
"user_box_role.title" => "Change User Role",
"user_box_storage.description" => "Change user storage capacity by input bellow. You have to type only number e.g. value '5' means, user will have 5GB of storage capacity.",
"user_box_storage.title" => "Change User Storage Capacity",
"user_password.title" => "Change Your Password",
"user_settings.address" => "Address",
"user_settings.address_plac" => "Type your billing address",
"user_settings.city" => "City",
"user_settings.city_plac" => "Type your billing city",
"user_settings.country" => "Country",
"user_settings.country_plac" => "Select your billing country",
"user_settings.name" => "Name",
"user_settings.name_plac" => "Type your billing name",
"user_settings.phone_number" => "Phone Number",
"user_settings.phone_number_plac" => "Type your billing phone number",
"user_settings.postal_code" => "Postal Code",
"user_settings.postal_code_plac" => "Type your billing postal code",
"user_settings.state" => "State",
"user_settings.state_plac" => "Type your billing state",
"user_settings.timezone" => "Timezone",
"user_settings.timezone_plac" => "Select your timezone",
"user_settings.title_account" => "Account Information",
"user_settings.title_billing" => "Billing Information",
"validation_errors.incorrect_password" => "Sorry, you passed incorrect password :(",
"validation_errors.wrong_image" => "You may have uploaded the wrong file, try again!",
'app_description' => 'Your self-hosted storage cloud software powered by Laravel and Vue',
'user_not_fount' => 'We can\'t find a user with that e-mail address.',
'incorrect_password' => 'Sorry, your password is incorrect.',
'time' => '%d. %B. %Y at %H:%M',
'home' => 'Home',
'shared_link_email_subject' => '🙋 :user share some files with you. Look at it!',
'shared_link_email_greeting' => 'Hello!',
'shared_link_email_user' => ':user (:email) send you a link to shared files.',
'shared_link_email_link' => 'Open your files',
'shared_link_email_salutation' => 'Regards, :app_name',
'reset_password_greeting' => 'Hello!',
'reset_password_subject' => 'Reset password for your account on ',
'reset_password_line_1' => 'You are receiving this email because we received a password reset request for your account.',
'reset_password_line_2' => 'If you did not request a password reset, no further action is required.',
'reset_password_action' => 'Reset Password',
'salutation' => 'Regards',
'user_sending' => ':name is sending you this file',
'protected_file' => 'This link is protected by password',
'routes_title.language' => 'Languages',
'languages' => 'Languages',
'add_language' => 'Add Language',
'create_language' => 'Create Language',
'edit_translations' => 'Edit Translations',
'language_name' => 'Language Name',
'set_as_default_language' => 'Set as Default Language',
'language_settings' => 'Language Settings',
'search_translations' => 'Search Language Translations...',
'select_locale' => 'Select Locale',
'locale_name' => 'Language Name',
'select_language_locale' => 'Select Language Locale',
'type_language_name' => 'Type Language Name',
'go_to_files' => 'Go to Files',
'color_theme' => 'Color Theme',
'color_theme_description' => 'Your color change will be visible after app refresh.',
'og_image' => 'OG Image',
'og_image_description' => 'Image that appear when someone shares the content to Facebook or any other social medium. Preferred size is 1200x627',
'app_touch_icon' => 'App Touch Icon',
'app_touch_icon_description' => 'If user store bookmark on his phone screen, this icon appear in app thumbnail. Preferred size is 156x156',
]
];

View File

@@ -30,7 +30,7 @@ class ShareFactory extends Factory
'type' => $this->faker->randomElement(['file', 'folder']),
'permission' => $this->faker->randomElement(['visitor', 'editor']),
'is_protected' => $this->faker->boolean(20),
'password' => \Hash::make('secret'),
'password' => bcrypt('secret'),
'expire_in' => $this->faker->randomElement([1, 6, 12, 24]),
];
}

View File

@@ -4,7 +4,6 @@ namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
class UserFactory extends Factory
@@ -29,7 +28,7 @@ class UserFactory extends Factory
),
'email' => $this->faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => Hash::make('secret'),
'password' => bcrypt('secret'),
'remember_token' => Str::random(10),
'created_at' => $this->faker->dateTimeBetween(
$startDate = '-36 months', $endDate = 'now', $timezone = null

View File

@@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateLanguagesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('languages', function (Blueprint $table) {
$table->uuid('id')->primary()->index();
$table->string('name');
$table->string('locale')->unique();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('languages');
}
}

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateLanguageStrings extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('language_translations', function (Blueprint $table) {
$table->string('key');
$table->longText('value');
$table->string('lang');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('language_translations');
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@@ -1,78 +1,135 @@
{
"/vendors~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-i~8394cf85.js": "/vendors~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-i~8394cf85.js?id=7fb9a8f957bc5a63ebbe",
"/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~cc6e748e.js": "/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~cc6e748e.js?id=d85e8bc2bb4fc4b9cd7e",
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js?id=812f194ac13a302d647a",
"/chunks/dashboard~chunks/invoices~chunks/pages~chunks/plans~chunks/user-invoices.js": "/chunks/dashboard~chunks/invoices~chunks/pages~chunks/plans~chunks/user-invoices.js?id=15177b797675ca0d719f",
"/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser.js?id=3b0d689728d8e9e89814",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js?id=7021bd7e7a4482f0adad",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.js?id=ccff85e59956642794fa",
"/chunks/platform~chunks/shared.js": "/chunks/platform~chunks/shared.js?id=d2a11ecea5f79cf0d2e5",
"/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=83118778098d9cccc7d7",
"/vendors~chunks/platform~chunks/shared.js": "/vendors~chunks/platform~chunks/shared.js?id=0e6d6979c32214f01a99",
"/js/main.js": "/js/main.js?id=0a7412f36f4a08c502ec",
"/css/app.css": "/css/app.css?id=5ef36155a311dd4539c1",
"/chunks/admin.js": "/chunks/admin.js?id=e899c4e340a7ee17bfc7",
"/chunks/admin-account.js": "/chunks/admin-account.js?id=28cdfca8ae4209e8e37b",
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=59095f58ca3113b15626",
"/chunks/app-billings.js": "/chunks/app-billings.js?id=2cd6830fae983681a8b4",
"/chunks/app-email.js": "/chunks/app-email.js?id=44d64098857ce4aca4f4",
"/chunks/app-index.js": "/chunks/app-index.js?id=92924d419cf9db2b7d69",
"/chunks/app-others.js": "/chunks/app-others.js?id=f1ea6bd2c8ce1ed2b3ea",
"/chunks/app-payments.js": "/chunks/app-payments.js?id=27c10ba667bff44a339a",
"/chunks/app-settings.js": "/chunks/app-settings.js?id=228b731d4a4a624e9ac8",
"/chunks/app-setup.js": "/chunks/app-setup.js?id=e114d23eb116de7daaca",
"/chunks/billings-detail.js": "/chunks/billings-detail.js?id=effde3612acf63127b61",
"/chunks/contact-us.js": "/chunks/contact-us.js?id=5ecf2fabc15b38a862a5",
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=0299a64609dbeac8c498",
"/chunks/dashboard.js": "/chunks/dashboard.js?id=f74d247e861d7afcfaf5",
"/chunks/database.js": "/chunks/database.js?id=f381821cf381731465d3",
"/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=8a9239571e1ccdcf7ec4",
"/chunks/environment-setup.js": "/chunks/environment-setup.js?id=f7548828b76e2beebd70",
"/chunks/files.js": "/chunks/files.js?id=81ecddbb7f76b87c9fd7",
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=67d2aa40c40b247ca626",
"/chunks/homepage.js": "/chunks/homepage.js?id=5903876b5ba8dd238f40",
"/chunks/installation-disclaimer.js": "/chunks/installation-disclaimer.js?id=ef514625e3fc96cdccb4",
"/chunks/invoices.js": "/chunks/invoices.js?id=5efc1b78ac26647e0b1b",
"/chunks/not-found-shared.js": "/chunks/not-found-shared.js?id=f11f6be7530258b866a5",
"/chunks/oasis/platba.js": "/chunks/oasis/platba.js?id=762cbacf500f9f6a10fd",
"/chunks/page-edit.js": "/chunks/page-edit.js?id=1319a4618c4320afe926",
"/chunks/pages.js": "/chunks/pages.js?id=acf091c54db696620ca3",
"/chunks/plan.js": "/chunks/plan.js?id=4900048a346826a4a3b0",
"/chunks/plan-create.js": "/chunks/plan-create.js?id=08a7524a711895e478e7",
"/chunks/plan-delete.js": "/chunks/plan-delete.js?id=50baf5cf629ee3903fd0",
"/chunks/plan-settings.js": "/chunks/plan-settings.js?id=c1aeda79dfc6121c7ae9",
"/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=c84ed9463bd01817fe58",
"/chunks/plans.js": "/chunks/plans.js?id=4834dcb4c44a2917db31",
"/chunks/platform.js": "/chunks/platform.js?id=bd0c441badaa95260cc2",
"/chunks/profile.js": "/chunks/profile.js?id=77b8482753875eaac232",
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=02ca506cbe8955104f40",
"/chunks/settings.js": "/chunks/settings.js?id=8c29356a0e05ecf2ae14",
"/chunks/settings-create-payment-methods.js": "/chunks/settings-create-payment-methods.js?id=ca18577ff4ee126d9e67",
"/chunks/settings-invoices.js": "/chunks/settings-invoices.js?id=027ca7690d1d63ed2170",
"/chunks/settings-password.js": "/chunks/settings-password.js?id=3ea6a0af21525b1e71d5",
"/chunks/settings-payment-methods.js": "/chunks/settings-payment-methods.js?id=199a86fbabc691dddee9",
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=10be14da6b77a0953553",
"/chunks/settings-subscription.js": "/chunks/settings-subscription.js?id=51a492d6b267ed10d1e2",
"/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=105acf51fb151cabf487",
"/chunks/shared.js": "/chunks/shared.js?id=5497376628e7d35fbf69",
"/chunks/shared-files.js": "/chunks/shared-files.js?id=267127380722f1952000",
"/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=b1dda61a10d9cea61781",
"/chunks/shared/file-browser.js": "/chunks/shared/file-browser.js?id=9dd413e63d2c425a2104",
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=7ab003bd006e1bd72980",
"/chunks/sign-in.js": "/chunks/sign-in.js?id=aef6904df93f6a1f75a2",
"/chunks/sign-up.js": "/chunks/sign-up.js?id=be4aede8e58da006e976",
"/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=1e95c1f7d0f2403d8ff4",
"/chunks/subscription-plans.js": "/chunks/subscription-plans.js?id=c2a9d01814982344f330",
"/chunks/subscription-service.js": "/chunks/subscription-service.js?id=39a8f7be01f07749cc5a",
"/chunks/upgrade-billing.js": "/chunks/upgrade-billing.js?id=5332d86219c3a0724557",
"/chunks/upgrade-plan.js": "/chunks/upgrade-plan.js?id=93f1a120f20814afee9f",
"/chunks/user.js": "/chunks/user.js?id=1997c8c2c5ce12d6a813",
"/chunks/user-create.js": "/chunks/user-create.js?id=afbb81b0e5ac7cfa03c4",
"/chunks/user-delete.js": "/chunks/user-delete.js?id=93f3915b2f23f42fdf65",
"/chunks/user-detail.js": "/chunks/user-detail.js?id=3ed0e00627ff77891f7d",
"/chunks/user-invoices.js": "/chunks/user-invoices.js?id=30f659c7c2b525ebf5c4",
"/chunks/user-password.js": "/chunks/user-password.js?id=0fdaeab06a9ed470f998",
"/chunks/user-storage.js": "/chunks/user-storage.js?id=4ce314558da246390d99",
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=71fae0228ed9d37b9302",
"/chunks/users.js": "/chunks/users.js?id=22ef617ebef15c9b897f"
"/js/main.js": "/js/main.js",
"/css/app.css": "/css/app.css",
"/chunks/admin.js": "/chunks/admin.js?id=f3df96ed0302c713ab20",
"/chunks/admin-account.js": "/chunks/admin-account.js?id=3036df3e72596fabc42e",
"/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~c7a13fb0.js": "/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~c7a13fb0.js?id=62b552a0492fe95b2223",
"/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~a001bb84.js": "/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~a001bb84.js?id=0cad8279d29d79cd0e82",
"/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~eeab5771.js": "/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~eeab5771.js?id=99dbb760d4e3dd0acdbf",
"/chunks/admin~chunks/files~chunks/settings~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/admin~chunks/files~chunks/settings~chunks/shared-files~chunks/shared/file-browser.js?id=9b66c2dab4c6103bb53c",
"/chunks/admin~chunks/platform.js": "/chunks/admin~chunks/platform.js?id=3d9f93a03cb1ffa61d01",
"/chunks/admin~chunks/platform~chunks/shared.js": "/chunks/admin~chunks/platform~chunks/shared.js?id=12f0aaeb615c37d0515d",
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=b4e2d99a172f06a1d312",
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js?id=45c8f27411287c7bbf73",
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js?id=7702f37f277478ad66c6",
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~b9e5655a.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~b9e5655a.js?id=04f0cd9719723459b685",
"/chunks/app-billings.js": "/chunks/app-billings.js?id=82133cc16f55222bbbe6",
"/chunks/app-email.js": "/chunks/app-email.js?id=c578a85112c6a4b1ed0e",
"/chunks/app-index.js": "/chunks/app-index.js?id=7f07dceace5c9c8255bb",
"/chunks/app-language.js": "/chunks/app-language.js?id=e97b8b4e0a0f5ac93c97",
"/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.js": "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~38c276fc.js?id=91d6a4649c9277a7bb29",
"/chunks/app-others.js": "/chunks/app-others.js?id=9156adba3b1697a8bf3e",
"/chunks/app-payments.js": "/chunks/app-payments.js?id=7e1a982c90174f568fb2",
"/chunks/app-settings.js": "/chunks/app-settings.js?id=bbf2a2e436d939f7fc07",
"/chunks/app-settings~chunks/dashboard~chunks/invoices~chunks/page-edit~chunks/pages~chunks/plan~chunk~8a0e1d25.js": "/chunks/app-settings~chunks/dashboard~chunks/invoices~chunks/page-edit~chunks/pages~chunks/plan~chunk~8a0e1d25.js?id=e71bb0286189734a8aec",
"/chunks/app-setup.js": "/chunks/app-setup.js?id=d0e3e046e147ca928f34",
"/chunks/billings-detail.js": "/chunks/billings-detail.js?id=d0ade32264f71dd7a2af",
"/chunks/contact-us.js": "/chunks/contact-us.js?id=f5276b101b2e0c97d6d1",
"/chunks/contact-us~chunks/dynamic-page~chunks/homepage.js": "/chunks/contact-us~chunks/dynamic-page~chunks/homepage.js?id=22bd5db44c72e8de5f5b",
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=48dc53ccbd502c2739ec",
"/chunks/dashboard.js": "/chunks/dashboard.js?id=74bd69ac9feddf058188",
"/chunks/dashboard~chunks/invoices~chunks/pages~chunks/plan-subscribers~chunks/plans~chunks/settings-i~0e2a0654.js": "/chunks/dashboard~chunks/invoices~chunks/pages~chunks/plan-subscribers~chunks/plans~chunks/settings-i~0e2a0654.js?id=7540af768b1cfda01a13",
"/chunks/database.js": "/chunks/database.js?id=7374830dc3cbddf41abb",
"/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=6dccc2158cc6278f683d",
"/chunks/environment-setup.js": "/chunks/environment-setup.js?id=208de84df68177288a2a",
"/chunks/files.js": "/chunks/files.js?id=40b4464ce393cb112111",
"/chunks/files~chunks/platform~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/platform~chunks/shared-files~chunks/shared/file-browser.js?id=39233d603662ca3738e8",
"/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser.js?id=da7fad654568667d799f",
"/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~chunks/sha~8510f6c9.js": "/chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~chunks/sha~8510f6c9.js?id=b4ccb4a816e5c72a0b85",
"/chunks/files~chunks/settings-subscription~chunks/shared-files~chunks/shared/file-browser~chunks/user~9058a49f.js": "/chunks/files~chunks/settings-subscription~chunks/shared-files~chunks/shared/file-browser~chunks/user~9058a49f.js?id=31a17ad1d2536342abbe",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser.js?id=8912841f29b16a3ecbf9",
"/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js": "/chunks/files~chunks/shared-files~chunks/shared/file-browser~chunks/shared/single-file.js?id=9b875b7ea10b575524e6",
"/chunks/files~chunks/shared/file-browser.js": "/chunks/files~chunks/shared/file-browser.js?id=a67929ed0c257f501268",
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=877a9289b77ac3885042",
"/chunks/homepage.js": "/chunks/homepage.js?id=14154b40ea69f91fef31",
"/chunks/installation-disclaimer.js": "/chunks/installation-disclaimer.js?id=fa49cb6f6c1027d24d57",
"/chunks/invoices.js": "/chunks/invoices.js?id=81df0d453a53fd224e13",
"/chunks/not-found-shared.js": "/chunks/not-found-shared.js?id=7fc7f9b6f10bdfac770e",
"/chunks/page-edit.js": "/chunks/page-edit.js?id=dbb7e8cb377a08c8adc2",
"/chunks/pages.js": "/chunks/pages.js?id=9c31ba518ce43a3595ef",
"/chunks/plan.js": "/chunks/plan.js?id=396a1053f0c7089de936",
"/chunks/plan-create.js": "/chunks/plan-create.js?id=92ca81965dc17b3ec7a3",
"/chunks/plan-delete.js": "/chunks/plan-delete.js?id=f193816778245ea66d02",
"/chunks/plan-settings.js": "/chunks/plan-settings.js?id=66123f72696b47a986a2",
"/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=08e2056bc3744b2ea8f9",
"/chunks/plans.js": "/chunks/plans.js?id=608bdbd5c041b728691a",
"/chunks/platform.js": "/chunks/platform.js?id=559a62d18ff169793e54",
"/chunks/platform~chunks/shared.js": "/chunks/platform~chunks/shared.js?id=3d5804463c897995e9d1",
"/chunks/profile.js": "/chunks/profile.js?id=fb4a46afdd09cdcdc7da",
"/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=d448806bfefc6cc43f0d",
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=e00ee12cde704060e15b",
"/chunks/settings.js": "/chunks/settings.js?id=2637c005a9c8b01cfc9b",
"/chunks/settings-create-payment-methods.js": "/chunks/settings-create-payment-methods.js?id=c12436dc2933527ce1f5",
"/chunks/settings-invoices.js": "/chunks/settings-invoices.js?id=444b9bbc310647ddd297",
"/chunks/settings-password.js": "/chunks/settings-password.js?id=d24053a92c2594439d04",
"/chunks/settings-payment-methods.js": "/chunks/settings-payment-methods.js?id=3bc709a228c0849a6f62",
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=ced13fc6a34233fb53aa",
"/chunks/settings-subscription.js": "/chunks/settings-subscription.js?id=22e5c49d5b0a154e1a28",
"/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=c6b88005b133268ed88f",
"/chunks/shared.js": "/chunks/shared.js?id=2c38f535d52e0e448846",
"/chunks/shared-files.js": "/chunks/shared-files.js?id=cde3c7a58d2da0015555",
"/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=3d5c7754d438830a4204",
"/chunks/shared/file-browser.js": "/chunks/shared/file-browser.js?id=3127fab4cfd3d5f00a72",
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=e8aedb75df7fe227d693",
"/chunks/sign-in.js": "/chunks/sign-in.js?id=61e5b97e8273aec430ad",
"/chunks/sign-up.js": "/chunks/sign-up.js?id=ce15b1156cf37c0a9703",
"/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=1acdec3a157c8943a88d",
"/chunks/subscription-plans.js": "/chunks/subscription-plans.js?id=a843f8cf90ff1e3168e8",
"/chunks/subscription-service.js": "/chunks/subscription-service.js?id=90c1aa9431689a89eb3d",
"/chunks/upgrade-billing.js": "/chunks/upgrade-billing.js?id=d76e4522f424ce996e8f",
"/chunks/upgrade-billing~chunks/upgrade-plan.js": "/chunks/upgrade-billing~chunks/upgrade-plan.js?id=e1658ebec711765f67fc",
"/chunks/upgrade-plan.js": "/chunks/upgrade-plan.js?id=35179531a8241da128e9",
"/chunks/user.js": "/chunks/user.js?id=6e9af0d22327a4cc82e9",
"/chunks/user-create.js": "/chunks/user-create.js?id=0ede0db725f2c822c336",
"/chunks/user-delete.js": "/chunks/user-delete.js?id=5af2fc09b4b639452756",
"/chunks/user-detail.js": "/chunks/user-detail.js?id=b9b70e43cf551a574443",
"/chunks/user-invoices.js": "/chunks/user-invoices.js?id=6c4d0e9e058be11dc1f7",
"/chunks/user-password.js": "/chunks/user-password.js?id=a4b4ab4f4af11533eb4d",
"/chunks/user-storage.js": "/chunks/user-storage.js?id=4aec2d7b60ec0bc35fb9",
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=99efdd410910267db66e",
"/chunks/users.js": "/chunks/users.js?id=f1057be5cf73ebc32c14",
"/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~0d496e20.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~0d496e20.js?id=a9facd8e57a0dd054f8c",
"/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~7afe9e20.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~7afe9e20.js?id=6d6e7e4191c9e2705c8a",
"/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~ch~52c14f2e.js": "/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared-files~chunks/shared/file-browser~ch~52c14f2e.js?id=66afa0e341251a68c3d3",
"/chunks/app-language.5e86b6c8aedb968aabd1.hot-update.js": "/chunks/app-language.5e86b6c8aedb968aabd1.hot-update.js",
"/chunks/app-language.3e137679fcd212ecdb43.hot-update.js": "/chunks/app-language.3e137679fcd212ecdb43.hot-update.js",
"/chunks/app-language.8069ae5a36cc4868d1d3.hot-update.js": "/chunks/app-language.8069ae5a36cc4868d1d3.hot-update.js",
"/chunks/app-language.d4c9d87012f92cbb3694.hot-update.js": "/chunks/app-language.d4c9d87012f92cbb3694.hot-update.js",
"/chunks/app-language.c0acc236afe078713927.hot-update.js": "/chunks/app-language.c0acc236afe078713927.hot-update.js",
"/chunks/app-language.42b3b09042f97ffb073a.hot-update.js": "/chunks/app-language.42b3b09042f97ffb073a.hot-update.js",
"/chunks/app-language.7478a2ac686bc8208aac.hot-update.js": "/chunks/app-language.7478a2ac686bc8208aac.hot-update.js",
"/chunks/app-language.695a92293d8dc92d833b.hot-update.js": "/chunks/app-language.695a92293d8dc92d833b.hot-update.js",
"/chunks/app-language.25fa944544b002f36615.hot-update.js": "/chunks/app-language.25fa944544b002f36615.hot-update.js",
"/chunks/app-language.aee54dee7bdbae4a4dad.hot-update.js": "/chunks/app-language.aee54dee7bdbae4a4dad.hot-update.js",
"/chunks/app-language.62fa61e8408e9fd42b23.hot-update.js": "/chunks/app-language.62fa61e8408e9fd42b23.hot-update.js",
"/js/main.21d047cff85c2cc93f65.hot-update.js": "/js/main.21d047cff85c2cc93f65.hot-update.js",
"/chunks/app-language.13a02b269488a9ed8054.hot-update.js": "/chunks/app-language.13a02b269488a9ed8054.hot-update.js",
"/chunks/app-language.ff6a3c1bce44294e69aa.hot-update.js": "/chunks/app-language.ff6a3c1bce44294e69aa.hot-update.js",
"/chunks/app-language.0aff16e91050419f056f.hot-update.js": "/chunks/app-language.0aff16e91050419f056f.hot-update.js",
"/chunks/admin.00d9afd473b8b4521765.hot-update.js": "/chunks/admin.00d9afd473b8b4521765.hot-update.js",
"/chunks/admin.b85158f2cba3bfbbf404.hot-update.js": "/chunks/admin.b85158f2cba3bfbbf404.hot-update.js",
"/chunks/admin.bf53021a67ae75f1b0ee.hot-update.js": "/chunks/admin.bf53021a67ae75f1b0ee.hot-update.js",
"/chunks/admin.bda5e8845d2e437ffe7c.hot-update.js": "/chunks/admin.bda5e8845d2e437ffe7c.hot-update.js",
"/chunks/admin.a97d84e1d8754867cef5.hot-update.js": "/chunks/admin.a97d84e1d8754867cef5.hot-update.js",
"/chunks/app-language.8ca3efeede3cedbd37e0.hot-update.js": "/chunks/app-language.8ca3efeede3cedbd37e0.hot-update.js",
"/chunks/app-language.23f838b7be45ce10476b.hot-update.js": "/chunks/app-language.23f838b7be45ce10476b.hot-update.js",
"/chunks/app-language.fd910667c3258a91322b.hot-update.js": "/chunks/app-language.fd910667c3258a91322b.hot-update.js",
"/chunks/app-language.6a163294803727b4d501.hot-update.js": "/chunks/app-language.6a163294803727b4d501.hot-update.js",
"/chunks/platform.085176bd0065608cb370.hot-update.js": "/chunks/platform.085176bd0065608cb370.hot-update.js",
"/chunks/dashboard.f475c4f86956a8e5419b.hot-update.js": "/chunks/dashboard.f475c4f86956a8e5419b.hot-update.js",
"/chunks/app-language.1dd1423a8af00cb8c9bd.hot-update.js": "/chunks/app-language.1dd1423a8af00cb8c9bd.hot-update.js",
"/chunks/app-language.040639168a8e73d40dec.hot-update.js": "/chunks/app-language.040639168a8e73d40dec.hot-update.js",
"/chunks/app-language.72377b182d4f8ae86208.hot-update.js": "/chunks/app-language.72377b182d4f8ae86208.hot-update.js",
"/chunks/app-language.d82931f09bfdd6dbc955.hot-update.js": "/chunks/app-language.d82931f09bfdd6dbc955.hot-update.js",
"/chunks/app-language.2193825771658065f586.hot-update.js": "/chunks/app-language.2193825771658065f586.hot-update.js",
"/chunks/app-language.cab91ceba0b383f64680.hot-update.js": "/chunks/app-language.cab91ceba0b383f64680.hot-update.js",
"/chunks/app-language.a42ea53577d7e0f0a5fb.hot-update.js": "/chunks/app-language.a42ea53577d7e0f0a5fb.hot-update.js",
"/chunks/app-language.09d631da1a2172e96bce.hot-update.js": "/chunks/app-language.09d631da1a2172e96bce.hot-update.js",
"/chunks/app-appearance.690e1a1f6d721bca8cdf.hot-update.js": "/chunks/app-appearance.690e1a1f6d721bca8cdf.hot-update.js",
"/chunks/contact-us~chunks/dynamic-page~chunks/homepage.51e62febff164672078a.hot-update.js": "/chunks/contact-us~chunks/dynamic-page~chunks/homepage.51e62febff164672078a.hot-update.js",
"/chunks/app-language.439fa6fafc54298cdf2b.hot-update.js": "/chunks/app-language.439fa6fafc54298cdf2b.hot-update.js",
"/chunks/app-language.9ee4a795d26a6e44820c.hot-update.js": "/chunks/app-language.9ee4a795d26a6e44820c.hot-update.js",
"/js/main.8517a680822ffe9748c9.hot-update.js": "/js/main.8517a680822ffe9748c9.hot-update.js",
"/chunks/admin.9396f79fef53ad7070fe.hot-update.js": "/chunks/admin.9396f79fef53ad7070fe.hot-update.js",
"/chunks/platform.9396f79fef53ad7070fe.hot-update.js": "/chunks/platform.9396f79fef53ad7070fe.hot-update.js"
}

View File

@@ -3,7 +3,7 @@
<Alert />
<ToastrWrapper />
<router-view />
<router-view v-if="isLoadedTranslations" />
<CookieDisclaimer />
<Vignette />
@@ -25,6 +25,11 @@ export default {
Vignette,
Alert
},
data() {
return {
isLoadedTranslations: false
}
},
methods: {
unClick() {
events.$emit('unClick')
@@ -32,15 +37,21 @@ export default {
},
beforeMount() {
// Store config to vuex
this.$store.commit('INIT', {
config: this.$root.$data.config,
rootDirectory: {
name: this.$t('locations.home'),
location: 'base',
id: undefined
}
})
// Get language translations
this.$store.dispatch('getLanguageTranslations', this.$root.$data.config.language)
.then(response => {
this.isLoadedTranslations = true
// Store config to vuex
this.$store.commit('INIT', {
config: this.$root.$data.config,
rootDirectory: {
name: this.$t('locations.home'),
location: 'base',
id: undefined
}
})
})
// Get installation state
let installation = this.$root.$data.config.installation

View File

@@ -395,16 +395,5 @@ export default {
background: $dark_mode_foreground !important;
}
}
.preview-sorting {
/deep/ .label {
color: $text !important;
}
/deep/ .preview-sorting {
path, line, polyline, rect, circle {
stroke: $dark_mode_text_primary !important;
}
}
}
}
</style>

View File

@@ -104,7 +104,7 @@
return option.value === this.fileInfoDetail[0].shared.permission
})
return title ? title.label : this.$t('shared.can_download')
return title ? this.$t(title.label) : this.$t('shared.can_download')
},
sharedIcon() {
switch (this.fileInfoDetail[0].shared.permission) {

View File

@@ -363,9 +363,10 @@ export default {
.show-actions {
cursor: pointer;
padding: 12px 6px 12px;
padding: 12px 0 12px 6px;
.icon-action {
margin-top: 9px;
@include font-size(14);
circle {

View File

@@ -1,5 +1,5 @@
<template>
<svg class="alphabet-icon" fill="none" stroke="currentColor" stroke-width="2" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" width="15px" height="15px" viewBox="0 0 13 15" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg class="alphabet-icon" fill="none" stroke="currentColor" stroke-width="2" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" width="15px" height="15px" viewBox="0 0 15 15" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<polyline id="Path" points="11.1999993 13.1999991 5.59999967 0.199999094 0 13.1999991 5.59999967 0.199999094"></polyline>
<line x1="2.25" y1="8" x2="8.75" y2="8" id="Line-2"></line>
</svg>

View File

@@ -1,20 +1,19 @@
<template>
<svg
width="15px" height="15px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="VueFileManager" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round">
<g id="Storage-Alert-Copy" transform="translate(-1092.000000, -28.000000)" stroke="#000000" stroke-width="1.4">
<g id="Toolbar" transform="translate(331.000000, 19.000000)">
<g id="Tools" transform="translate(581.000000, 9.000000)">
<g id="sort-icon" transform="translate(181.000000, 1.000000)">
<rect id="Rectangle" x="9.77777778" y="0" width="6.22222222" height="6.22222222"></rect>
<rect id="Rectangle" x="9.77777778" y="9.77777778" width="6.22222222" height="6.22222222"></rect>
<line x1="0" y1="2" x2="6" y2="2" id="Path"></line>
<line x1="0" y1="8" x2="6" y2="8" id="Path"></line>
<line x1="0" y1="14" x2="6" y2="14" id="Path"></line>
</g>
</g>
</g>
</g>
</g>
<svg class="preview-list-icon" fill="none" stroke="currentColor" stroke-width="1.5" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" width="15px" height="15px" viewBox="0 0 20 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect x="9.77777778" y="0" width="6.22222222" height="6.22222222"></rect>
<rect x="9.77777778" y="9.77777778" width="6.22222222" height="6.22222222"></rect>
<line x1="0" y1="2" x2="6" y2="2"></line>
<line x1="0" y1="8" x2="6" y2="8"></line>
<line x1="0" y1="14" x2="6" y2="14"></line>
</svg>
</template>
</template>
<style lang="scss">
.preview-list-icon {
rect, line {
color: inherit;
}
}
</style>

View File

@@ -12,7 +12,7 @@
<x-square-icon v-if="icon === 'x-square'" size="15" class="icon dark-text-theme" />
<check-icon v-if="icon === 'check'" size="15" class="icon dark-text-theme" />
<dollar-sign-icon v-if="icon === 'dollar-sign'" size="15" class="icon dark-text-theme" />
<sorting-and-preview-icon v-if="icon === 'preview-sorting'" size="15" class="icon preview-sorting" />
<sorting-and-preview-icon v-if="icon === 'preview-sorting'" size="15" class="icon dark-text-theme preview-sorting" />
<span class="label">
<slot></slot>
</span>
@@ -32,7 +32,6 @@
components: {
SortingAndPreviewIcon,
CheckSquareIcon,
DollarSignIcon,
CreditCardIcon,
FolderPlusIcon,
UserPlusIcon,
@@ -83,20 +82,6 @@
&:active {
@include transform(scale(0.95));
}
/*&:hover {
background: rgba($theme, 0.1);
.icon {
path, line, polyline, rect, circle {
stroke: $theme;
}
}
.label {
color: $theme;
}
}*/
}
@media (prefers-color-scheme: dark) {

View File

@@ -1,7 +1,7 @@
<template>
<button class="mobile-action-button">
<div class="flex">
<upload-cloud-icon class="icon" size="15"></upload-cloud-icon>
<upload-cloud-icon class="icon dark-text-theme" size="15" />
<label label="file" class="label button file-input button-base">
<slot></slot>
<input
@@ -69,7 +69,7 @@
background: $dark_mode_foreground;
path, line, polyline, rect, circle {
stroke: $theme;
color: inherit;
}
.label {

View File

@@ -6,9 +6,9 @@
<MobileActionButton @click.native="$store.dispatch('emptyTrash')" icon="trash">
{{ $t('context_menu.empty_trash') }}
</MobileActionButton>
<MobileMultiSelectButton @click.native="enableMultiSelectMode">
<MobileActionButton @click.native="enableMultiSelectMode" icon="check-square">
{{ $t('context_menu.select') }}
</MobileMultiSelectButton>
</MobileActionButton>
<MobileActionButton class="preview-sorting" @click.native="showViewOptions" icon="preview-sorting">
{{$t('preview_sorting.preview_sorting_button')}}
</MobileActionButton>
@@ -23,9 +23,9 @@
<MobileActionButtonUpload :class="{'is-inactive' : multiSelectMode}">
{{ $t('context_menu.upload') }}
</MobileActionButtonUpload>
<MobileMultiSelectButton @click.native="enableMultiSelectMode">
<MobileActionButton @click.native="enableMultiSelectMode" icon="check-square">
{{ $t('context_menu.select') }}
</MobileMultiSelectButton>
</MobileActionButton>
<MobileActionButton class="preview-sorting" @click.native="showViewOptions" icon="preview-sorting">
{{$t('preview_sorting.preview_sorting_button')}}
</MobileActionButton>
@@ -49,9 +49,9 @@
<!--ContextMenu for Base location with VISITOR permission-->
<div v-if="baseLocationVisitorMenu && ! multiSelectMode" class="mobile-actions">
<MobileMultiSelectButton @click.native="enableMultiSelectMode">
<MobileActionButton @click.native="enableMultiSelectMode" icon="check-square">
{{ $t('context_menu.select') }}
</MobileMultiSelectButton>
</MobileActionButton>
<MobileActionButton class="preview-sorting" @click.native="showViewOptions" icon="preview-sorting">
{{$t('preview_sorting.preview_sorting_button')}}
</MobileActionButton>
@@ -64,7 +64,6 @@
<script>
import MobileActionButtonUpload from '@/components/FilesView/MobileActionButtonUpload'
import MobileMultiSelectButton from '@/components/FilesView/MobileMultiSelectButton'
import MobileActionButton from '@/components/FilesView/MobileActionButton'
import UploadProgress from '@/components/FilesView/UploadProgress'
import {mapGetters} from 'vuex'
@@ -74,7 +73,6 @@
name: 'MobileActions',
components: {
MobileActionButtonUpload,
MobileMultiSelectButton,
MobileActionButton,
UploadProgress,
},
@@ -157,18 +155,6 @@
position: absolute;
}
.preview-sorting {
background: $light_background !important;
/deep/ .label {
color: $text !important;
}
/deep/ .preview-sorting {
path, line, polyline, rect, circle {
stroke: $text !important;
}
}
}
#mobile-actions-wrapper {
display: none;
background: white;
@@ -202,16 +188,5 @@
#mobile-actions-wrapper {
background: $dark_mode_background;
}
.preview-sorting {
background: $dark_mode_foreground !important;
/deep/ .label {
color: $dark_mode_text_primary !important;
}
/deep/ .preview-sorting {
path, line, polyline, rect, circle {
stroke: $theme !important;
}
}
}
}
</style>

View File

@@ -1,100 +0,0 @@
<template>
<button class="mobile-action-button" :class="{'active' : mobileSelectingActive}">
<div class="flex" >
<CheckSquareIcon size="15" class="icon"></CheckSquareIcon>
<span class="label">
<slot></slot>
</span>
</div>
</button>
</template>
<script>
import {CheckSquareIcon} from "vue-feather-icons";
import {events} from '@/bus'
export default {
name: 'MobileActionButton',
props: [
'icon'
],
components: {
CheckSquareIcon
},
data () {
return {
mobileSelectingActive: false
}
},
mounted() {
events.$on('mobileSelecting:start' , () => {
this.mobileSelectingActive = true
})
events.$on('mobileSelecting:stop' , () => {
this.mobileSelectingActive = false
})
}
}
</script>
<style scoped lang="scss">
@import '@assets/vuefilemanager/_variables';
@import '@assets/vuefilemanager/_mixins';
.mobile-action-button {
background: $light_background;
margin-right: 15px;
border-radius: 8px;
padding: 7px 10px;
cursor: pointer;
border: none;
@include transition(150ms);
.flex {
display: flex;
align-items: center;
}
.icon {
margin-right: 10px;
@include font-size(14);
path, line, polyline, rect, circle {
@include transition(150ms);
}
}
.label {
@include transition(150ms);
@include font-size(14);
font-weight: 700;
color: $text;
}
}
.active {
.icon {
path, line, polyline, rect, circle {
stroke: $theme !important;
}
}
.label {
color: $theme !important;
}
}
@media (prefers-color-scheme: dark) {
.mobile-action-button {
background: $dark_mode_foreground;
path, line, polyline, rect, circle {
stroke: $theme;
}
.label {
color: $dark_mode_text_primary;
}
}
}
</style>

View File

@@ -32,7 +32,7 @@
<ul v-if="config.isAuthenticated" class="navigation-links">
<li v-if="config.userRegistration">
<router-link class="cta-button text-theme bg-theme-100" :to="{name: 'Files'}">
Go to Files <!--todo: preklad-->
{{ $t('go_to_files') }}
</router-link>
</li>
</ul>

View File

@@ -17,6 +17,7 @@
<cloud-icon v-if="link.icon === 'cloud'" size="17"></cloud-icon>
<monitor-icon v-if="link.icon === 'monitor'" size="17"></monitor-icon>
<box-icon v-if="link.icon === 'box'" size="17"></box-icon>
<globe-icon v-if="link.icon === 'language'" size="17"></globe-icon>
</div>
<b class="menu-link">
<span>{{ link.title }}</span>
@@ -39,6 +40,7 @@
Trash2Icon,
CloudIcon,
PowerIcon,
GlobeIcon,
ShareIcon,
UsersIcon,
UserIcon,
@@ -61,6 +63,7 @@
Trash2Icon,
CloudIcon,
PowerIcon,
GlobeIcon,
UsersIcon,
ShareIcon,
LockIcon,

View File

@@ -11,7 +11,7 @@
<!--More Actions-->
<div @click="showMobileNavigation" class="mobile-menu">
<menu-icon size="17" class="icon"></menu-icon>
<menu-icon size="17" class="icon" />
</div>
</header>
</template>

View File

@@ -72,7 +72,7 @@
a {
font-size: 12px;
color: $theme;
text-decoration: underline;
}
}
}

View File

@@ -0,0 +1,864 @@
<template>
<PopupWrapper name="create-language">
<!--Title-->
<PopupHeader :title="$t('create_language')" icon="edit" />
<!--Content-->
<PopupContent>
<!--Form to set sharing-->
<ValidationObserver @submit.prevent="createLanguage" ref="createForm" v-slot="{ invalid }" tag="form" class="form-wrapper">
<ValidationProvider tag="div" mode="passive" class="input-wrapper password" name="Language Locale" rules="required" v-slot="{ errors }">
<label class="input-label">{{ $t('select_locale') }}:</label>
<SelectInput v-model="form.locale" :options="locales" :placeholder="$t('select_language_locale')" :isError="errors[0]" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
<ValidationProvider tag="div" mode="passive" class="input-wrapper password" name="Language Name" rules="required" v-slot="{ errors }">
<label class="input-label">{{ $t('locale_name') }}:</label>
<input v-model="form.name" :class="{'is-error': errors[0]}" type="text" ref="input" class="focus-border-theme" :placeholder="$t('type_language_name')">
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
</ValidationObserver>
</PopupContent>
<!--Actions-->
<PopupActions>
<ButtonBase
class="popup-button"
@click.native="$closePopup()"
button-style="secondary"
>
{{ $t('global.cancel') }}
</ButtonBase>
<ButtonBase
class="popup-button"
@click.native="createLanguage"
button-style="theme"
:loading="isLoading"
:disabled="isLoading"
>
{{ $t('create_language') }}
</ButtonBase>
</PopupActions>
</PopupWrapper>
</template>
<script>
import {ValidationProvider, ValidationObserver} from 'vee-validate/dist/vee-validate.full'
import PopupWrapper from '@/components/Others/Popup/PopupWrapper'
import PopupActions from '@/components/Others/Popup/PopupActions'
import PopupContent from '@/components/Others/Popup/PopupContent'
import PopupHeader from '@/components/Others/Popup/PopupHeader'
import SelectInput from '@/components/Others/Forms/SelectInput'
import ButtonBase from '@/components/FilesView/ButtonBase'
import {required} from 'vee-validate/dist/rules'
import {events} from '@/bus'
import axios from 'axios'
export default {
name: 'CreateLanguage',
components: {
ValidationProvider,
ValidationObserver,
PopupWrapper,
PopupActions,
PopupContent,
PopupHeader,
SelectInput,
ButtonBase,
required,
},
data() {
return {
form: {
name: undefined,
locale: undefined,
},
isLoading: false,
locales: [
{
value: "ab",
label: "Abkhaz"
},
{
value: "aa",
label: "Afar"
},
{
value: "af",
label: "Afrikaans"
},
{
value: "ak",
label: "Akan"
},
{
value: "sq",
label: "Albanian"
},
{
value: "am",
label: "Amharic"
},
{
value: "ar",
label: "Arabic"
},
{
value: "an",
label: "Aragonese"
},
{
value: "hy",
label: "Armenian"
},
{
value: "as",
label: "Assamese"
},
{
value: "av",
label: "Avaric"
},
{
value: "ae",
label: "Avestan"
},
{
value: "ay",
label: "Aymara"
},
{
value: "az",
label: "Azerbaijani"
},
{
value: "bm",
label: "Bambara"
},
{
value: "ba",
label: "Bashkir"
},
{
value: "eu",
label: "Basque"
},
{
value: "be",
label: "Belarusian"
},
{
value: "bn",
label: "Bengali; Bangla"
},
{
value: "bh",
label: "Bihari"
},
{
value: "bi",
label: "Bislama"
},
{
value: "bs",
label: "Bosnian"
},
{
value: "br",
label: "Breton"
},
{
value: "bg",
label: "Bulgarian"
},
{
value: "my",
label: "Burmese"
},
{
value: "ca",
label: "Catalan; Valencian"
},
{
value: "ch",
label: "Chamorro"
},
{
value: "ce",
label: "Chechen"
},
{
value: "ny",
label: "Chichewa; Chewa; Nyanja"
},
{
value: "zh",
label: "Chinese"
},
{
value: "cv",
label: "Chuvash"
},
{
value: "kw",
label: "Cornish"
},
{
value: "co",
label: "Corsican"
},
{
value: "cr",
label: "Cree"
},
{
value: "hr",
label: "Croatian"
},
{
value: "cs",
label: "Czech"
},
{
value: "da",
label: "Danish"
},
{
value: "dv",
label: "Divehi; Dhivehi; Maldivian;"
},
{
value: "nl",
label: "Dutch"
},
{
value: "dz",
label: "Dzongkha"
},
{
value: "en",
label: "English"
},
{
value: "eo",
label: "Esperanto"
},
{
value: "et",
label: "Estonian"
},
{
value: "ee",
label: "Ewe"
},
{
value: "fo",
label: "Faroese"
},
{
value: "fj",
label: "Fijian"
},
{
value: "fi",
label: "Finnish"
},
{
value: "fr",
label: "French"
},
{
value: "ff",
label: "Fula; Fulah; Pulaar; Pular"
},
{
value: "gl",
label: "Galician"
},
{
value: "lg",
label: "Ganda"
},
{
value: "ka",
label: "Georgian"
},
{
value: "de",
label: "German"
},
{
value: "el",
label: "Greek, Modern"
},
{
value: "gn",
label: "Guaraní"
},
{
value: "gu",
label: "Gujarati"
},
{
value: "ht",
label: "Haitian; Haitian Creole"
},
{
value: "ha",
label: "Hausa"
},
{
value: "he",
label: "Hebrew (modern)"
},
{
value: "hz",
label: "Herero"
},
{
value: "hi",
label: "Hindi"
},
{
value: "ho",
label: "Hiri Motu"
},
{
value: "hu",
label: "Hungarian"
},
{
value: "ia",
label: "Interlingua"
},
{
value: "id",
label: "Indonesian"
},
{
value: "ie",
label: "Interlingue"
},
{
value: "ga",
label: "Irish"
},
{
value: "ig",
label: "Igbo"
},
{
value: "ik",
label: "Inupiaq"
},
{
value: "io",
label: "Ido"
},
{
value: "is",
label: "Icelandic"
},
{
value: "it",
label: "Italian"
},
{
value: "iu",
label: "Inuktitut"
},
{
value: "ja",
label: "Japanese"
},
{
value: "jv",
label: "Javanese"
},
{
value: "kl",
label: "Kalaallisut, Greenlandic"
},
{
value: "kn",
label: "Kannada"
},
{
value: "kr",
label: "Kanuri"
},
{
value: "ks",
label: "Kashmiri"
},
{
value: "kk",
label: "Kazakh"
},
{
value: "km",
label: "Khmer"
},
{
value: "ki",
label: "Kikuyu, Gikuyu"
},
{
value: "rw",
label: "Kinyarwanda"
},
{
value: "rn",
label: "Kirundi"
},
{
value: "ky",
label: "Kyrgyz"
},
{
value: "kv",
label: "Komi"
},
{
value: "kg",
label: "Kongo"
},
{
value: "ko",
label: "Korean"
},
{
value: "ku",
label: "Kurdish"
},
{
value: "kj",
label: "Kwanyama, Kuanyama"
},
{
value: "la",
label: "Latin"
},
{
value: "lb",
label: "Luxembourgish, Letzeburgesch"
},
{
value: "li",
label: "Limburgish, Limburgan, Limburger"
},
{
value: "ln",
label: "Lingala"
},
{
value: "lo",
label: "Lao"
},
{
value: "lt",
label: "Lithuanian"
},
{
value: "lu",
label: "Luba-Katanga"
},
{
value: "lv",
label: "Latvian"
},
{
value: "gv",
label: "Manx"
},
{
value: "mk",
label: "Macedonian"
},
{
value: "mg",
label: "Malagasy"
},
{
value: "ms",
label: "Malay"
},
{
value: "ml",
label: "Malayalam"
},
{
value: "mt",
label: "Maltese"
},
{
value: "mi",
label: "MÄori"
},
{
value: "mr",
label: "Marathi"
},
{
value: "mh",
label: "Marshallese"
},
{
value: "mn",
label: "Mongolian"
},
{
value: "na",
label: "Nauru"
},
{
value: "nv",
label: "Navajo, Navaho"
},
{
value: "nb",
label: "Norwegian"
},
{
value: "nd",
label: "North Ndebele"
},
{
value: "ne",
label: "Nepali"
},
{
value: "ng",
label: "Ndonga"
},
{
value: "nn",
label: "Norwegian Nynorsk"
},
{
value: "no",
label: "Norwegian"
},
{
value: "ii",
label: "Nuosu"
},
{
value: "oc",
label: "Occitan"
},
{
value: "oj",
label: "Ojibwe, Ojibwa"
},
{
value: "cu",
label: "Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic"
},
{
value: "om",
label: "Oromo"
},
{
value: "or",
label: "Oriya"
},
{
value: "os",
label: "Ossetian, Ossetic"
},
{
value: "pa",
label: "Panjabi, Punjabi"
},
{
value: "pi",
label: "Pali"
},
{
value: "fa",
label: "Persian (Farsi)"
},
{
value: "pl",
label: "Polish"
},
{
value: "ps",
label: "Pashto, Pushto"
},
{
value: "pt",
label: "Portuguese"
},
{
value: "qu",
label: "Quechua"
},
{
value: "rm",
label: "Romansh"
},
{
value: "ro",
label: "Romanian"
},
{
value: "ru",
label: "Russian"
},
{
value: "sa",
label: "Sanskrit"
},
{
value: "sc",
label: "Sardinian"
},
{
value: "sd",
label: "Sindhi"
},
{
value: "se",
label: "Northern Sami"
},
{
value: "sm",
label: "Samoan"
},
{
value: "sg",
label: "Sango"
},
{
value: "sr",
label: "Serbian"
},
{
value: "gd",
label: "Scottish Gaelic"
},
{
value: "sn",
label: "Shona"
},
{
value: "si",
label: "Sinhala, Sinhalese"
},
{
value: "sk",
label: "Slovak"
},
{
value: "sl",
label: "Slovene"
},
{
value: "so",
label: "Somali"
},
{
value: "st",
label: "Southern Sotho"
},
{
value: "az",
label: "South Azerbaijani"
},
{
value: "nr",
label: "South Ndebele"
},
{
value: "es",
label: "Spanish; Castilian"
},
{
value: "su",
label: "Sundanese"
},
{
value: "sw",
label: "Swahili"
},
{
value: "ss",
label: "Swati"
},
{
value: "sv",
label: "Swedish"
},
{
value: "ta",
label: "Tamil"
},
{
value: "te",
label: "Telugu"
},
{
value: "tg",
label: "Tajik"
},
{
value: "th",
label: "Thai"
},
{
value: "ti",
label: "Tigrinya"
},
{
value: "bo",
label: "Tibetan Standard, Tibetan, Central"
},
{
value: "tk",
label: "Turkmen"
},
{
value: "tl",
label: "Tagalog"
},
{
value: "tn",
label: "Tswana"
},
{
value: "to",
label: "Tonga (Tonga Islands)"
},
{
value: "tr",
label: "Turkish"
},
{
value: "ts",
label: "Tsonga"
},
{
value: "tt",
label: "Tatar"
},
{
value: "tw",
label: "Twi"
},
{
value: "ty",
label: "Tahitian"
},
{
value: "ug",
label: "Uyghur, Uighur"
},
{
value: "uk",
label: "Ukrainian"
},
{
value: "ur",
label: "Urdu"
},
{
value: "uz",
label: "Uzbek"
},
{
value: "ve",
label: "Venda"
},
{
value: "vi",
label: "Vielabele"
},
{
value: "vo",
label: "Volapük"
},
{
value: "wa",
label: "Walloon"
},
{
value: "cy",
label: "Welsh"
},
{
value: "wo",
label: "Wolof"
},
{
value: "fy",
label: "Western Frisian"
},
{
value: "xh",
label: "Xhosa"
},
{
value: "yi",
label: "Yiddish"
},
{
value: "yo",
label: "Yoruba"
},
{
value: "za",
label: "Zhuang, Chuang"
},
{
value: "zu",
label: "Zulu"
}
]
}
},
methods: {
async createLanguage() {
// Validate fields
const isValid = await this.$refs.createForm.validate();
if (isValid) {
this.isLoading = true
axios.post('/api/admin/languages', this.form)
.then(response => {
events.$emit('reload:languages', response.data)
})
.catch(() => {
this.$isSomethingWrong()
})
.finally(() => {
this.form = {
name: undefined,
locale: undefined,
}
this.isLoading = false
this.$closePopup()
})
}
},
}
}
</script>
<style scoped lang="scss">
@import "@assets/vuefilemanager/_inapp-forms.scss";
@import '@assets/vuefilemanager/_forms';
.item-thumbnail {
margin-bottom: 20px;
}
</style>

View File

@@ -1,6 +1,7 @@
<template>
<div class="form-label">
<edit-2-icon size="22" class="icon text-theme" />
<edit-2-icon v-if="!icon" size="22" class="icon text-theme" />
<settings-icon v-if="icon === 'settings'" size="22" class="icon text-theme" />
<b class="label">
<slot></slot>
</b>
@@ -8,12 +9,14 @@
</template>
<script>
import { Edit2Icon } from 'vue-feather-icons'
import { Edit2Icon, SettingsIcon } from 'vue-feather-icons'
export default {
name: 'FormLabel',
props: ['icon'],
components: {
Edit2Icon
Edit2Icon,
SettingsIcon
}
}
</script>
@@ -30,7 +33,7 @@
.icon {
margin-right: 10px;
path {
path, circle {
color: inherit;
}
}

View File

@@ -0,0 +1,115 @@
<template>
<div class="search-bar">
<div v-if="!query" class="icon">
<search-icon size="19" />
</div>
<div @click="clearInput" v-if="query" class="icon">
<x-icon class="pointer" size="19"></x-icon>
</div>
<input
v-model="query"
@input="$emit('input', query)"
class="query focus-border-theme"
type="text"
name="searchInput"
:placeholder="$t('search_translations')"
/>
</div>
</template>
<script>
import {SearchIcon, XIcon} from 'vue-feather-icons'
export default {
name: 'SearchInput',
components: {
SearchIcon,
XIcon,
},
data() {
return {
query: undefined,
}
},
methods: {
clearInput() {
this.query = undefined
this.$emit('reset-query')
},
},
}
</script>
<style lang="scss" scoped>
@import '@assets/vuefilemanager/_variables';
@import '@assets/vuefilemanager/_mixins';
@import '@assets/vuefilemanager/_forms';
.search-bar {
padding: 7px 0px;
position: relative;
width: 100%;
border-radius: 8px;
input {
background: $light_background;
border-radius: 8px;
outline: 0;
padding: 9px 20px 9px 43px;
font-weight: 700;
@include font-size(16);
width: 100%;
height: 50px;
min-width: 175px;
transition: 0.15s all ease;
border: 1px solid transparent;
-webkit-appearance: none;
box-shadow: none;
&::placeholder {
color: $light_text;
@include font-size(14);
font-weight: 700;
}
&:focus {
border-width: 1px;
border-style: solid;
}
&:focus + .icon {
path {
color: inherit;
}
}
}
.icon {
height: 100%;
position: absolute;
top: 0;
left: 0;
padding: 11px 15px;
display: flex;
align-items: center;
circle,
line {
color: $light_text;
}
.pointer {
cursor: pointer;
}
}
}
@media (prefers-color-scheme: dark) {
.search-bar {
input {
background: $dark_mode_foreground;
}
}
}
</style>

View File

@@ -34,7 +34,7 @@
<!--Permission Select-->
<ValidationProvider v-if="isFolder" tag="div" mode="passive" class="input-wrapper" name="Permission" rules="required" v-slot="{ errors }">
<label class="input-label">{{ $t('shared_form.label_permission') }}:</label>
<SelectInput v-model="shareOptions.permission" :options="permissionOptions" :placeholder="$t('shared_form.placeholder_permission')" :isError="errors[0]" />
<SelectInput v-model="shareOptions.permission" :options="$translateSelectOptions(permissionOptions)" :placeholder="$t('shared_form.placeholder_permission')" :isError="errors[0]" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
@@ -58,7 +58,7 @@
<!--Set expiration-->
<div class="input-wrapper">
<label class="input-label">{{ $t('shared_form.label_expiration') }}:</label>
<SelectBoxInput v-model="shareOptions.expiration" :data="expirationList" class="box" />
<SelectBoxInput v-model="shareOptions.expiration" :data="$translateSelectOptions(expirationList)" class="box" />
</div>
</div>

View File

@@ -33,7 +33,7 @@
<!--Permision Select-->
<ValidationProvider v-if="isFolder" tag="div" mode="passive" class="input-wrapper" name="Permission" rules="required" v-slot="{ errors }">
<label class="input-label">{{ $t('shared_form.label_permission') }}:</label>
<SelectInput v-model="shareOptions.permission" :options="permissionOptions" :default="shareOptions.permission" :placeholder="$t('shared_form.placeholder_permission')" :isError="errors[0]"/>
<SelectInput v-model="shareOptions.permission" :options="$translateSelectOptions(permissionOptions)" :default="shareOptions.permission" :placeholder="$t('shared_form.placeholder_permission')" :isError="errors[0]"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
@@ -60,7 +60,7 @@
<!--Set expiration-->
<div class="input-wrapper">
<label class="input-label">{{ $t('shared_form.label_expiration') }}:</label>
<SelectBoxInput v-model="shareOptions.expiration" :data="expirationList" :value="shareOptions.expiration" class="box"/>
<SelectBoxInput v-model="shareOptions.expiration" :data="$translateSelectOptions(expirationList)" :value="shareOptions.expiration" class="box"/>
</div>
</div>

View File

@@ -1,6 +1,6 @@
import i18n from '@/i18n/index'
import store from './store/index'
import {debounce, includes} from "lodash";
import {debounce, includes, isArray} from "lodash";
import {events} from './bus'
import axios from 'axios'
import router from '@/router'
@@ -54,6 +54,24 @@ const Helpers = {
}
}
Vue.prototype.$translateSelectOptions = function (options) {
return options.map(role => {
let key, values;
if (isArray(role.label)) {
[key, values] = role.label
}
return {
label: isArray(role.label)
? i18n.t(key, values)
: i18n.t(role.label),
value: role.value,
icon: role.icon ? role.icon : '',
}
})
}
Vue.prototype.$getImage = function (source) {
return source ? this.$store.getters.config.host + '/' + source : ''
}

View File

@@ -1,17 +1,11 @@
import Vue from 'vue';
import VueI18n from 'vue-i18n';
import en from './lang/en.json'
import sk from './lang/sk.json'
import cn from './lang/cn.json'
Vue.use(VueI18n);
const i18n = new VueI18n({
locale: config.locale,
messages: Object.assign({
en
}),
locale: config.language,
silentTranslationWarn: true,
});
export default i18n;

View File

@@ -1,843 +0,0 @@
{
"actions": {
"create_folder": "穿件文件夹",
"delete": "删除内容",
"move": "Move item",
"preview": "更改预览",
"share": "Share item",
"upload": "上传文件",
"close": "Close",
"sorting_view": "Sorting and View",
"info_panel": "Info panel"
},
"activation": {
"stripe": {
"button": "设置您的Stripe帐户",
"description": "To charge your users, please set up your Stripe account credentials.",
"title": "您的Stripe帐户尚未设置"
}
},
"admin_menu": {
"dashboard": "仪表板",
"invoices": "发票",
"pages": "网页",
"plans": "计划",
"settings": "设置",
"users": "Users"
},
"admin_page_dashboard": {
"backer_button": "Help Us Improve",
"license": "执照",
"version": "版",
"w_latest_users": {
"title": "最新注册"
},
"w_total_premium": {
"link": "显示所有计划",
"title": "高级用户总数"
},
"w_total_space": {
"link": "显示所有用户",
"title": "总使用空间"
},
"w_total_users": {
"link": "显示所有用户",
"title": "用户总数"
}
},
"admin_page_invoices": {
"empty": {
"description": "所有客户发票将在此处显示。",
"title": "您还没有发票"
},
"table": {
"number": "发票编号",
"payed": "祈祷,",
"plan": "计划",
"total": "总",
"user": "用户"
}
},
"admin_page_plans": {
"create_plan_button": "创建计划",
"delete_plan_button": "删除计划",
"disclaimer_delete_plan": "您可以删除计划,但是请注意!",
"disclaimer_edit_price": "由于Stripe服务设计您的计划的价格更改不可用。如果您希望更改价格计划请创建新计划。",
"empty": {
"button": "创建新计划",
"description": "要创建新计划,请单击下面的按钮。",
"title": "您还没有任何计划"
},
"form": {
"description": "说明(可选)",
"description_plac": "计划说明",
"name": "名称",
"name_delete_plac": "键入计划名称",
"name_plac": "计划名称",
"price": "价钱",
"price_plac": "计划价格",
"status": "状态",
"status_help": "您计划在网站上的可用性状态。",
"storage": "存储容量",
"storage_helper": "您只需要输入数字,例如值“ 5”表示用户将拥有5GB的存储容量。",
"storage_plac": "存储容量",
"title_delete": "删除计划",
"title_details": "计划详情",
"title_pricing": "计划定价"
},
"subscribers": {
"empty": "尚无任何订阅者。"
},
"table": {
"name": "计划名称",
"price": "价钱",
"status": "状态",
"storage_capacity": "存储容量",
"subscribers": "订户"
},
"tabs": {
"delete": "删除计划",
"settings": "设置",
"subscribers": "订户"
}
},
"admin_page_user": {
"change_capacity": "Change Capacity",
"create_user": {
"avatar": "阿凡达",
"group_details": "Account Details",
"group_settings": "Account Settings",
"label_conf_pass": "Confirm password",
"label_email": "Type E-mail",
"label_name": "Type full name",
"submit": "Create User"
},
"delete_user": "Delete User",
"invoices": {
"empty": "用户还没有任何发票。"
},
"label_change_capacity": "Type storage capacity in GB",
"label_delete_user": "Type with Case Sensitive user name {user}",
"label_person_info": "Personal Information",
"placeholder_delete_user": "Type here",
"save_role": "Save Role",
"select_role": "Select user role",
"send_password_link": "Send Password Reset Link",
"subscription": {
"empty": "用户还没有任何订阅。",
"interval_mo": "每月一次"
},
"table": {
"action": "Action",
"created_at": "Registered",
"name": "User",
"plan": "订阅计划",
"role": "Role",
"storage_capacity": "Storage Capacity",
"storage_used": "Storage Used"
},
"tabs": {
"delete": "Delete User",
"detail": "Detail",
"invoices": "发票",
"password": "Password",
"storage": "Storage Usage",
"subscription": "订阅"
}
},
"admin_pages": {
"form": {
"content": "内容",
"content_plac": "在这里输入您的内容...",
"slug": "金属块",
"title": "标题",
"title_plac": "标题名称",
"visibility": "能见度",
"visibility_help": "您的网页在网站上的可见性状态。"
},
"table": {
"page": "页",
"slug": "金属块",
"status": "状态"
}
},
"admin_settings": {
"appearance": {
"description": "应用说明",
"description_plac": "输入您的应用说明",
"favicon": "App Favicon可选",
"logo": "应用徽标(可选)",
"logo_horizontal": "应用徽标水平(可选)",
"section_appearance": "出现",
"section_general": "常规设置",
"title": "应用标题",
"title_plac": "输入您的应用标题"
},
"billings": {
"address": "帐单地址",
"address_plac": "输入您的帐单地址",
"city": "计费城市",
"city_plac": "输入您的帐单城市",
"company_name": "公司名",
"company_name_plac": "输入您的公司名称",
"country": "账单国家",
"country_plac": "选择您的帐单国家",
"phone_number": "帐单电话号码(可选)",
"phone_number_plac": "输入您的帐单电话号码",
"postal_code": "帐单邮递区号",
"postal_code_plac": "输入您的帐单邮递区号",
"section_billing": "账单信息",
"section_company": "公司信息",
"state": "账单状态",
"state_plac": "输入您的帐单状态",
"vat": "增值税号",
"vat_plac": "输入您的增值税号"
},
"email": {
"driver": "邮件驱动程序",
"driver_plac": "输入您的邮件驱动程序",
"email_disclaimer": "This form is not fully pre-filled for security reasons. Your email settings is available in your <b>.env</b> file. For apply new Email settings, please confirm your options by button at the end of formular.",
"encryption": "邮件加密",
"encryption_plac": "选择您的邮件加密",
"host": "邮件主机",
"host_plac": "输入您的邮件主机",
"password": "邮件密码",
"password_plac": "输入您的邮件密码",
"port": "邮件端口",
"port_plac": "输入您的邮件端口",
"save_button": "保存电子邮件设置",
"section_email": "电邮设定",
"username": "邮件用户名",
"username_plac": "输入您的邮件用户名"
},
"others": {
"upload_limit": "Upload Limit",
"upload_limit_plac": "Type your upload limit in MB",
"upload_limit_help": "If you want to set max file size limit on single upload, add size of your limit in MB. E.g. 100 means 100 MB and 2 000 means 2 000 MB limit.",
"mimetypes_blacklist": "Mimetypes Blacklist",
"mimetypes_blacklist_plac":"Add mimetypes to Blacklist" ,
"mimetypes_blacklist_help" :"If you want to prevent upload some type of files, just add them to blacklist like this: x-php,mp3,jpeg <br/> Use a comma between each mimetype. Don't use a dot before mimetypes." ,
"section_cache": "Application Cache",
"cache_disclaimer": "Did you change anything in your .env file or change your stripe credentials? Then clear your cache.",
"cache_clear": "Clear Cache",
"allow_registration": "允许用户注册",
"allow_registration_help": "您可以为新用户禁用公共注册。您仍然可以在管理面板中 <br/>创建新用户。",
"contact_email": "联系电子邮件",
"contact_email_plac": "输入您的联系电子邮件",
"default_storage": "用户帐户的默认存储空间",
"default_storage_plac": "设置默认存储空间以GB为单位",
"google_analytics": "Google Analytics分析代码可选",
"google_analytics_plac": "粘贴您的Google Analytics分析代码",
"section_others": "其他设定",
"section_user": "用户和存储",
"storage_limit": "储存限制",
"storage_limit_help": "如果禁用此值,则所有用户将具有无限存储容量,并且您将无法 <br/>向用户收取存储计划的费用。"
},
"payments": {
"allow_payments": "允许订阅付款",
"button_submit": "测试并保存条带",
"button_testing": "测试条连接",
"credentials_disclaimer": "不显示您的Stripe凭据因为这些值是秘密的陌生人不得透露。您可以在 <b>.env</b> 文件中更改Stripe凭据。",
"section_payments": "条纹付款",
"stripe_create_acc": "如果您没有带区帐户,请 <a href=\"https://dashboard.stripe.com/register\" target=\"_blank\">在</a> 这里注册并获取您的可发布密钥,秘密密钥并创建您的网络挂钩。",
"stripe_create_webhook": "",
"stripe_currency": "Stripe Currency",
"stripe_currency_plac": "Select your Stripe currency",
"stripe_pub_key": "Publishable Key",
"stripe_pub_key_plac": "Paste your publishable key",
"stripe_sec_key": "Secret Key",
"stripe_sec_key_plac": "Paste your secret key",
"stripe_setup": "Stripe Setup",
"stripe_webhook_key_plac": "Paste your stripe webhook secret",
"webhook_url": "Stripe webhook URL"
},
"tabs": {
"appearance": "出现",
"billings": "帐单",
"email": "电子邮件",
"others": "其他",
"payments": "支付"
}
},
"alerts": {
"error_confirm": "哦,出了个问题!",
"leave_to_sign_in": "Do you really want to leave?",
"success_confirm": "太棒了!"
},
"context_menu": {
"add_folder": "添加文件夹",
"add_to_favourites": "添加进收藏",
"create_folder": "创建文件夹",
"delete": "删除",
"detail": "详情",
"download": "下载",
"empty_trash": "清空垃圾箱",
"log_out": "注销",
"move": "移动",
"profile_settings": "个人信息编辑",
"remove_from_favourites": "移出收藏",
"rename": "重命名",
"restore": "恢复文件",
"share": "分享",
"share_cancel": "Cancel Sharing",
"share_edit": "编辑分享设定",
"upload": "上传",
"select": "Select",
"no_options": "No Options Available",
"zip_folder": "Zip and Download"
},
"mobile_selecting": {
"select_all": "Select All",
"deselect_all": "Deselect All",
"done": "Done"
},
"preview_sorting": {
"grid_view": "Grid View",
"list_view": "List View",
"sort_date": "Sort By Date",
"sort_alphabet": "Sort By Aplhabet",
"preview_sorting_button": "View"
},
"cookie_disclaimer": {
"button": "cookies policy",
"description": "By browsing this website you are agreeing to our {0}."
},
"datatable": {
"paginate_info": "Showing 1 - {visible} from {total} records"
},
"empty_page": {
"call_to_action": "文件上传",
"description": "拖动文件至此处,或使用上传按钮",
"title": "这里什么都还没有"
},
"errors": {
"capacity_digit": "存储容量必须小于10位数字。"
},
"file_detail": {
"author": "作者",
"author_participant": "公共参与者",
"created_at": "创建于",
"shared": "分享",
"size": "大小",
"where": "地址",
"selected_multiple": "Selected Multiple Items",
"items": "Items"
},
"file_detail_meta": {
"dimension": "Dimensions",
"resolution": "Resolution",
"color_space": "Color Space",
"aperture_value": "Aperture Value",
"meta_data": "Metadata",
"author": "Author",
"time_data": "Content Created",
"make": "Camera",
"model": "Model",
"camera_lens": "Camera Lens",
"aperature": "F Number",
"iso": "ISO",
"focal": "Focal Length",
"exposure": "Exposure Time",
"longitude": "Longitude",
"latitude": "Latitude"
},
"folder": {
"empty": "空的",
"item_counts": "{count} 个文件 | {count} 个文件"
},
"global": {
"incomplete": "Incomplete",
"active": "活性",
"admin": "管理员",
"cancel": "取消",
"canceled": "取消",
"confirm_action": "是,我确定",
"default": "默认",
"free": "自由",
"get_it": "莫",
"menu": "菜单",
"monthly_ac": "莫",
"or": "要么",
"premium": "额外费用",
"saas": "服务",
"subscription": "订阅",
"total": "总",
"upgrade_plan": "升级计划"
},
"input_image": {
"supported": "Supported formats are .png, .jpg, .jpeg.",
"title": "Upload Image"
},
"inputs": {
"placeholder_search_files": "搜索文件"
},
"item_thumbnail": {
"deleted_at": "删除时间: {time}",
"original_location": "原始位置"
},
"locations": {
"home": "首页",
"shared": "已分享",
"trash": "垃圾箱",
"profile": "Profile",
"settings": "Settings",
"logout": "Log Out"
},
"menu": {
"admin": "Admin",
"files": "Files",
"invoices": "发票",
"latest": "Recent Uploads",
"logout": "Log Out",
"password": "Password",
"payment_cards": "付款卡",
"profile": "Profile Settings",
"settings": "Settings",
"shared": "Shared Files",
"storage": "Storage",
"subscription": "订阅",
"trash": "Trash"
},
"messages": {
"nothing_from_participants": "You don't have any uploads from other users.",
"nothing_to_preview": "没有任何信息可以预览。",
"nothing_was_found": "没找到任何信息。"
},
"notice": {
"stripe_activation": "您的Stripe帐户尚未设置。要向您的用户收费请 {0}。",
"stripe_activation_button": "设置您的Stripe帐户"
},
"page_contact_us": {
"description": "你有任何问题吗?请与我们联系。",
"error_message": "出问题了,请重试。",
"form": {
"email": "电子邮件",
"email_plac": "输入您的电子邮件",
"message": "信息",
"message_plac": "在这里输入你的消息...",
"submit_button": "发信息"
},
"success_message": "您的消息已成功发送。",
"title": "联系我们"
},
"page_create_password": {
"button_update": "更新密码",
"label_confirm_pass": "确认密码",
"label_email": "邮箱:",
"label_new_pass": "键入新密码",
"subtitle": "在此创建您的新密码",
"title": "只需一步进行登录"
},
"page_forgotten_password": {
"button_get_link": "获得链接",
"pass_reseted_signin": "登录",
"pass_reseted_subtitle": "您的密码被成功重置。",
"pass_reseted_title": "太棒了!",
"pass_sennded_subtitle": "我们为您发送了一封确认邮件!",
"pass_sennded_title": "感谢!",
"password_remember_button": "登录。",
"password_remember_text": "还记得住您的密码么?",
"subtitle": "通过邮箱获得重置链接:",
"title": "忘记密码?"
},
"page_index": {
"get_started_button": "立即注册",
"menu": {
"contact_us": "联系我们",
"log_in": "登录",
"pricing": "价钱",
"sign_in": "注册"
},
"sign_feature_1": "无需信用卡",
"sign_feature_2": "{defaultSpace} 可用存储空间",
"sign_up_button": "立即注册"
},
"page_login": {
"button_next": "下一步",
"placeholder_email": "键入您的邮箱",
"registration_button": "注册帐号",
"registration_text": "没有帐号?",
"subtitle": "请输入您的邮箱来登录。",
"title": "欢迎回来!"
},
"page_pricing_tables": {
"description": "选择计划巫婆完全适合您的需求。所有计划都会通过您的信用卡每月自动结算。",
"storage_capacity": "储存容量",
"vat_excluded": "Price displayed excludes VAT.",
"title": "选择您的计划"
},
"page_registration": {
"agreement": "通过单击“创建帐户”按钮,我同意 {0} 和 {1}。",
"button_create_account": "创建账户",
"have_an_account": "您之前有过账户了么?",
"label_confirm_pass": "确认密码:",
"label_email": "邮箱:",
"label_name": "全名:",
"label_pass": "创建密码:",
"placeholder_confirm_pass": "请重复输入一遍密码",
"placeholder_email": "键入您的邮箱地址",
"placeholder_name": "键入您的全名",
"placeholder_pass": "键入新密码",
"subtitle": "填写所有内容进行创建",
"title": "创建一个新用户"
},
"page_shared": {
"download_file": "下载文件",
"placeholder_pass": "输入密码",
"submit": "提交",
"subtitle": "请输入密码后得到分享链接",
"title": "您的分享链接已被保护"
},
"page_shared_404": {
"subtitle": "您要找的内容可能已经被删除了。",
"title": "没有找到文件"
},
"page_sign_in": {
"button_log_in": "登录",
"password_reset_button": "重置密码。",
"password_reset_text": "忘记密码?",
"placeholder_password": "键入密码",
"subtitle": "请用您的密码登录",
"title": "您是 {name}?"
},
"page_upgrade_account": {
"change_payment": {
"change_payment": "更改您的默认付款方式",
"pay_by_new_card": "用新信用卡付款",
"you_can": "你也可以"
},
"desription": "选择计划巫婆完全适合您的需求。所有计划都会通过您的信用卡每月自动结算。",
"errors": {
"pay_by_another_card": "请用另一张付款卡付款"
},
"section_billing": "账单信息",
"section_card": "支付卡",
"section_summary": "订购摘要",
"summary": {
"period": "每月计费",
"submit_button": "用信用卡付款",
"submit_disclaimer": "通过提交表单,您同意在您的{app}帐户中保存付款方式和帐单信息。",
"total_with_vat": "Total with VAT",
"vat": "VAT"
},
"title": "选择付款方式"
},
"popup_upload_limit": {
"title": "You exceed upload limit on single file",
"message": "Size of your uploaded file exceed the upload limit ({uploadLimit})."
},
"popup_mimetypes_blacklist": {
"title": "You are trying to upload unsupported file type",
"message": "File of this type ({mimetype}) is not allowed to upload."
},
"popup_zipping": {
"title": "Zipping Your Files...",
"message": "Please wait until your files start downloading."
},
"popup_create_folder": {
"folder_default_name": "New Folder",
"title": "Create Folder",
"label": "Type Name",
"placeholder": "Type your name"
},
"popup_delete_card": {
"message": "此事件不可逆转,您的付款卡将被永久删除",
"title": "你确定吗?"
},
"popup_deleted_plan": {
"message": "您的计划已成功删除。",
"title": "计划已删除"
},
"popup_deleted_user": {
"message": "Your user was deleted with all user data content.",
"title": "User was deleted"
},
"popup_deleted_user_aborted": {
"message": "You can't delete this account while user have active subscription.",
"title": "User wasn't deleted"
},
"popup_error": {
"message": "有什么东西坏掉了,请联系我们,引导我们修复。",
"title": "wow好像有什么东西坏掉了"
},
"popup_exceed_limit": {
"message": "请联系我们来增加您的存储空间。",
"title": "wow您已经超过了存储上线。"
},
"popup_move_item": {
"cancel": "取消",
"submit": "移动文件/夹",
"title": "移动文件/夹"
},
"popup_pass_changed": {
"message": "现在,您拥有一个新的密码。",
"title": "您的密码已经改变!"
},
"popup_passport_error": {
"message": "Probably you didn't generated Passport Grant client or you didn't set up passport credentials in your .env file. Please follow install instructions.",
"title": "Invalid Passport Grand Client"
},
"popup_paylod_error": {
"message": "Sorry, your file is too large and can't be uploaded",
"title": "File is too large"
},
"popup_rename": {
"title": "Rename Your {item}",
"label": "Edit Name",
"placeholder": "Type your title",
"tab_emoji_title": "Emoji as an Icon",
"tab_color_title": "Folder Color",
"select_emoji_label": "Pick Your Emoji Icon",
"color_pick_label": "Pick Your Color",
"set_emoji_input_placeholder": "Emojis List...",
"search_emoji_input_placeholder": "Search your emoji...",
"emoji_list_not_found": "Not Found"
},
"popup_set_card": {
"message": "您的卡将被设置为默认卡,并且在以后的结算中始终会收取费用。",
"title": "设为默认卡?"
},
"popup_share_create": {
"title": "分享您的 {item}"
},
"popup_share_edit": {
"change_pass": "更改密码",
"confirm": "确认",
"save": "保存更改",
"stop": "停止风险",
"title": "更新分享设定",
"go_back": "Go Back",
"send_to_recipients": "Send to Recipients"
},
"popup_signup_error": {
"message": "Please check your database connection if everything works correctly.",
"title": "Server Error"
},
"popup_subscription_cancel": {
"button": "我受够了",
"message": "在结算周期结束之前,您将可以继续使用已付费的功能。",
"title": "订阅已恢复"
},
"popup_subscription_resumed": {
"button": "棒极了!",
"message": "您的订阅已重新激活,并且将按原始计费周期计费。",
"title": "订阅已取消"
},
"profile": {
"change_pass": "修改您的密码",
"profile_info": "用户信息",
"store_pass": "保存您的密码"
},
"pronouns": {
"of": "of"
},
"roles": {
"admin": "Admin",
"user": "User"
},
"routes": {
"create_new_password": "创建新密码"
},
"routes_title": {
"appearance": "出现",
"billings": "帐单",
"dashboard": "仪表板",
"email": "电子邮件",
"invoices": "发票",
"others": "其他",
"page_edit": "编辑页面",
"pages": "网页",
"payment_methods": "支付方式",
"payments": "支付",
"plan": "计划",
"plan_create": "创建计划",
"plan_delete": "计划删除",
"plan_settings": "计划设定",
"pricing_plans": "定价方案",
"profile": "My Profile",
"profile_settings": "档案设置",
"settings": "设置",
"settings_mobile": "Settings",
"settings_password": "Change Password",
"settings_storage": "Storage",
"subscribers": "订户",
"subscription": "订阅",
"upgrade_billing": "开票",
"upgrade_plan": "升级计划",
"user_create": "Create User",
"users_delete": "Delete User",
"users_detail": "Detail",
"users_list": "User Management",
"users_password": "Password",
"users_storage_usage": "Storage Usage",
"users_user": "User"
},
"rows": {
"card": {
"expiration": "截止日期",
"number": "卡号",
"status": "状态"
},
"invoice": {
"number": "发票编号",
"payed": "祈祷,",
"plan": "计划",
"total": "总"
}
},
"shared": {
"can_download": "仅可以下载",
"editor": "可以编辑和上传文件",
"empty_shared": "您还没有分享任何内容",
"visitor": "仅可以查看或下载文件"
},
"shared_form": {
"button_more_options": "More Options",
"button_close_options": "Close Options",
"button_done": "太好了!",
"button_generate": "生成分享链接",
"label_password_protection": "密码保护",
"label_permission": "权限",
"label_shared_url": "分享链接",
"label_share_vie_email": "Get your link",
"label_send_to_recipients": "Send to Recipients",
"label_expiration": "Link Expiration",
"expiration_hour": "{value}h.",
"expiration_day": "{value}d.",
"placeholder_permission": "请设置权限",
"email_successfully_send_message": "Your item was <b>successfully sended</b> to recipients emails.",
"share_by_link": "Share by Link",
"share_by_email": "Share by Email",
"recipients_label": "Recipients",
"email_placeholder": "Type your emails"
},
"sidebar": {
"favourites": "收藏",
"favourites_empty": "将您想要收藏的文件夹拖动至此",
"folders_empty": "Create some new folder.",
"home": "Home",
"latest": "Recent Uploads",
"locations_title": "Base",
"my_shared": "My Shared Items",
"navigator_title": "Navigator",
"participant_uploads": "Participant Uploads",
"tools_title": "Tools"
},
"storage": {
"audios": "Audios",
"documents": "Documents",
"images": "Images",
"others": "Others",
"sec_capacity": "Storage Capacity",
"sec_details": "Capacity Used Details",
"total_capacity": "Your storage capacity is {capacity}",
"total_used": "Total used {used}",
"videos": "Videos"
},
"toaster": {
"account_upgraded": "您的帐户已成功升级。",
"card_deleted": "您的卡已成功删除。",
"card_new_add": "Your card was successfully added",
"card_set": "您的卡已成功设置为默认值。",
"changed_capacity": "You successfully changed user's storage size!",
"changed_user": "You successfully changed user's role!",
"created_user": "User was created successfully!",
"email_set": "您的电子邮件设置已成功更新",
"plan_created": "您的计划已成功创建!",
"sended_password": "You successfully send user email for reset password!",
"stripe_set": "您的Stripe帐户已成功设置"
},
"types": {
"file": "文件",
"folder": "文件夹"
},
"upgrade_banner": {
"button": "Upgrade",
"description": "You nearly reach your storage capacity.",
"title": "You reach your storage capacity. Please upgrade."
},
"incomplete_payment": {
"description": "Your latest payment is incomplete. {0}",
"href": "Please confirm your payment."
},
"uploading": {
"cancel": "Cancel Uploading",
"processing_file": "Processing File...",
"progress_single_upload": "上传文件 {progress}%",
"progress": "上传文件 {progress}% - {current}/{total}"
},
"user_add_card": {
"default_description": "",
"default_title": "Set as Default Payment Method"
},
"user_box_delete": {
"description": "You can delete your user, but, pay attention! This event is irreversible and all user data include user files will be deleted.",
"title": "Delete User"
},
"user_box_password": {
"description": "You can send password reset email via button bellow. User will be redirected to page where he can update password for his account.",
"title": "Change User Password"
},
"user_box_role": {
"description": "You can change role for current user. Admin role can edit or create new users, change storage capacity and any other application settings.",
"title": "Change User Role"
},
"user_box_storage": {
"description": "Change user storage capacity by input bellow. You have to type only number e.g. value '5' means, user will have 5GB of storage capacity.",
"title": "Change User Storage Capacity"
},
"user_invoices": {
"empty": "您还没有发票。",
"title": "发票"
},
"user_password": {
"title": "更改您的密码"
},
"user_payments": {
"add_card": "Add Payment Card",
"card_field_title": "Credit Card",
"delete_card": "删除卡",
"empty": "您还没有任何付款卡。",
"field_loading": "Loading card field...",
"set_as_default": "设为默认卡",
"store_card": "Store Payment Card",
"title": "支付方式"
},
"user_settings": {
"address": "地址",
"address_plac": "输入您的帐单地址",
"city": "市",
"city_plac": "输入您的帐单城市",
"country": "国家",
"country_plac": "输入您的帐单国家",
"name": "名称",
"name_plac": "输入您的帐单名称",
"phone_number": "电话号码",
"phone_number_plac": "输入您的帐单电话号码",
"postal_code": "邮政编码",
"postal_code_plac": "输入您的帐单邮递区号",
"state": "州",
"state_plac": "输入您的帐单状态",
"title_account": "帐户信息",
"title_billing": "账单信息",
"timezone": "Timezone",
"timezone_plac" : "Select your timezone"
},
"user_subscription": {
"billed": "开票",
"cancel_plan": "取消计划",
"canceled_at": "取消于",
"created_at": "创建于",
"empty": "您还没有任何订阅。",
"ends_at": "结束于",
"plan": "计划",
"renews_at": "续约时间",
"resume_plan": "恢复计划",
"status": "状态",
"title": "订阅计划"
},
"validation_errors": {
"incorrect_password": "不好意思,您输入的密码可能有误!",
"wrong_image": "您可能上传了一个错误的文件!"
}
}

View File

@@ -1,846 +0,0 @@
{
"actions": {
"create_folder": "Create folder",
"delete": "Delete item",
"move": "Move item",
"preview": "Change preview",
"share": "Share item",
"upload": "Upload file",
"download": "Download item",
"print": "Print item",
"close": "Close",
"sorting_view": "Sorting and View",
"info_panel": "Info panel"
},
"activation": {
"stripe": {
"button": "Set up your Stripe account",
"description": "To charge your users, please set up your Stripe account credentials.",
"title": "Your Stripe account is not set"
}
},
"admin_menu": {
"dashboard": "Dashboard",
"invoices": "Invoices",
"pages": "Pages",
"plans": "Plans",
"settings": "Settings",
"users": "Users"
},
"admin_page_dashboard": {
"backer_button": "Help Us Improve",
"license": "License",
"version": "Version",
"w_latest_users": {
"title": "Latest Registrations"
},
"w_total_premium": {
"link": "Show All Plans",
"title": "Total Premium Users"
},
"w_total_space": {
"link": "Show All Users",
"title": "Total Space Used"
},
"w_total_users": {
"link": "Show All Users",
"title": "Total Users"
}
},
"admin_page_invoices": {
"empty": {
"description": "All customers invoices will be showed here.",
"title": "You dont have any invoices yet"
},
"table": {
"number": "Invoice Number",
"payed": "Payed",
"plan": "Plan",
"total": "Total",
"user": "User"
}
},
"admin_page_plans": {
"create_plan_button": "Create Plan",
"delete_plan_button": "Delete Plan",
"disclaimer_delete_plan": "You can delete this plan, but, pay attention! Your plan will be deleted, but users who are subscribed with this plan, will be still charged unless they cancel subscription.",
"disclaimer_edit_price": "Price change for your plan is not available due to Stripe service design. If you wish change your price plan, please, create new plan.",
"empty": {
"button": "Create New Plan",
"description": "For create new plan, click on button below.",
"title": "You dont have any plan yet"
},
"form": {
"description": "Description (optional)",
"description_plac": "Plan description",
"name": "Name",
"name_delete_plac": "Type plan name",
"name_plac": "Plan name",
"price": "Price",
"price_plac": "Plan price",
"status": "Status",
"status_help": "Status of your plan availability on website.",
"storage": "Storage Capacity in GB",
"storage_helper": "You have to type only number e.g. value '5' means, user will have 5GB of storage capacity.",
"storage_plac": "Storage capacity",
"title_delete": "Delete Plan",
"title_details": "Plan Details",
"title_pricing": "Plan Pricing"
},
"subscribers": {
"empty": "There is no any subscriber yet."
},
"table": {
"name": "Plan Name",
"price": "Price",
"status": "Status",
"storage_capacity": "Storage Capacity",
"subscribers": "Subscribers"
},
"tabs": {
"delete": "Delete Plan",
"settings": "Settings",
"subscribers": "Subscribers"
}
},
"admin_page_user": {
"change_capacity": "Change Capacity",
"create_user": {
"avatar": "Avatar",
"group_details": "Account Details",
"group_settings": "Account Settings",
"label_conf_pass": "Confirm password",
"label_email": "Type E-mail",
"label_name": "Type full name",
"submit": "Create User"
},
"delete_user": "Delete User",
"invoices": {
"empty": "User don't have any invoices yet."
},
"label_change_capacity": "Type storage capacity in GB",
"label_delete_user": "Type with Case Sensitive user name {user}",
"label_person_info": "Personal Information",
"placeholder_delete_user": "Type here",
"save_role": "Save Role",
"select_role": "Select user role",
"send_password_link": "Send Password Reset Link",
"subscription": {
"empty": "User don't have any subscription yet.",
"interval_mo": "Monthly"
},
"table": {
"action": "Action",
"created_at": "Registered",
"name": "User",
"plan": "Subscription Plan",
"role": "Role",
"storage_capacity": "Storage Capacity",
"storage_used": "Storage Used"
},
"tabs": {
"delete": "Delete User",
"detail": "Detail",
"invoices": "Invoices",
"password": "Password",
"storage": "Storage Usage",
"subscription": "Subscription"
}
},
"admin_pages": {
"form": {
"content": "Content",
"content_plac": "Type your content here...",
"slug": "Slug",
"title": "Title",
"title_plac": "Title name",
"visibility": "Visibility",
"visibility_help": "Status of your page visibility on website."
},
"table": {
"page": "Page",
"slug": "Slug",
"status": "Status"
}
},
"admin_settings": {
"appearance": {
"description": "App Description",
"description_plac": "Type your app description",
"favicon": "App Favicon (optional)",
"logo": "App Logo (optional)",
"logo_horizontal": "App Logo Horizontal (optional)",
"section_appearance": "Appearance",
"section_general": "General Settings",
"title": "App Title",
"title_plac": "Type your app title"
},
"billings": {
"address": "Billing Address",
"address_plac": "Type your billing address",
"city": "Billing City",
"city_plac": "Type your billing city",
"company_name": "Company Name",
"company_name_plac": "Type your company name",
"country": "Billing Country",
"country_plac": "Select your billing country",
"phone_number": "Billing Phone Number (optional)",
"phone_number_plac": "Type your billing phone number",
"postal_code": "Billing Postal Code",
"postal_code_plac": "Type your billing postal code",
"section_billing": "Billing Information",
"section_company": "Company Information",
"state": "Billing State",
"state_plac": "Type your billing state",
"vat": "VAT Number",
"vat_plac": "Type your VAT number"
},
"email": {
"driver": "Mail Driver",
"driver_plac": "Type your mail driver",
"email_disclaimer": "This form is not fully pre-filled for security reasons. Your email settings is available in your <b>.env</b> file. For apply new Email settings, please confirm your options by button at the end of formular.",
"encryption": "Mail Encryption",
"encryption_plac": "Select your mail encryption",
"host": "Mail Host",
"host_plac": "Type your mail host",
"password": "Mail Password",
"password_plac": "Type your mail password",
"port": "Mail Port",
"port_plac": "Type your mail port",
"save_button": "Save Email Settings",
"section_email": "Email Setup",
"username": "Mail Username",
"username_plac": "Type your mail username"
},
"others": {
"upload_limit": "Upload Limit",
"upload_limit_plac": "Type your upload limit in MB",
"upload_limit_help": "If you want to set max file size limit on single upload, add size of your limit in MB. E.g. 100 means 100 MB and 2 000 means 2 000 MB limit.",
"mimetypes_blacklist": "Mimetypes Blacklist",
"mimetypes_blacklist_plac":"Add mimetypes to Blacklist" ,
"mimetypes_blacklist_help" :"If you want to prevent upload some type of files, just add them to blacklist like this: x-php,mp3,jpeg <br/> Use a comma between each mimetype. Don't use a dot before mimetypes." ,
"section_cache": "Application Cache",
"cache_disclaimer": "Did you change anything in your .env file or change your Stripe credentials? Then clear your cache.",
"cache_clear": "Clear Cache",
"allow_registration": "Allow User Registration",
"allow_registration_help": "You can disable public registration for new users. You will still able to <br/>create new users in administration panel.",
"contact_email": "Contact Email",
"contact_email_plac": "Type your contact email",
"default_storage": "Default Storage Space for User Accounts",
"default_storage_plac": "Set default storage space in GB",
"google_analytics": "Google Analytics Code (optional)",
"google_analytics_plac": "Paste your Google Analytics Code",
"section_others": "Others Settings",
"section_user": "Users and Storage",
"storage_limit": "Storage Limitation",
"storage_limit_help": "If this value is off, all users will have infinity storage capacity and you won't be <br/>able to charge your users for storage plan."
},
"payments": {
"allow_payments": "Allow Subscription Payments",
"button_submit": "Test and Save Stripe",
"button_testing": "Testing Stripe Connection",
"credentials_disclaimer": "Your Stripe credentials is not showed because these values are secret and must not be revealed by stranger. You can change your Stripe credentials in your <b>.env</b> file.",
"section_payments": "Stripe Payments",
"stripe_create_acc": "If you dont have stripe account, please <a href=\"https://dashboard.stripe.com/register\" target=\"_blank\">register here</a> and get your Publishable Key, Secret Key and create your webhook.",
"stripe_create_webhook": "You have to create webhook endpoint in your Stripe Dashboard. You can find it in <b>Dashboard -> Developers -> Webhooks -> Add Endpoint</b>. In Endpoint URL please copy and paste url bellow. Make sure, this url is your public domain, not localhost. In events section, please click on <b>receive all events</b>. That's all.",
"stripe_currency": "Stripe Currency",
"stripe_currency_plac": "Select your Stripe currency",
"stripe_pub_key": "Publishable Key",
"stripe_pub_key_plac": "Paste your publishable key",
"stripe_sec_key": "Secret Key",
"stripe_sec_key_plac": "Paste your secret key",
"stripe_setup": "Stripe Setup",
"stripe_webhook_key_plac": "Paste your stripe webhook secret",
"webhook_url": "Stripe webhook URL"
},
"tabs": {
"appearance": "Appearance",
"billings": "Billings",
"email": "Email",
"others": "Application",
"payments": "Payments"
}
},
"alerts": {
"error_confirm": "Thats horrible!",
"leave_to_sign_in": "Do you really want to leave?",
"success_confirm": "Awesome!"
},
"context_menu": {
"add_folder": "Add Folder",
"add_to_favourites": "Add to Favourites",
"create_folder": "Create Folder",
"delete": "Delete",
"detail": "Detail",
"download": "Download",
"empty_trash": "Empty Trash",
"log_out": "Log Out",
"move": "Move",
"profile_settings": "Profile Settings",
"remove_from_favourites": "Remove Favourite",
"rename": "Rename",
"restore": "Restore",
"share": "Share",
"share_cancel": "Cancel Sharing",
"share_edit": "Edit Sharing",
"upload": "Upload",
"select": "Select",
"no_options": "No Options Available",
"zip_folder": "Zip and Download"
},
"mobile_selecting": {
"select_all": "Select All",
"deselect_all": "Deselect All",
"done": "Done"
},
"preview_sorting": {
"grid_view": "Grid View",
"list_view": "List View",
"sort_date": "Sort By Date",
"sort_alphabet": "Sort By Aplhabet",
"preview_sorting_button": "View"
},
"cookie_disclaimer": {
"button": "cookies policy",
"description": "By browsing this website you are agreeing to our {0}."
},
"datatable": {
"paginate_info": "Showing 1 - {visible} from {total} records"
},
"empty_page": {
"call_to_action": "Upload Files",
"description": "Upload some files here easily via upload button.",
"title": "Upload Your First File"
},
"errors": {
"capacity_digit": "The storage capacity must be lower than 10 digit number."
},
"file_detail": {
"author": "Author",
"author_participant": "Public Participant",
"created_at": "Created at",
"shared": "Shared",
"size": "Size",
"where": "Where",
"selected_multiple": "Selected Multiple Items",
"items": "Items"
},
"file_detail_meta": {
"dimension": "Dimensions",
"resolution": "Resolution",
"color_space": "Color Space",
"aperture_value": "Aperture Value",
"meta_data": "Metadata",
"author": "Author",
"time_data": "Content Created",
"make": "Camera",
"model": "Model",
"camera_lens": "Camera Lens",
"aperature": "F Number",
"iso": "ISO",
"focal": "Focal Length",
"exposure": "Exposure Time",
"longitude": "Longitude",
"latitude": "Latitude"
},
"folder": {
"empty": "Empty",
"item_counts": "{count} Item | {count} Items"
},
"global": {
"incomplete": "Incomplete",
"active": "Active",
"admin": "Admin",
"cancel": "Cancel",
"canceled": "Canceled",
"confirm_action": "Yes, I'm sure",
"default": "Default",
"free": "Free",
"get_it": "Get It",
"menu": "Menu",
"monthly_ac": "Mo.",
"or": "or",
"premium": "Premium",
"saas": "Services",
"subscription": "Subscription",
"total": "Total",
"upgrade_plan": "Upgrade Plan"
},
"input_image": {
"supported": "Supported formats are .png, .jpg, .jpeg.",
"title": "Upload Image"
},
"inputs": {
"placeholder_search_files": "Search files or folders..."
},
"item_thumbnail": {
"deleted_at": "Deleted {time}",
"original_location": "Original Location"
},
"locations": {
"home": "Files",
"shared": "Shared",
"trash": "Trash",
"profile": "Profile",
"settings": "Settings",
"logout": "Log Out"
},
"menu": {
"admin": "Administration",
"files": "Files",
"invoices": "Invoices",
"latest": "Recent Uploads",
"logout": "Log Out",
"password": "Password",
"payment_cards": "Payment Cards",
"profile": "Profile Settings",
"settings": "Settings",
"shared": "Shared Files",
"storage": "Storage",
"subscription": "Subscription",
"trash": "Trash"
},
"messages": {
"nothing_from_participants": "You don't have any uploads from other users.",
"nothing_to_preview": "There is nothing to preview.",
"nothing_was_found": "Nothing was found."
},
"notice": {
"stripe_activation": "Your Stripe account is not set. To charging your users please {0}.",
"stripe_activation_button": "set up your Stripe account"
},
"page_contact_us": {
"description": "Do you have any questions? Get in touch with us.",
"error_message": "Something went wrong, please try it again.",
"form": {
"email": "Email",
"email_plac": "Type your email",
"message": "Message",
"message_plac": "Type your message here...",
"submit_button": "Send Message"
},
"success_message": "Your message was send successfully.",
"title": "Contact Us"
},
"page_create_password": {
"button_update": "Update Password",
"label_confirm_pass": "Confirm password",
"label_email": "Email:",
"label_new_pass": "New password",
"subtitle": "Create your new password here:",
"title": "Only One Step to Log In"
},
"page_forgotten_password": {
"button_get_link": "Get Link",
"pass_reseted_signin": "Sign In",
"pass_reseted_subtitle": "Your password was reset successfully.",
"pass_reseted_title": "Awesome!",
"pass_sennded_subtitle": "We have e-mailed your password reset link!",
"pass_sennded_title": "Thank you!",
"password_remember_button": "Log In.",
"password_remember_text": "Remember your password?",
"subtitle": "Get reset link with your email:",
"title": "Forgotten Password?"
},
"page_index": {
"get_started_button": "Sign Up Now",
"menu": {
"contact_us": "Contact Us",
"log_in": "Log In",
"pricing": "Pricing",
"sign_in": "Sign Up"
},
"sign_feature_1": "No credit card required",
"sign_feature_2": "{defaultSpace} Free storage space",
"sign_up_button": "Sign Up Now"
},
"page_login": {
"button_next": "Next Step",
"placeholder_email": "Type your E-mail",
"registration_button": "Register account.",
"registration_text": "Dont have an account?",
"subtitle": "Please type your email to log in:",
"title": "Welcome Back!"
},
"page_pricing_tables": {
"description": "Choose plan witch perfect fit your needs. All plans is billed monthly automatically via your credit card.",
"storage_capacity": "Of Storage Capacity",
"vat_excluded": "Price displayed excludes VAT.",
"title": "Choose Your Plan"
},
"page_registration": {
"agreement": "By clicking on 'Create Account' button I agree to the {0} and {1}.",
"button_create_account": "Create Account",
"have_an_account": "Do you have an account?",
"label_confirm_pass": "Confirm password:",
"label_email": "Email:",
"label_name": "Full Name:",
"label_pass": "Create password:",
"placeholder_confirm_pass": "Confirm your new password",
"placeholder_email": "Type your E-mail",
"placeholder_name": "Type your full name",
"placeholder_pass": "New password",
"subtitle": "Please fill registration to create account:",
"title": "Create New Account"
},
"page_shared": {
"download_file": "Download File",
"placeholder_pass": "Type password",
"submit": "Submit",
"subtitle": "Please type the password to get shared content:",
"title": "Your Share Link is Protected"
},
"page_shared_404": {
"subtitle": "The content you are finding was probably deleted.",
"title": "Not Found :("
},
"page_sign_in": {
"button_log_in": "Log In",
"password_reset_button": "Reset Password.",
"password_reset_text": "Forgotten your password?",
"placeholder_password": "Type your password",
"subtitle": "Confirm you by your password:",
"title": "Are You {name}?"
},
"page_upgrade_account": {
"change_payment": {
"change_payment": "change your default payment method",
"pay_by_new_card": "pay by new credit card",
"you_can": "Also you can"
},
"desription": "Choose plan witch perfect fit your needs. All plans is billed monthly automatically via your credit card.",
"errors": {
"pay_by_another_card": "Please pay by another payment card"
},
"section_billing": "Billing Information",
"section_card": "Payment Card",
"section_summary": "Order Summary",
"summary": {
"total_with_vat": "Total with VAT",
"vat": "VAT",
"period": "Billed monthly",
"submit_button": "Pay with credit card",
"submit_disclaimer": "By submit form, you agree to save the payment method and billing information in your {app} account."
},
"title": "Choose Payment Method"
},
"popup_upload_limit": {
"title": "You exceed upload limit on single file",
"message": "Size of your uploaded file exceed the upload limit ({uploadLimit})."
},
"popup_mimetypes_blacklist": {
"title": "You are trying to upload unsupported file type",
"message": "File of this type ({mimetype}) is not allowed to upload."
},
"popup_delete_card": {
"message": "This event is irreversible and your payment card will be delete forever",
"title": "Are you sure?"
},
"popup_deleted_plan": {
"message": "Your plan was successfully deleted.",
"title": "Plan was deleted"
},
"popup_deleted_user": {
"message": "Your user was deleted with all user data content.",
"title": "User was deleted"
},
"popup_deleted_user_aborted": {
"message": "You can't delete this account while user have active subscription.",
"title": "User wasn't deleted"
},
"popup_error": {
"message": "Something went wrong and we can't continue. Please contact us.",
"title": "Whooops, something went wrong!"
},
"popup_exceed_limit": {
"message": "Please contact your administrator to change your limit.",
"title": "Whooops, you exceed storage limit :("
},
"popup_move_item": {
"cancel": "Cancel",
"submit": "Move Item",
"title": "Move Item"
},
"popup_pass_changed": {
"message": "So now, you have awesome new password.",
"title": "Your password was changed!"
},
"popup_passport_error": {
"message": "Probably you didn't generated Passport Grant client or you didn't set up passport credentials in your .env file. Please follow install instructions.",
"title": "Invalid Passport Grand Client"
},
"popup_paylod_error": {
"message": "Sorry, your file is too large and can't be uploaded",
"title": "File is too large"
},
"popup_zipping": {
"title": "Zipping Your Files...",
"message": "Please wait until your files start downloading."
},
"popup_rename": {
"title": "Rename Your {item}",
"label": "Edit Name",
"placeholder": "Type your title",
"tab_emoji_title": "Emoji as an Icon",
"tab_color_title": "Folder Color",
"select_emoji_label": "Pick Your Emoji Icon",
"color_pick_label": "Pick Your Color",
"set_emoji_input_placeholder": "Emojis List...",
"search_emoji_input_placeholder": "Search your emoji...",
"emoji_list_not_found": "Not Found"
},
"popup_create_folder": {
"folder_default_name": "New Folder",
"title": "Create Folder",
"label": "Type Name",
"placeholder": "Type your name"
},
"popup_set_card": {
"message": "Your card will be set as default and will be always charged for the next billings.",
"title": "Set as default card?"
},
"popup_share_create": {
"title": "Share Your {item}"
},
"popup_share_edit": {
"change_pass": "Change Password",
"confirm": "Confirm",
"save": "Save Changes",
"stop": "Cancel Sharing",
"title": "Update sharing options",
"go_back": "Go Back",
"send_to_recipients": "Send to Recipients"
},
"popup_signup_error": {
"message": "Please check your database connection if everything works correctly.",
"title": "Server Error"
},
"popup_subscription_cancel": {
"button": "I'm done",
"message": "You'll continue to have access to the features you've paid for until the end of your billing cycle.",
"title": "Subscription Was Canceled"
},
"popup_subscription_resumed": {
"button": "That's awesome!",
"message": "Your subscription was re-activated, and they will be billed on the original billing cycle.",
"title": "Subscription Was Resumed"
},
"profile": {
"change_pass": "Change Password",
"profile_info": "Profile Information",
"store_pass": "Store New Password"
},
"pronouns": {
"of": "of"
},
"roles": {
"admin": "Admin",
"user": "User"
},
"routes": {
"create_new_password": "create-new-password"
},
"routes_title": {
"appearance": "Appearance",
"billings": "Billings",
"dashboard": "Dashboard",
"email": "Email",
"invoices": "Invoices",
"others": "Others",
"page_edit": "Edit Page",
"pages": "Pages",
"payment_methods": "Payment Methods",
"payments": "Payments",
"plan": "Plan",
"plan_create": "Create Plan",
"plan_delete": "Plan Delete",
"plan_settings": "Plan Settings",
"pricing_plans": "Pricing Plans",
"profile": "My Profile",
"profile_settings": "Profile Settings",
"settings": "Settings",
"settings_mobile": "Settings",
"settings_password": "Change Password",
"settings_storage": "Storage",
"subscribers": "Subscribers",
"subscription": "Subscription",
"upgrade_billing": "Billing",
"upgrade_plan": "Upgrade Plan",
"user_create": "Create User",
"users_delete": "Delete User",
"users_detail": "Detail",
"users_list": "User Management",
"users_password": "Password",
"users_storage_usage": "Storage Usage",
"users_user": "User"
},
"rows": {
"card": {
"expiration": "Expiration Date",
"number": "Card Number",
"status": "Status"
},
"invoice": {
"number": "Invoice Number",
"payed": "Payed",
"plan": "Plan",
"total": "Total"
}
},
"shared": {
"can_download": "Can download file",
"editor": "Can edit and upload files",
"empty_shared": "You haven't shared anything yet.",
"visitor": "Can only view and download"
},
"shared_form": {
"button_more_options": "Set Expiration",
"button_close_options": "Close Options",
"button_folder_icon_open": "Customize Folder Icon",
"button_done": "Awesome, Im done!",
"button_generate": "Generate Link",
"label_password_protection": "Password Protected",
"label_permission": "Permission",
"label_shared_url": "Share url",
"label_share_vie_email": "Get your link",
"label_send_to_recipients": "Send to Recipients",
"label_expiration": "Link Expiration",
"expiration_hour": "{value}h.",
"expiration_day": "{value}d.",
"placeholder_permission": "Select your permission",
"email_successfully_send_message": "Your item was <b>successfully sended</b> to recipients emails.",
"share_by_link": "Share by Link",
"share_by_email": "Share by Email",
"recipients_label": "Recipients",
"email_placeholder": "Type your emails"
},
"sidebar": {
"favourites": "Favourites",
"favourites_empty": "Drag here your favourite folder.",
"folders_empty": "Create some new folder.",
"home": "Files",
"latest": "Recent Uploads",
"locations_title": "Base",
"my_shared": "My Shared Items",
"navigator_title": "Navigator",
"participant_uploads": "Participant Uploads",
"tools_title": "Tools"
},
"storage": {
"audios": "Audios",
"documents": "Documents",
"images": "Images",
"others": "Others",
"sec_capacity": "Your disk Usage",
"sec_details": "Capacity Usage Details",
"total_capacity": "Your storage capacity is {capacity}",
"total_used": "Total used {used}",
"videos": "Videos"
},
"toaster": {
"account_upgraded": "Your account was successfully upgraded.",
"card_deleted": "Your card was successfully deleted.",
"card_new_add": "Your card was successfully added",
"card_set": "Your card was successfully set as default.",
"changed_capacity": "You successfully changed user's storage size!",
"changed_user": "You successfully changed user's role!",
"created_user": "User was created successfully!",
"email_set": "Your email settings was updated successfully",
"plan_created": "Your plan was successfully created!",
"sended_password": "You successfully send user email for reset password!",
"stripe_set": "Your Stripe account was successfully set!"
},
"types": {
"file": "File",
"folder": "Folder"
},
"upgrade_banner": {
"button": "Upgrade",
"description": "You nearly reach your storage capacity.",
"title": "You reach your storage capacity. Please upgrade."
},
"incomplete_payment": {
"description": "Your latest payment is incomplete. {0}",
"href": "Please confirm your payment."
},
"uploading": {
"cancel": "Cancel Uploading",
"processing_file": "Processing File...",
"progress_single_upload": "Uploading File {progress}%",
"progress": "Uploading File {progress}% - {current}/{total}"
},
"user_add_card": {
"default_description": "Your card will be charged for billing plans as first.",
"default_title": "Set as Default Payment Method"
},
"user_box_delete": {
"description": "You can delete your user, but, pay attention! This event is irreversible and all user data include user files will be deleted.",
"title": "Delete User"
},
"user_box_password": {
"description": "You can send password reset email via button bellow. User will be redirected to page where he can update password for his account.",
"title": "Change User Password"
},
"user_box_role": {
"description": "You can change role for current user. Admin role can edit or create new users, change storage capacity and any other application settings.",
"title": "Change User Role"
},
"user_box_storage": {
"description": "Change user storage capacity by input bellow. You have to type only number e.g. value '5' means, user will have 5GB of storage capacity.",
"title": "Change User Storage Capacity"
},
"user_invoices": {
"empty": "You don't have any invoices yet.",
"title": "Invoices"
},
"user_password": {
"title": "Change Your Password"
},
"user_payments": {
"add_card": "Add Payment Card",
"card_field_title": "Credit Card",
"delete_card": "Delete card",
"empty": "You don't have any payment cards yet.",
"field_loading": "Loading card field...",
"set_as_default": "Set as default card",
"store_card": "Store Payment Card",
"title": "Payment Methods"
},
"user_settings": {
"address": "Address",
"address_plac": "Type your billing address",
"city": "City",
"city_plac": "Type your billing city",
"country": "Country",
"country_plac": "Select your billing country",
"name": "Name",
"name_plac": "Type your billing name",
"phone_number": "Phone Number",
"phone_number_plac": "Type your billing phone number",
"postal_code": "Postal Code",
"postal_code_plac": "Type your billing postal code",
"state": "State",
"state_plac": "Type your billing state",
"title_account": "Account Information",
"title_billing": "Billing Information",
"timezone": "Timezone",
"timezone_plac" : "Select your timezone"
},
"user_subscription": {
"billed": "Billed",
"cancel_plan": "Cancel Plan",
"canceled_at": "Canceled At",
"created_at": "Created At",
"empty": "You don't have any subscription yet.",
"ends_at": "Ends At",
"plan": "Plan",
"renews_at": "Renews At",
"resume_plan": "Resume Plan",
"status": "Status",
"title": "Subscription Plan"
},
"validation_errors": {
"incorrect_password": "Sorry, you passed incorrect password :(",
"wrong_image": "You may have uploaded the wrong file, try again!"
}
}

View File

@@ -1,845 +0,0 @@
{
"actions": {
"create_folder": "Vytvoriť priečinok",
"delete": "Vymazať položku",
"move": "Presunúť položku",
"preview": "Zmeniť náhľad",
"share": "Zdieľať položku",
"upload": "Nahrať súbory",
"download": "Stiahnuť položku",
"print": "Vytlačiť položku",
"close": "Zatvoriť",
"sorting_view" : "Zoradenie a zobrazenie ",
"info_panel" : "Informačný panel"
},
"activation": {
"stripe": {
"button": "Nastaviť účet Stripe",
"description": "Pre spoplatňovanie Vaších uživateľov, prosím nastavte poverenia služby Stripe",
"title": "Váš účet Stripe nie je nastavený"
}
},
"admin_menu": {
"dashboard": "Prehľad",
"invoices": "Faktúry",
"pages": "Stránky",
"plans": "Plány",
"settings": "Nastavenia",
"users": "Uživatelia"
},
"admin_page_dashboard": {
"backer_button": "Pomôžte nám zlepšiť sa",
"license": "Licencia",
"version": "Verzia",
"w_latest_users": {
"title": "Najnovšie registrácie"
},
"w_total_premium": {
"link": "Zobraziť všetky plány",
"title": "Celkový počet prémiových používateľov"
},
"w_total_space": {
"link": "Zobraziť všetkých používateľov",
"title": "Celkový využitý priestor"
},
"w_total_users": {
"link": "Zobraziť všetkých používateľov",
"title": "Celkový počet používateľov"
}
},
"admin_page_invoices": {
"empty": {
"description": "Tu sa zobrazia všetky faktúry zákazníkov.",
"title": "Zatiaľ nemáte žiadne faktúry"
},
"table": {
"number": "Číslo faktúry",
"payed": "Zaplatené",
"plan": "Plán",
"total": "Celkom",
"user": "Užívateľ"
}
},
"admin_page_plans": {
"create_plan_button": "Vytvoriť plán",
"delete_plan_button": "Odstrániť plán",
"disclaimer_delete_plan": "Môžete odstrániť plán, ale dávajte pozor!",
"disclaimer_edit_price": "Zmena ceny za váš plán nie je k dispozícii z dôvodu návrhu služby Stripe. Ak si želáte zmeniť cenový plán, vytvorte nový.",
"empty": {
"button": "Vytvoriť nový plán",
"description": "Ak chcete vytvoriť nový plán, kliknite na tlačidlo nižšie.",
"title": "Zatiaľ nemáte žiadny plán"
},
"form": {
"description": "Popis (nepovinné)",
"description_plac": "Popis plánu",
"name": "Názov",
"name_delete_plac": "Zadajte názov plánu",
"name_plac": "Názov plánu",
"price": "Cena",
"price_plac": "Cena plánu",
"status": "Stav",
"status_help": "Stav dostupnosti vášho plánu na webovej stránke.",
"storage": "Úložná kapacita v GB",
"storage_helper": "Musíte zadať iba číslo, napr. hodnota „5“ znamená, že používateľ bude mať 5 GB úložnej kapacity.",
"storage_plac": "Kapacita úložiska",
"title_delete": "Odstrániť plán",
"title_details": "Podrobnosti plánu",
"title_pricing": "Cena plánu"
},
"subscribers": {
"empty": "Zatiaľ nie je žiadny odberateľ."
},
"table": {
"name": "Názov plánu",
"price": "Cena",
"status": "Stav",
"storage_capacity": "Kapacita úložiska",
"subscribers": "Odberatelia"
},
"tabs": {
"delete": "Odstrániť plán",
"settings": "Nastavenia",
"subscribers": "Odberatelia"
}
},
"admin_page_user": {
"change_capacity": "Zmeniť kapacitu",
"create_user": {
"avatar": "Avatar",
"group_details": "Detail účtu",
"group_settings": "Nastavenia účtu",
"label_conf_pass": "Potvrďte heslo",
"label_email": "Napíšte E-mail",
"label_name": "Napíšte celé meno",
"submit": "Vytvoriť uživateľa"
},
"delete_user": "Vymazať uživateľa",
"invoices": {
"empty": "Užívateľ zatiaľ nemá žiadne faktúry."
},
"label_change_capacity": "Vpíšte kapacitu úložiska v GB",
"label_delete_user": "Napíšte uživateľovo meno {user}. Rozlišujte medzi malými a veľkými písmenami",
"label_person_info": "Osobné informácie",
"placeholder_delete_user": "Píšte sem",
"save_role": "Uložiť Rolu",
"select_role": "Vyberte uživateľskú rolu",
"send_password_link": "Odoslať email s resetom hesla",
"subscription": {
"empty": "Užívateľ zatiaľ nemá žiadne predplatné.",
"interval_mo": "Mesačne"
},
"table": {
"action": "Akcia",
"created_at": "Registrovaný",
"name": "Užívateľ",
"plan": "Plán",
"role": "Rola",
"storage_capacity": "Kapacita úložiska",
"storage_used": "Využitie úložiska"
},
"tabs": {
"delete": "Vymazať uživateľa",
"detail": "Detail",
"invoices": "Faktúry",
"password": "Heslo",
"storage": "Využitie úložiska",
"subscription": "Predplatné"
}
},
"admin_pages": {
"form": {
"content": "Obsah",
"content_plac": "Sem zadajte svoj obsah ...",
"slug": "Slug",
"title": "Nadpis",
"title_plac": "Názov titulky",
"visibility": "Viditeľnosť",
"visibility_help": "Stav viditeľnosti stránky na webe."
},
"table": {
"page": "Stránka",
"slug": "Slug",
"status": "Stav"
}
},
"admin_settings": {
"appearance": {
"description": "Popis aplikácie",
"description_plac": "Zadajte popis svojej aplikácie",
"favicon": "Favicon aplikácie (voliteľné)",
"logo": "Logo aplikácie (voliteľné)",
"logo_horizontal": "Horizontálne logo aplikácie (voliteľné)",
"section_appearance": "Vzhľad",
"section_general": "Všeobecné nastavenia",
"title": "Názov aplikácie",
"title_plac": "Zadajte názov aplikácie"
},
"billings": {
"address": "Fakturačná adresa",
"address_plac": "Zadajte svoju fakturačnú adresu",
"city": "Mesto fakturácie",
"city_plac": "Zadajte svoje fakturačné mesto",
"company_name": "Meno spoločnosti",
"company_name_plac": "Zadajte názov svojej spoločnosti",
"country": "Krajina fakturácie",
"country_plac": "Vyberte krajinu fakturácie",
"phone_number": "Telefónne číslo (voliteľné)",
"phone_number_plac": "Zadajte svoje telefónne číslo pre fakturáciu",
"postal_code": "Poštové smerovacie číslo",
"postal_code_plac": "Zadajte svoj fakturačný poštový kód",
"section_billing": "Fakturačné údaje",
"section_company": "informácie o spoločnosti",
"state": "Stav fakturácie",
"state_plac": "Zadajte stav fakturácie",
"vat": "identifikačné číslo DPH",
"vat_plac": "Zadajte svoje IČ DPH"
},
"email": {
"driver": "Mail Driver",
"driver_plac": "Zadajte mail driver",
"email_disclaimer": "Tento formulár nie je predvyplnený z bezpečnostných dôvodov. Vaše emailové nastavenia sú dostupné v <b>.env</b> súbore aplikácie. Pre aplikovanie nastavení, prosim potvdte tlačítkom na konci formulára.",
"encryption": "Šifrovanie pošty",
"encryption_plac": "Vyberte šifrovanie pošty",
"host": "Hostiteľ pošty",
"host_plac": "Zadajte svojho poštového hostiteľa",
"password": "Heslo k e-mailu",
"password_plac": "Zadajte svoje e-mailové heslo",
"port": "Port",
"port_plac": "Zadajte poštový port",
"save_button": "Uložte nastavenia e-mailu",
"section_email": "Nastavenie e-mailu",
"username": "Používateľské meno pre poštu",
"username_plac": "Zadajte svoje používateľské meno pre poštu"
},
"others": {
"upload_limit": "Limit nahrávania",
"upload_limit_plac": "Pridajte veľkosť limitu v MB",
"upload_limit_help": "Ak chcete nastaviť limit pre nahrávane jedneho súboru, pridajte veľkosť vášho limitu v MB.",
"mimetypes_blacklist": "Čierna listina mimetypov",
"mimetypes_blacklist_plac":"Pridajte mimetypy do Čiernej listiny",
"mimetypes_blacklist_help" :"Ak chcete zakázať nahrávanie niektorých typov súborov, jednoducho ich pridajte na čiernu listinu, príklad: x-php, mp3, jpeg <br/> Medzi mimetypmi použite čiarku. Nevkladajte bodku pred mimetyp." ,
"section_cache": "Aplikačná pamäť",
"cache_disclaimer": "Zmenili ste niečo v .env súbore alebo ste zmenili Stripe poverenia? Vymažte aplikačnú pamäť.",
"cache_clear": "Vymazať aplikačnú pamäť",
"allow_registration": "Povoliť registráciu používateľov",
"allow_registration_help": "Môžete zakázať verejnú registráciu nových používateľov. V administračnom paneli stále budete môcť <br/>vytvárať nových používateľov.",
"contact_email": "Kontaktný email",
"contact_email_plac": "Zadajte svoj kontaktný e-mail",
"default_storage": "Predvolený úložný priestor pre používateľské účty v GB",
"default_storage_plac": "Nastaviť predvolený úložný priestor v GB",
"google_analytics": "Kód Google Analytics (voliteľné)",
"google_analytics_plac": "Vložte svoj kód Google Analytics",
"section_others": "Ostatné nastavenia",
"section_user": "Používatelia a ukladací priestor",
"storage_limit": "Obmedzenie priestoru",
"storage_limit_help": "Ak je táto hodnota vypnutá, všetci používatelia budú mať nekonečnú kapacitu úložiska a vy nebudete môcť <br/>účtovať svojim používateľom poplatky za plán úložiska."
},
"payments": {
"allow_payments": "Povoliť platby za plány",
"button_submit": "Otestovať a uložiť Stripe",
"button_testing": "Testovanie Stripe pripojenia",
"credentials_disclaimer": "Vaše poverenia v službe Stripe sa nezobrazujú, pretože tieto hodnoty sú tajné a nesmie ich odhaliť cudzinec. Svoje poverenia v službe Stripe môžete zmeniť v súbore <b>.env</b> aplikácie.",
"section_payments": "Stripe platby",
"stripe_create_acc": "Ak nemáte účet Stripe, <a href=\"https://dashboard.stripe.com/register\" target=\"_blank\">zaregistrujte sa tu</a> a získajte svoj publikovateľný kľúč, tajný kľúč a vytvorte Stripe webhook.",
"stripe_create_webhook": "",
"stripe_currency": "Stripe Mena",
"stripe_currency_plac": "Vyberte Stripe menu",
"stripe_pub_key": "Verejný kľúč",
"stripe_pub_key_plac": "Vložte Váš verejný kľúč",
"stripe_sec_key": "Tajný kľúč",
"stripe_sec_key_plac": "Vložte Váš tajný kľúč",
"stripe_setup": "Stripe nastavenia",
"stripe_webhook_key_plac": "Vložte Váš Stripe webhook tajný kľúč",
"webhook_url": "Stripe webhook URL adresa"
},
"tabs": {
"appearance": "Vzhľad",
"billings": "Fakturácia",
"email": "E-mail",
"others": "Aplikácia",
"payments": "Platby"
}
},
"alerts": {
"error_confirm": "To je hrozné!",
"leave_to_sign_in": "Naozaj chcete odísť?",
"success_confirm": "Skvelé!"
},
"context_menu": {
"add_folder": "Nový priečinok",
"add_to_favourites": "Pridať do obľúbených",
"create_folder": "Vytvoriť priečinok",
"delete": "Vymazať",
"detail": "Detail",
"download": "Stiahnúť",
"empty_trash": "Vyprázdniť kôš",
"log_out": "Odhlásiť sa",
"move": "Presunúť",
"profile_settings": "Nastavenia profilu",
"remove_from_favourites": "Vymazať obľúbené",
"rename": "Premenovať",
"restore": "Obnoviť",
"share": "Zdieľať",
"share_cancel": "Zrušenie zdieľania",
"share_edit": "Upraviť zdieľanie",
"upload": "Nahrať",
"select": "Výber",
"no_options": "Nie sú k dispozícii žiadne možnosti",
"zip_folder": "Zazipovať priečinok"
},
"mobile_selecting": {
"select_all": "Vybrať všetko",
"deselect_all": "Odznačiť všetko",
"done": "Hotovo"
},
"preview_sorting": {
"grid_view": "Mriežka",
"list_view": "List",
"sort_date": "Zoradiť podľa dátumu",
"sort_alphabet": "Zoradiť podľa náyvu",
"preview_sorting_button": "Zobrazenie"
},
"cookie_disclaimer": {
"button": "politikou cookies",
"description": "Prehliadaním tejto stránky súhlasim s našou"
},
"datatable": {
"paginate_info": "Zobrazuje sa 1 - {visible} z {total} položiek"
},
"empty_page": {
"call_to_action": "Nahrať súbory",
"description": "Nahrajte súbory jednoducho cez tlačidlo nahrať",
"title": "Tu nie je nič"
},
"errors": {
"capacity_digit": "Kapacita úložiska musí byť nižšia ako 10 číslic."
},
"file_detail": {
"author": "Autor",
"author_participant": "Verejný účastník",
"created_at": "Vytvorené",
"shared": "Zdieľané",
"size": "Veľkosť",
"where": "Umiestnenie",
"selected_multiple": "Vybratých viac položiek",
"items": "{count} Položky | {count} Položiek"
},
"file_detail_meta": {
"dimension": "Dimenzie",
"resolution": "Rozlíšenie",
"color_space": "Farebný priestor",
"aperture_value": "Hodnota clony",
"meta_data": "Metadata",
"author": "Autor",
"time_data": "Obsah vytvorený",
"make": "Fotoaparát",
"model": "Model",
"camera_lens": "Objektív fotoaparátu",
"aperature": "Clona",
"iso": "ISO",
"focal": "Ohnisková vzdialenosť",
"exposure": "Doba expozície",
"longitude": "Zemepisná dĺžka",
"latitude": "Zemepisná šírka"
},
"folder": {
"empty": "Prázdne",
"item_counts": "{count} Položka | {count} Položky"
},
"global": {
"incomplete": "Incomplete",
"active": "Aktívny",
"admin": "Admin",
"cancel": "Zrušiť",
"canceled": "Zrušený",
"confirm_action": "Áno, som si istý",
"default": "Predvolený",
"free": "Zadarmo",
"get_it": "Získať",
"menu": "Ponuka",
"monthly_ac": "Mes.",
"or": "alebo",
"premium": "Premium",
"saas": "Služby",
"subscription": "Predplatné",
"total": "Celkom",
"upgrade_plan": "Navýšiť úložisko"
},
"input_image": {
"supported": "Podporované formáty sú .png, .jpg, .jpeg.",
"title": "Vložte obrázok"
},
"inputs": {
"placeholder_search_files": "Hľadajte súbory…"
},
"item_thumbnail": {
"deleted_at": "Vymazané {time}",
"original_location": "Pôvodné umiestnenie"
},
"locations": {
"home": "Domov",
"shared": "Zdieľané",
"trash": "Kôš",
"profile": "Profil",
"settings": "Nastavenia",
"logout": "Odhlásiť sa"
},
"menu": {
"admin": "Administrácia",
"files": "Súbory",
"invoices": "Faktúry",
"latest": "Posledne nahrané",
"logout": "Odhlásiť sa",
"password": "Heslo",
"payment_cards": "Platobné karty",
"profile": "Nastavenia profilu",
"settings": "Nastavenia",
"shared": "Zdieľané súbory",
"storage": "Úložisko",
"subscription": "Predplatné",
"trash": "Kôš"
},
"messages": {
"nothing_from_participants": "Zatiaľ nemáš žiadné súbory od ostatných uživateľov",
"nothing_to_preview": "Tu nie je nič pre zobrazenie.",
"nothing_was_found": "Nič sa nenašlo."
},
"notice": {
"stripe_activation": "Váš účet Stripe nie je nastavený. Pre spoplatňovanie používateľov prosím {0}.",
"stripe_activation_button": "nastavte účet Stripe"
},
"page_contact_us": {
"description": "Máte nejaké otázky? Spojte sa s nami.",
"error_message": "Niečo sa pokazilo, skúste to znova.",
"form": {
"email": "E-mail",
"email_plac": "Zadajte svoj e-mail",
"message": "Správa",
"message_plac": "Sem napíšte správu...",
"submit_button": "Odoslať správu"
},
"success_message": "Vaša správa bola úspešne odoslaná.",
"title": "Kontaktujte nás"
},
"page_create_password": {
"button_update": "Aktualizovať heslo",
"label_confirm_pass": "Potvrďte nové heslo",
"label_email": "Email:",
"label_new_pass": "Vaše nové heslo",
"subtitle": "Vytvorte si nové heslo tu:",
"title": "Iba jeden krok pre prihlásenie"
},
"page_forgotten_password": {
"button_get_link": "Získať link",
"pass_reseted_signin": "Prihlásiť sa",
"pass_reseted_subtitle": "Tvoje heslo bolo obnovené úspešne.",
"pass_reseted_title": "Skvelé!",
"pass_sennded_subtitle": "Práve sme Vám odoslali link na Váš email!",
"pass_sennded_title": "Ďakujeme!",
"password_remember_button": "Prihlásiť sa.",
"password_remember_text": "Pamätáte si heslo?",
"subtitle": "Získajte resetovací link pre Váš účet:",
"title": "Zabudnuté heslo?"
},
"page_index": {
"get_started_button": "Zaregistrovať sa teraz",
"menu": {
"contact_us": "Kontaktuj nás",
"log_in": "Prihlásiť sa",
"pricing": "Plány",
"sign_in": "Zaregistrovať sa"
},
"sign_feature_1": "Nevyžaduje sa žiadna kreditná karta",
"sign_feature_2": "{defaultSpace} Kapacita úložiska zadarmo",
"sign_up_button": "Zaregistrovať sa teraz"
},
"page_login": {
"button_next": "Ďalší krok",
"placeholder_email": "Napíšte svoj E-mail",
"registration_button": "Vytvoriť účet.",
"registration_text": "Ešte nemáte účet?",
"subtitle": "Prosím, vložte svoj email pre prihlásenie:",
"title": "Vitajte späť!"
},
"page_pricing_tables": {
"description": "Vyberte si plán, ktorý dokonale vyhovuje vašim potrebám. Všetky plány sa fakturujú mesačne automaticky prostredníctvom vašej kreditnej karty.",
"storage_capacity": "Kapacita úložiska",
"vat_excluded": "Ceny nezahrňajú DPH.",
"title": "Vyberte si svoj plán"
},
"page_registration": {
"agreement": "Kliknutím na tlačidlo Vytvoriť účet súhlasím s {0} a {1}.",
"button_create_account": "Vytvoriť účet",
"have_an_account": "Máš už účet?",
"label_confirm_pass": "Potvrďte heslo:",
"label_email": "Email:",
"label_name": "Celé meno:",
"label_pass": "Vytvorte heslo:",
"placeholder_confirm_pass": "Potvrďte nové heslo",
"placeholder_email": "Napíš svoj E-mail",
"placeholder_name": "Napíš svoje celé meno",
"placeholder_pass": "Vaše nové heslo",
"subtitle": "Prosím, vyplňte formulár pre vytvorenie nového účtu:",
"title": "Vytvorenie nového účtu"
},
"page_shared": {
"download_file": "Stiahnúť súbor",
"placeholder_pass": "Vložte heslo",
"submit": "Potvrdiť",
"subtitle": "Prosím vložte heslo pre získanie prístupu k obsahu:",
"title": "Zdieľaný odkaz je chránený"
},
"page_shared_404": {
"subtitle": "Obsah ktorý hľadáš bol pravdepodobne vymazaný.",
"title": "Obsah sa nenašiel :("
},
"page_sign_in": {
"button_log_in": "Prihlásiť sa",
"password_reset_button": "Resetovať heslo.",
"password_reset_text": "Zabudli ste heslo?",
"placeholder_password": "Napíšte svoje heslo",
"subtitle": "Potvrďte zadaním hesla:",
"title": "Voláte sa {name}?"
},
"page_upgrade_account": {
"change_payment": {
"change_payment": "zmeniť svoj predvolený spôsob platby",
"pay_by_new_card": "platiť novou kreditnou kartou",
"you_can": "Tiež môžete"
},
"desription": "Vyberte si plán, ktorý dokonale vyhovuje vašim potrebám. Všetky programy sa fakturujú mesačne automaticky prostredníctvom vašej kreditnej karty.",
"errors": {
"pay_by_another_card": "Zaplaťte inou platobnou kartou"
},
"section_billing": "Fakturačné údaje",
"section_card": "Platobná karta",
"section_summary": "Zhrnutie objednávky",
"summary": {
"total_with_vat": "Spolu s DPH",
"vat": "DPH",
"period": "Účtované mesačne",
"submit_button": "Zaplatiť kreditnou kartou",
"submit_disclaimer": "Odoslaním formulára súhlasíte s uložením spôsobu platby a fakturačných údajov vo svojom účte {app}."
},
"title": "Vyberte si metódu platby"
},
"popup_upload_limit": {
"title": "Je nám to ľúto",
"message": "Veľkosť nahravaného súboru prekročila limit pre nahraávane súbory ({uploadLimit})"
},
"popup_mimetypes_blacklist": {
"title": "Ospravedlňujeme sa",
"message": "Nieje povolené nahrávať tento typ súboru ({mimetype})."
},
"popup_zipping": {
"title": "Súbory sa zipujú...",
"message": "Čakajte prosím, kým súbory sa nezačnú sťahovať."
},
"popup_create_folder": {
"folder_default_name": "Nový priečinok",
"title": "Vytvoriť priečinok",
"label": "Napíš meno",
"placeholder": "Prosím, vložte názov nového priečinka"
},
"popup_delete_card": {
"message": "Táto udalosť je nezvratná a vaša platobná karta bude navždy odstránená",
"title": "Ste si istý?"
},
"popup_deleted_plan": {
"message": "Váš plán bol úspešne odstránený.",
"title": "Plán bol odstránený"
},
"popup_deleted_user": {
"message": "Uživateľ bol vymazaný so všetkými uživateľskými dátami.",
"title": "Uživateľ bol vymazaný"
},
"popup_deleted_user_aborted": {
"message": "Nemôžte vymazať účet kým uživateľ má aktívne predplatné.",
"title": "Uživateľ nebol vymazaný"
},
"popup_error": {
"message": "Niečo sa stalo a nemôžme pokračovať. Prosím kontaktuj nás.",
"title": "Ups, niekde nastala chyba!"
},
"popup_exceed_limit": {
"message": "Prosím, kontaktujte administrátora pre navyšenie limitu.",
"title": "Ups, presiahli ste limit úložiska"
},
"popup_move_item": {
"cancel": "Zrušiť",
"submit": "Presunúť položku",
"title": "Presuňte položku"
},
"popup_pass_changed": {
"message": "Od teraz máte nové heslo.",
"title": "Tvoje heslo bolo zmenené!"
},
"popup_passport_error": {
"message": "Pravdebodobne ste nespravne vygenerovali Passport Grant client alebo ste nenastavili udaje správne. Prosím následujte inštalačné inštrukcie.",
"title": "Nesprávny Passport Grand Client"
},
"popup_paylod_error": {
"message": "Prepáčte, súbor je príliš veľký a nemôže byť nahraný.",
"title": "Súbor je príliš veľký"
},
"popup_rename": {
"title": "Zmeňte názov {item}",
"label": "Zmeniť názov",
"placeholder": "Napíš názov...",
"tab_emoji_title": "Emodži ako ikona",
"tab_color_title": "Farba priečinka",
"select_emoji_label": "Vyberte emodži ikonu",
"color_pick_label": "Vyberte si farbu",
"set_emoji_input_placeholder": "Emodži zoznam ...",
"search_emoji_input_placeholder": "Vyhľadajte svoje emodži...",
"emoji_list_not_found": "Nenájdené"
},
"popup_set_card": {
"message": "Vaša karta bude nastavená ako predvolená a bude vám z nej vždy stiahnutá čiastka za nasledujúce obdobie fakturácie.",
"title": "Nastaviť ako predvolenú kartu?"
},
"popup_share_create": {
"title": "Zdieľaj {item}"
},
"popup_share_edit": {
"change_pass": "Zmeniť heslo",
"confirm": "Potvrdiť",
"save": "Uložiť zmeny",
"stop": "Zastaviť zdieľanie",
"title": "Upraviť nastavenia zdieľania",
"go_back": "Spať",
"send_to_recipients": "Odoslať príjemcom"
},
"popup_signup_error": {
"message": "Prosím skontrolujte databázove spojenie, či všetko funguje správne.",
"title": "Chyba serveru"
},
"popup_subscription_cancel": {
"button": "Som hotový",
"message": "Do konca fakturačného cyklu budete mať naďalej prístup k funkciám, za ktoré ste zaplatili.",
"title": "Predplatné bolo ukončené"
},
"popup_subscription_resumed": {
"button": "To je úžasné!",
"message": "Váš odber bol znova aktivovaný a budú vám účtované poplatky podľa pôvodného fakturačného cyklu.",
"title": "Predplatné bolo obnovené"
},
"profile": {
"change_pass": "Zmeniť heslo",
"profile_info": "Profil",
"store_pass": "Uložiť nové heslo"
},
"pronouns": {
"of": "z"
},
"roles": {
"admin": "Admin",
"user": "Užívateľ"
},
"routes": {
"create_new_password": "vytvorit-nove-heslo"
},
"routes_title": {
"appearance": "Vzhľad",
"billings": "Fakturácia",
"dashboard": "Prehľad",
"email": "E-mail",
"invoices": "Faktúry",
"others": "Ostatné",
"page_edit": "Upraviť stránku",
"pages": "Stránky",
"payment_methods": "Spôsob platby",
"payments": "Platby",
"plan": "Plán",
"plan_create": "Vytvoriť plán",
"plan_delete": "Odstránenie plánu",
"plan_settings": "Nastavenia plánu",
"pricing_plans": "Cenové plány",
"profile": "Môj profil",
"profile_settings": "Nastavenia profilu",
"settings": "Nastavenia",
"settings_mobile": "Nastavenia",
"settings_password": "Zmeniť heslo",
"settings_storage": "Úložisko",
"subscribers": "Odberatelia",
"subscription": "Predplatné",
"upgrade_billing": "Fakturácia",
"upgrade_plan": "Plán inovácie",
"user_create": "Vytvoriť uživateľa",
"users_delete": "Vymazať uživateľa",
"users_detail": "Detail",
"users_list": "Správca uživateľov",
"users_password": "Heslo",
"users_storage_usage": "Využitie úložiska",
"users_user": "Uživateľ"
},
"rows": {
"card": {
"expiration": "Dátum expirácie",
"number": "Číslo karty",
"status": "Stav"
},
"invoice": {
"number": "Číslo faktúry",
"payed": "Zaplatené",
"plan": "Plán",
"total": "Celkom"
}
},
"shared": {
"can_download": "Môže stiahnúť súbor",
"editor": "Môže upravovať a nahrávať súbory",
"empty_shared": "Zatiaľ ste nič nezdieľali",
"visitor": "Môže len vidieť a sťahovať súbory"
},
"shared_form": {
"button_more_options": "Viac nastavení",
"button_close_options": "Zavrieť viac možností",
"button_done": "Super, som hotový!",
"button_generate": "Vygenerovať link",
"label_password_protection": "Chrániť heslom",
"label_permission": "Oprávnenie",
"label_shared_url": "Zdieľací odkaz",
"label_share_vie_email": "Získajte odkaz",
"label_send_to_recipients": "Odoslať príjemcom",
"label_expiration": "Expirácia Linku",
"expiration_hour": "{value}h.",
"expiration_day": "{value}d.",
"placeholder_permission": "Zvoľte oprávnenia",
"email_successfully_send_message": "Vaša položka bola <b>úspešne odoslaná</b> na e-maily príjemcov.",
"share_by_link": "Zdieľať odkazom",
"share_by_email": "Zdieľať e-mailom",
"recipients_label": "Príjemcovia",
"email_placeholder": "Zadajte e-mailové adresy"
},
"sidebar": {
"favourites": "Obľúbené",
"favourites_empty": "Presuňte sem obľúbený priečinok",
"folders_empty": "Vytvorte svoj prvý priečinok",
"home": "Domov",
"latest": "Posledne nahraté",
"locations_title": "Menu",
"my_shared": "Moje zdieľané položky",
"navigator_title": "Navigátor",
"participant_uploads": "Nahrávania účastníkov",
"tools_title": "Nástroje"
},
"storage": {
"audios": "Audio",
"documents": "Dokumenty",
"images": "Obrázky",
"others": "Ostatné",
"sec_capacity": "Kapacita úložiska",
"sec_details": "Detail využitej kapacity",
"total_capacity": "Vaša kapacita disku je {capacity}",
"total_used": "Používané {used}",
"videos": "Videá"
},
"toaster": {
"account_upgraded": "Váš účet bol úspešne inovovaný.",
"card_deleted": "Vaša karta bola úspešne odstránená.",
"card_new_add": "Vaša karta bola úspešne pridaná",
"card_set": "Vaša karta bola úspešne nastavená ako predvolená.",
"changed_capacity": "Úspešne ste zmenili kapacitu úložiska uživateľa!",
"changed_user": "Úspešne ste zmenili rolu užívateľa",
"created_user": "Úspešne ste vytvorili uživateľa!",
"email_set": "Vaše nastavenia e-mailu boli úspešne aktualizované",
"plan_created": "Váš plán bol úspešne vytvorený!",
"sended_password": "Úspešne ste odoslali email uživateľovi pre reset hesla!",
"stripe_set": "Váš účet Stripe bol úspešne nastavený!"
},
"types": {
"file": "Súbor",
"folder": "Priečinok"
},
"upgrade_banner": {
"button": "Inovovať",
"description": "Takmer ste dosiahli kapacitu úložiska",
"title": "Dosiahli ste kapacitu úložiska. Prosím inovujte úložisko."
},
"incomplete_payment": {
"description": "Vaša posledná platba nie je dokončená. {0}",
"href": "Prosím potvrďte Vašu platbu."
},
"uploading": {
"cancel": "Zrušiť nahrávanie",
"processing_file": "Spracuvávam súbor...",
"progress_single_upload": "Nahrávam súbor {progress}%",
"progress": "Nahrávam súbory {progress}% - {current}/{total}"
},
"user_add_card": {
"default_description": "Vaša karta bude uložená a použitá pre platbu ako prvá.",
"default_title": "Nastaviť ako predvolenú platobnú kartu"
},
"user_box_delete": {
"description": "Môžete vymazať svojho uživateľa, avšak, dávajte pozor! Táto událosť je nezvratná a všetke uživateľské dáta vrátane uživateľových súborov budú vymazané!",
"title": "Vymazať uživateľa"
},
"user_box_password": {
"description": "Môžete zmeniť uživateľské heslo zaslaním resetovacieho emailu uživateľovi. Uživateľ bude presmerovaný na stránku, kde si môže zmeniť heslo na nové.",
"title": "Zmeňiť uživateľské heslo"
},
"user_box_role": {
"description": "Môžete zmeniť uživateľskú rolu pre aktuálneho uživateľa. Administrátorska rola môže editovať alebo vytvárať nových uživateľov, zmeniť kapacitu úložiska a mnoho dalších nastavení aplikácie.",
"title": "Zmeniť uživateľskú rolu"
},
"user_box_storage": {
"description": "Zmeňte kapacitu úložiska formulárom nižšie. Môžeš písať iba čiselné hodnoty, napríklad hodnota '5' znamená, že uživateľ bude mať 5GB kapacity úložiska.",
"title": "Zmeňiť kapacitu úložiska"
},
"user_invoices": {
"empty": "Zatiaľ nemáte žiadne faktúry.",
"title": "Faktúry"
},
"user_password": {
"title": "Zmeňte si heslo"
},
"user_payments": {
"add_card": "Pridať Platobnú Kartu",
"card_field_title": "Kreditná Karta",
"delete_card": "Odstrániť kartu",
"empty": "Zatiaľ nemáte žiadne platobné karty.",
"field_loading": "Načitávam kartové pole...",
"set_as_default": "Nastaviť ako predvolenú kartu",
"store_card": "Uložiť platobnú kartu",
"title": "Spôsob platby"
},
"user_settings": {
"address": "Adresa",
"address_plac": "Zadajte svoju fakturačnú adresu",
"city": "Mesto",
"city_plac": "Zadajte svoje fakturačné mesto",
"country": "Krajina",
"country_plac": "Vyberte svoju fakturačnú krajinu",
"name": "Meno",
"name_plac": "Zadajte svoje fakturačné meno",
"phone_number": "Telefónne číslo",
"phone_number_plac": "Zadajte svoje telefónne číslo pre fakturáciu",
"postal_code": "Poštové smerovacie číslo",
"postal_code_plac": "Zadajte svoj fakturačný poštový kód",
"state": "Štát",
"state_plac": "Zadajte Štát",
"title_account": "informácie o účte",
"title_billing": "Fakturačné údaje",
"timezone": "Časové pásmo",
"timezone_plac" : "Vyberte svoje časové pásmo"
},
"user_subscription": {
"billed": "Ůčtované",
"cancel_plan": "Zrušiť plán",
"canceled_at": "Zrušené",
"created_at": "Vytvorené",
"empty": "Zatiaľ nemáte žiadne predplatné.",
"ends_at": "Ukončenie",
"plan": "Plán",
"renews_at": "Obnovenie",
"resume_plan": "Obnoviť plán",
"status": "Stav",
"title": "Plán predplatného"
},
"validation_errors": {
"incorrect_password": "Prepáčte, vložili ste nesprávne heslo :(",
"wrong_image": "Zrejme ste vložili zlý obrázok, skúste to znova!"
}
}

View File

@@ -1,8 +1,8 @@
require("./bootstrap");
import Vue from "vue";
import i18n from "./i18n/index.js";
import VueRouter from "vue-router";
import router from "./router";
import i18n from "./i18n/index.js";
import App from "./App.vue";
import store from "./store";
import {events} from "./bus";

View File

@@ -119,7 +119,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/dashboard" */ './views/Admin/Dashboard'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.dashboard')
title: 'routes_title.dashboard'
},
},
{
@@ -129,7 +129,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/invoices" */ './views/Admin/Invoices'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.invoices')
title: 'routes_title.invoices'
},
},
{
@@ -139,7 +139,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/pages" */ './views/Admin/Pages'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.pages')
title: 'routes_title.pages'
},
},
{
@@ -149,7 +149,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/page-edit" */ './views/Admin/Pages/PageEdit'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.page_edit')
title: 'routes_title.page_edit'
},
},
{
@@ -159,7 +159,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/plans" */ './views/Admin/Plans'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.pricing_plans')
title: 'routes_title.pricing_plans'
},
},
{
@@ -169,7 +169,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/users" */ './views/Admin/Users'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.users_list')
title: 'routes_title.users_list'
},
},
{
@@ -179,7 +179,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/user-create" */ './views/Admin/Users/UserCreate'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.user_create')
title: 'routes_title.user_create'
},
},
{
@@ -189,7 +189,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/plan-create" */ './views/Admin/Plans/PlanCreate'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.plan_create')
title: 'routes_title.plan_create'
},
},
{
@@ -199,7 +199,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/user" */ './views/Admin/Users/User'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.users_user')
title: 'routes_title.users_user'
},
children: [
{
@@ -209,7 +209,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/user-detail" */ './views/Admin/Users/UserTabs/UserDetail'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.users_detail')
title: 'routes_title.users_detail'
},
},
{
@@ -219,7 +219,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/user-storage" */ './views/Admin/Users/UserTabs/UserStorage'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.users_storage_usage')
title: 'routes_title.users_storage_usage'
},
},
{
@@ -229,7 +229,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/user-subscription" */ './views/Admin/Users/UserTabs/UserSubscription'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.subscription')
title: 'routes_title.subscription'
},
},
{
@@ -239,7 +239,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/user-invoices" */ './views/Admin/Users/UserTabs/UserInvoices'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.invoices')
title: 'routes_title.invoices'
},
},
{
@@ -249,7 +249,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/user-password" */ './views/Admin/Users/UserTabs/UserPassword'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.users_password')
title: 'routes_title.users_password'
},
},
{
@@ -259,7 +259,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/user-delete" */ './views/Admin/Users/UserTabs/UserDelete'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.users_delete')
title: 'routes_title.users_delete'
},
},
]
@@ -271,7 +271,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/plan" */ './views/Admin/Plans/Plan'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.plan')
title: 'routes_title.plan'
},
children: [
{
@@ -281,7 +281,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/plan-subscribers" */ './views/Admin/Plans/PlanTabs/PlanSubscribers'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.subscribers')
title: 'routes_title.subscribers'
},
},
{
@@ -291,7 +291,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/plan-settings" */ './views/Admin/Plans/PlanTabs/PlanSettings'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.plan_settings'),
title: 'routes_title.plan_settings',
},
},
{
@@ -301,7 +301,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/plan-delete" */ './views/Admin/Plans/PlanTabs/PlanDelete'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.plan_delete'),
title: 'routes_title.plan_delete',
},
},
]
@@ -313,7 +313,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/app-settings" */ './views/Admin/AppSettings/AppSettings'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.settings')
title: 'routes_title.settings'
},
children: [
{
@@ -323,7 +323,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/app-appearance" */ './views/Admin/AppSettings/AppSettingsTabs/Appearance'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.appearance')
title: 'routes_title.appearance'
},
},
{
@@ -343,7 +343,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/app-billings" */ './views/Admin/AppSettings/AppSettingsTabs/Billings'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.billings')
title: 'routes_title.billings'
},
},
{
@@ -353,7 +353,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/app-email" */ './views/Admin/AppSettings/AppSettingsTabs/Email'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.email')
title: 'routes_title.email'
},
},
{
@@ -363,7 +363,7 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/app-payments" */ './views/Admin/AppSettings/AppSettingsTabs/Payments'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.payments')
title: 'routes_title.payments'
},
},
{
@@ -373,11 +373,20 @@ const routesAdmin = [
import(/* webpackChunkName: "chunks/app-others" */ './views/Admin/AppSettings/AppSettingsTabs/Others'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.others')
title: 'routes_title.others'
},
},
]
},
{
name: 'Language',
path: '/admin/language',
component: () =>
import(/* webpackChunkName: "chunks/app-language" */ './views/Admin/Languages/Language'),
meta: {
requiresAuth: true,
},
}
]
},
{
@@ -386,7 +395,7 @@ const routesAdmin = [
component: AdminMobileMenu,
meta: {
requiresAuth: true,
title: i18n.t('routes_title.settings_mobile')
title: 'routes_title.settings_mobile'
},
},
{
@@ -395,7 +404,7 @@ const routesAdmin = [
component: UserProfileMobileMenu,
meta: {
requiresAuth: true,
title: i18n.t('routes_title.profile_settings')
title: 'routes_title.profile_settings'
},
},
]
@@ -518,7 +527,7 @@ const routesUser = [
import(/* webpackChunkName: "chunks/profile" */ './views/User/Settings'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.profile')
title: 'routes_title.profile'
},
},
{
@@ -528,7 +537,7 @@ const routesUser = [
import(/* webpackChunkName: "chunks/settings-password" */ './views/User/Password'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.settings_password')
title: 'routes_title.settings_password'
},
},
{
@@ -538,7 +547,7 @@ const routesUser = [
import(/* webpackChunkName: "chunks/settings-storage" */ './views/User/Storage'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.settings_storage')
title: 'routes_title.settings_storage'
},
},
{
@@ -548,7 +557,7 @@ const routesUser = [
import(/* webpackChunkName: "chunks/settings-invoices" */ './views/User/Invoices'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.invoices')
title: 'routes_title.invoices'
},
},
{
@@ -558,7 +567,7 @@ const routesUser = [
import(/* webpackChunkName: "chunks/settings-subscription" */ './views/User/Subscription'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.subscription')
title: 'routes_title.subscription'
},
},
{
@@ -568,7 +577,7 @@ const routesUser = [
import(/* webpackChunkName: "chunks/settings-payment-methods" */ './views/User/PaymentMethods'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.payment_methods')
title: 'routes_title.payment_methods'
},
},
{
@@ -590,7 +599,7 @@ const routesUser = [
import(/* webpackChunkName: "chunks/upgrade-plan" */ './views/Upgrade/UpgradePlan'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.upgrade_plan')
title: 'routes_title.upgrade_plan'
},
},
{
@@ -600,7 +609,7 @@ const routesUser = [
import(/* webpackChunkName: "chunks/upgrade-billing" */ './views/Upgrade/UpgradeBilling'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.upgrade_billing')
title: 'routes_title.upgrade_billing'
},
},
]

View File

@@ -1,4 +1,6 @@
import i18n from '@/i18n/index'
import axios from "axios";
import Vue from "vue";
const defaultState = {
fileInfoPanelVisible: localStorage.getItem('file_info_visibility') === 'true' || false,
@@ -14,11 +16,11 @@ const defaultState = {
},
roles: [
{
label: i18n.t('roles.admin'),
label: 'roles.admin',
value: 'admin',
},
{
label: i18n.t('roles.user'),
label: 'roles.user',
value: 'user',
},
],
@@ -269,31 +271,31 @@ const defaultState = {
],
expirationList: [
{
label: i18n.t('shared_form.expiration_hour', {value: 1}),
label: ['shared_form.expiration_hour', {value: 1}],
value: 1,
},
{
label: i18n.t('shared_form.expiration_hour', {value: 2}),
label: ['shared_form.expiration_hour', {value: 2}],
value: 2,
},
{
label: i18n.t('shared_form.expiration_hour', {value: 6}),
label: ['shared_form.expiration_hour', {value: 6}],
value: 6,
},
{
label: i18n.t('shared_form.expiration_hour', {value: 12}),
label: ['shared_form.expiration_hour', {value: 12}],
value: 12,
},
{
label: i18n.t('shared_form.expiration_day', {value: 1}),
label: ['shared_form.expiration_day', {value: 1}],
value: 24,
},
{
label: i18n.t('shared_form.expiration_day', {value: 2}),
label: ['shared_form.expiration_day', {value: 2}],
value: 48,
},
{
label: i18n.t('shared_form.expiration_day', {value: 7}),
label: ['shared_form.expiration_day', {value: 7}],
value: 168,
},
],
@@ -989,6 +991,19 @@ const actions = {
context.commit('FILE_INFO_TOGGLE', visibility)
}
},
getLanguageTranslations: ({commit, state}, lang) => {
return new Promise((resolve, reject) => {
axios.get(`/translations/${lang}`)
.then(response => {
i18n.setLocaleMessage(lang, response.data)
i18n.locale = lang
resolve(response)
})
})
},
}
const mutations = {

View File

@@ -7,12 +7,12 @@ import Vue from "vue";
const defaultState = {
permissionOptions: [
{
label: i18n.t('shared.editor'),
label: 'shared.editor',
value: 'editor',
icon: 'user-edit',
},
{
label: i18n.t('shared.visitor'),
label: 'shared.visitor',
value: 'visitor',
icon: 'user',
},

View File

@@ -1,8 +1,17 @@
<template>
<section id="viewport">
<!--Mobile Navigation-->
<MobileNavigation />
<!--Confirm Popup-->
<Confirm />
<!-- Create language popup -->
<CreateLanguage/>
<!--Navigation Sidebar-->
<MenuBar />
<MenuBar/>
<ContentSidebar>
@@ -41,6 +50,14 @@
{{ $t('admin_menu.pages') }}
</div>
</router-link>
<router-link :to="{name: 'Language'}" class="menu-list-item link">
<div class="icon text-theme">
<globe-icon size="17" />
</div>
<div class="label text-theme">
{{ $t('admin_menu.languages') }}
</div>
</router-link>
</div>
</ContentGroup>
@@ -72,9 +89,12 @@
</template>
<script>
import { UsersIcon, SettingsIcon, FileTextIcon, CreditCardIcon, DatabaseIcon, BoxIcon, MonitorIcon } from 'vue-feather-icons'
import { UsersIcon, SettingsIcon, FileTextIcon, CreditCardIcon, DatabaseIcon, BoxIcon, MonitorIcon, GlobeIcon } from 'vue-feather-icons'
import MobileNavigation from '@/components/Others/MobileNavigation'
import ContentSidebar from '@/components/Sidebar/ContentSidebar'
import CreateLanguage from '@/components/Others/CreateLanguage'
import ContentGroup from '@/components/Sidebar/ContentGroup'
import Confirm from '@/components/Others/Popup/Confirm'
import MenuBar from '@/components/Sidebar/MenuBar'
import { mapGetters } from 'vuex'
@@ -84,6 +104,8 @@
...mapGetters(['config']),
},
components: {
MobileNavigation,
CreateLanguage,
ContentSidebar,
CreditCardIcon,
FileTextIcon,
@@ -92,6 +114,8 @@
SettingsIcon,
MonitorIcon,
UsersIcon,
GlobeIcon,
Confirm,
MenuBar,
BoxIcon,
},

View File

@@ -1,8 +1,8 @@
<template>
<div id="single-page">
<div id="page-content">
<MobileHeader :title="$router.currentRoute.meta.title"/>
<PageHeader :can-back="true" :title="$router.currentRoute.meta.title"/>
<MobileHeader :title="$t($router.currentRoute.meta.title)"/>
<PageHeader :can-back="true" :title="$t($router.currentRoute.meta.title)"/>
<div class="content-page">

View File

@@ -26,13 +26,12 @@
<FormLabel class="mt-70">{{ $t('admin_settings.appearance.section_appearance') }}</FormLabel>
<!--TODO: add language-->
<div class="block-wrapper">
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Title" rules="required" v-slot="{ errors }">
<div class="inline-wrapper">
<div class="switch-label">
<label class="input-label">Color Theme:</label>
<small class="input-help">Your color change will be visible after app refresh.</small>
<label class="input-label">{{ $t('color_theme') }}:</label>
<small class="input-help">{{ $t('color_theme_description') }}</small>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</div>
<input @input="$updateText('/admin/settings', 'app_color', app.color)" v-model="app.color" :placeholder="$t('admin_settings.appearance.title_plac')" type="color"
@@ -62,6 +61,22 @@
<ImageInput @input="$updateImage('/admin/settings', 'app_favicon', app.favicon)" :image="$getImage(app.favicon)" v-model="app.favicon" :error="errors[0]"/>
</ValidationProvider>
</div>
<div class="block-wrapper">
<label>{{ $t('og_image') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Favicon" v-slot="{ errors }">
<ImageInput @input="$updateImage('/admin/settings', 'app_og_image', app.og_image)" :image="$getImage(app.og_image)" v-model="app.og_image" :error="errors[0]"/>
<small class="input-help">{{ $t('og_image_description') }}</small>
</ValidationProvider>
</div>
<div class="block-wrapper">
<label>{{ $t('app_touch_icon') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Favicon" v-slot="{ errors }">
<ImageInput @input="$updateImage('/admin/settings', 'app_touch_icon', app.touch_icon)" :image="$getImage(app.touch_icon)" v-model="app.touch_icon" :error="errors[0]"/>
<small class="input-help">{{ $t('app_touch_icon_description') }}</small>
</ValidationProvider>
</div>
</div>
</PageTabGroup>
</PageTab>
@@ -106,7 +121,7 @@
mounted() {
axios.get('/api/admin/settings', {
params: {
column: 'app_title|app_description|app_logo|app_favicon|app_logo_horizontal|app_color'
column: 'app_title|app_description|app_logo|app_favicon|app_logo_horizontal|app_color|app_og_image|app_touch_icon'
}
})
.then(response => {
@@ -117,6 +132,8 @@
title: response.data.app_title,
color: response.data.app_color,
logo: response.data.app_logo,
og_image: response.data.app_og_image,
touch_icon: response.data.app_touch_icon,
}
})
.finally(() => {

View File

@@ -1,7 +1,7 @@
<template>
<div id="single-page">
<div id="page-content" v-if="! isLoading && data">
<MobileHeader :title="$router.currentRoute.meta.title"/>
<MobileHeader :title="$t($router.currentRoute.meta.title)"/>
<div class="dashboard-headline">
<div class="logo">
@@ -10,7 +10,7 @@
</a>
</div>
<div class="metadata">
<a href="https://vuefilemanager.com/changelog" target="_blank" class="meta">
<a href="https://gist.github.com/MakingCG/9c07f8af392081ae5d5290d920a79b5d" target="_blank" class="meta">
<span class="meta-title">{{ $t('admin_page_dashboard.version') }}:</span>
<ColorLabel color="purple">
{{ data.app_version }}

View File

@@ -3,8 +3,8 @@
<!--Page Content-->
<div id="page-content" v-show="! isLoading && config.stripe_public_key">
<MobileHeader :title="$router.currentRoute.meta.title"/>
<PageHeader :title="$router.currentRoute.meta.title"/>
<MobileHeader :title="$t($router.currentRoute.meta.title)"/>
<PageHeader :title="$t($router.currentRoute.meta.title)"/>
<div class="content-page" v-if="config.stripe_public_key">
<DatatableWrapper @data="invoices = $event" @init="isLoading = false" api="/api/admin/invoices" :paginator="false" :columns="columns" class="table">

View File

@@ -0,0 +1,365 @@
<template>
<div id="single-page">
<div id="page-content">
<MobileHeader :title="$t('routes_title.language')" />
<PageHeader :title="$t('routes_title.language')" />
<div v-if="languages" class="content-page">
<!--Sidebar-->
<div class="side-content">
<div class="sticky top-65">
<div class="languages-wrapper page-tab from-fixed-width">
<div class="language-label-wrapper">
<label class="language-label">{{ $t('languages') }}</label>
</div>
<!-- Languages -->
<div class="all-language-wrapper">
<div @click="getLanguage(language)" v-for="language in languages" :key="language.data.id" class="language group">
<label class="name" :class="{'active': selectedLanguage && selectedLanguage.data.attributes.locale === language.data.attributes.locale}">
<span class="active-text-theme group-hover-text-theme">{{ language.data.attributes.name }}</span>
</label>
<x-icon
v-if="language.data.attributes.locale !== 'en'"
@click.stop="deleteLanguage(language)"
class="icon"
size="17"
/>
</div>
</div>
</div>
<MobileActionButton @click.native="createLanguage" icon="plus" class="button-add-language">
{{ $t('add_language') }}
</MobileActionButton>
</div>
</div>
<!--Content-->
<div class="form block-form content">
<Spinner v-if="! selectedLanguage" />
<div v-if="selectedLanguage">
<FormLabel icon="settings">
{{ $t('language_settings') }}
</FormLabel>
<!--Language name-->
<div class="block-wrapper">
<label>{{ $t('language_name') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Description" rules="required" v-slot="{ errors }">
<input @input="$updateText(`/admin/languages/${selectedLanguage.data.id}`, 'name', selectedLanguage.data.attributes.name)" v-model="selectedLanguage.data.attributes.name"
:placeholder="$t('admin_settings.appearance.description_plac')" type="text" :class="{'is-error': errors[0]}" class="focus-border-theme" />
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
</div>
<!--Set default language-->
<div class="block-wrapper">
<div class="input-wrapper">
<div class="inline-wrapper">
<div class="switch-label">
<label class="input-label">
{{ $t('set_as_default_language') }}:
</label>
<small class="input-help">
If this language is set as default, app will appear in this language for all users.
</small>
</div>
<SwitchInput
@input="setDefaultLanguage"
class="switch"
:class="{'disable-switch': selectedLanguage.data.attributes.locale === this.defaultLanguageLocale }"
:state="selectedLanguage.data.attributes.locale === this.defaultLanguageLocale"
/>
</div>
</div>
</div>
<!--Translations-->
<FormLabel class="mt-70">
{{ $t('edit_translations') }}
</FormLabel>
<InfoBox class="info-box">
<p>Please preserve in your translations special string variables defined in format as <b class="text-theme">:variable</b> or <b class="text-theme">{variable}</b>.</p>
</InfoBox>
<!--Inline Search-->
<div class="block-wrapper sticky top-50 search-bar-wrapper">
<SearchInput v-model="query" @reset-query="query = ''" />
</div>
<!--Translation-->
<div class="block-wrapper" v-for="(translation, key) in translationList" :key="key">
<label> {{ referenceTranslations[key] }}:</label>
<ValidationProvider tag="div" class="input-wrapper" name="Language string" rules="required" v-slot="{ errors }">
<input type="text"
:class="{'is-error': errors[0]}"
class="focus-border-theme"
@input="$updateText(`/admin/languages/${selectedLanguage.data.id}/strings`, key, selectedLanguage.data.attributes.translations[key])"
v-model="selectedLanguage.data.attributes.translations[key]"
/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
</div>
</div>
</div>
</div>
<Spinner v-if="! languages" />
</div>
</div>
</template>
<script>
import {ValidationProvider, ValidationObserver} from 'vee-validate/dist/vee-validate.full'
import MobileActionButton from '@/components/FilesView/MobileActionButton'
import SwitchInput from '@/components/Others/Forms/SwitchInput'
import SearchInput from '@/components/Others/Forms/SearchInput'
import FormLabel from '@/components/Others/Forms/FormLabel'
import MobileHeader from '@/components/Mobile/MobileHeader'
import ButtonBase from '@/components/FilesView/ButtonBase'
import InfoBox from '@/components/Others/Forms/InfoBox'
import PageHeader from '@/components/Others/PageHeader'
import Spinner from '@/components/FilesView/Spinner'
import {PlusIcon, XIcon} from 'vue-feather-icons'
import {debounce, omitBy} from 'lodash'
import {events} from '@/bus'
export default {
name: 'Language',
components: {
ValidationProvider,
ValidationObserver,
MobileActionButton,
MobileHeader,
SearchInput,
SwitchInput,
ButtonBase,
PageHeader,
FormLabel,
PlusIcon,
InfoBox,
Spinner,
XIcon
},
data() {
return {
searchedTranslationResults: undefined,
referenceTranslations: undefined,
defaultLanguageLocale: undefined,
selectedLanguage: undefined,
languages: undefined,
query: '',
}
},
watch: {
query: debounce(function (val) {
this.searchedTranslationResults = omitBy(this.selectedLanguage.data.attributes.translations, string => {
return !string.toLowerCase().includes(val.toLowerCase())
})
}, 300),
},
computed: {
translationList() {
return this.searchedTranslationResults && this.query !== ''
? this.searchedTranslationResults
: this.selectedLanguage.data.attributes.translations
}
},
methods: {
setDefaultLanguage() {
this.$updateText('/admin/settings', 'language', this.selectedLanguage.data.attributes.locale)
this.defaultLanguageLocale = this.selectedLanguage.data.attributes.locale
},
getLanguages() {
axios
.get('/api/admin/languages')
.then(response => {
this.languages = response.data.data
this.referenceTranslations = response.data.meta.reference_translations
this.selectedLanguage = response.data.meta.current_language
this.defaultLanguageLocale = response.data.meta.current_language.data.attributes.locale
})
.catch(() => {
this.$isSomethingWrong()
})
},
getLanguage(language) {
this.selectedLanguage = undefined
axios
.get(`/api/admin/languages/${language.data.id}`)
.then(response => {
this.selectedLanguage = response.data
})
.catch(() => {
this.$isSomethingWrong()
})
},
deleteLanguage(language) {
events.$emit('confirm:open', {
title: `Delete "${language.data.attributes.name}" language?`,
message: 'Your language will be permanently deleted.',
buttonColor: 'danger-solid',
action: {
id: language.data.id,
operation: 'delete-language'
}
})
},
createLanguage() {
events.$emit('popup:open', {name: 'create-language'})
},
},
mounted() {
this.getLanguages()
events.$on('reload:languages', () => this.getLanguages())
events.$on('action:confirmed', data => {
if (data.operation === 'delete-language')
axios.delete(`/api/admin/languages/${data.id}`)
.then(() => this.getLanguages())
.catch(() => this.$isSomethingWrong())
})
},
destroyed() {
events.$off('action:confirmed')
},
}
</script>
<style lang="scss" scoped>
@import '@assets/vuefilemanager/_variables';
@import '@assets/vuefilemanager/_mixins';
@import '@assets/vuefilemanager/_forms';
@import '@assets/vuefilemanager/_vuewind';
.search-bar-wrapper {
background: white;
padding: 10px 10px 0 10px;
margin: 0 -10px;
}
.content-page {
display: flex;
max-width: 1000px;
margin: 20px auto 0;
.content {
width: 100%;
position: relative;
}
}
.disable-switch {
cursor: not-allowed;
/deep/ .text-right {
pointer-events: none;
}
}
.info-box {
margin-bottom: 12px;
}
.side-content {
flex: 0 0 225px;
.button-add-language {
margin-top: 30px;
}
.languages-wrapper {
.language-label-wrapper {
margin-bottom: 5px;
.language-label {
color: $light_text;
font-weight: 700;
@include font-size(12);
margin-top: 20px;
}
}
.all-language-wrapper {
.language {
display: flex;
align-items: center;
padding: 12px 25px 12px 0px;
cursor: pointer;
&:hover {
.icon {
display: block;
}
}
.name {
color: $text;
font-weight: 700;
@include font-size(13);
cursor: pointer;
}
.icon {
display: none;
margin-left: auto;
cursor: pointer;
}
}
}
}
}
@media only screen and (max-width: 1024px) {
.wrapper {
flex-direction: column;
.side-content {
margin-bottom: 70px;
}
.languages-wrapper {
margin-top: 0px;
}
}
}
@media only screen and (max-width: 690px) {
.side-content {
margin-bottom: 35px !important;
flex: none;
}
}
@media (prefers-color-scheme: dark) {
.search-bar-wrapper {
background: $dark_mode_background;
}
.language {
.name {
color: $dark_mode_text_primary !important;
}
}
.language-label {
color: $dark_mode_text_secondary !important;
}
}
</style>

View File

@@ -1,8 +1,8 @@
<template>
<div id="single-page">
<div id="page-content" v-show="! isLoading">
<MobileHeader :title="$router.currentRoute.meta.title"/>
<PageHeader :title="$router.currentRoute.meta.title"/>
<MobileHeader :title="$t($router.currentRoute.meta.title)"/>
<PageHeader :title="$t($router.currentRoute.meta.title)"/>
<div class="content-page">
<DatatableWrapper @init="isLoading = false" api="/api/admin/pages" :paginator="false" :columns="columns" class="table table-users">

View File

@@ -1,8 +1,8 @@
<template>
<div id="single-page">
<div id="page-content" v-if="! isLoading && page">
<MobileHeader :title="$router.currentRoute.meta.title"/>
<PageHeader :title="$router.currentRoute.meta.title"/>
<MobileHeader :title="$t($router.currentRoute.meta.title)"/>
<PageHeader :title="$t($router.currentRoute.meta.title)"/>
<div class="content-page">
<ValidationObserver ref="personalInformation" v-slot="{ invalid }" tag="form" class="form block-form form-fixed-width">

View File

@@ -3,8 +3,8 @@
<!--Stripe plans-->
<div id="page-content" v-show="stripeConfiguredWithPlans">
<MobileHeader :title="$router.currentRoute.meta.title"/>
<PageHeader :title="$router.currentRoute.meta.title"/>
<MobileHeader :title="$t($router.currentRoute.meta.title)"/>
<PageHeader :title="$t($router.currentRoute.meta.title)"/>
<div class="content-page" v-if="config.stripe_public_key">
<div class="table-tools">

View File

@@ -1,8 +1,8 @@
<template>
<div id="single-page">
<div id="page-content" v-if="! isLoading">
<MobileHeader :title="$router.currentRoute.meta.title"/>
<PageHeader :can-back="true" :title="$router.currentRoute.meta.title"/>
<MobileHeader :title="$t($router.currentRoute.meta.title)"/>
<PageHeader :can-back="true" :title="$t($router.currentRoute.meta.title)"/>
<div class="content-page">

View File

@@ -1,8 +1,8 @@
<template>
<div id="single-page">
<div id="page-content" class="small-width">
<MobileHeader :title="$router.currentRoute.meta.title"/>
<PageHeader :can-back="true" :title="$router.currentRoute.meta.title"/>
<MobileHeader :title="$t($router.currentRoute.meta.title)"/>
<PageHeader :can-back="true" :title="$t($router.currentRoute.meta.title)"/>
<div class="content-page">
<ValidationObserver @submit.prevent="createPlan" ref="createPlan" v-slot="{ invalid }" tag="form" class="form block-form form-fixed-width">

View File

@@ -1,8 +1,8 @@
<template>
<div id="single-page">
<div id="page-content">
<MobileHeader :title="$router.currentRoute.meta.title"/>
<PageHeader :title="$router.currentRoute.meta.title"/>
<MobileHeader :title="$t($router.currentRoute.meta.title)"/>
<PageHeader :title="$t($router.currentRoute.meta.title)"/>
<div class="content-page">

View File

@@ -1,8 +1,8 @@
<template>
<div id="single-page">
<div id="page-content" v-if="! isLoading">
<MobileHeader :title="$router.currentRoute.meta.title"/>
<PageHeader :can-back="true" :title="$router.currentRoute.meta.title"/>
<MobileHeader :title="$t($router.currentRoute.meta.title)"/>
<PageHeader :can-back="true" :title="$t($router.currentRoute.meta.title)"/>
<div class="content-page">
<!--User thumbnail-->

View File

@@ -1,8 +1,8 @@
<template>
<div id="single-page">
<div id="page-content" class="small-width">
<MobileHeader :title="$router.currentRoute.meta.title"/>
<PageHeader :can-back="true" :title="$router.currentRoute.meta.title"/>
<MobileHeader :title="$t($router.currentRoute.meta.title)"/>
<PageHeader :can-back="true" :title="$t($router.currentRoute.meta.title)"/>
<div class="content-page">
<ValidationObserver @submit.prevent="createUser" ref="createUser" v-slot="{ invalid }" tag="form" class="form block-form">
@@ -20,7 +20,7 @@
<!--Email-->
<div class="block-wrapper">
<label>{{ $t('page_registration.label_email') }}</label>
<label>{{ $t('page_registration.label_email') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="email" rules="required" v-slot="{ errors }">
<input v-model="user.email" :placeholder="$t('admin_page_user.create_user.label_email')" type="email" class="focus-border-theme" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
@@ -29,7 +29,7 @@
<!--Name-->
<div class="block-wrapper">
<label>{{ $t('page_registration.label_name') }}</label>
<label>{{ $t('page_registration.label_name') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="user name" rules="required" v-slot="{ errors }">
<input v-model="user.name" :placeholder="$t('admin_page_user.create_user.label_name')" type="text" class="focus-border-theme" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
@@ -39,7 +39,7 @@
<!--Password-->
<div class="wrapper-inline">
<div class="block-wrapper">
<label>{{ $t('page_registration.label_pass') }}</label>
<label>{{ $t('page_registration.label_pass') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="password" rules="required" v-slot="{ errors }">
<input v-model="user.password" :placeholder="$t('page_registration.placeholder_pass')" type="password" class="focus-border-theme" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
@@ -47,7 +47,7 @@
</div>
<div class="block-wrapper">
<label>{{ $t('page_registration.label_confirm_pass') }}</label>
<label>{{ $t('page_registration.label_confirm_pass') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="password confirm" rules="required" v-slot="{ errors }">
<input v-model="user.password_confirmation" :placeholder="$t('admin_page_user.create_user.label_conf_pass')" type="password" class="focus-border-theme" :class="{'is-error': errors[0]}"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
@@ -63,7 +63,7 @@
<div class="block-wrapper">
<label>{{ $t('admin_page_user.select_role') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="permission" rules="required" v-slot="{ errors }">
<SelectInput v-model="user.role" :options="roles" :placeholder="$t('admin_page_user.select_role')" :isError="errors[0]"/>
<SelectInput v-model="user.role" :options="$translateSelectOptions(roles)" :placeholder="$t('admin_page_user.select_role')" :isError="errors[0]"/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
</div>

View File

@@ -15,7 +15,7 @@
<ValidationProvider tag="div" class="block-wrapper" v-slot="{ errors }" mode="passive" name="Role" rules="required">
<label>{{ $t('admin_page_user.select_role') }}:</label>
<div class="single-line-form">
<SelectInput v-model="userRole" :options="roles"
<SelectInput v-model="userRole" :options="$translateSelectOptions(roles)"
:placeholder="$t('admin_page_user.select_role')" :isError="errors[0]" />
<ButtonBase :loading="isSendingRequest" :disabled="isSendingRequest" type="submit"
button-style="theme" class="submit-button">
@@ -34,7 +34,7 @@
<!--Email-->
<div class="block-wrapper">
<label>{{ $t('page_registration.label_email') }}</label>
<label>{{ $t('page_registration.label_email') }}:</label>
<div class="input-wrapper">
<input :value="user.data.attributes.email"
:placeholder="$t('page_registration.placeholder_email')"
@@ -46,7 +46,7 @@
<!--Name-->
<div class="block-wrapper">
<label>{{ $t('page_registration.label_name') }}</label>
<label>{{ $t('page_registration.label_name') }}:</label>
<div class="input-wrapper">
<input :value="user.data.relationships.settings.data.attributes.name"
:placeholder="$t('page_registration.placeholder_name')"

View File

@@ -7,13 +7,13 @@
<b v-if="! config.app_logo" class="auth-logo-text">{{ config.app_name }}</b>
<h1>{{ $t('page_create_password.title') }}</h1>
<h2>{{ $t('page_create_password.subtitle') }}</h2>
<h2>{{ $t('page_create_password.subtitle') }}:</h2>
<ValidationObserver @submit.prevent="createNewPassword" ref="create_new_password" v-slot="{ invalid }"
tag="form" class="form block-form create-new-password">
<div class="block-wrapper">
<label>{{ $t('page_create_password.label_email') }}</label>
<label>{{ $t('page_create_password.label_email') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="E-Mail" rules="required"
v-slot="{ errors }">
<input v-model="recoverPassword.email" :placeholder="$t('page_login.placeholder_email')" type="email"

View File

@@ -7,7 +7,7 @@
<b v-if="! config.app_logo" class="auth-logo-text">{{ config.app_name }}</b>
<h1>{{ $t('page_forgotten_password.title') }}</h1>
<h2>{{ $t('page_forgotten_password.subtitle') }}</h2>
<h2>{{ $t('page_forgotten_password.subtitle') }}:</h2>
<ValidationObserver @submit.prevent="forgottenPassword" ref="forgotten_password" v-slot="{ invalid }"
tag="form" class="form inline-form">

View File

@@ -7,7 +7,7 @@
<b v-if="! config.app_logo" class="auth-logo-text">{{ config.app_name }}</b>
<h1>{{ $t('page_login.title') }}</h1>
<h2>{{ $t('page_login.subtitle') }}</h2>
<h2>{{ $t('page_login.subtitle') }}:</h2>
<ValidationObserver @submit.prevent="logIn" ref="log_in" v-slot="{ invalid }" tag="form"
class="form inline-form">
@@ -37,7 +37,7 @@
<div class="user" v-if="checkedAccount">
<img class="user-avatar" :src="checkedAccount.avatar" :alt="checkedAccount.name">
<h1>{{ $t('page_sign_in.title', {name: checkedAccount.name}) }}</h1>
<h2>{{ $t('page_sign_in.subtitle') }}</h2>
<h2>{{ $t('page_sign_in.subtitle') }}:</h2>
</div>
<ValidationObserver @submit.prevent="singIn" ref="sign_in" v-slot="{ invalid }" tag="form"

View File

@@ -7,13 +7,13 @@
<b v-if="! config.app_logo" class="auth-logo-text">{{ config.app_name }}</b>
<h1>{{ $t('page_registration.title') }}</h1>
<h2>{{ $t('page_registration.subtitle') }}</h2>
<h2>{{ $t('page_registration.subtitle') }}:</h2>
<ValidationObserver @submit.prevent="signUp" ref="sign_up" v-slot="{ invalid }" tag="form"
class="form block-form">
<div class="block-wrapper">
<label>{{ $t('page_registration.label_email') }}</label>
<label>{{ $t('page_registration.label_email') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="E-Mail" rules="required"
v-slot="{ errors }">
<input v-model="register.email" :placeholder="$t('page_registration.placeholder_email')" type="email"
@@ -24,7 +24,7 @@
</div>
<div class="block-wrapper">
<label>{{ $t('page_registration.label_name') }}</label>
<label>{{ $t('page_registration.label_name') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Full Name" rules="required"
v-slot="{ errors }">
<input v-model="register.name" :placeholder="$t('page_registration.placeholder_name')" type="text"
@@ -35,7 +35,7 @@
</div>
<div class="block-wrapper">
<label>{{ $t('page_registration.label_pass') }}</label>
<label>{{ $t('page_registration.label_pass') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Your New Password"
rules="required" v-slot="{ errors }">
<input v-model="register.password" :placeholder="$t('page_registration.placeholder_pass')" type="password"
@@ -46,7 +46,7 @@
</div>
<div class="block-wrapper">
<label>{{ $t('page_registration.label_confirm_pass') }}</label>
<label>{{ $t('page_registration.label_confirm_pass') }}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Confirm Your Password"
rules="required" v-slot="{ errors }">
<input v-model="register.password_confirmation" :placeholder="$t('page_registration.placeholder_confirm_pass')"

View File

@@ -3,7 +3,7 @@
<div id="page-content">
<!--Header-->
<MobileHeader :title="$router.currentRoute.meta.title"/>
<MobileHeader :title="$t($router.currentRoute.meta.title)"/>
<!--Content-->
<div class="content-page">
@@ -63,6 +63,13 @@
routeName: 'Pages',
isVisible: true,
},
{
icon: 'language',
title: this.$t('languages'),
routeName: 'Language',
isVisible: true,
}
],
SassNavigation: [
{

View File

@@ -3,7 +3,7 @@
<div id="page-content">
<!--Header-->
<MobileHeader :title="$router.currentRoute.meta.title"/>
<MobileHeader :title="$t($router.currentRoute.meta.title)"/>
<!--Content-->
<div class="content-page">

View File

@@ -45,7 +45,7 @@
<keep-alive :include="['Admin', 'Users']">
<router-view :class="{'is-scaled-down': isScaledDown}" />
</keep-alive>
</div>
</div>
</template>
<script>

View File

@@ -68,7 +68,7 @@
<div id="single-page" v-if="user">
<div id="page-content" class="medium-width" v-if="! isLoading">
<MobileHeader :title="$router.currentRoute.meta.title"/>
<MobileHeader :title="$t($router.currentRoute.meta.title)"/>
<div class="content-page">

View File

@@ -50,6 +50,22 @@
</ValidationProvider>
</div>
<div class="block-wrapper">
<label>OG Image (optional):</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Favicon" v-slot="{ errors }">
<ImageInput v-model="app.og_image" :error="errors[0]"/>
<small class="input-help">Image that appear when someone shares the content to Facebook or any other social medium. Preferred size is 1200x627</small>
</ValidationProvider>
</div>
<div class="block-wrapper">
<label>App Touch Icon (optional):</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="App Favicon" v-slot="{ errors }">
<ImageInput v-model="app.touch_icon" :error="errors[0]"/>
<small class="input-help">If user store bookmark on his phone screen, this icon appear in app thumbnail. Preferred size is 156x156</small>
</ValidationProvider>
</div>
<FormLabel class="mt-70">Others Information</FormLabel>
<div class="block-wrapper">
@@ -158,6 +174,8 @@
logo: undefined,
logo_horizontal: undefined,
favicon: undefined,
og_image: undefined,
touch_icon: undefined,
contactMail: '',
googleAnalytics: '',
defaultStorage: '5',
@@ -199,6 +217,12 @@
if (this.app.logo_horizontal)
formData.append('logo_horizontal', this.app.logo_horizontal)
if (this.app.og_image)
formData.append('og_image', this.app.og_image)
if (this.app.touch_icon)
formData.append('touch_icon', this.app.touch_icon)
if (this.app.favicon)
formData.append('favicon', this.app.favicon)

Some files were not shown because too many files have changed in this diff Show More