Merge branch 'language-translation' into version-1.8.3

This commit is contained in:
Milos Holba
2021-03-02 16:38:48 +01:00
18 changed files with 1377 additions and 46 deletions

View File

@@ -0,0 +1,117 @@
<?php
namespace App\Http\Controllers\Language;
use App\Http\Requests\Languages\UpdateLanguageRequest;
use App\Http\Requests\Languages\UpdateStringRequest;
use App\Http\Requests\Languages\CreateLanguageRequest;
use App\Language;
use App\LanguageString;
use App\Http\Tools\Demo;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class LanguageController extends Controller
{
/**
* Get all languages
*
* @return string
*/
public function get_languages ()
{
return Language::all();
}
/**
* Get all language strings
*
* @param $language
* @return string
*/
public function get_language_strings($locale)
{
return Language::where('locale', $locale)->with('languageStrings')->first();
}
/**
* Create new language
*
* @param CreateLanguageRequest $request
* @return string
*/
public function create_language(CreateLanguageRequest $request)
{
// Check if is demo
if (env('APP_DEMO')) {
return Demo::response_204();
}
// Create new language
$language = Language::create([
'name' => $request->name,
'locale' => $request->locale
]);
// Return created language
return $language;
}
/**
* Update language
*
* @param UpdateLanguageRequest $request
* @param $id
* @return $language
*/
public function update_language(UpdateLanguageRequest $request, $id)
{
// Check if is demo
if (env('APP_DEMO')) {
return Demo::response_204();
}
// Get language
$language = Language::findOrFail($id);
// Update language
$language->update(make_single_input($request));
// Return updated language
return $language;
}
/**
* Update strings for language
*
* @param UpdateStringRequest $request
* @return ResponseFactory|\Illuminate\Http\Response
*/
public function update_string(UpdateStringRequest $request)
{
// Check if is demo
if (env('APP_DEMO')) {
return Demo::response_204();
}
// Get language
$lang = Language::where('locale', $request->input('locale'))->first();
foreach($request->input('language') as $language)
{
// If key with lang already exist update, if no crate
LanguageString::updateOrCreate([
'language_id' => $lang->id,
'key' => $language['key'],
'lang' => $lang->locale,
],[
'value' => $language['value']
]);
}
return response('Done', 204);
}
}

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,33 @@
<?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 [
'locale' => 'required|string',
'language' => 'required|array',
'language.*.key' => 'required|string',
'language.*.value' => 'required|string'
];
}
}

31
app/Language.php Normal file
View File

@@ -0,0 +1,31 @@
<?php
namespace App;
use App\LanguageString;
use Illuminate\Support\Str;
use Illuminate\Database\Eloquent\Model;
class Language extends Model
{
protected $guarded = ['id'];
protected $keyType = 'string';
public $incrementing = false ;
public $timestamps = false;
protected static function booted()
{
static::creating(function($language) {
$language->id = Str::uuid();
});
}
public function languageStrings()
{
return $this->hasMany('App\LanguageString', 'language_id', 'id');
}
}

16
app/LanguageString.php Normal file
View File

@@ -0,0 +1,16 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class LanguageString extends Model
{
public $timestamps = false;
// public $incrementing = false;
protected $fillable = ['value', 'language_id' ,'key', 'lang'];
}

611
config/language_strings.php Normal file
View File

@@ -0,0 +1,611 @@
<?php
return [
"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",
"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.dashboard" => "Dashboard",
"admin_menu.invoices" => "Invoices",
"admin_menu.pages" => "Pages",
"admin_menu.plans" => "Plans",
"admin_menu.settings" => "Settings",
"admin_menu.users" => "Users",
"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_premium.link" => "Show All Plans",
"admin_page_dashboard.w_total_premium.title" => "Total Premium Users",
"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_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.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.subscription.empty" => "User don't have any subscription yet.",
"admin_page_user.subscription.interval_mo" => "Monthly",
"admin_page_user.table.action" => "Action",
"admin_page_user.table.created_at" => "Registered",
"admin_page_user.table.name" => "User",
"admin_page_user.table.plan" => "Subscription Plan",
"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.invoices" => "Invoices",
"admin_page_user.tabs.password" => "Password",
"admin_page_user.tabs.storage" => "Storage Usage",
"admin_page_user.tabs.subscription" => "Subscription",
"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.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.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>.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.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>.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>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.",
"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.appearance" => "Appearance",
"admin_settings.tabs.billings" => "Billings",
"admin_settings.tabs.email" => "Email",
"admin_settings.tabs.others" => "Application",
"admin_settings.tabs.payments" => "Payments",
"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.monthly_ac" => "Mo.",
"global.or" => "or",
"global.premium" => "Premium",
"global.saas" => "Services",
"global.subscription" => "Subscription",
"global.total" => "Total",
"global.upgrade_plan" => "Upgrade Plan",
"incomplete_payment.description" => "Your latest payment is incomplete. {0}",
"incomplete_payment.href" => "Please confirm your payment.",
"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.invoices" => "Invoices",
"menu.latest" => "Recent Uploads",
"menu.logout" => "Log Out",
"menu.password" => "Password",
"menu.payment_cards" => "Payment Cards",
"menu.profile" => "Profile Settings",
"menu.settings" => "Settings",
"menu.shared" => "Shared Files",
"menu.storage" => "Storage",
"menu.subscription" => "Subscription",
"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",
"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_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_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_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}?",
"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_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_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_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_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.",
"popup_passport_error.title" => "Invalid Passport Grand Client",
"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.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_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_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_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",
"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.billings" => "Billings",
"routes_title.dashboard" => "Dashboard",
"routes_title.email" => "Email",
"routes_title.invoices" => "Invoices",
"routes_title.others" => "Others",
"routes_title.page_edit" => "Edit Page",
"routes_title.pages" => "Pages",
"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.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.subscribers" => "Subscribers",
"routes_title.subscription" => "Subscription",
"routes_title.upgrade_billing" => "Billing",
"routes_title.upgrade_plan" => "Upgrade Plan",
"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",
"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",
"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>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.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.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.plan_created" => "Your plan was successfully created!",
"toaster.sended_password" => "You successfully send user email for reset password!",
"toaster.stripe_set" => "Your Stripe account was successfully set!",
"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_invoices.empty" => "You don't have any invoices yet.",
"user_invoices.title" => "Invoices",
"user_password.title" => "Change Your Password",
"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_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",
"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",
"user_subscription.title" => "Subscription Plan",
"validation_errors.incorrect_password" => "Sorry, you passed incorrect password =>(",
"validation_errors.wrong_image" => "You may have uploaded the wrong file, try again!"
];

View File

@@ -0,0 +1,32 @@
<?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();
$table->string('name');
$table->string('locale')->unique();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('languages');
}
}

View File

@@ -0,0 +1,34 @@
<?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_strings', function (Blueprint $table) {
$table->bigIncrements('id');
$table->uuid('language_id');
$table->string('key');
$table->longText('value');
$table->string('lang');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('language_strings');
}
}

View File

@@ -1,94 +1,79 @@
{
"/js/main.js": "/js/main.js",
"/css/app.css": "/css/app.css",
"/chunks/admin.js": "/chunks/admin.js?id=03478fff46fc7903ecc4",
"/chunks/admin-account.js": "/chunks/admin-account.js?id=d687d4a3e71881044040",
"/chunks/admin.js": "/chunks/admin.js?id=718905bd116973728f4b",
"/chunks/admin-account.js": "/chunks/admin-account.js?id=f52b5b559d164ac80108",
"/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~2d9ff916.js": "/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~2d9ff916.js?id=07b0ad73181498d46930",
"/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~01aef58e.js": "/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~01aef58e.js?id=6cb8c3f7a9aed769ec61",
"/chunks/admin~chunks/files~chunks/settings~chunks/shared-files~chunks/shared-page.js": "/chunks/admin~chunks/files~chunks/settings~chunks/shared-files~chunks/shared-page.js?id=ff7684a6d7dbd9518d8b",
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=b99a5c881b7f15a7e8c5",
"/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=9e50edacd8630aa6fc22",
"/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=2e6c6594ea5506c30ba4",
"/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=ff70580aa62c10cf45fd",
"/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=d066e2c40f4c0ca68bf1",
"/chunks/app-billings.js": "/chunks/app-billings.js?id=aac5bd51067578358164",
"/chunks/app-email.js": "/chunks/app-email.js?id=9d1631b19f6492b8cae4",
"/chunks/app-index.js": "/chunks/app-index.js?id=2dcbe307133d780b6472",
"/chunks/app-language.js": "/chunks/app-language.js?id=6a19e4970a78281f045f",
"/chunks/app-others.js": "/chunks/app-others.js?id=44efcfb317747ff3b508",
"/chunks/app-payments.js": "/chunks/app-payments.js?id=187ecc16f9f7fbc4ccac",
"/chunks/app-settings.js": "/chunks/app-settings.js?id=b6b0eba13665133c0a19",
"/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=52e8a931f975c4e03a3c",
"/chunks/app-setup.js": "/chunks/app-setup.js?id=65857e375e79bbaca9c8",
"/chunks/billings-detail.js": "/chunks/billings-detail.js?id=e84968ddf7a1a0e0381d",
"/chunks/app-setup.js": "/chunks/app-setup.js?id=288383b2f6365d641fdd",
"/chunks/billings-detail.js": "/chunks/billings-detail.js?id=58b28aa55eff9f41d0db",
"/chunks/contact-us.js": "/chunks/contact-us.js?id=cc28795de7e668d5919b",
"/chunks/contact-us~chunks/dynamic-page~chunks/landing-page.js": "/chunks/contact-us~chunks/dynamic-page~chunks/landing-page.js?id=a4b8a7017c82de28296b",
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=108dcc4b5af4c973be56",
"/chunks/dashboard.js": "/chunks/dashboard.js?id=ee57c44ceca0e7202363",
"/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=cc1b4cbd4aa7f70151f7",
"/chunks/database.js": "/chunks/database.js?id=1fc78cfeb3befbd92423",
"/chunks/database.js": "/chunks/database.js?id=576a280918ee6107d623",
"/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=f7ff36abf37571173944",
"/chunks/environment-setup.js": "/chunks/environment-setup.js?id=a2eed5073e52410cab54",
"/chunks/environment-setup.js": "/chunks/environment-setup.js?id=725fb5e0c6c4cea2221f",
"/chunks/files.js": "/chunks/files.js?id=b738eb9054e663cc32b7",
"/chunks/files~chunks/settings-subscription~chunks/shared-files~chunks/shared-page~chunks/user-subscription.js": "/chunks/files~chunks/settings-subscription~chunks/shared-files~chunks/shared-page~chunks/user-subscription.js?id=b646ec02fb9d6a497e74",
"/chunks/files~chunks/shared-files~chunks/shared-page.js": "/chunks/files~chunks/shared-files~chunks/shared-page.js?id=6948f858eca208df8919",
"/chunks/files~chunks/shared-page.js": "/chunks/files~chunks/shared-page.js?id=47ade53389e84dd64310",
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=d5e39543eeb619cb5513",
"/chunks/installation-disclaimer.js": "/chunks/installation-disclaimer.js?id=be9304e6ba2c61b6cab3",
"/chunks/installation-disclaimer.js": "/chunks/installation-disclaimer.js?id=285339a8dd06ace87e96",
"/chunks/invoices.js": "/chunks/invoices.js?id=0dddc007dba47ac5785e",
"/chunks/landing-page.js": "/chunks/landing-page.js?id=6c1137fd4f4d6e03b685",
"/chunks/not-found-shared.js": "/chunks/not-found-shared.js?id=8c8ee101f3445e086040",
"/chunks/page-edit.js": "/chunks/page-edit.js?id=0952cc3fb3aa4797a679",
"/chunks/page-edit.js": "/chunks/page-edit.js?id=716d7430723b38f08cd6",
"/chunks/pages.js": "/chunks/pages.js?id=313adabcad5dafb0f932",
"/chunks/plan.js": "/chunks/plan.js?id=41d7a74e57ac07ce3619",
"/chunks/plan-create.js": "/chunks/plan-create.js?id=75b5346c75513e821097",
"/chunks/plan-create.js": "/chunks/plan-create.js?id=436c4441876ba3e16e91",
"/chunks/plan-delete.js": "/chunks/plan-delete.js?id=4da54a76628aef67ea3e",
"/chunks/plan-settings.js": "/chunks/plan-settings.js?id=e608674e1719be65fe6f",
"/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=26fbcc2472b65a745366",
"/chunks/plans.js": "/chunks/plans.js?id=d6d92de642403caa999b",
"/chunks/profile.js": "/chunks/profile.js?id=015a2fcbaf2946f7eb11",
"/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=f9e2ea1515204b5c63b6",
"/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=555e6cf8a4b64b2bf130",
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=9c4a9daae2237285f35b",
"/chunks/settings.js": "/chunks/settings.js?id=2638798e697164161f7c",
"/chunks/settings-create-payment-methods.js": "/chunks/settings-create-payment-methods.js?id=4b2742e154eba9a7022a",
"/chunks/settings-invoices.js": "/chunks/settings-invoices.js?id=ed9e52bea6e3a1f892ad",
"/chunks/settings-create-payment-methods.js": "/chunks/settings-create-payment-methods.js?id=077f9e17b7b1742dc225",
"/chunks/settings-invoices.js": "/chunks/settings-invoices.js?id=c1ec70204be706460448",
"/chunks/settings-password.js": "/chunks/settings-password.js?id=0229d51aca95ffc75902",
"/chunks/settings-payment-methods.js": "/chunks/settings-payment-methods.js?id=2841bc16a6028d8d315c",
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=0ec77e47b2622ee5e253",
"/chunks/settings-subscription.js": "/chunks/settings-subscription.js?id=3fde45b386de89651a24",
"/chunks/settings-payment-methods.js": "/chunks/settings-payment-methods.js?id=78dcde91ea86c7e71566",
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=c597872e1ac17c09700d",
"/chunks/settings-subscription.js": "/chunks/settings-subscription.js?id=4c5675bec1cb07152692",
"/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=b671f4f3198119b48449",
"/chunks/shared-files.js": "/chunks/shared-files.js?id=b13068f12911fbf79f74",
"/chunks/shared-page.js": "/chunks/shared-page.js?id=67672752eb26f92e2973",
"/chunks/sign-in.js": "/chunks/sign-in.js?id=7b6565f5df2060b45bc0",
"/chunks/sign-up.js": "/chunks/sign-up.js?id=39de7293c26fb3cef1a3",
"/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=57235ac99a66b55fbf7c",
"/chunks/subscription-plans.js": "/chunks/subscription-plans.js?id=51a2856dd0631053b42e",
"/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=402e3abd247572676394",
"/chunks/subscription-plans.js": "/chunks/subscription-plans.js?id=2670e3ba48eb3b75c627",
"/chunks/subscription-service.js": "/chunks/subscription-service.js?id=7176521fbf0047110ae1",
"/chunks/upgrade.js": "/chunks/upgrade.js?id=ee2f061bc040513f1d0d",
"/chunks/upgrade-billing.js": "/chunks/upgrade-billing.js?id=ce929dd655322c11151c",
"/chunks/upgrade.js": "/chunks/upgrade.js?id=0580956c5d32245a2ec2",
"/chunks/upgrade-billing.js": "/chunks/upgrade-billing.js?id=cab80517259a95c0becf",
"/chunks/upgrade-billing~chunks/upgrade-plan.js": "/chunks/upgrade-billing~chunks/upgrade-plan.js?id=a589c99d29f03bc71487",
"/chunks/upgrade-plan.js": "/chunks/upgrade-plan.js?id=8bf12e8b93c7eaee4171",
"/chunks/user.js": "/chunks/user.js?id=bdb8a51693952859f5e1",
"/chunks/user-create.js": "/chunks/user-create.js?id=d0056a5db2089bc05508",
"/chunks/user-create.js": "/chunks/user-create.js?id=499fa0f0dca50c9e4e51",
"/chunks/user-delete.js": "/chunks/user-delete.js?id=91d17d44835dd32ec36f",
"/chunks/user-detail.js": "/chunks/user-detail.js?id=b5b474dd8fea7b99c766",
"/chunks/user-invoices.js": "/chunks/user-invoices.js?id=04b8c39ed83dc89f739a",
"/chunks/user-password.js": "/chunks/user-password.js?id=ac51d17a4aa7ae50bc88",
"/chunks/user-storage.js": "/chunks/user-storage.js?id=5cfec8a8f8a8aef24ef2",
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=c001bef2d6d5171cb359",
"/chunks/users.js": "/chunks/users.js?id=6e68cb068f69fba3199c",
"/js/main.8c774260a56e57a3b3e3.hot-update.js": "/js/main.8c774260a56e57a3b3e3.hot-update.js",
"/js/main.47d60d876801c7437f39.hot-update.js": "/js/main.47d60d876801c7437f39.hot-update.js",
"/js/main.3c96f48e66405f57e071.hot-update.js": "/js/main.3c96f48e66405f57e071.hot-update.js",
"/js/main.bdc09d04e7737afe68a4.hot-update.js": "/js/main.bdc09d04e7737afe68a4.hot-update.js",
"/js/main.d0602bf732496882966e.hot-update.js": "/js/main.d0602bf732496882966e.hot-update.js",
"/js/main.93a11de54d1cc713badc.hot-update.js": "/js/main.93a11de54d1cc713badc.hot-update.js",
"/js/main.e18e39bbe3290f9cb2e4.hot-update.js": "/js/main.e18e39bbe3290f9cb2e4.hot-update.js",
"/js/main.97927df7f2cb7121c650.hot-update.js": "/js/main.97927df7f2cb7121c650.hot-update.js",
"/js/main.0bd5f386525ab3325441.hot-update.js": "/js/main.0bd5f386525ab3325441.hot-update.js",
"/js/main.dd8c70ab19b4d8fb8769.hot-update.js": "/js/main.dd8c70ab19b4d8fb8769.hot-update.js",
"/js/main.2d1a8ef45ea9dd2950e9.hot-update.js": "/js/main.2d1a8ef45ea9dd2950e9.hot-update.js",
"/js/main.b8bd056e4e448bcc904f.hot-update.js": "/js/main.b8bd056e4e448bcc904f.hot-update.js",
"/js/main.a8b9b00008c4305878f7.hot-update.js": "/js/main.a8b9b00008c4305878f7.hot-update.js",
"/js/main.9bf9d8af95376cc35566.hot-update.js": "/js/main.9bf9d8af95376cc35566.hot-update.js",
"/js/main.205e30e6aaa9361c0237.hot-update.js": "/js/main.205e30e6aaa9361c0237.hot-update.js",
"/js/main.59ee74fe23ff591a4922.hot-update.js": "/js/main.59ee74fe23ff591a4922.hot-update.js"
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=10b3a108059d62d206c8",
"/chunks/users.js": "/chunks/users.js?id=6e68cb068f69fba3199c"
}

View File

@@ -1,6 +1,7 @@
<template>
<div class="form-label">
<edit-2-icon size="22" class="icon"></edit-2-icon>
<edit-2-icon v-if="!icon" size="22" class="icon"></edit-2-icon>
<settings-icon v-if="icon === 'settings'" size="22" class="icon"></settings-icon>
<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,8 @@
.icon {
margin-right: 10px;
path {
path,
circle {
stroke: $theme;
}
}

View File

@@ -25,7 +25,8 @@
"pages": "Pages",
"plans": "Plans",
"settings": "Settings",
"users": "Users"
"users": "Users",
"language": "Language"
},
"admin_page_dashboard": {
"backer_button": "Help Us Improve",
@@ -672,7 +673,8 @@
"users_list": "User Management",
"users_password": "Password",
"users_storage_usage": "Storage Usage",
"users_user": "User"
"users_user": "User",
"language": "Language"
},
"rows": {
"card": {

View File

@@ -284,6 +284,16 @@ const routesAdmin = [
},
]
},
{
name: 'Language',
path: '/admin/language',
component: () =>
import(/* webpackChunkName: "chunks/app-language" */ './views/Admin/Languages/Language'),
meta: {
requiresAuth: true,
title: i18n.t('routes_title.language')
},
}
]
},
{

View File

@@ -1,4 +1,5 @@
import i18n from '@/i18n/index'
import Axios from 'axios'
const defaultState = {
fileInfoPanelVisible: localStorage.getItem('file_info_visibility') == 'true' || true,
@@ -9,6 +10,10 @@ const defaultState = {
homeDirectory: undefined,
requestedPlan: undefined,
emojis: undefined,
languages: {
allLanguages: undefined,
strings: undefined,
},
sorting: {
sort: localStorage.getItem('sorting') ? JSON.parse(localStorage.getItem('sorting')).sort : 'DESC',
field: localStorage.getItem('sorting') ? JSON.parse(localStorage.getItem('sorting')).field : 'created_at',
@@ -983,6 +988,36 @@ const actions = {
})
},
getLanguages: ({commit, state}) => {
return new Promise((resolve, reject) => {
axios
.get('/api/language/get')
.then((response) => {
commit('LOAD_LANGUAGES', response.data)
})
.catch(() => Vue.prototype.$isSomethingWrong())
.finally(() => {
resolve(true)
})
})
},
getLanguageStrings: ({ commit }, language) => {
return new Promise((resolve, reject) => {
axios
.get(`/api/language/${language.locale}/strings`)
.then(response => {
commit('LOAD_LANGUAGE_STRINGS', response.data)
})
.catch(() => Vue.prototype.$isSomethingWrong())
.finally(() => {
resolve(true)
})
})
},
changePreviewType: ({commit, state}, preview) => {
// Get preview type
@@ -1010,6 +1045,12 @@ const mutations = {
LOAD_EMOJIS_LIST(state, data) {
state.emojis = data
},
LOAD_LANGUAGE_STRINGS (state, data) {
state.languages.strings = data
},
LOAD_LANGUAGES(state, data) {
state.languages.allLanguages = data
},
UPDATE_SORTING(state) {
state.sorting.field = JSON.parse(localStorage.getItem('sorting')).field
state.sorting.sort = JSON.parse(localStorage.getItem('sorting')).sort
@@ -1052,6 +1093,7 @@ const getters = {
currencyList: state => state.currencyList,
countries: state => state.countries,
timezones: state=> state.timezones,
languages: state => state.languages,
api: state => state.config.api,
config: state => state.config,
emojis: state => state.emojis,

View File

@@ -38,6 +38,14 @@
{{ $t('admin_menu.pages') }}
</div>
</router-link>
<router-link :to="{name: 'Language'}" class="menu-list-item link">
<div class="icon">
<globe-icon size="17"></globe-icon>
</div>
<div class="label">
{{ $t('admin_menu.language') }}
</div>
</router-link>
</div>
</ContentGroup>
@@ -69,7 +77,7 @@
</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 ContentSidebar from '@/components/Sidebar/ContentSidebar'
import ContentGroup from '@/components/Sidebar/ContentGroup'
import { mapGetters } from 'vuex'
@@ -89,6 +97,7 @@
ContentSidebar,
ContentGroup,
UsersIcon,
GlobeIcon
},
}
</script>

View File

@@ -0,0 +1,106 @@
<template>
<div id="single-page">
<div id="page-content">
<MobileHeader :title="$router.currentRoute.meta.title"/>
<div class="wrapper">
<Spinner v-if="! loadedLanguages"/>
<div v-if="loadedLanguages" class="side-content">
<PageHeader :can-back="true" :title="$router.currentRoute.meta.title"/>
<div class="languages-wrapper">
<label class="language-label">Langueages</label>
<div class="all-language-wrapper">
<div @click="getLanguageStrings(language)" class="language" :class="{'active' :active === language.name}" v-for="language in languages.allLanguages" :key="language.id">
{{language.name}}
</div>
</div>
</div>
</div>
<Spinner v-if="! loadedStrings"/>
<LanguageStrings v-if="loadedStrings"/>
</div>
</div>
</div>
</template>
<script>
import LanguageStrings from '@/views/Admin/Languages/LanguageStrings'
import MobileHeader from '@/components/Mobile/MobileHeader'
import PageHeader from '@/components/Others/PageHeader'
import Spinner from '@/components/FilesView/Spinner'
import { mapGetters } from 'vuex'
export default {
name: 'Language',
components: {
LanguageStrings,
MobileHeader,
PageHeader,
Spinner
},
computed: {
...mapGetters(['languages'])
},
data () {
return {
active: undefined,
loadedLanguages: false,
loadedStrings:false
}
},
methods: {
getLanguageStrings (language) {
this.active = language.name
this.loadedStrings = false
this.$store.dispatch('getLanguageStrings', language).then((loaded) => this.loadedStrings = loaded)
}
},
mounted () {
this.$store.dispatch('getLanguages').then((loaded) => {
this.loadedLanguages = loaded
this.getLanguageStrings(this.languages.allLanguages[0])
})
}
}
</script>
<style lang="scss" scoped>
@import '@assets/vue-file-manager/_variables';
@import '@assets/vue-file-manager/_mixins';
.wrapper {
display: flex;
}
.side-content{
width: 225px;
.languages-wrapper {
margin-top: 70px;
.language-label {
color: $text-muted;
font-weight: 700;
@include font-size(12);
}
.all-language-wrapper {
.language {
color: $text;
font-weight: 700;
@include font-size(13);
margin-top: 20px;
}
.active {
color: $theme;
}
}
}
}
</style>

View File

@@ -0,0 +1,230 @@
<template>
<div class="language-strings-wrapper">
<div class="search-bar-wrapper">
<div class="search-bar">
<div class="icon" >
<search-icon size="19"></search-icon>
</div>
<!-- <div class="icon">
<x-icon class="pointer" size="19"></x-icon>
</div> -->
<input
class="query"
type="text"
name="query"
:placeholder="$t('inputs.placeholder_search_files')"
/>
</div>
</div>
<div class="form block-form">
<div>
<FormLabel class="mt-70" icon="settings">Language Settings</FormLabel>
<div class="block-wrapper">
<div class="input-wrapper">
<div class="inline-wrapper">
<div class="switch-label">
<label class="input-label">
Set as Default Language:
</label>
</div>
<SwitchInput
class="switch"
/>
</div>
</div>
</div>
<div class="block-wrapper">
<label> Language Name:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Language Name" rules="required" v-slot="{ errors }">
<input type="text"
:class="{'is-error': errors[0]}"
/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
</div>
<div class="block-wrapper">
<label> Language Slug:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Language Slug" rules="required" v-slot="{ errors }">
<input type="text"
:class="{'is-error': errors[0]}"
/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
</div>
</div>
<div>
<FormLabel class="mt-70">Language Strings</FormLabel>
<div class="block-wrapper" v-for="(string, index) in languages.strings.language_strings" :key="string.id">
<label> {{string.value}}:</label>
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Language string" rules="required" v-slot="{ errors }">
<input type="text"
@input="updateString(string.value)"
v-model="languages.strings.language_strings[index].value"
:class="{'is-error': errors[0]}"
/>
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
</ValidationProvider>
</div>
</div>
</div>
</div>
</template>
<script>
import { ValidationProvider, ValidationObserver } from 'vee-validate/dist/vee-validate.full'
import SwitchInput from '@/components/Others/Forms/SwitchInput'
import FormLabel from '@/components/Others/Forms/FormLabel'
import { SearchIcon, XIcon } from 'vue-feather-icons'
import { mapGetters } from 'vuex'
export default {
name: 'LanguageStrings',
components: {
ValidationProvider,
ValidationObserver,
SwitchInput,
FormLabel,
SearchIcon,
XIcon,
},
computed: {
...mapGetters(['languages'])
},
methods: {
updateString (value) {
console.log(value)
}
}
}
</script>
<style lang="scss" scoped>
@import '@assets/vue-file-manager/_variables';
@import '@assets/vue-file-manager/_mixins';
@import '@assets/vue-file-manager/_forms';
.language-strings-wrapper {
width: 100%;
display: flex;
flex-direction: column;
}
.search-bar-wrapper {
padding: 7px 0px;
}
.search-bar {
position: relative;
width: 100%;
border-radius: 8px;
input {
background: $light-background;
border-radius: 8px;
outline: 0;
padding: 9px 20px 9px 43px;
font-weight: 400;
@include font-size(16);
width: 100%;
height: 50px;
min-width: 175px;
transition: 0.15s all ease;
border: 1px solid transparent;
-webkit-appearance: none;
&::placeholder {
color: $text-muted;
@include font-size(14);
font-weight: 500;
}
&:focus {
border: 1px solid $theme;
box-shadow: 0 0 7px rgba($theme, 0.3);
}
&:focus + .icon {
path {
fill: $theme;
}
}
}
.icon {
height: 100%;
position: absolute;
top: 0;
left: 0;
padding: 11px 15px;
display: flex;
align-items: center;
circle,
line {
color: $text-muted;
}
.pointer {
cursor: pointer;
}
}
}
// @media only screen and (max-width: 1024px) {
// .search-bar input {
// max-width: 190px;
// padding-right: 0;
// }
// }
@media only screen and (max-width: 690px) {
.search-bar {
input {
min-width: initial;
width: 100%;
max-width: initial;
padding: 9px 20px 9px 30px;
&:focus {
border: 1px solid transparent;
box-shadow: none;
}
}
.icon {
padding: 11px 15px 11px 0;
}
}
}
@media (prefers-color-scheme: dark) {
.search-bar {
input {
border-color: transparent;
color: $dark_mode_text_primary;
&::placeholder {
color: $dark_mode_text_secondary;
}
}
.icon svg path {
fill: $dark_mode_text_secondary;
}
}
}
</style>

View File

@@ -170,6 +170,13 @@ Route::group(['middleware' => ['auth:api', 'auth.master', 'auth.admin', 'scope:m
Route::patch('/settings', 'SettingController@update');
Route::get('/settings', 'SettingController@show');
Route::get('/flush-cache', 'AppFunctionsController@flush_cache');
// Language
Route::post('/language/create', 'Language\LanguageController@create_language');
Route::patch('/language/{id}/update', 'Language\LanguageController@update_language');
Route::patch('/language/update-string', 'Language\LanguageController@update_string');
Route::get('/language/get', 'Language\LanguageController@get_languages');
Route::get('/language/{locale}/strings', 'Language\LanguageController@get_language_strings');
});
// Protected sharing routes for authenticated user