mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-05 18:23:48 +00:00
language strings updates
This commit is contained in:
@@ -70,6 +70,10 @@ Add the following Cron entry to your server. Just update your php path (if it's
|
||||
* * * * * /usr/local/bin/php /www/html/your-project/artisan schedule:run >> /dev/null 2>&1
|
||||
```
|
||||
|
||||
#### 8. Broadcasting
|
||||
|
||||
coming soon...
|
||||
|
||||
## Nginx Configuration
|
||||
If you running VueFileManager under Nginx, don't forget set this value in your `nginx.conf` file:
|
||||
```
|
||||
@@ -134,6 +138,11 @@ Make sure you have enabled mod_rewrite. There is an example config for running V
|
||||
# Developers
|
||||
## Running development environment on your localhost
|
||||
|
||||
**For running development environment make sure you have:**
|
||||
|
||||
- Node >= 14
|
||||
- NPM >= 6
|
||||
|
||||
If you would like to express set up, please update your database credentials in .env file
|
||||
```
|
||||
DB_CONNECTION=mysql
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,53 +1,53 @@
|
||||
{
|
||||
"/js/main.js": "/js/main.js",
|
||||
"/chunks/request.js": "/chunks/request.js?id=88d37ed86ceba816",
|
||||
"/chunks/request-upload.js": "/chunks/request-upload.js?id=9722fdb2f733ed4d",
|
||||
"/chunks/request.js": "/chunks/request.js?id=dfe723f178024684",
|
||||
"/chunks/request-upload.js": "/chunks/request-upload.js?id=adb096eca092cfdf",
|
||||
"/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=19a0784e59d768ec",
|
||||
"/chunks/status-check.js": "/chunks/status-check.js?id=86537fa25cb2c188",
|
||||
"/chunks/status-check.js": "/chunks/status-check.js?id=ca27b637120e086a",
|
||||
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=df5bd89528649783",
|
||||
"/chunks/database.js": "/chunks/database.js?id=1d8661f23ef3f761",
|
||||
"/chunks/environment-setup.js": "/chunks/environment-setup.js?id=b27ffed124d1dbc9",
|
||||
"/chunks/app-setup.js": "/chunks/app-setup.js?id=c0958df6a3672aa6",
|
||||
"/chunks/admin-account.js": "/chunks/admin-account.js?id=2e8ec4e6bd25f645",
|
||||
"/chunks/shared.js": "/chunks/shared.js?id=1e0220ae85779862",
|
||||
"/chunks/shared/browser.js": "/chunks/shared/browser.js?id=d3b959af90b6d1e3",
|
||||
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=af632a9bdc82be95",
|
||||
"/chunks/database.js": "/chunks/database.js?id=6bd9994bd24d6c8d",
|
||||
"/chunks/environment-setup.js": "/chunks/environment-setup.js?id=fc9b6215ce43229b",
|
||||
"/chunks/app-setup.js": "/chunks/app-setup.js?id=77937d105dfa28ba",
|
||||
"/chunks/admin-account.js": "/chunks/admin-account.js?id=6dbc3fe81f957a59",
|
||||
"/chunks/shared.js": "/chunks/shared.js?id=b7a9b097ce035686",
|
||||
"/chunks/shared/browser.js": "/chunks/shared/browser.js?id=855a1efa8bc5a5cd",
|
||||
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=9ccb8bb19b95a23f",
|
||||
"/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=672e931a9fb0b672",
|
||||
"/chunks/not-found.js": "/chunks/not-found.js?id=9f6ce23ce5d969f1",
|
||||
"/chunks/temporary-unavailable.js": "/chunks/temporary-unavailable.js?id=423f9af0ed1f7c85",
|
||||
"/chunks/admin.js": "/chunks/admin.js?id=a1750b4ce22d58f8",
|
||||
"/chunks/dashboard.js": "/chunks/dashboard.js?id=cb7c5fd2d6dbf0df",
|
||||
"/chunks/invoices.js": "/chunks/invoices.js?id=f89964a5a55ace45",
|
||||
"/chunks/subscriptions.js": "/chunks/subscriptions.js?id=3a34c7abf7c39465",
|
||||
"/chunks/pages.js": "/chunks/pages.js?id=a22d90135b5c42a5",
|
||||
"/chunks/temporary-unavailable.js": "/chunks/temporary-unavailable.js?id=f564565faa09d6d6",
|
||||
"/chunks/admin.js": "/chunks/admin.js?id=40ae44d319d3322b",
|
||||
"/chunks/dashboard.js": "/chunks/dashboard.js?id=c7fa2f0dc8ed949c",
|
||||
"/chunks/invoices.js": "/chunks/invoices.js?id=1416cbf6d1a593ac",
|
||||
"/chunks/subscriptions.js": "/chunks/subscriptions.js?id=5bf6704f5b599f36",
|
||||
"/chunks/pages.js": "/chunks/pages.js?id=c8380d571e91e8be",
|
||||
"/chunks/page-edit.js": "/chunks/page-edit.js?id=b19868b3100360a3",
|
||||
"/chunks/plans.js": "/chunks/plans.js?id=3596e49797d8e542",
|
||||
"/chunks/users.js": "/chunks/users.js?id=fca6ae29a4db92e8",
|
||||
"/chunks/user-create.js": "/chunks/user-create.js?id=f3d40fff62b631c3",
|
||||
"/chunks/plan-create/fixed.js": "/chunks/plan-create/fixed.js?id=cc9d00d1f7b2b08d",
|
||||
"/chunks/plan-create/metered.js": "/chunks/plan-create/metered.js?id=a9ca1e309b659182",
|
||||
"/chunks/user.js": "/chunks/user.js?id=6372d05a9abdc1c2",
|
||||
"/chunks/user-detail.js": "/chunks/user-detail.js?id=c114a34ec886981f",
|
||||
"/chunks/user-storage.js": "/chunks/user-storage.js?id=72a0d5f53d7a2cc8",
|
||||
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=f033931911b07f5c",
|
||||
"/chunks/user-password.js": "/chunks/user-password.js?id=6d23f552e9d52c49",
|
||||
"/chunks/plans.js": "/chunks/plans.js?id=c8506e0e20966ef7",
|
||||
"/chunks/users.js": "/chunks/users.js?id=ec687ee365c4248a",
|
||||
"/chunks/user-create.js": "/chunks/user-create.js?id=bb3b30ce248209f0",
|
||||
"/chunks/plan-create/fixed.js": "/chunks/plan-create/fixed.js?id=a8ffa08ce94ddf4e",
|
||||
"/chunks/plan-create/metered.js": "/chunks/plan-create/metered.js?id=3b516dcccbbef20a",
|
||||
"/chunks/user.js": "/chunks/user.js?id=c191b906a0496fe5",
|
||||
"/chunks/user-detail.js": "/chunks/user-detail.js?id=80491654e6ee63b1",
|
||||
"/chunks/user-storage.js": "/chunks/user-storage.js?id=69eb59b682c5482f",
|
||||
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=a69ebc3b23446cda",
|
||||
"/chunks/user-password.js": "/chunks/user-password.js?id=e1c4ebc07ba426e6",
|
||||
"/chunks/user-delete.js": "/chunks/user-delete.js?id=82b5180a1d9e1217",
|
||||
"/chunks/plan.js": "/chunks/plan.js?id=d3864115f662f616",
|
||||
"/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=4d7859aa1f1a3f7f",
|
||||
"/chunks/plan-settings.js": "/chunks/plan-settings.js?id=866099771fab6dcc",
|
||||
"/chunks/plan.js": "/chunks/plan.js?id=4b267375ea9f19b3",
|
||||
"/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=a956ceca6865c50c",
|
||||
"/chunks/plan-settings.js": "/chunks/plan-settings.js?id=f366690f8764bb20",
|
||||
"/chunks/plan-delete.js": "/chunks/plan-delete.js?id=e26d5bd3ecbb4bb1",
|
||||
"/chunks/payments.js": "/chunks/payments.js?id=3302fa3148c766de",
|
||||
"/chunks/payments/billings.js": "/chunks/payments/billings.js?id=45bdae67aa7d936f",
|
||||
"/chunks/payments/settings.js": "/chunks/payments/settings.js?id=76886eefc4b9d00a",
|
||||
"/chunks/app-settings.js": "/chunks/app-settings.js?id=64d41e8b5ce7ff28",
|
||||
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=20103e4ae5bac339",
|
||||
"/chunks/app-index.js": "/chunks/app-index.js?id=a93175b2a28b1d56",
|
||||
"/chunks/app-environment.js": "/chunks/app-environment.js?id=68e6d7a9cd872cb7",
|
||||
"/chunks/app-others.js": "/chunks/app-others.js?id=c6ffde5374b27ae2",
|
||||
"/chunks/app-sign-in-out.js": "/chunks/app-sign-in-out.js?id=d3ed0a81743ac3ba",
|
||||
"/chunks/payments.js": "/chunks/payments.js?id=dc4586691c25de6f",
|
||||
"/chunks/payments/billings.js": "/chunks/payments/billings.js?id=9942aaac1bdb11e5",
|
||||
"/chunks/payments/settings.js": "/chunks/payments/settings.js?id=717bf97ba2ffdc28",
|
||||
"/chunks/app-settings.js": "/chunks/app-settings.js?id=55da23af2b076069",
|
||||
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=c308941663208358",
|
||||
"/chunks/app-index.js": "/chunks/app-index.js?id=aa62aedf1f38cc22",
|
||||
"/chunks/app-environment.js": "/chunks/app-environment.js?id=538eea914fc27794",
|
||||
"/chunks/app-others.js": "/chunks/app-others.js?id=19963f8026eb335a",
|
||||
"/chunks/app-sign-in-out.js": "/chunks/app-sign-in-out.js?id=3f8e5f906a4dee4e",
|
||||
"/chunks/app-adsense.js": "/chunks/app-adsense.js?id=4ee8de4ac0dae19e",
|
||||
"/chunks/app-server.js": "/chunks/app-server.js?id=8269a0df9064927f",
|
||||
"/chunks/app-language.js": "/chunks/app-language.js?id=83a53ba4d233ae46",
|
||||
"/chunks/app-server.js": "/chunks/app-server.js?id=dd8c15d4646053cd",
|
||||
"/chunks/app-language.js": "/chunks/app-language.js?id=ba087a47c8efca29",
|
||||
"/chunks/homepage.js": "/chunks/homepage.js?id=f1cfba4f0152f4b9",
|
||||
"/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=2504793131107b1f",
|
||||
"/chunks/contact-us.js": "/chunks/contact-us.js?id=2e0b16655d2d85d7",
|
||||
@@ -57,19 +57,19 @@
|
||||
"/chunks/sign-up.js": "/chunks/sign-up.js?id=77351b7631a6ee6c",
|
||||
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=50a1bc5e4ed86ec9",
|
||||
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=f652de052dba55c1",
|
||||
"/chunks/settings.js": "/chunks/settings.js?id=0c64ce909339f286",
|
||||
"/chunks/profile.js": "/chunks/profile.js?id=aa448a63771d7ad0",
|
||||
"/chunks/settings-password.js": "/chunks/settings-password.js?id=70128f4330237452",
|
||||
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=80bca2eb75da275d",
|
||||
"/chunks/billing.js": "/chunks/billing.js?id=7d56ea0d79e31c19",
|
||||
"/chunks/platform.js": "/chunks/platform.js?id=31b2ecb59e3124fc",
|
||||
"/chunks/files.js": "/chunks/files.js?id=40434484f678dfcf",
|
||||
"/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=cd3353e8928b57df",
|
||||
"/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=b3a32dbacd1e408e",
|
||||
"/chunks/trash.js": "/chunks/trash.js?id=878ef09616cc4668",
|
||||
"/chunks/team-folders.js": "/chunks/team-folders.js?id=2645ae9d570f94d2",
|
||||
"/chunks/shared-with-me.js": "/chunks/shared-with-me.js?id=ad9d57d26962de4a",
|
||||
"/chunks/invitation.js": "/chunks/invitation.js?id=21d172e77f12dbbb",
|
||||
"/chunks/settings.js": "/chunks/settings.js?id=db0f876b7f1229bb",
|
||||
"/chunks/profile.js": "/chunks/profile.js?id=5b2ed82815320625",
|
||||
"/chunks/settings-password.js": "/chunks/settings-password.js?id=c912a79595c2efcb",
|
||||
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=6fec7aac1a5280c7",
|
||||
"/chunks/billing.js": "/chunks/billing.js?id=2a2cd66f503a9fc0",
|
||||
"/chunks/platform.js": "/chunks/platform.js?id=409b7dc2a080e93e",
|
||||
"/chunks/files.js": "/chunks/files.js?id=7ba4274a7b63f15b",
|
||||
"/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=aeb9ea7f43a75aa1",
|
||||
"/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=ed296d2d8f6b4302",
|
||||
"/chunks/trash.js": "/chunks/trash.js?id=b671a56c6cfb99da",
|
||||
"/chunks/team-folders.js": "/chunks/team-folders.js?id=7518e54deade41d3",
|
||||
"/chunks/shared-with-me.js": "/chunks/shared-with-me.js?id=52f03c48445091e5",
|
||||
"/chunks/invitation.js": "/chunks/invitation.js?id=9ed8456c9d6d5ce1",
|
||||
"/css/tailwind.css": "/css/tailwind.css",
|
||||
"/css/app.css": "/css/app.css"
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
<ColorLabel :color="$getUserRoleColor(row.data.attributes.role)">
|
||||
{{ row.data.attributes.role }}
|
||||
{{ $t(row.data.attributes.role) }}
|
||||
</ColorLabel>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
@@ -111,7 +111,7 @@
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
<ColorLabel :color="$getUserRoleColor(row.data.attributes.role)">
|
||||
{{ row.data.attributes.role }}
|
||||
{{ $t(row.data.attributes.role) }}
|
||||
</ColorLabel>
|
||||
</td>
|
||||
<td class="px-3 md:px-1" v-if="config.isSaaS">
|
||||
@@ -190,7 +190,7 @@
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
<ColorLabel :color="$getUserRoleColor(row.data.attributes.role)">
|
||||
{{ row.data.attributes.role }}
|
||||
{{ $t(row.data.attributes.role) }}
|
||||
</ColorLabel>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
@@ -274,11 +274,11 @@ export default {
|
||||
sortable: false,
|
||||
},
|
||||
{
|
||||
label: this.$t('Billing Est.'),
|
||||
label: this.$t('billing_est.'),
|
||||
sortable: false,
|
||||
},
|
||||
{
|
||||
label: this.$t('admin_page_user.table.created_at'),
|
||||
label: this.$t('created_at'),
|
||||
field: 'created_at',
|
||||
sortable: true,
|
||||
},
|
||||
@@ -303,12 +303,12 @@ export default {
|
||||
sortable: false,
|
||||
},
|
||||
{
|
||||
label: this.$t('Max Storage'),
|
||||
label: this.$t('max_storage'),
|
||||
sortable: false,
|
||||
hidden: !this.config.storageLimit,
|
||||
},
|
||||
{
|
||||
label: this.$t('admin_page_user.table.created_at'),
|
||||
label: this.$t('created_at'),
|
||||
field: 'created_at',
|
||||
sortable: true,
|
||||
},
|
||||
@@ -333,12 +333,12 @@ export default {
|
||||
sortable: false,
|
||||
},
|
||||
{
|
||||
label: this.$t('Max Storage'),
|
||||
label: this.$t('max_storage'),
|
||||
sortable: false,
|
||||
hidden: !this.config.storageLimit,
|
||||
},
|
||||
{
|
||||
label: this.$t('admin_page_user.table.created_at'),
|
||||
label: this.$t('created_at'),
|
||||
field: 'created_at',
|
||||
sortable: true,
|
||||
},
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<span v-if="!row.data.relationships.user" class="text-xs font-bold text-gray-500">
|
||||
{{ $t('User was deleted') }}
|
||||
{{ $t('user_was_deleted') }}
|
||||
</span>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
@@ -31,13 +31,13 @@
|
||||
v-if="config.subscriptionType === 'fixed'"
|
||||
:color="$getTransactionStatusColor(row.data.attributes.status)"
|
||||
>
|
||||
{{ row.data.attributes.status }}
|
||||
{{ $t(row.data.attributes.status) }}
|
||||
</ColorLabel>
|
||||
<ColorLabel
|
||||
v-if="config.subscriptionType === 'metered'"
|
||||
:color="$getTransactionTypeColor(row.data.attributes.type)"
|
||||
>
|
||||
{{ row.data.attributes.type }}
|
||||
{{ $t(row.data.attributes.type) }}
|
||||
</ColorLabel>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
@@ -65,7 +65,7 @@
|
||||
<!--Empty page-->
|
||||
<template v-slot:empty-page>
|
||||
<InfoBox style="margin-bottom: 0">
|
||||
<p>{{ $t("There aren't any transactions.") }}</p>
|
||||
<p>{{ $t("not_any_transactions") }}</p>
|
||||
</InfoBox>
|
||||
</template>
|
||||
</DatatableWrapper>
|
||||
@@ -99,17 +99,17 @@ export default {
|
||||
return {
|
||||
columns: [
|
||||
{
|
||||
label: this.$t('Note'),
|
||||
label: this.$t('note'),
|
||||
field: 'note',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('User'),
|
||||
label: this.$t('user'),
|
||||
field: 'user_id',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Status'),
|
||||
label: this.$t('status'),
|
||||
field: 'status',
|
||||
sortable: true,
|
||||
},
|
||||
@@ -119,12 +119,12 @@ export default {
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Payed At'),
|
||||
label: this.$t('payed_at'),
|
||||
field: 'created_at',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Service'),
|
||||
label: this.$t('service'),
|
||||
field: 'driver',
|
||||
sortable: true,
|
||||
},
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
>
|
||||
<template slot="loading">
|
||||
<b>
|
||||
{{ $t('loading content...') }}
|
||||
{{ $t('loading_content') }}
|
||||
</b>
|
||||
</template>
|
||||
</pdf>
|
||||
|
||||
@@ -12,11 +12,11 @@
|
||||
:action="$t('create_something')"
|
||||
/>
|
||||
<PopoverItem name="desktop-create" side="left">
|
||||
<OptionGroup :title="$t('Upload')">
|
||||
<OptionGroup :title="$t('upload')">
|
||||
<OptionUpload :title="$t('upload_files')" type="file" />
|
||||
<OptionUpload :title="$t('upload_folder')" type="folder" />
|
||||
</OptionGroup>
|
||||
<OptionGroup :title="$t('Create')">
|
||||
<OptionGroup :title="$t('create')">
|
||||
<Option
|
||||
@click.native="$createFolder"
|
||||
:title="$t('create_folder')"
|
||||
@@ -47,7 +47,7 @@
|
||||
'is-inactive': !canManipulate,
|
||||
}"
|
||||
source="trash"
|
||||
:action="$t('actions.delete')"
|
||||
:action="$t('delete')"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
/>
|
||||
<PopoverItem name="desktop-create" side="left">
|
||||
<OptionGroup
|
||||
:title="$t('Frequently Used')"
|
||||
:title="$t('frequently_used')"
|
||||
>
|
||||
<OptionUpload
|
||||
:title="$t('upload_files')"
|
||||
@@ -31,7 +31,7 @@
|
||||
icon="folder-plus"
|
||||
/>
|
||||
</OptionGroup>
|
||||
<OptionGroup :title="$t('Others')">
|
||||
<OptionGroup :title="$t('others')">
|
||||
<OptionUpload
|
||||
:class="{
|
||||
'is-inactive': (isSharedWithMe && !canEdit) || canUploadFolderInView || isTeamFolderHomepage || isSharedWithMeHomepage,
|
||||
@@ -42,12 +42,12 @@
|
||||
<Option
|
||||
@click.stop.native="$createTeamFolder"
|
||||
:class="{ 'is-inactive': canCreateTeamFolder }"
|
||||
:title="$t('Create Team Folder')"
|
||||
:title="$t('create_team_folder')"
|
||||
icon="users"
|
||||
/>
|
||||
<Option
|
||||
@click.native="$createFileRequest"
|
||||
:title="$t('Create File Request')"
|
||||
:title="$t('create_file_request')"
|
||||
icon="upload-cloud"
|
||||
/>
|
||||
</OptionGroup>
|
||||
@@ -70,23 +70,23 @@
|
||||
<PopoverItem name="team-folder" side="left">
|
||||
<TeamFolderPreview />
|
||||
|
||||
<OptionGroup v-if="$isThisRoute($route, ['TeamFolders'])" :title="$t('Options')">
|
||||
<OptionGroup v-if="$isThisRoute($route, ['TeamFolders'])" :title="$t('options')">
|
||||
<Option
|
||||
@click.native="$updateTeamFolder(teamFolder)"
|
||||
:title="$t('Edit Members')"
|
||||
:title="$t('edit_members')"
|
||||
icon="rename"
|
||||
/>
|
||||
<Option
|
||||
@click.native="$dissolveTeamFolder(teamFolder)"
|
||||
:title="$t('Dissolve Team')"
|
||||
:title="$t('dissolve_team')"
|
||||
icon="trash"
|
||||
/>
|
||||
</OptionGroup>
|
||||
|
||||
<OptionGroup v-if="$isThisRoute($route, ['SharedWithMe'])" :title="$t('Options')">
|
||||
<OptionGroup v-if="$isThisRoute($route, ['SharedWithMe'])" :title="$t('options')">
|
||||
<Option
|
||||
@click.native="$detachMeFromTeamFolder(teamFolder)"
|
||||
:title="$t('Leave the Team Folder')"
|
||||
:title="$t('leave_team_folder')"
|
||||
icon="user-minus"
|
||||
/>
|
||||
</OptionGroup>
|
||||
@@ -102,7 +102,7 @@
|
||||
'is-inactive': !canCreateTeamFolder,
|
||||
}"
|
||||
source="user-plus"
|
||||
:action="$t('actions.convert_into_team_folder')"
|
||||
:action="$t('convert_into_team_folder')"
|
||||
/>
|
||||
<ToolbarButton
|
||||
v-if="!$isThisRoute($route, ['SharedWithMe', 'Public'])"
|
||||
@@ -127,7 +127,7 @@
|
||||
'is-inactive': canDeleteInView && !canEdit,
|
||||
}"
|
||||
source="trash"
|
||||
:action="$t('actions.delete')"
|
||||
:action="$t('delete')"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
:action="$t('create_something')"
|
||||
/>
|
||||
<PopoverItem name="desktop-create" side="left">
|
||||
<OptionGroup :title="$t('Upload')">
|
||||
<OptionGroup :title="$t('upload')">
|
||||
<OptionUpload :title="$t('upload_files')" type="file" />
|
||||
<OptionUpload :title="$t('upload_folder')" type="folder" />
|
||||
</OptionGroup>
|
||||
<OptionGroup :title="$t('Create')">
|
||||
<OptionGroup :title="$t('create')">
|
||||
<Option
|
||||
@click.native="$createFolder"
|
||||
:title="$t('create_folder')"
|
||||
@@ -54,7 +54,7 @@
|
||||
'is-inactive': !canManipulate,
|
||||
}"
|
||||
source="trash"
|
||||
:action="$t('actions.delete')"
|
||||
:action="$t('delete')"
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ export default {
|
||||
// Subtitle for single folder
|
||||
if (this.draggedItem.data.type === 'folder') {
|
||||
return this.draggedItem.items == 0
|
||||
? this.$t('folder.empty')
|
||||
? this.$t('empty')
|
||||
: this.$tc('folder.item_counts', this.draggedItem.items)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<MenuMobile name="file-filter">
|
||||
<MenuMobileGroup>
|
||||
<OptionGroup :title="$t('Base')">
|
||||
<OptionGroup :title="$t('base')">
|
||||
<Option
|
||||
@click.native="goToFiles"
|
||||
:title="$t('sidebar.home')"
|
||||
@@ -31,17 +31,17 @@
|
||||
:is-hover-disabled="true"
|
||||
/>
|
||||
</OptionGroup>
|
||||
<OptionGroup :title="$t('Collaboration')">
|
||||
<OptionGroup :title="$t('collaboration')">
|
||||
<Option
|
||||
@click.native="goToTeamFolders"
|
||||
:title="$t('Team Folders')"
|
||||
:title="$t('team_folders')"
|
||||
icon="users"
|
||||
:is-active="$isThisRoute($route, 'TeamFolders')"
|
||||
:is-hover-disabled="true"
|
||||
/>
|
||||
<Option
|
||||
@click.native="goToSharedWithMe"
|
||||
:title="$t('Shared with Me')"
|
||||
:title="$t('shared_with_me')"
|
||||
icon="user-check"
|
||||
:is-active="$isThisRoute($route, 'SharedWithMe')"
|
||||
:is-hover-disabled="true"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div>
|
||||
<OptionGroup :title="$t('View')">
|
||||
<OptionGroup :title="$t('view')">
|
||||
<Option
|
||||
v-if="isList"
|
||||
@click.native="changePreview('grid')"
|
||||
@@ -14,7 +14,7 @@
|
||||
icon="list"
|
||||
/>
|
||||
</OptionGroup>
|
||||
<OptionGroup :title="$t('Sorting')">
|
||||
<OptionGroup :title="$t('sorting')">
|
||||
<Option
|
||||
@click.native.stop="sort('created_at')"
|
||||
:arrow="arrowForCreatedAtField"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="flex items-center justify-between pt-0.5 pb-2" v-if="clipboard.data.attributes.date_time_original">
|
||||
<b class="font-bold text-sm">{{ $t('file_detail_meta.time_data') }}</b>
|
||||
<b class="font-bold text-sm">{{ $t('time_data') }}</b>
|
||||
<b class="font-bold text-sm">{{ clipboard.data.attributes.date_time_original }}</b>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="text-center">
|
||||
<eye-off-icon size="22" class="vue-feather mb-3 inline-block text-gray-500" />
|
||||
<small class="block text-xs text-gray-500">
|
||||
{{ $t('messages.nothing_to_preview') }}
|
||||
{{ $t('nothing_to_preview') }}
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
@@ -85,7 +85,7 @@
|
||||
</ListInfoItem>
|
||||
|
||||
<!--Author-->
|
||||
<ListInfoItem v-if="canShowAuthor" :title="$t('Author')">
|
||||
<ListInfoItem v-if="canShowAuthor" :title="$t('author')">
|
||||
<div class="mt-1.5 flex items-center">
|
||||
<MemberAvatar :size="32" :member="singleFile.data.relationships.owner" />
|
||||
<span class="ml-3 block text-sm font-bold">
|
||||
@@ -154,7 +154,7 @@ import { mapGetters } from 'vuex'
|
||||
return option.value === this.clipboard[0].data.relationships.shared.permission
|
||||
})
|
||||
|
||||
return title ? this.$t(title.label) : this.$t('shared.can_download')
|
||||
return title ? this.$t(title.label) : this.$t('can_download_file')
|
||||
},
|
||||
canShowAuthor() {
|
||||
return (
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="text-center">
|
||||
<eye-off-icon size="22" class="vue-feather mb-3 inline-block text-gray-500" />
|
||||
<small class="block text-xs text-gray-500">
|
||||
{{ $t('messages.nothing_to_preview') }}
|
||||
{{ $t('nothing_to_preview') }}
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
|
||||
<!--Folder sub line-->
|
||||
<small v-if="isFolder" class="block text-xs text-gray-500 dark:text-gray-500">
|
||||
{{ folderItems === 0 ? $t('folder.empty') : $tc('folder.item_counts', folderItems)
|
||||
{{ folderItems === 0 ? $t('empty') : $tc('folder.item_counts', folderItems)
|
||||
}}<span class="hidden text-xs text-gray-500 dark:text-gray-500 lg:inline-block"
|
||||
>, {{ timeStamp }}</span
|
||||
>
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
|
||||
<!--Folder sub line-->
|
||||
<small v-if="isFolder" class="block text-xs text-gray-500 dark:text-gray-500">
|
||||
{{ folderItems === 0 ? $t('folder.empty') : $tc('folder.item_counts', folderItems) }},
|
||||
{{ folderItems === 0 ? $t('empty') : $tc('folder.item_counts', folderItems) }},
|
||||
{{ timeStamp }}
|
||||
</small>
|
||||
</div>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
@click.native="closeSelecting"
|
||||
class="action-btn close-icon"
|
||||
source="close"
|
||||
:action="$t('actions.close')"
|
||||
:action="$t('close')"
|
||||
/>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
@@ -3,18 +3,6 @@
|
||||
class="sticky top-0 z-[19] block flex w-full items-center justify-between bg-white py-5 px-4 text-center dark:bg-dark-background lg:hidden"
|
||||
>
|
||||
<NavigationBar />
|
||||
|
||||
<!-- <div class="relative flex items-center">
|
||||
<!–More Actions–>
|
||||
<div class="relative">
|
||||
<div
|
||||
@click="showMobileNavigation"
|
||||
class="absolute right-0 -mr-2 -translate-y-2/4 transform p-4"
|
||||
>
|
||||
<menu-icon size="17" />
|
||||
</div>
|
||||
</div>
|
||||
</div>-->
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="flex items-center">
|
||||
<search-icon size="18" class="vue-feather text-gray-400 dark:text-gray-600" />
|
||||
<span class="pl-2.5 text-xs font-bold text-gray-400 dark:text-gray-600">
|
||||
{{ $t('inputs.placeholder_search_files') }}
|
||||
{{ $t('search_anything') }}
|
||||
</span>
|
||||
</div>
|
||||
<span
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
>
|
||||
<check-icon size="16" class="vue-feather mr-2 text-green-600 dark:text-green-600" />
|
||||
<span class="text-sm font-bold text-green-600 dark:text-green-600">
|
||||
{{ $t('Accept') }}
|
||||
{{ $t('accept') }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
>
|
||||
<x-icon size="16" class="vue-feather mr-2 text-rose-600 dark:text-rose-600" />
|
||||
<span class="text-sm font-bold text-rose-600 dark:text-rose-600">
|
||||
{{ $t('Decline') }}
|
||||
{{ $t('decline') }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -121,7 +121,7 @@ export default {
|
||||
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('You successfully accepted invitation'),
|
||||
message: this.$t('you_accepted_invitation'),
|
||||
})
|
||||
})
|
||||
},
|
||||
@@ -132,7 +132,7 @@ export default {
|
||||
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('You successfully decline invitation'),
|
||||
message: this.$t('you_decline_invitation'),
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
@@ -11,27 +11,27 @@
|
||||
|
||||
<!--Title-->
|
||||
<b class="dark:text-gray-200 text-xl font-extrabold px-2.5 mb-2.5 block">
|
||||
{{ $t('Notification Center') }}
|
||||
{{ $t('notification_center') }}
|
||||
</b>
|
||||
|
||||
<div class="px-2.5">
|
||||
<MobileActionButton v-if="readNotifications.length || unreadNotifications.length" @click.native="$store.dispatch('deleteAllNotifications')" icon="check-square" class="mb-2 dark:!bg-4x-dark-foreground">
|
||||
{{ $t('Clear all') }}
|
||||
{{ $t('clear_all') }}
|
||||
</MobileActionButton>
|
||||
|
||||
<p v-if="!readNotifications.length && !unreadNotifications.length" class="text-sm mt-8">
|
||||
{{ $t("There aren't any notifications.") }}
|
||||
{{ $t("not_any_notifications") }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<b v-if="unreadNotifications.length" class="dark-text-theme mt-1.5 block px-2.5 mb-2.5 text-xs text-gray-400">
|
||||
{{ $t('Unread') }}
|
||||
{{ $t('unread') }}
|
||||
</b>
|
||||
|
||||
<Notification :notification="notification" v-for="notification in unreadNotifications" :key="notification.id" />
|
||||
|
||||
<b v-if="readNotifications.length" class="dark-text-theme mt-2.5 block px-2.5 mb-2.5 text-xs text-gray-400">
|
||||
{{ $t('Read') }}
|
||||
{{ $t('read') }}
|
||||
</b>
|
||||
|
||||
<Notification :notification="notification" v-for="notification in readNotifications" :key="notification.id" />
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<template>
|
||||
<PopupWrapper name="select-payment-method">
|
||||
<PopupHeader :title="$t('Select Payment Method')" icon="credit-card" />
|
||||
<PopupHeader :title="$t('select_payment_method')" icon="credit-card" />
|
||||
|
||||
<PopupContent style="padding: 0 20px">
|
||||
<InfoBox v-if="!config.isPayPal && !config.isPaystack" class="!mb-0">
|
||||
<p>{{ $t("There isn't any payment method yet.") }}</p>
|
||||
<p>{{ $t("not_any_payment_method") }}</p>
|
||||
</InfoBox>
|
||||
|
||||
<!--PayPal implementation-->
|
||||
@@ -27,7 +27,7 @@
|
||||
:class="{ 'opacity-0': paypal.isMethodLoading }"
|
||||
class="text-theme cursor-pointer text-sm font-bold"
|
||||
>
|
||||
{{ $t('Select') }}
|
||||
{{ $t('select') }}
|
||||
</span>
|
||||
</PaymentMethod>
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
<PaymentMethod
|
||||
v-if="config.isPaystack"
|
||||
driver="paystack"
|
||||
:description="$t('Available Bank Account, USSD, Mobile Money, Apple Pay')"
|
||||
:description="$t(config.paystack_payment_description)"
|
||||
>
|
||||
<div v-if="paystack.isGettingCheckoutLink" class="translate-y-3 scale-50 transform">
|
||||
<Spinner />
|
||||
@@ -49,14 +49,14 @@
|
||||
:class="{ 'opacity-0': paystack.isGettingCheckoutLink }"
|
||||
class="text-theme cursor-pointer text-sm font-bold"
|
||||
>
|
||||
{{ $t('Select') }}
|
||||
{{ $t('select') }}
|
||||
</span>
|
||||
</PaymentMethod>
|
||||
</PopupContent>
|
||||
|
||||
<PopupActions>
|
||||
<ButtonBase class="w-full" @click.native="$closePopup()" button-style="secondary">
|
||||
{{ $t('Cancel Payment') }}
|
||||
{{ $t('cancel_payment') }}
|
||||
</ButtonBase>
|
||||
</PopupActions>
|
||||
</PopupWrapper>
|
||||
@@ -131,7 +131,7 @@ export default {
|
||||
} catch (error) {
|
||||
events.$emit('toaster', {
|
||||
type: 'danger',
|
||||
message: this.$t('Failed to load the PayPal service'),
|
||||
message: this.$t('failed_to_load_paypal'),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -168,7 +168,7 @@ export default {
|
||||
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('Your payment was successfully received.'),
|
||||
message: this.$t('payment_was_successfully_received'),
|
||||
})
|
||||
|
||||
// todo: temporary reload function
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<PopupWrapper name="confirm-password">
|
||||
<PopupHeader :title="$t('Confirm Password')" icon="edit" />
|
||||
<PopupHeader :title="$t('confirm_password')" icon="edit" />
|
||||
|
||||
<PopupContent>
|
||||
<ValidationObserver @submit.prevent="confirmPassword" ref="passwordForm" v-slot="{ invalid }" tag="form">
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
</ValidationProvider>
|
||||
|
||||
<AppInputSwitch
|
||||
:title="$t('Emoji as an Icon')"
|
||||
:description="$t('Replace folder icon with an Emoji')"
|
||||
:title="$t('emoji_as_an_icon')"
|
||||
:description="$t('replace_icon_with_emoji')"
|
||||
:is-last="!isEmoji"
|
||||
>
|
||||
<SwitchInput v-model="isEmoji" :state="isEmoji" />
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<PopupWrapper name="create-file-request">
|
||||
<!--Title-->
|
||||
<PopupHeader :title="$t('Create File Request')" icon="upload" />
|
||||
<PopupHeader :title="$t('create_file_request')" icon="upload" />
|
||||
|
||||
<!--Content-->
|
||||
<PopupContent>
|
||||
@@ -23,21 +23,21 @@
|
||||
name="Name"
|
||||
v-slot="{ errors }"
|
||||
>
|
||||
<AppInputText :title="$t('Folder Name (optional)')" :description="$t('Created folder with files will be named with your own name.')" :error="errors[0]">
|
||||
<AppInputText :title="$t('folder_name_optional')" :description="$t('folder_name_optional_description')" :error="errors[0]">
|
||||
<input
|
||||
v-model="form.name"
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
type="text"
|
||||
ref="input"
|
||||
class="focus-border-theme input-dark"
|
||||
:placeholder="$t('Type name...')"
|
||||
:placeholder="$t('type_name_')"
|
||||
/>
|
||||
</AppInputText>
|
||||
</ValidationProvider>
|
||||
|
||||
<!--Set note-->
|
||||
<ValidationProvider tag="div" mode="passive" name="Note" v-slot="{ errors }">
|
||||
<AppInputText :title="$t('Message (optional)')" :description="$t('This message will be showed for your email recipient or in the upload page.')" :error="errors[0]">
|
||||
<AppInputText :title="$t('message_optional')" :description="$t('message_optional_description')" :error="errors[0]">
|
||||
<textarea
|
||||
v-model="form.notes"
|
||||
rows="2"
|
||||
@@ -45,15 +45,15 @@
|
||||
type="text"
|
||||
ref="input"
|
||||
class="focus-border-theme input-dark"
|
||||
:placeholder="$t('Type message for recipient...')"
|
||||
:placeholder="$t('message_for_recipient')"
|
||||
></textarea>
|
||||
</AppInputText>
|
||||
</ValidationProvider>
|
||||
|
||||
<!--Send Request by Email-->
|
||||
<AppInputSwitch
|
||||
:title="$t('Send Request by Email')"
|
||||
:description="$t('Send your file request on recipients email')"
|
||||
:title="$t('send_request_by_email')"
|
||||
:description="$t('send_request_by_email_description')"
|
||||
:is-last="! shareViaEmail"
|
||||
>
|
||||
<SwitchInput v-model="shareViaEmail" :state="shareViaEmail" />
|
||||
@@ -75,14 +75,14 @@
|
||||
type="text"
|
||||
ref="input"
|
||||
class="focus-border-theme input-dark"
|
||||
:placeholder="$t('Type email...')"
|
||||
:placeholder="$t('type_email_')"
|
||||
/>
|
||||
</AppInputText>
|
||||
</ValidationProvider>
|
||||
</ValidationObserver>
|
||||
|
||||
<!--Copy generated link-->
|
||||
<AppInputText v-if="generatedUploadRequest" :title="$t('Copy your upload request link')" :is-last="true">
|
||||
<AppInputText v-if="generatedUploadRequest" :title="$t('copy_upload_request_link')" :is-last="true">
|
||||
<CopyInput :str="generatedUploadRequest.data.attributes.url" />
|
||||
</AppInputText>
|
||||
</PopupContent>
|
||||
@@ -93,7 +93,7 @@
|
||||
>{{ $t('cancel') }}
|
||||
</ButtonBase>
|
||||
<ButtonBase class="w-full" @click.native="createUploadRequest" :loading="isLoading" button-style="theme"
|
||||
>{{ $t('Create Request') }}
|
||||
>{{ $t('create_request') }}
|
||||
</ButtonBase>
|
||||
</PopupActions>
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
v-model="query"
|
||||
class="focus-border-theme input-dark"
|
||||
type="text"
|
||||
:placeholder="$t('Select or search emoji icon...')"
|
||||
:placeholder="$t('select_or_search_emoji')"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
|
||||
<!-- Not found -->
|
||||
<span class="ml-2 text-sm font-bold" v-if="filteredEmojis.length === 0 && query !== undefined">
|
||||
{{ $t('There is nothing :(') }}
|
||||
{{ $t('there_is_nothing_smile') }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -127,7 +127,7 @@ export default {
|
||||
this.filteredEmojis = this.emojis.list.filter((emoji) => emoji.name.includes(val.toLowerCase()))
|
||||
|
||||
if (this.filteredEmojis.length === 0) {
|
||||
console.log('empty')
|
||||
//
|
||||
}
|
||||
}, 200),
|
||||
},
|
||||
|
||||
@@ -52,7 +52,7 @@ export default {
|
||||
// Update user avatar
|
||||
this.$updateImage('/user/settings', 'avatar', event.target.files[0])
|
||||
} else {
|
||||
alert(this.$t('validation_errors.wrong_image'))
|
||||
alert(this.$t('wrong_image_error'))
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<camera-icon size="14" />
|
||||
</div>
|
||||
<span class="text-sm font-bold">
|
||||
{{ $t('Get QR Code') }}
|
||||
{{ $t('get_qr_code') }}
|
||||
</span>
|
||||
</li>
|
||||
<li
|
||||
@@ -126,7 +126,7 @@ export default {
|
||||
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('Your web insert code was copied'),
|
||||
message: this.$t('web_code_copied'),
|
||||
})
|
||||
|
||||
this.isOpenedMoreOptions = false
|
||||
|
||||
@@ -85,7 +85,7 @@ export default {
|
||||
// Update user avatar
|
||||
this.$emit('input', event.target.files[0])
|
||||
} else {
|
||||
alert(this.$t('validation_errors.wrong_image'))
|
||||
alert(this.$t('wrong_image_error'))
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
@@ -43,7 +43,9 @@
|
||||
<user-icon v-if="option.icon === 'user'" size="14" />
|
||||
<edit2-icon v-if="option.icon === 'user-edit'" size="14" />
|
||||
</div>
|
||||
<span class="option-value">{{ option.label }}</span>
|
||||
<span class="option-value">
|
||||
{{ $t(option.label) }}
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
>
|
||||
<div class="rounded-lg bg-light-background px-3 py-1.5 dark:bg-4x-dark-foreground">
|
||||
<span class="text-sm font-semibold">
|
||||
{{ $t('Your current estimated usage:') }}
|
||||
{{ $t('current_estimated_usage') }}
|
||||
</span>
|
||||
<span class="text-theme text-sm font-bold">
|
||||
{{ user.data.meta.usages.costEstimate }}
|
||||
@@ -53,7 +53,7 @@
|
||||
/>
|
||||
</OptionGroup>
|
||||
<OptionGroup v-if="!clickedSubmenu">
|
||||
<Option @click.native="logOut" :title="$t('menu.logout')" icon="power" :is-hover-disabled="true" />
|
||||
<Option @click.native="logOut" :title="$t('logout')" icon="power" :is-hover-disabled="true" />
|
||||
</OptionGroup>
|
||||
|
||||
<!--Submenu: User settings-->
|
||||
@@ -79,7 +79,7 @@
|
||||
<Option
|
||||
@click.native="goToRoute('Billing')"
|
||||
v-if="config.subscriptionType !== 'none'"
|
||||
:title="$t('Billing')"
|
||||
:title="$t('billing')"
|
||||
icon="cloud"
|
||||
:is-hover-disabled="true"
|
||||
/>
|
||||
@@ -127,14 +127,14 @@
|
||||
<OptionGroup v-if="clickedSubmenu === 'admin' && config.subscriptionType !== 'none'">
|
||||
<Option
|
||||
@click.native="goToRoute('AppPayments')"
|
||||
:title="$t('Payments')"
|
||||
:title="$t('payments')"
|
||||
icon="credit-card"
|
||||
:is-hover-disabled="true"
|
||||
/>
|
||||
<Option
|
||||
@click.native="goToRoute('Subscriptions')"
|
||||
v-if="config.subscriptionType === 'fixed'"
|
||||
:title="$t('Subscriptions')"
|
||||
:title="$t('subscriptions')"
|
||||
icon="credit-card"
|
||||
:is-hover-disabled="true"
|
||||
/>
|
||||
@@ -146,7 +146,7 @@
|
||||
/>
|
||||
<Option
|
||||
@click.native="goToRoute('Invoices')"
|
||||
:title="$t('Transactions')"
|
||||
:title="$t('transactions')"
|
||||
icon="file-text"
|
||||
:is-hover-disabled="true"
|
||||
/>
|
||||
@@ -185,7 +185,7 @@ export default {
|
||||
admin: this.$t('administration'),
|
||||
}
|
||||
|
||||
return 'Go back from ' + location[this.clickedSubmenu]
|
||||
return this.$t('go_back_from_x', {location: location[this.clickedSubmenu]})
|
||||
},
|
||||
},
|
||||
data() {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<PopupWrapper name="notifications-mobile">
|
||||
<!--Title-->
|
||||
<PopupHeader :title="$t('Notifications')" icon="bell" />
|
||||
<PopupHeader :title="$t('notifications')" icon="bell" />
|
||||
|
||||
<!--Content-->
|
||||
<PopupContent>
|
||||
@@ -11,18 +11,18 @@
|
||||
icon="check-square"
|
||||
class="mb-2 dark:!bg-4x-dark-foreground"
|
||||
>
|
||||
{{ $t('Clear all') }}
|
||||
{{ $t('clear_all') }}
|
||||
</MobileActionButton>
|
||||
|
||||
<p v-if="!readNotifications.length && !unreadNotifications.length" class="text-sm text-gray-500">
|
||||
{{ $t("There aren't any notifications.") }}
|
||||
{{ $t("not_any_notifications") }}
|
||||
</p>
|
||||
|
||||
<b
|
||||
v-if="unreadNotifications.length"
|
||||
class="dark-text-theme mt-1.5 mb-2.5 block px-2.5 text-xs text-gray-400"
|
||||
>
|
||||
{{ $t('Unread') }}
|
||||
{{ $t('unread') }}
|
||||
</b>
|
||||
|
||||
<Notification
|
||||
@@ -32,7 +32,7 @@
|
||||
/>
|
||||
|
||||
<b v-if="readNotifications.length" class="dark-text-theme mt-2.5 mb-2.5 block px-2.5 text-xs text-gray-400">
|
||||
{{ $t('Read') }}
|
||||
{{ $t('read') }}
|
||||
</b>
|
||||
|
||||
<Notification
|
||||
@@ -45,7 +45,7 @@
|
||||
<!--Actions-->
|
||||
<PopupActions>
|
||||
<ButtonBase class="w-full" @click.native="$closePopup()" button-style="secondary">
|
||||
{{ $t('Close') }}
|
||||
{{ $t('close') }}
|
||||
</ButtonBase>
|
||||
</PopupActions>
|
||||
</PopupWrapper>
|
||||
|
||||
@@ -36,8 +36,8 @@
|
||||
<!--Emoji-->
|
||||
<AppInputSwitch
|
||||
v-if="pickedItem.data.type === 'folder'"
|
||||
:title="$t('Emoji as an Icon')"
|
||||
:description="$t('Replace folder icon with an Emoji')"
|
||||
:title="$t('emoji_as_an_icon')"
|
||||
:description="$t('replace_icon_with_emoji')"
|
||||
:is-last="!isEmoji"
|
||||
>
|
||||
<SwitchInput v-model="isEmoji" :state="isEmoji" />
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
<PopupActions>
|
||||
<ButtonBase class="w-full" @click.native="showSection(undefined)" button-style="secondary">
|
||||
{{ $t('Show Details') }}
|
||||
{{ $t('show_details') }}
|
||||
</ButtonBase>
|
||||
<ButtonBase class="w-full" @click.native="$closePopup()" button-style="theme">
|
||||
{{ $t('awesome_iam_done') }}
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
<PopupActions>
|
||||
<ButtonBase class="w-full" @click.native="showSection(undefined)" button-style="secondary">
|
||||
{{ $t('Show Details') }}
|
||||
{{ $t('show_details') }}
|
||||
</ButtonBase>
|
||||
<ButtonBase
|
||||
class="w-full"
|
||||
@@ -53,7 +53,7 @@
|
||||
:loading="isLoading"
|
||||
:disabled="isLoading"
|
||||
>
|
||||
{{ $t('Send') }}
|
||||
{{ $t('send') }}
|
||||
</ButtonBase>
|
||||
</PopupActions>
|
||||
</div>
|
||||
@@ -180,7 +180,7 @@
|
||||
:loading="isLoading"
|
||||
:disabled="isLoading"
|
||||
>
|
||||
{{ $t('Store Changes') }}
|
||||
{{ $t('store_changes') }}
|
||||
</ButtonBase>
|
||||
</PopupActions>
|
||||
</div>
|
||||
@@ -236,8 +236,8 @@ export default {
|
||||
popupTitle() {
|
||||
return (
|
||||
{
|
||||
'qr-code': this.$t('Get your QR code'),
|
||||
'email-sharing': this.$t('Share on multiple emails'),
|
||||
'qr-code': this.$t('get_qr_code'),
|
||||
'email-sharing': this.$t('share_with_multiple_emails'),
|
||||
}[this.activeSection] || this.$t('popup_share_edit.title')
|
||||
)
|
||||
},
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
v-if="!column.hidden"
|
||||
>
|
||||
<span class="text-xs text-gray-400 dark:text-gray-500">
|
||||
{{ column.label }}
|
||||
{{ $t(column.label) }}
|
||||
</span>
|
||||
|
||||
<chevron-up-icon
|
||||
@@ -192,7 +192,7 @@
|
||||
</ul>
|
||||
|
||||
<span class="text-xs text-gray-600 dark:text-gray-500">
|
||||
Showing {{ data.meta.from }} - {{ data.meta.to }} from {{ data.meta.total }} records
|
||||
{{ $t('paginator', {from: data.meta.from, to: data.meta.to, total: data.meta.total}) }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
|
||||
<!--Folder sub line-->
|
||||
<small v-if="isFolder" class="block text-xs text-gray-500">
|
||||
{{ folderItems === 0 ? $t('folder.empty') : $tc('folder.item_counts', folderItems) }},
|
||||
{{ folderItems === 0 ? $t('empty') : $tc('folder.item_counts', folderItems) }},
|
||||
{{ timeStamp }}
|
||||
</small>
|
||||
</div>
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
<div class="mt-auto text-center">
|
||||
<div
|
||||
@click="$store.dispatch('logOut')"
|
||||
:title="$t('locations.logout')"
|
||||
:title="$t('logout')"
|
||||
class="button-icon inline-block cursor-pointer rounded-xl p-3 hover:bg-light-300 dark:hover:bg-4x-dark-foreground"
|
||||
>
|
||||
<power-icon size="20" />
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<ArrowDownIcon size="12" class="vue-feather text-gray-400" />
|
||||
|
||||
<span class="ml-1.5 text-xs text-gray-400">
|
||||
{{ $t('Navigate') }}
|
||||
{{ $t('navigate') }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<CornerDownLeftIcon size="12" class="vue-feather text-gray-400" />
|
||||
|
||||
<span class="ml-1.5 text-xs text-gray-400">
|
||||
{{ $t('Go') }}
|
||||
{{ $t('go') }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
@keyup.down="onPageDown"
|
||||
@keyup.up="onPageUp"
|
||||
type="text"
|
||||
placeholder="Spotlight search..."
|
||||
:placeholder="$t('spotlight_search')"
|
||||
ref="searchInput"
|
||||
/>
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
class="relative z-50 px-4 pb-4"
|
||||
>
|
||||
<CategoryName>
|
||||
{{ $t('Suggested Filters') }}
|
||||
{{ $t('suggested_filters') }}
|
||||
</CategoryName>
|
||||
|
||||
<FilterSuggestion
|
||||
@@ -82,7 +82,7 @@
|
||||
<div v-if="isNotEmptyQuery" class="relative z-50 px-4 pb-4">
|
||||
<!--Show actions-->
|
||||
<CategoryName v-if="actions.length !== 0">
|
||||
{{ $t('Actions') }}
|
||||
{{ $t('actions') }}
|
||||
</CategoryName>
|
||||
|
||||
<div v-if="actions.length !== 0" class="mb-2">
|
||||
@@ -236,7 +236,7 @@
|
||||
|
||||
<!--Show results-->
|
||||
<CategoryName v-if="!activeFilter && results.length !== 0">
|
||||
{{ $t('Files & Folders') }}
|
||||
{{ $t('files_and_folders') }}
|
||||
</CategoryName>
|
||||
|
||||
<div v-if="results.length !== 0" v-for="(result, i) in results" :key="result.data.id" class="relative">
|
||||
@@ -377,56 +377,56 @@ export default {
|
||||
actionList() {
|
||||
let adminLocations = [
|
||||
{
|
||||
title: this.$t('Go To Dashboard'),
|
||||
title: this.$t('go_to_dashboard'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'Dashboard',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Go To Settings'),
|
||||
title: this.$t('go_to_settings'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'AppOthers',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Go To Payments'),
|
||||
title: this.$t('go_to_payments'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'AppPayments',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Go To Pages'),
|
||||
title: this.$t('go_to_pages'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'Pages',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Go To Languages'),
|
||||
title: this.$t('go_to_languages'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'Language',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Show all Users'),
|
||||
title: this.$t('show_all_users'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'Users',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Show all Plans'),
|
||||
title: this.$t('show_all_plans'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'Plans',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Show Transactions'),
|
||||
title: this.$t('show_transactions'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'Invoices',
|
||||
@@ -436,42 +436,42 @@ export default {
|
||||
|
||||
let fileLocations = [
|
||||
{
|
||||
title: this.$t('Go Home'),
|
||||
title: this.$t('go_home_spotlight'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'Files',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Go To Recent Uploads'),
|
||||
title: this.$t('go_to_recent_uploads'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'RecentUploads',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Go To Publicly Shared'),
|
||||
title: this.$t('go_to_publicly_shared'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'MySharedItems',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Go To Trash'),
|
||||
title: this.$t('go_to_trash'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'Trash',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Go To Team Folders'),
|
||||
title: this.$t('go_to_team_folders'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'TeamFolders',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Go To Shared with Me'),
|
||||
title: this.$t('go_to_shared_with_me'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'SharedWithMe',
|
||||
@@ -481,7 +481,7 @@ export default {
|
||||
|
||||
let adminActions = [
|
||||
{
|
||||
title: this.$t('Create User'),
|
||||
title: this.$t('create_user'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'UserCreate',
|
||||
@@ -491,42 +491,42 @@ export default {
|
||||
|
||||
let userSettings = [
|
||||
{
|
||||
title: this.$t('Update Profile Settings'),
|
||||
title: this.$t('update_profile_settings'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'Profile',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Update Security & API'),
|
||||
title: this.$t('update_security_api'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'Password',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Show Storage Details'),
|
||||
title: this.$t('show_storage_details'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'Storage',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Show Billing'),
|
||||
title: this.$t('show_billing'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'Billing',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Empty Your Trash'),
|
||||
title: this.$t('empty_your_trash'),
|
||||
action: {
|
||||
type: 'function',
|
||||
value: 'empty-trash',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Log Out'),
|
||||
title: this.$t('logout'),
|
||||
action: {
|
||||
type: 'function',
|
||||
value: 'log-out',
|
||||
@@ -536,14 +536,14 @@ export default {
|
||||
|
||||
let createList = [
|
||||
{
|
||||
title: this.$t('Create Team Folder'),
|
||||
title: this.$t('create_team_folder'),
|
||||
action: {
|
||||
type: 'function',
|
||||
value: 'create-team-folder',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Create File Request'),
|
||||
title: this.$t('create_file_request'),
|
||||
action: {
|
||||
type: 'function',
|
||||
value: 'create-file-request',
|
||||
@@ -553,21 +553,21 @@ export default {
|
||||
|
||||
let functionList = [
|
||||
{
|
||||
title: this.$t('Toggle Grid/List View'),
|
||||
title: this.$t('toggle_grid_list_view'),
|
||||
action: {
|
||||
type: 'function',
|
||||
value: 'toggle-grid-list',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Toggle Dark/Light Mode'),
|
||||
title: this.$t('toggle_dark_light_mode'),
|
||||
action: {
|
||||
type: 'function',
|
||||
value: 'dark-mode',
|
||||
},
|
||||
},
|
||||
{
|
||||
title: this.$t('Toggle Full-Screen Mode'),
|
||||
title: this.$t('toggle_full_screen_mode'),
|
||||
action: {
|
||||
type: 'function',
|
||||
value: 'full-screen-mode',
|
||||
@@ -578,7 +578,7 @@ export default {
|
||||
// Available only for apple users
|
||||
if (this.$isApple()) {
|
||||
functionList.push({
|
||||
title: this.$t('Toggle Emoji Type'),
|
||||
title: this.$t('toggle_emoji_type'),
|
||||
action: {
|
||||
type: 'function',
|
||||
value: 'toggle-emoji',
|
||||
@@ -596,7 +596,7 @@ export default {
|
||||
// Available only for fixed subscription
|
||||
if (this.config.subscriptionType === 'fixed') {
|
||||
adminLocations.push({
|
||||
title: this.$t('Show all Subscriptions'),
|
||||
title: this.$t('show_all_subscriptions'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: 'Subscriptions',
|
||||
@@ -610,7 +610,7 @@ export default {
|
||||
this.config.subscriptionType === 'fixed'
|
||||
) {
|
||||
adminActions.push({
|
||||
title: this.$t('Create Plan'),
|
||||
title: this.$t('create_plan'),
|
||||
action: {
|
||||
type: 'route',
|
||||
value: this.config.subscriptionType === 'fixed' ? 'CreateFixedPlan' : 'CreateMeteredPlan',
|
||||
@@ -657,7 +657,7 @@ export default {
|
||||
filters: [
|
||||
{
|
||||
keyword: 'u',
|
||||
description: this.$t('Search through your users...'),
|
||||
description: this.$t('search_your_users'),
|
||||
slug: 'users',
|
||||
},
|
||||
],
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<template>
|
||||
<PopupWrapper name="change-plan-subscription">
|
||||
<PopupHeader :title="$t('Change Your Plan')" icon="credit-card" />
|
||||
<PopupHeader :title="$t('change_your_plan')" icon="credit-card" />
|
||||
|
||||
<!--Select Payment Plans-->
|
||||
<PopupContent v-if="plans">
|
||||
<InfoBox v-if="plans.data.length === 0" class="!mb-0">
|
||||
<p>{{ $t("There isn't any plan yet.") }}</p>
|
||||
<p>{{ $t("not_any_plan") }}</p>
|
||||
</InfoBox>
|
||||
|
||||
<!--Toggle yearly billing-->
|
||||
@@ -37,7 +37,7 @@
|
||||
:button-style="buttonStyle"
|
||||
:loading="isLoading"
|
||||
@click.native="proceedToPayment"
|
||||
>{{ $t('Change Plan') }}
|
||||
>{{ $t('change_plan') }}
|
||||
</ButtonBase>
|
||||
</PopupActions>
|
||||
</PopupWrapper>
|
||||
@@ -152,7 +152,7 @@ export default {
|
||||
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('Your subscription was successfully changed.'),
|
||||
message: this.$t('subscription_changed'),
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -21,12 +21,12 @@
|
||||
</div>
|
||||
</div>
|
||||
<span v-if="!row.data.relationships.user" class="text-xs font-bold text-gray-500">
|
||||
{{ $t('User was deleted') }}
|
||||
{{ $t('user_was_deleted') }}
|
||||
</span>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
<ColorLabel class="capitalize" :color="$getTransactionStatusColor(row.data.attributes.status)">
|
||||
{{ row.data.attributes.status }}
|
||||
{{ $t(row.data.attributes.status) }}
|
||||
</ColorLabel>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
|
||||
@@ -21,12 +21,12 @@
|
||||
</div>
|
||||
</div>
|
||||
<span v-if="!row.data.relationships.user" class="text-xs font-bold text-gray-500">
|
||||
{{ $t('User was deleted') }}
|
||||
{{ $t('user_was_deleted') }}
|
||||
</span>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
<ColorLabel class="capitalize" :color="$getTransactionStatusColor(row.data.attributes.status)">
|
||||
{{ row.data.attributes.status }}
|
||||
{{ $t(row.data.attributes.status) }}
|
||||
</ColorLabel>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
{{ card.data.attributes.last4 }}
|
||||
</b>
|
||||
</div>
|
||||
<b class="text-sm font-bold leading-none"> {{ $t('Expires') }} {{ card.data.attributes.expiration }} </b>
|
||||
<b class="text-sm font-bold leading-none"> {{ $t('expires') }} {{ card.data.attributes.expiration }} </b>
|
||||
<Trash2Icon @click="deleteCreditCard(card.data.id)" size="15" class="cursor-pointer" />
|
||||
</div>
|
||||
</template>
|
||||
@@ -27,10 +27,8 @@ export default {
|
||||
methods: {
|
||||
deleteCreditCard(id) {
|
||||
events.$emit('confirm:open', {
|
||||
title: this.$t('Are you sure you want to delete your credit card?'),
|
||||
message: this.$t(
|
||||
'We will no longer settle your payments automatically and you will have to fund your account for the next payments.'
|
||||
),
|
||||
title: this.$t('want_to_delete_card_title'),
|
||||
message: this.$t('want_to_delete_card_description'),
|
||||
action: {
|
||||
id: id,
|
||||
operation: 'delete-credit-card',
|
||||
@@ -48,7 +46,7 @@ export default {
|
||||
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('Your credit card was deleted.'),
|
||||
message: this.$t('credit_card_deleted'),
|
||||
})
|
||||
})
|
||||
.catch(() => this.$isSomethingWrong())
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
:class="{ 'text-gray-400': !isSelectedYearlyPlans }"
|
||||
class="cursor-pointer text-xs font-bold"
|
||||
>
|
||||
{{ $t('Billed Annually') }}
|
||||
{{ $t('billed_annually') }}
|
||||
</label>
|
||||
<div class="relative inline-block w-12 select-none align-middle">
|
||||
<SwitchInput
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div v-if="$store.getters.isLimitedUser" class="bg-red-500 py-1 text-center">
|
||||
<router-link :to="{ name: 'Billing' }" class="text-xs font-bold text-white">
|
||||
{{ $t('Your functionality is restricted. Please review your billing settings.') }}
|
||||
{{ $t('restricted_account_warning') }}
|
||||
</router-link>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<PopupWrapper name="select-plan-subscription">
|
||||
<PopupHeader :title="$t('Upgrade Your Account')" icon="credit-card" />
|
||||
<PopupHeader :title="$t('upgrade_your_account')" icon="credit-card" />
|
||||
|
||||
<!--Payment Options-->
|
||||
<div v-if="isPaymentOptionPage">
|
||||
@@ -9,7 +9,7 @@
|
||||
<PaymentMethod
|
||||
v-if="config.isStripe"
|
||||
driver="stripe"
|
||||
:description="$t('Pay by your credit card or Apple Pay')"
|
||||
:description="$t(config.stripe_payment_description)"
|
||||
>
|
||||
<div v-if="stripe.isGettingCheckoutLink" class="translate-y-3 scale-50 transform">
|
||||
<Spinner />
|
||||
@@ -19,7 +19,7 @@
|
||||
:class="{ 'opacity-0': stripe.isGettingCheckoutLink }"
|
||||
class="text-theme cursor-pointer text-sm font-bold"
|
||||
>
|
||||
{{ $t('Select') }}
|
||||
{{ $t('select') }}
|
||||
</span>
|
||||
</PaymentMethod>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<PaymentMethod
|
||||
@click.native="payByPayPal"
|
||||
driver="paypal"
|
||||
:description="$t('Available PayPal Credit, Debit or Credit Card.')"
|
||||
:description="$t(config.paypal_payment_description)"
|
||||
>
|
||||
<div v-if="paypal.isMethodLoading" class="translate-y-3 scale-50 transform">
|
||||
<Spinner />
|
||||
@@ -43,7 +43,7 @@
|
||||
:class="{ 'opacity-0': paypal.isMethodLoading }"
|
||||
class="text-theme cursor-pointer text-sm font-bold"
|
||||
>
|
||||
{{ $t('Select') }}
|
||||
{{ $t('select') }}
|
||||
</span>
|
||||
</PaymentMethod>
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
<PaymentMethod
|
||||
v-if="config.isPaystack"
|
||||
driver="paystack"
|
||||
:description="$t('Available Bank Account, USSD, Mobile Money, Apple Pay')"
|
||||
:description="$t(config.paystack_payment_description)"
|
||||
>
|
||||
<div v-if="paystack.isGettingCheckoutLink" class="translate-y-3 scale-50 transform">
|
||||
<Spinner />
|
||||
@@ -65,14 +65,14 @@
|
||||
:class="{ 'opacity-0': paystack.isGettingCheckoutLink }"
|
||||
class="text-theme cursor-pointer text-sm font-bold"
|
||||
>
|
||||
{{ $t('Select') }}
|
||||
{{ $t('select') }}
|
||||
</span>
|
||||
</PaymentMethod>
|
||||
</PopupContent>
|
||||
|
||||
<PopupActions>
|
||||
<ButtonBase class="w-full" @click.native="$closePopup()" button-style="secondary">
|
||||
{{ $t('Cancel Payment') }}
|
||||
{{ $t('cancel_payment') }}
|
||||
</ButtonBase>
|
||||
</PopupActions>
|
||||
</div>
|
||||
@@ -110,7 +110,7 @@
|
||||
v-if="plans && plans.data.length !== 0"
|
||||
:button-style="buttonStyle"
|
||||
@click.native="isPaymentOptionPage = true"
|
||||
>{{ $t('Upgrade Account') }}
|
||||
>{{ $t('upgrade_account') }}
|
||||
</ButtonBase>
|
||||
</PopupActions>
|
||||
</div>
|
||||
@@ -221,7 +221,7 @@ export default {
|
||||
} catch (error) {
|
||||
events.$emit('toaster', {
|
||||
type: 'danger',
|
||||
message: this.$t('Failed to load the PayPal service'),
|
||||
message: this.$t('failed_to_load_paypal'),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -266,7 +266,7 @@ export default {
|
||||
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('Your payment was successfully received.'),
|
||||
message: this.$t('payment_was_successfully_received'),
|
||||
})
|
||||
|
||||
// todo: temporary reload function
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div v-if="!hasPaymentMethod" class="card shadow-card">
|
||||
<FormLabel icon="dollar">
|
||||
{{ $t('Balance') }}
|
||||
{{ $t('balance') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-2xl font-extrabold sm:text-3xl">
|
||||
@@ -25,7 +25,7 @@
|
||||
>
|
||||
<AppInputText
|
||||
:description="
|
||||
$t('The amount will be increased as soon as we register your charge from payment gateway.')
|
||||
$t('amount_increase_description')
|
||||
"
|
||||
:error="errors[0]"
|
||||
:is-last="true"
|
||||
@@ -33,7 +33,7 @@
|
||||
<div class="space-y-4 sm:flex sm:space-x-4 sm:space-y-0">
|
||||
<input
|
||||
v-model="chargeAmount"
|
||||
:placeholder="$t('Fund Your Account Balance...')"
|
||||
:placeholder="$t('fund_account_balance')"
|
||||
type="number"
|
||||
min="1"
|
||||
max="999999999"
|
||||
@@ -41,7 +41,7 @@
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
/>
|
||||
<ButtonBase type="submit" button-style="theme" class="w-full sm:w-auto">
|
||||
{{ $t('Make a Payment') }}
|
||||
{{ $t('make_payment') }}
|
||||
</ButtonBase>
|
||||
</div>
|
||||
</AppInputText>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="card shadow-card">
|
||||
<FormLabel icon="bell">
|
||||
{{ $t('Billing Alert') }}
|
||||
{{ $t('billing_alert') }}
|
||||
</FormLabel>
|
||||
|
||||
<div v-if="user.data.relationships.alert">
|
||||
@@ -22,7 +22,7 @@
|
||||
</b>
|
||||
|
||||
<b class="block text-sm dark:text-gray-500 text-gray-400">
|
||||
{{ $t('Alert will be triggered after you reach the value above.') }}
|
||||
{{ $t('billing_alert_description') }}
|
||||
</b>
|
||||
</div>
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
<AppInputText
|
||||
:description="
|
||||
$t(
|
||||
'You will receive an email whenever your monthly balance reaches the specified amount above.'
|
||||
'billing_alert_notes'
|
||||
)
|
||||
"
|
||||
:error="errors[0]"
|
||||
@@ -47,7 +47,7 @@
|
||||
<div class="space-y-4 sm:flex sm:space-x-4 sm:space-y-0">
|
||||
<input
|
||||
v-model="billingAlertAmount"
|
||||
:placeholder="$t('Alert Amount...')"
|
||||
:placeholder="$t('alert_amount_')"
|
||||
type="number"
|
||||
min="1"
|
||||
max="999999999"
|
||||
@@ -61,7 +61,7 @@
|
||||
button-style="theme"
|
||||
class="w-full sm:w-auto"
|
||||
>
|
||||
{{ $t('Update Alert') }}
|
||||
{{ $t('update_alert') }}
|
||||
</ButtonBase>
|
||||
</div>
|
||||
</AppInputText>
|
||||
@@ -80,7 +80,7 @@
|
||||
<AppInputText
|
||||
:description="
|
||||
$t(
|
||||
'You will receive an email whenever your monthly balance reaches the specified amount above.'
|
||||
'billing_alert_notes'
|
||||
)
|
||||
"
|
||||
:error="errors[0]"
|
||||
@@ -89,7 +89,7 @@
|
||||
<div class="space-y-4 sm:flex sm:space-x-4 sm:space-y-0">
|
||||
<input
|
||||
v-model="billingAlertAmount"
|
||||
:placeholder="$t('Alert Amount...')"
|
||||
:placeholder="$t('alert_amount_')"
|
||||
type="number"
|
||||
min="1"
|
||||
max="999999999"
|
||||
@@ -103,7 +103,7 @@
|
||||
button-style="theme"
|
||||
class="w-full sm:w-auto"
|
||||
>
|
||||
{{ $t('Set Alert') }}
|
||||
{{ $t('set_alert') }}
|
||||
</ButtonBase>
|
||||
</div>
|
||||
</AppInputText>
|
||||
@@ -162,7 +162,7 @@ export default {
|
||||
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('Your billing alert was updated successfully'),
|
||||
message: this.$t('alert_updated'),
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
@@ -192,7 +192,7 @@ export default {
|
||||
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('Your billing alert was set successfully'),
|
||||
message: this.$t('alert_set_successfully'),
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
@@ -207,9 +207,9 @@ export default {
|
||||
},
|
||||
deleteBillingAlert() {
|
||||
events.$emit('confirm:open', {
|
||||
title: this.$t('Are you sure you want to delete your alert?'),
|
||||
title: this.$t('want_to_delete_alert'),
|
||||
message: this.$t(
|
||||
'You will no longer receive any notifications that your billing limit has been exceeded.'
|
||||
'want_to_delete_alert_description'
|
||||
),
|
||||
action: {
|
||||
id: this.user.data.relationships.alert.data.id,
|
||||
@@ -231,7 +231,7 @@ export default {
|
||||
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('Your billing alert was deleted.'),
|
||||
message: this.$t('deleted_alert'),
|
||||
})
|
||||
})
|
||||
.catch(() => this.$isSomethingWrong())
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
<template>
|
||||
<div v-if="hasSubscription" class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Edit your Subscription') }}
|
||||
{{ $t('edit_your_subscription') }}
|
||||
</FormLabel>
|
||||
|
||||
<AppInputButton
|
||||
v-if="subscription.attributes.status !== 'cancelled'"
|
||||
:title="$t('Cancel Subscription')"
|
||||
:title="$t('cancel_subscription')"
|
||||
:description="
|
||||
$t(
|
||||
'You can cancel your subscription now. You\'ll continue to have access to the features you\'ve paid for until the end of your billing cycle.'
|
||||
'cancel_subscription_description'
|
||||
)
|
||||
"
|
||||
>
|
||||
@@ -19,17 +19,17 @@
|
||||
class="w-full sm:w-auto"
|
||||
button-style="secondary"
|
||||
>
|
||||
{{ $t('Cancel Now') }}
|
||||
{{ $t('cancel_now') }}
|
||||
</ButtonBase>
|
||||
</AppInputButton>
|
||||
|
||||
<AppInputButton
|
||||
:title="$t('Upgrade or Downgrade Plan')"
|
||||
:description="$t('You can upgrade your plan at any time you want.')"
|
||||
:title="$t('upgrade_downgrade_plan')"
|
||||
:description="$t('upgrade_downgrade_plan_description')"
|
||||
:is-last="true"
|
||||
>
|
||||
<ButtonBase @click.native="$changeSubscriptionOptions" class="w-full sm:w-auto" button-style="secondary">
|
||||
{{ $t('Change Plan') }}
|
||||
{{ $t('change_plan') }}
|
||||
</ButtonBase>
|
||||
</AppInputButton>
|
||||
</div>
|
||||
@@ -69,7 +69,7 @@ export default {
|
||||
methods: {
|
||||
cancelSubscriptionConfirmation() {
|
||||
events.$emit('confirm:open', {
|
||||
title: this.$t('Are you sure you want to cancel subscription?'),
|
||||
title: this.$t('want_cancel_subscription'),
|
||||
message: this.$t(
|
||||
"popup_subscription_cancel.message"
|
||||
),
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
<template>
|
||||
<div v-if="!hasSubscription" class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Subscription') }}
|
||||
{{ $t('subscription') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-2xl font-extrabold sm:text-3xl">
|
||||
{{ $t('Free Plan') }}
|
||||
{{ $t('free_plan') }}
|
||||
</b>
|
||||
|
||||
<b v-if="$store.getters.config.allowed_payments" class="mb-3 mb-8 block text-sm text-gray-400">
|
||||
{{ $t('Upgrade your account to get more.') }}
|
||||
{{ $t('upgrade_to_get_more') }}
|
||||
</b>
|
||||
|
||||
<ButtonBase
|
||||
@@ -19,7 +19,7 @@
|
||||
button-style="theme"
|
||||
class="mt-4 w-full"
|
||||
>
|
||||
{{ $t('Upgrade Your Account') }}
|
||||
{{ $t('upgrade_your_account') }}
|
||||
</ButtonBase>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
class="card shadow-card"
|
||||
>
|
||||
<FormLabel icon="frown">
|
||||
{{ $t('Failed Payments') }}
|
||||
{{ $t('failed_payments') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-2xl font-extrabold sm:text-3xl">
|
||||
@@ -14,7 +14,7 @@
|
||||
<b class="mb-3 mb-5 block text-sm text-gray-400">
|
||||
{{
|
||||
$t(
|
||||
"We are unable to charge your usage. Please register new credit card or fund your account with sufficient amount and we'll give it another try!"
|
||||
"unable_to_charge"
|
||||
)
|
||||
}}
|
||||
</b>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div v-if="hasSubscription" class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Subscription') }}
|
||||
{{ $t('subscription') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-xl font-extrabold sm:text-3xl">
|
||||
@@ -50,12 +50,12 @@ export default {
|
||||
max_team_members: 'purple',
|
||||
},
|
||||
message: {
|
||||
max_storage_amount: `Total ${item.use} of ${item.total} Used`,
|
||||
max_team_members: `Total ${item.use} of ${item.total} Members`,
|
||||
max_storage_amount: this.$t('total_x_of_x_used', {use: item.use, total:item.total }),
|
||||
max_team_members: this.$t('total_x_of_x_members', {use: item.use, total:item.total }),
|
||||
},
|
||||
title: {
|
||||
max_storage_amount: `Storage`,
|
||||
max_team_members: `Team Members`,
|
||||
max_storage_amount: this.$t('storage'),
|
||||
max_team_members: this.$t('team_members'),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -75,14 +75,14 @@ export default {
|
||||
},
|
||||
status() {
|
||||
return {
|
||||
active: `Active until ${this.subscription.data.attributes.renews_at}`,
|
||||
cancelled: `Ends at ${this.subscription.data.attributes.ends_at}`,
|
||||
active: this.$t('active_until', {date: this.subscription.data.attributes.renews_at}),
|
||||
cancelled: this.$t('ends_at_date', {date: this.subscription.data.attributes.ends_at}),
|
||||
}[this.subscription.data.attributes.status]
|
||||
},
|
||||
price() {
|
||||
return {
|
||||
month: `${this.subscription.data.relationships.plan.data.attributes.price} Per Month`,
|
||||
year: `${this.subscription.data.relationships.plan.data.attributes.price} Per Year`,
|
||||
month: this.$t('price_per_month', {price: this.subscription.data.relationships.plan.data.attributes.price}),
|
||||
year: this.$t('price_per_year', {price: this.subscription.data.relationships.plan.data.attributes.price}),
|
||||
}[this.subscription.data.relationships.plan.data.attributes.interval]
|
||||
},
|
||||
},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div v-if="canShowForMeteredBilling || canShowForFixedBilling" class="card shadow-card">
|
||||
<FormLabel icon="credit-card">
|
||||
{{ $t('Payment Method') }}
|
||||
{{ $t('payment_method') }}
|
||||
</FormLabel>
|
||||
|
||||
<!-- User has registered payment method -->
|
||||
@@ -23,7 +23,7 @@
|
||||
<PaymentCard v-for="card in user.data.relationships.creditCards.data" :key="card.data.id" :card="card" />
|
||||
|
||||
<small class="hidden pt-3 text-xs leading-none dark:text-gray-500 text-gray-500 sm:block">
|
||||
{{ $t('We are settling your payment automatically via your saved credit card.') }}
|
||||
{{ $t('auto_settled_credit_card') }}
|
||||
</small>
|
||||
</div>
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
button-style="theme"
|
||||
class="mt-4 w-full"
|
||||
>
|
||||
{{ $t('Add Payment Method') }}
|
||||
{{ $t('add_payment_method') }}
|
||||
</ButtonBase>
|
||||
|
||||
<!-- Store credit card form -->
|
||||
@@ -59,7 +59,7 @@
|
||||
button-style="theme"
|
||||
class="mt-4 w-full"
|
||||
>
|
||||
{{ $t('Store My Credit Card') }}
|
||||
{{ $t('store_my_credit_card') }}
|
||||
</ButtonBase>
|
||||
<div id="error-message" class="pt-2 text-xs text-rose-600">
|
||||
<!-- Display error message to your customers here -->
|
||||
@@ -124,7 +124,7 @@ export default {
|
||||
if (this.config.isDemo && this.user.data.attributes.email === 'ho**@hi5ve.digital') {
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('Your credit card was stored successfully'),
|
||||
message: this.$t('credit_card_stored'),
|
||||
})
|
||||
|
||||
return
|
||||
@@ -153,7 +153,7 @@ export default {
|
||||
// site first to authorize the payment, then redirected to the `return_url`.
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('Your credit card was stored successfully'),
|
||||
message: this.$t('credit_card_stored'),
|
||||
})
|
||||
|
||||
// TODO: L9 - load credit card after was stored in database
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="card shadow-card">
|
||||
<FormLabel icon="file-text">
|
||||
{{ $t('Transactions') }}
|
||||
{{ $t('transactions') }}
|
||||
</FormLabel>
|
||||
|
||||
<DatatableWrapper
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="card shadow-card">
|
||||
<FormLabel icon="file-text">
|
||||
{{ $t('Transactions') }}
|
||||
{{ $t('transactions') }}
|
||||
</FormLabel>
|
||||
|
||||
<DatatableWrapper class="overflow-x-auto" api="/api/user/transactions" :paginator="true" :columns="columns">
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<template>
|
||||
<div v-if="canShowForSubscription" class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Update Payments') }}
|
||||
{{ $t('update_payments') }}
|
||||
</FormLabel>
|
||||
|
||||
<AppInputButton
|
||||
:title="$t('Update your Payment Method')"
|
||||
:description="$t('You will be redirected to your payment provider to edit your payment method.')"
|
||||
:title="$t('update_payment_method')"
|
||||
:description="$t('payment_method_update_redirect_description')"
|
||||
:is-last="true"
|
||||
>
|
||||
<ButtonBase
|
||||
@@ -15,7 +15,7 @@
|
||||
class="w-full sm:w-auto"
|
||||
button-style="theme"
|
||||
>
|
||||
{{ $t('Update Payments') }}
|
||||
{{ $t('update_payments') }}
|
||||
</ButtonBase>
|
||||
</AppInputButton>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="card shadow-card">
|
||||
<FormLabel icon="bar-chart">
|
||||
{{ $t('Usage Estimates') }}
|
||||
{{ $t('usage_estimates') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-2xl font-extrabold sm:text-3xl">
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
<b class="mb-3 mb-5 block text-sm dark:text-gray-500 text-gray-400">
|
||||
{{ user.data.relationships.subscription.data.attributes.updated_at }}
|
||||
{{ $t('till now') }}
|
||||
{{ $t('till_now') }}
|
||||
</b>
|
||||
|
||||
<div
|
||||
@@ -39,7 +39,7 @@
|
||||
</div>
|
||||
|
||||
<small class="mt-6 block font-bold">
|
||||
{{ $t('Records are updated on daily bases.') }}
|
||||
{{ $t('records_updated_daily_bases') }}
|
||||
</small>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div @click="togglePermission" class="permission-toggle">
|
||||
<b class="privilege">{{ teamPermissions[permission] }}</b>
|
||||
<b class="privilege">{{ $t(teamPermissions[permission]) }}</b>
|
||||
<refresh-cw-icon size="14" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
{{ teamFolder.data.attributes.name }}
|
||||
</b>
|
||||
<span class="subtitle mb-2 block text-tiny text-gray-600 dark:text-gray-500">
|
||||
{{ $t('Created at') }} {{ teamFolder.data.attributes.created_at }}
|
||||
{{ $t('created_at') }} {{ teamFolder.data.attributes.created_at }}
|
||||
</span>
|
||||
<TeamMembersPreview :folder="teamFolder" :avatar-size="32" class="members" />
|
||||
</div>
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
{{ entry.email }}
|
||||
</b>
|
||||
<span v-if="entry.id" class="block text-xs text-gray-600 dark:text-gray-500">
|
||||
{{ $t('Waiting for accept invitation...') }}
|
||||
{{ $t('waiting_for_accept_invitation') }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="w-28">
|
||||
<div v-if="!teamFolder" class="text-right md:text-center">
|
||||
<span class="mr-3 align-middle text-tiny text-gray-600 dark:text-gray-500 md:mr-0.5">
|
||||
{{ $t('Not selected') }}
|
||||
{{ $t('not_selected') }}
|
||||
</span>
|
||||
</div>
|
||||
<TeamMembersPreview
|
||||
|
||||
@@ -33,14 +33,14 @@
|
||||
|
||||
<!--Add Member-->
|
||||
<ValidationProvider tag="div" mode="passive" name="Email" v-slot="{ errors }">
|
||||
<AppInputText :title="$t('Add Member')" :error="errors[0]">
|
||||
<AppInputText :title="$t('add_member')" :error="errors[0]">
|
||||
<div class="relative">
|
||||
<span
|
||||
v-if="email"
|
||||
@click="addMember"
|
||||
class="button-base theme absolute right-2 top-1/2 -translate-y-1/2 transform cursor-pointer rounded-lg px-3 py-2 text-sm font-bold"
|
||||
>
|
||||
Add
|
||||
{{ $t('add') }}
|
||||
</span>
|
||||
<input
|
||||
@keypress.enter.stop.prevent="addMember"
|
||||
@@ -49,7 +49,7 @@
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
type="email"
|
||||
class="focus-border-theme input-dark"
|
||||
:placeholder="$t('Type member email...')"
|
||||
:placeholder="$t('type_member_email_')"
|
||||
/>
|
||||
</div>
|
||||
</AppInputText>
|
||||
@@ -57,15 +57,15 @@
|
||||
|
||||
<!--Member list-->
|
||||
<ValidationProvider tag="div" mode="passive" name="Members" rules="required" v-slot="{ errors }">
|
||||
<AppInputText :title="$t('Your Members')" :error="errors[0]" :is-last="true">
|
||||
<AppInputText :title="$t('your_members')" :error="errors[0]" :is-last="true">
|
||||
<span v-if="errors[0]" class="error-message" style="margin-top: -5px">
|
||||
{{ $t('Please add at least one member.') }}
|
||||
{{ $t('add_at_least_one_member') }}
|
||||
</span>
|
||||
|
||||
<TeamList v-model="invitations" />
|
||||
|
||||
<p v-if="Object.values(invitations).length === 0" class="text-xs dark:text-gray-500">
|
||||
{{ $t('Please add at least one member into your Team Folders.') }}
|
||||
{{ $t('add_at_least_one_member_into_team_folder') }}
|
||||
</p>
|
||||
</AppInputText>
|
||||
</ValidationProvider>
|
||||
@@ -128,10 +128,10 @@ export default {
|
||||
computed: {
|
||||
...mapGetters(['user']),
|
||||
popupTitle() {
|
||||
return this.item ? this.$t('Convert as Team Folder') : this.$t('Create Team Folder')
|
||||
return this.item ? this.$t('convert_as_team_folder') : this.$t('create_team_folder')
|
||||
},
|
||||
popupSubmit() {
|
||||
return this.item ? this.$t('Move & Invite Members') : this.$t('Create Team Folder')
|
||||
return this.item ? this.$t('move_and_invite_members') : this.$t('create_team_folder')
|
||||
},
|
||||
isNewFolderTeamCreation() {
|
||||
return !this.item
|
||||
@@ -187,8 +187,8 @@ export default {
|
||||
}
|
||||
|
||||
let toasterMessage = this.isNewFolderTeamCreation
|
||||
? this.$t('Your Team was invited successfully.')
|
||||
: this.$t('Your Team was invited and folder was moved into Team Folders section.')
|
||||
? this.$t('team_was_invited')
|
||||
: this.$t('team_was_invited_and_folder_moved')
|
||||
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
@@ -209,14 +209,14 @@ export default {
|
||||
addMember() {
|
||||
if (this.$isInvalidEmail(this.email)) {
|
||||
this.$refs.teamFolderForm.setErrors({
|
||||
Email: this.$t('You have to type valid email'),
|
||||
Email: this.$t('type_valid_email'),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if (this.$cantInviteMember(this.email, this.invitations)) {
|
||||
this.$refs.teamFolderForm.setErrors({
|
||||
Email: this.$t('You have to upgrade your account to add this new member.'),
|
||||
Email: this.$t('upgrade_to_invite_members'),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<PopupWrapper name="update-team-folder">
|
||||
<!--Title-->
|
||||
<PopupHeader :title="$t('Edit Team Folder')" icon="user-plus" />
|
||||
<PopupHeader :title="$t('edit_team_folder')" icon="user-plus" />
|
||||
|
||||
<!--Content-->
|
||||
<PopupContent>
|
||||
@@ -12,14 +12,14 @@
|
||||
<ValidationObserver @submit.prevent="updateTeamFolder" ref="teamFolderForm" v-slot="{ invalid }" tag="form">
|
||||
<!--Add Member-->
|
||||
<ValidationProvider tag="div" mode="passive" name="Email" v-slot="{ errors }">
|
||||
<AppInputText :title="$t('Add Member')" :error="errors[0]">
|
||||
<AppInputText :title="$t('add_member')" :error="errors[0]">
|
||||
<div class="relative">
|
||||
<span
|
||||
v-if="email"
|
||||
@click="addMember"
|
||||
class="button-base theme absolute right-2 top-1/2 -translate-y-1/2 transform cursor-pointer rounded-lg px-3 py-2 text-sm font-bold"
|
||||
>
|
||||
Add
|
||||
{{ $t('add') }}
|
||||
</span>
|
||||
|
||||
<!--TODO: Fix !pr-20 after JIT official release-->
|
||||
@@ -30,7 +30,7 @@
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
type="email"
|
||||
class="focus-border-theme input-dark !pr-20"
|
||||
:placeholder="$t('Type member email...')"
|
||||
:placeholder="$t('type_member_email_')"
|
||||
/>
|
||||
</div>
|
||||
</AppInputText>
|
||||
@@ -38,9 +38,9 @@
|
||||
|
||||
<!--Member list-->
|
||||
<ValidationProvider tag="div" mode="passive" name="Members" v-slot="{ errors }">
|
||||
<label class="input-label">{{ $t('Your Members') }}:</label>
|
||||
<label class="input-label">{{ $t('your_members') }}:</label>
|
||||
<span v-if="errors[0]" class="error-message" style="margin-top: -5px">{{
|
||||
$t('Please add at least one member.')
|
||||
$t('add_at_least_one_member')
|
||||
}}</span>
|
||||
<TeamList v-model="members" />
|
||||
<TeamList v-model="invitations" />
|
||||
@@ -49,7 +49,7 @@
|
||||
v-if="Object.values(members).length === 0 && Object.values(invitations).length === 0"
|
||||
class="text-xs dark:text-gray-500"
|
||||
>
|
||||
{{ $t('Please add at least one member into your Team Folder.') }}
|
||||
{{ $t('add_at_least_one_member_into_team_folder') }}
|
||||
</p>
|
||||
</ValidationProvider>
|
||||
</ValidationObserver>
|
||||
@@ -66,7 +66,7 @@
|
||||
:button-style="isDisabledSubmit ? 'secondary' : 'theme'"
|
||||
:loading="isLoading"
|
||||
:disabled="isLoading || isDisabledSubmit"
|
||||
>{{ $t('Update Team Folder') }}
|
||||
>{{ $t('update_team_folder') }}
|
||||
</ButtonBase>
|
||||
</PopupActions>
|
||||
</PopupWrapper>
|
||||
@@ -139,7 +139,7 @@ export default {
|
||||
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('Your team folder was updated'),
|
||||
message: this.$t('team_folder_updated'),
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
@@ -160,14 +160,14 @@ export default {
|
||||
addMember() {
|
||||
if (this.$isInvalidEmail(this.email)) {
|
||||
this.$refs.teamFolderForm.setErrors({
|
||||
Email: this.$t('You have to type valid email'),
|
||||
Email: this.$t('type_valid_email'),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if (this.$cantInviteMember(this.email, this.invitations)) {
|
||||
this.$refs.teamFolderForm.setErrors({
|
||||
Email: this.$t('You have to upgrade your account to add this new member.'),
|
||||
Email: this.$t('upgrade_to_invite_members'),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
20
resources/js/helpers/AlertHelpers.js
vendored
20
resources/js/helpers/AlertHelpers.js
vendored
@@ -7,16 +7,16 @@ const AlertHelpers = {
|
||||
Vue.prototype.$temporarilyDisabledUpload = function () {
|
||||
let messages = {
|
||||
metered: {
|
||||
title: i18n.t('Upload is temporarily disabled'),
|
||||
message: i18n.t('Please review your billing settings.'),
|
||||
title: i18n.t('upload_temporarily_disabled'),
|
||||
message: i18n.t('upload_temporarily_disabled_note'),
|
||||
},
|
||||
fixed: {
|
||||
title: i18n.t('Upload is temporarily disabled'),
|
||||
message: i18n.t('Please review your billing settings.'),
|
||||
title: i18n.t('upload_temporarily_disabled'),
|
||||
message: i18n.t('upload_temporarily_disabled_note'),
|
||||
},
|
||||
none: {
|
||||
title: i18n.t('You exceeded your upload limit'),
|
||||
message: i18n.t('Unfortunately, you can not upload your file.'),
|
||||
title: i18n.t('exceed_upload_limit'),
|
||||
message: i18n.t('exceed_upload_limit_description'),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -28,15 +28,15 @@ const AlertHelpers = {
|
||||
|
||||
Vue.prototype.$temporarilyDisabledFolderCreate = function () {
|
||||
events.$emit('alert:open', {
|
||||
title: i18n.t('Folder creation is temporarily disabled'),
|
||||
message: i18n.t('Please review your billing settings.'),
|
||||
title: i18n.t('create_folder_temporarily_disabled'),
|
||||
message: i18n.t('create_folder_temporarily_disabled_desc'),
|
||||
})
|
||||
}
|
||||
|
||||
Vue.prototype.$temporarilyDisabledDownload = function () {
|
||||
events.$emit('alert:open', {
|
||||
title: i18n.t('File download is temporarily disabled'),
|
||||
message: i18n.t('Please review your billing settings.'),
|
||||
title: i18n.t('download_temporarily_disabled'),
|
||||
message: i18n.t('download_temporarily_disabled_desc'),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
34
resources/js/helpers/functionHelpers.js
vendored
34
resources/js/helpers/functionHelpers.js
vendored
@@ -93,31 +93,31 @@ const FunctionHelpers = {
|
||||
progress: storage.data.meta.images.percentage,
|
||||
color: 'success',
|
||||
value: storage.data.meta.images.used,
|
||||
title: 'Images',
|
||||
title: i18n.t('images'),
|
||||
},
|
||||
{
|
||||
progress: storage.data.meta.videos.percentage,
|
||||
color: 'danger',
|
||||
value: storage.data.meta.videos.used,
|
||||
title: 'Videos',
|
||||
title: i18n.t('videos'),
|
||||
},
|
||||
{
|
||||
progress: storage.data.meta.audios.percentage,
|
||||
color: 'warning',
|
||||
value: storage.data.meta.audios.used,
|
||||
title: 'Audios',
|
||||
title: i18n.t('audios'),
|
||||
},
|
||||
{
|
||||
progress: storage.data.meta.documents.percentage,
|
||||
color: 'info',
|
||||
value: storage.data.meta.documents.used,
|
||||
title: 'Documents',
|
||||
title: i18n.t('documents'),
|
||||
},
|
||||
{
|
||||
progress: storage.data.meta.others.percentage,
|
||||
color: 'purple',
|
||||
value: storage.data.meta.others.used,
|
||||
title: 'Others',
|
||||
title: i18n.t('others'),
|
||||
},
|
||||
]
|
||||
|
||||
@@ -130,7 +130,7 @@ const FunctionHelpers = {
|
||||
progress: 100 - storage.data.attributes.percentage,
|
||||
color: 'secondary',
|
||||
value: storage.data.meta.others.used,
|
||||
title: 'Empty',
|
||||
title: i18n.t('empty'),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -288,27 +288,27 @@ const FunctionHelpers = {
|
||||
return store.getters.currentFolder.data.attributes.name
|
||||
} else {
|
||||
return {
|
||||
RequestUpload: this.$t('Home'),
|
||||
RecentUploads: this.$t('Recent Uploads'),
|
||||
RequestUpload: this.$t('home'),
|
||||
RecentUploads: this.$t('menu.latest'),
|
||||
MySharedItems: this.$t('publicly_shared'),
|
||||
Trash: this.$t('Trash'),
|
||||
Public: this.$t('Files'),
|
||||
Trash: this.$t('trash'),
|
||||
Public: this.$t('menu.files'),
|
||||
Files: this.$t('sidebar.home'),
|
||||
TeamFolders: this.$t('Team Folders'),
|
||||
SharedWithMe: this.$t('Shared With Me'),
|
||||
TeamFolders: this.$t('team_folders'),
|
||||
SharedWithMe: this.$t('shared_with_me'),
|
||||
}[this.$route.name]
|
||||
}
|
||||
}
|
||||
|
||||
Vue.prototype.$getCurrentSectionName = function () {
|
||||
return {
|
||||
RecentUploads: this.$t('Recent Uploads'),
|
||||
RecentUploads: this.$t('menu.latest'),
|
||||
MySharedItems: this.$t('publicly_shared'),
|
||||
Trash: this.$t('Trash'),
|
||||
Public: this.$t('Files'),
|
||||
Trash: this.$t('trash'),
|
||||
Public: this.$t('menu.files'),
|
||||
Files: this.$t('sidebar.home'),
|
||||
TeamFolders: this.$t('Team Folders'),
|
||||
SharedWithMe: this.$t('Shared With Me'),
|
||||
TeamFolders: this.$t('team_folders'),
|
||||
SharedWithMe: this.$t('shared_with_me'),
|
||||
}[this.$route.name]
|
||||
}
|
||||
|
||||
|
||||
8
resources/js/helpers/itemHelpers.js
vendored
8
resources/js/helpers/itemHelpers.js
vendored
@@ -101,9 +101,9 @@ const itemHelpers = {
|
||||
|
||||
Vue.prototype.$dissolveTeamFolder = function (folder) {
|
||||
events.$emit('confirm:open', {
|
||||
title: i18n.t('Are you sure you want to dissolve this team?'),
|
||||
title: i18n.t('really_dissolve_team'),
|
||||
message: i18n.t(
|
||||
'All team members will lose access to your files and existing folder will be moved into your "Files" section.'
|
||||
'really_dissolve_team_desc'
|
||||
),
|
||||
action: {
|
||||
id: folder.data.id,
|
||||
@@ -114,9 +114,9 @@ const itemHelpers = {
|
||||
|
||||
Vue.prototype.$detachMeFromTeamFolder = function (folder) {
|
||||
events.$emit('confirm:open', {
|
||||
title: i18n.t('Are you sure you want to leave this team folder?'),
|
||||
title: i18n.t('really_leave_team'),
|
||||
message: i18n.t(
|
||||
"You will don't have access to the files and all your previously uploaded content will be part of this Team Folder you are leaving."
|
||||
"really_leave_team_desc"
|
||||
),
|
||||
action: {
|
||||
id: folder.data.id,
|
||||
|
||||
24
resources/js/store/modules/lists.js
vendored
24
resources/js/store/modules/lists.js
vendored
@@ -35,42 +35,42 @@ const defaultState = {
|
||||
],
|
||||
transactionColumns: [
|
||||
{
|
||||
label: i18n.t('Note'),
|
||||
label: 'note',
|
||||
field: 'note',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: i18n.t('User'),
|
||||
label: 'user',
|
||||
field: 'user_id',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: i18n.t('Status'),
|
||||
label: 'status',
|
||||
field: 'status',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: i18n.t('Type'),
|
||||
label: 'type',
|
||||
field: 'type',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: i18n.t('Total'),
|
||||
label: 'total',
|
||||
field: 'amount',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: i18n.t('Payed At'),
|
||||
label: 'payed_at',
|
||||
field: 'created_at',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: i18n.t('Service'),
|
||||
label: 'service',
|
||||
field: 'driver',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: i18n.t('Actions'),
|
||||
label: 'actions',
|
||||
field: 'actions',
|
||||
sortable: false,
|
||||
},
|
||||
@@ -100,8 +100,8 @@ const defaultState = {
|
||||
},
|
||||
],
|
||||
teamPermissions: {
|
||||
'can-edit': 'Can Edit',
|
||||
'can-view': 'Can View',
|
||||
'can-edit': 'can_edit',
|
||||
'can-view': 'can_view',
|
||||
},
|
||||
countries: [
|
||||
{ label: 'Czech Republic', value: 'CZ' },
|
||||
@@ -380,11 +380,11 @@ const defaultState = {
|
||||
],
|
||||
intervalList: [
|
||||
{
|
||||
label: 'Monthly',
|
||||
label: 'monthly',
|
||||
value: 'month',
|
||||
},
|
||||
{
|
||||
label: 'Annually',
|
||||
label: 'yearly',
|
||||
value: 'year',
|
||||
},
|
||||
],
|
||||
|
||||
@@ -93,7 +93,7 @@ export default {
|
||||
let subscriptionLinks = {
|
||||
metered: [
|
||||
{
|
||||
title: this.$t('Payments'),
|
||||
title: this.$t('payments'),
|
||||
route: 'PaymentSettings',
|
||||
icon: 'card',
|
||||
},
|
||||
@@ -104,19 +104,19 @@ export default {
|
||||
linkActivation: ['plans', 'plan'],
|
||||
},
|
||||
{
|
||||
title: this.$t('Transactions'),
|
||||
title: this.$t('transactions'),
|
||||
route: 'Invoices',
|
||||
icon: 'file-text',
|
||||
},
|
||||
],
|
||||
fixed: [
|
||||
{
|
||||
title: this.$t('Payments'),
|
||||
title: this.$t('payments'),
|
||||
route: 'PaymentSettings',
|
||||
icon: 'card',
|
||||
},
|
||||
{
|
||||
title: this.$t('Subscriptions'),
|
||||
title: this.$t('subscriptions'),
|
||||
route: 'Subscriptions',
|
||||
icon: 'dollar',
|
||||
},
|
||||
@@ -127,7 +127,7 @@ export default {
|
||||
linkActivation: ['plans', 'plan'],
|
||||
},
|
||||
{
|
||||
title: this.$t('Transactions'),
|
||||
title: this.$t('transactions'),
|
||||
route: 'Invoices',
|
||||
icon: 'file-text',
|
||||
},
|
||||
@@ -159,7 +159,7 @@ export default {
|
||||
},
|
||||
{
|
||||
groupCollapsable: false,
|
||||
groupTitle: this.$t('Content'),
|
||||
groupTitle: this.$t('content'),
|
||||
groupLinks: [
|
||||
{
|
||||
title: this.$t('pages'),
|
||||
@@ -179,7 +179,7 @@ export default {
|
||||
if (this.config.subscriptionType !== 'none') {
|
||||
sections.push({
|
||||
groupCollapsable: false,
|
||||
groupTitle: this.$t('Subscription'),
|
||||
groupTitle: this.$t('subscription'),
|
||||
groupLinks: subscriptionLinks,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ export default {
|
||||
route: 'AppOthers',
|
||||
},
|
||||
{
|
||||
title: this.$t('Login & Registration'),
|
||||
title: this.$t('login_and_registration'),
|
||||
route: 'AppSignInUp',
|
||||
},
|
||||
{
|
||||
@@ -38,15 +38,15 @@ export default {
|
||||
route: 'AppAdsense',
|
||||
},
|
||||
{
|
||||
title: this.$t('Homepage'),
|
||||
title: this.$t('homepage'),
|
||||
route: 'AppIndex',
|
||||
},
|
||||
{
|
||||
title: this.$t('Environment'),
|
||||
title: this.$t('environment'),
|
||||
route: 'AppEnvironment',
|
||||
},
|
||||
{
|
||||
title: this.$t('Server'),
|
||||
title: this.$t('server'),
|
||||
route: 'AppServer',
|
||||
},
|
||||
],
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
</div>
|
||||
<div v-if="app" class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Branding') }}
|
||||
{{ $t('branding') }}
|
||||
</FormLabel>
|
||||
|
||||
<AppInputText :title="$t('admin_settings.appearance.logo')">
|
||||
@@ -47,7 +47,7 @@
|
||||
/>
|
||||
</AppInputText>
|
||||
|
||||
<AppInputText :title="$t('App Logo Dark Mode (optional)')">
|
||||
<AppInputText :title="$t('app_logo_dark_mode')">
|
||||
<ImageInput
|
||||
@input="$updateImage('/admin/settings', 'app_logo_dark', app.logo_dark)"
|
||||
:image="$getImage(app.logo_dark)"
|
||||
@@ -63,7 +63,7 @@
|
||||
/>
|
||||
</AppInputText>
|
||||
|
||||
<AppInputText :title="$t('App Logo Horizontal Dark Mode (optional)')">
|
||||
<AppInputText :title="$t('app_logo_horizontal_dark_mode')">
|
||||
<ImageInput
|
||||
@input="$updateImage('/admin/settings', 'app_logo_horizontal_dark', app.logo_horizontal_dark)"
|
||||
:image="$getImage(app.logo_horizontal_dark)"
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
class="card shadow-card"
|
||||
>
|
||||
<FormLabel icon="wifi">
|
||||
{{ $t('Broadcasting') }}
|
||||
{{ $t('broadcasting') }}
|
||||
</FormLabel>
|
||||
|
||||
<ValidationProvider tag="div" mode="passive" name="Broadcast Driver" rules="required" v-slot="{ errors }">
|
||||
@@ -106,7 +106,7 @@
|
||||
button-style="theme"
|
||||
class="w-full sm:w-auto"
|
||||
>
|
||||
{{ $t('Save Broadcast Settings') }}
|
||||
{{ $t('save_broadcast_settings') }}
|
||||
</ButtonBase>
|
||||
</ValidationObserver>
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
class="card shadow-card"
|
||||
>
|
||||
<FormLabel icon="hard-drive">
|
||||
{{ $t('Storage Driver') }}
|
||||
{{ $t('storage_driver') }}
|
||||
</FormLabel>
|
||||
|
||||
<ValidationProvider
|
||||
@@ -224,7 +224,7 @@
|
||||
button-style="theme"
|
||||
class="w-full sm:w-auto"
|
||||
>
|
||||
{{ $t('Save Storage Settings') }}
|
||||
{{ $t('save_storage_settings') }}
|
||||
</ButtonBase>
|
||||
</ValidationObserver>
|
||||
|
||||
@@ -236,7 +236,7 @@
|
||||
tag="form"
|
||||
class="card shadow-card"
|
||||
>
|
||||
<FormLabel icon="mail">{{ $t('Mail Driver') }}</FormLabel>
|
||||
<FormLabel icon="mail">{{ $t('mail_driver') }}</FormLabel>
|
||||
|
||||
<ValidationProvider tag="div" mode="passive" name="Mail Driver" rules="required" v-slot="{ errors }">
|
||||
<AppInputText title="Mail Driver" :error="errors[0]">
|
||||
@@ -244,7 +244,7 @@
|
||||
v-model="mailDriver"
|
||||
:default="mailDriver"
|
||||
:options="mailDriverList"
|
||||
placeholder="Select your mail driver"
|
||||
:placeholder="$t('select_mail_driver')"
|
||||
:isError="errors[0]"
|
||||
/>
|
||||
</AppInputText>
|
||||
@@ -846,7 +846,7 @@ export default {
|
||||
.then(() => {
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('Your broadcast driver was updated.'),
|
||||
message: this.$t('broadcast_driver_updated'),
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
@@ -885,7 +885,7 @@ export default {
|
||||
.then(() => {
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('Your storage driver was updated.'),
|
||||
message: this.$t('storage_driver_updated'),
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
<div class="form block-form">
|
||||
<div class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Homepage') }}
|
||||
{{ $t('homepage') }}
|
||||
</FormLabel>
|
||||
|
||||
<AppInputSwitch
|
||||
:title="$t('Allow Homepage')"
|
||||
:description="$t('When this is turned on, your visitors can visit your default homepage.')"
|
||||
:title="$t('allow_homepage')"
|
||||
:description="$t('allow_homepage_note')"
|
||||
:is-last="true"
|
||||
>
|
||||
<SwitchInput
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<!--Store & Upload-->
|
||||
<div v-if="app" class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Storage & Upload') }}
|
||||
{{ $t('storage_upload') }}
|
||||
</FormLabel>
|
||||
|
||||
<!--Available only when is not metered billing-->
|
||||
@@ -71,8 +71,8 @@
|
||||
</FormLabel>
|
||||
|
||||
<AppInputSwitch
|
||||
:title="$t('Allow ReCaptcha')"
|
||||
:description="$t('ReCaptcha will be allowed on Registration and Contact Us forms.')"
|
||||
:title="$t('allow_recaptcha')"
|
||||
:description="$t('allow_recaptcha_note')"
|
||||
:is-last="!recaptcha.allowedService"
|
||||
>
|
||||
<SwitchInput
|
||||
@@ -90,7 +90,7 @@
|
||||
:class="{ 'mb-4': recaptcha.isVisibleCredentialsForm }"
|
||||
>
|
||||
<edit2-icon size="12" class="vue-feather text-theme mr-2" />
|
||||
<b class="text-xs">{{ $t('Update Your Credentials') }}</b>
|
||||
<b class="text-xs">{{ $t('update_your_credentials') }}</b>
|
||||
</div>
|
||||
|
||||
<!--Set up recaptcha credentials-->
|
||||
@@ -103,7 +103,7 @@
|
||||
class="rounded-xl p-5 shadow-lg"
|
||||
>
|
||||
<FormLabel v-if="!config.isRecaptchaConfigured" icon="shield">
|
||||
{{ $t('Configure Credentials') }}
|
||||
{{ $t('configure_your_credentials') }}
|
||||
</FormLabel>
|
||||
|
||||
<ValidationProvider tag="div" mode="passive" name="Site Key" rules="required" v-slot="{ errors }">
|
||||
@@ -137,7 +137,7 @@
|
||||
type="submit"
|
||||
class="w-full"
|
||||
>
|
||||
{{ $t('Store Credentials') }}
|
||||
{{ $t('store_credentials') }}
|
||||
</ButtonBase>
|
||||
</ValidationObserver>
|
||||
</div>
|
||||
@@ -145,12 +145,12 @@
|
||||
<!--Other Settings-->
|
||||
<div v-if="app" class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Application') }}
|
||||
{{ $t('application') }}
|
||||
</FormLabel>
|
||||
|
||||
<AppInputButton
|
||||
:title="$t('Cache')"
|
||||
:description="$t('Did you change anything in your .env file? Then clear your cache.')"
|
||||
:title="$t('cache')"
|
||||
:description="$t('cache_note')"
|
||||
>
|
||||
<ButtonBase
|
||||
@click.native="flushCache"
|
||||
@@ -187,15 +187,15 @@
|
||||
<!-- Subscription -->
|
||||
<div v-if="app" class="card shadow-card">
|
||||
<FormLabel icon="credit-card">
|
||||
{{ $t('Subscription') }}
|
||||
{{ $t('subscription') }}
|
||||
</FormLabel>
|
||||
|
||||
<AppInputText :title="$t('Subscription Type')" :description="$t('Please do not change in production environment.')" :is-last="true">
|
||||
<AppInputText :title="$t('subscription_type')" :description="$t('subscription_type_note')" :is-last="true">
|
||||
<SelectInput
|
||||
@change="subscriptionTypeChange"
|
||||
:default="app.subscriptionType"
|
||||
:options="subscriptionTypes"
|
||||
:placeholder="$t('Select your subscription type')"
|
||||
:placeholder="$t('select_subscription_type')"
|
||||
/>
|
||||
</AppInputText>
|
||||
</div>
|
||||
@@ -255,9 +255,9 @@ export default {
|
||||
methods: {
|
||||
subscriptionTypeChange(type) {
|
||||
events.$emit('confirm:open', {
|
||||
title: this.$t('Are you sure you want to change subscription type?'),
|
||||
title: this.$t(''),
|
||||
message: this.$t(
|
||||
'We strongly do not recommend change this value if there is any subscribed user to prevent any failures. You can operate only with one type of subscription and you can not change it on the fly!'
|
||||
'subscription_type_change_warn_description'
|
||||
),
|
||||
action: {
|
||||
type: type,
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<FormLabel icon="list">Latest Server Logs</FormLabel>
|
||||
|
||||
<InfoBox v-if="!logs.length" class="!mb-0">
|
||||
<p v-html="$t('There is not any server log.')"></p>
|
||||
<p v-html="$t('there_is_not_log')"></p>
|
||||
</InfoBox>
|
||||
|
||||
<div
|
||||
@@ -58,11 +58,11 @@
|
||||
<FormLabel icon="database"> Latest Database Backups </FormLabel>
|
||||
|
||||
<InfoBox v-if="!backups.length" class="!mb-0">
|
||||
<p v-html="$t('There is not any database backup stored.')"></p>
|
||||
<p v-html="$t('there_is_not_database_backup')"></p>
|
||||
</InfoBox>
|
||||
|
||||
<InfoBox v-if="backups.length" class="!mb-3">
|
||||
<p v-html="$t('You can find your backups in <b>/storage/app/app-backups</b>.')"></p>
|
||||
<p v-html="$t('backup_path')"></p>
|
||||
</InfoBox>
|
||||
|
||||
<div
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
</AppInputSwitch>
|
||||
|
||||
<AppInputSwitch
|
||||
:title="$t('Require Email Verification')"
|
||||
:description="$t('admin_settings.others.allow_user_verification_help')"
|
||||
:title="$t('require_email_verification')"
|
||||
:description="$t('require_email_verification_note')"
|
||||
:is-last="true"
|
||||
>
|
||||
<SwitchInput
|
||||
@@ -64,7 +64,7 @@
|
||||
:class="{ 'mb-4': facebook.isVisibleCredentialsForm }"
|
||||
>
|
||||
<edit2-icon size="12" class="vue-feather text-theme mr-2" />
|
||||
<b class="text-xs">{{ $t('Update Your Credentials') }}</b>
|
||||
<b class="text-xs">{{ $t('update_your_credentials') }}</b>
|
||||
</div>
|
||||
|
||||
<!--Set up facebook credentials-->
|
||||
@@ -113,7 +113,7 @@
|
||||
type="submit"
|
||||
class="w-full"
|
||||
>
|
||||
{{ $t('Store Credentials') }}
|
||||
{{ $t('store_credentials') }}
|
||||
</ButtonBase>
|
||||
</ValidationObserver>
|
||||
</div>
|
||||
@@ -150,7 +150,7 @@
|
||||
:class="{ 'mb-4': google.isVisibleCredentialsForm }"
|
||||
>
|
||||
<edit2-icon size="12" class="vue-feather text-theme mr-2" />
|
||||
<b class="text-xs">{{ $t('Update Your Credentials') }}</b>
|
||||
<b class="text-xs">{{ $t('update_your_credentials') }}</b>
|
||||
</div>
|
||||
|
||||
<!--Set up Google credentials-->
|
||||
@@ -197,7 +197,7 @@
|
||||
type="submit"
|
||||
class="w-full"
|
||||
>
|
||||
{{ $t('Store Credentials') }}
|
||||
{{ $t('store_credentials') }}
|
||||
</ButtonBase>
|
||||
</ValidationObserver>
|
||||
</div>
|
||||
@@ -234,7 +234,7 @@
|
||||
:class="{ 'mb-4': github.isVisibleCredentialsForm }"
|
||||
>
|
||||
<edit2-icon size="12" class="vue-feather text-theme mr-2" />
|
||||
<b class="text-xs">{{ $t('Update Your Credentials') }}</b>
|
||||
<b class="text-xs">{{ $t('update_your_credentials') }}</b>
|
||||
</div>
|
||||
|
||||
<!--Set up github credentials-->
|
||||
@@ -281,7 +281,7 @@
|
||||
type="submit"
|
||||
class="w-full"
|
||||
>
|
||||
{{ $t('Store Credentials') }}
|
||||
{{ $t('store_credentials') }}
|
||||
</ButtonBase>
|
||||
</ValidationObserver>
|
||||
</div>
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
</ColorLabel>
|
||||
</a>
|
||||
<b v-if="data.app.license === 'extended'" class="mr-4 inline-block">
|
||||
<span class="text-sm font-bold"> {{ $t('Subscription') }}: </span>
|
||||
<span class="text-sm font-bold"> {{ $t('subscription') }}: </span>
|
||||
<ColorLabel color="purple">
|
||||
{{ config.subscriptionType }}
|
||||
</ColorLabel>
|
||||
@@ -47,7 +47,7 @@
|
||||
>
|
||||
<thumbs-up-icon size="15" class="vue-feather text-theme mr-2.5" />
|
||||
<span class="text-theme text-sm font-bold">
|
||||
{{ $t('Write a Feedback') }}
|
||||
{{ $t('write_feedback') }}
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
@@ -85,7 +85,7 @@
|
||||
<div class="mb-2 md:mb-6 md:flex md:space-x-6">
|
||||
<div class="card mb-4 w-full shadow-card md:mb-0">
|
||||
<FormLabel icon="users">
|
||||
{{ $t('Total Users') }}
|
||||
{{ $t('total_users') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-2xl font-extrabold sm:text-3xl">
|
||||
@@ -101,7 +101,7 @@
|
||||
</div>
|
||||
<div class="card mb-4 w-full shadow-card md:mb-0">
|
||||
<FormLabel icon="hard-drive">
|
||||
{{ $t('Total Storage') }}
|
||||
{{ $t('total_storage') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-2xl font-extrabold sm:text-3xl">
|
||||
@@ -117,7 +117,7 @@
|
||||
</div>
|
||||
<div v-if="config.subscriptionType !== 'none'" class="card mb-4 w-full shadow-card md:mb-0">
|
||||
<FormLabel icon="dollar">
|
||||
{{ $t('Earnings') }}
|
||||
{{ $t('earnings') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-2xl font-extrabold sm:text-3xl">
|
||||
@@ -126,7 +126,7 @@
|
||||
|
||||
<router-link :to="{ name: 'Invoices' }" class="mt-6 flex items-center">
|
||||
<span class="mr-2 whitespace-nowrap text-xs font-bold">
|
||||
{{ $t('Show all transactions') }}
|
||||
{{ $t('show_all_transactions') }}
|
||||
</span>
|
||||
<chevron-right-icon size="16" class="text-theme vue-feather" />
|
||||
</router-link>
|
||||
@@ -136,7 +136,7 @@
|
||||
<!--Upload bandwidth widgets-->
|
||||
<div class="card mb-4 shadow-card md:mb-6">
|
||||
<FormLabel icon="hard-drive">
|
||||
{{ $t('Upload') }}
|
||||
{{ $t('upload') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-2xl font-extrabold sm:text-3xl">
|
||||
@@ -144,7 +144,7 @@
|
||||
</b>
|
||||
|
||||
<b class="mb-3 mb-2 block text-sm dark:text-gray-500 text-gray-400">
|
||||
{{ $t('In last 45 days') }}
|
||||
{{ $t('in_last_x_days') }}
|
||||
</b>
|
||||
|
||||
<BarChart :data="data.disk.upload.records" />
|
||||
@@ -153,7 +153,7 @@
|
||||
<!--Download bandwidth widgets-->
|
||||
<div class="card mb-4 shadow-card md:mb-6">
|
||||
<FormLabel icon="hard-drive">
|
||||
{{ $t('Download') }}
|
||||
{{ $t('download') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-2xl font-extrabold sm:text-3xl">
|
||||
@@ -161,7 +161,7 @@
|
||||
</b>
|
||||
|
||||
<b class="mb-3 mb-5 block text-sm dark:text-gray-500 text-gray-400">
|
||||
{{ $t('In last 45 days') }}
|
||||
{{ $t('in_last_x_days') }}
|
||||
</b>
|
||||
|
||||
<BarChart :data="data.disk.download.records" />
|
||||
@@ -170,7 +170,7 @@
|
||||
<!--Latest registration widgets-->
|
||||
<div class="card mb-4 shadow-card md:mb-6">
|
||||
<FormLabel icon="users">
|
||||
{{ $t('Latest Registrations') }}
|
||||
{{ $t('latest_registrations') }}
|
||||
</FormLabel>
|
||||
|
||||
<WidgetLatestRegistrations />
|
||||
@@ -182,14 +182,14 @@
|
||||
class="card mb-4 shadow-card md:mb-6"
|
||||
>
|
||||
<FormLabel icon="dollar">
|
||||
{{ $t('Latest Transactions') }}
|
||||
{{ $t('latest_transactions') }}
|
||||
</FormLabel>
|
||||
|
||||
<WidgetLatestTransactions />
|
||||
</div>
|
||||
</div>
|
||||
<div id="loader" v-if="isLoading">
|
||||
<Spinner></Spinner>
|
||||
<Spinner />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -36,10 +36,10 @@
|
||||
alt="transaction"
|
||||
/>
|
||||
<h1 class="mb-1 text-2xl font-bold">
|
||||
{{ $t('There is Nothing') }}
|
||||
{{ $t('there_is_nothing') }}
|
||||
</h1>
|
||||
<p class="text-sm text-gray-600">
|
||||
{{ $t('All your transactions will be visible here') }}
|
||||
{{ $t('transaction_will_be_here') }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
:title="$t('set_as_default_language')"
|
||||
:description="
|
||||
$t(
|
||||
'If this language is set as default, app will appear in this language for all users.'
|
||||
'default_language_disclaimer'
|
||||
)
|
||||
"
|
||||
:is-last="true"
|
||||
|
||||
@@ -22,7 +22,7 @@ export default {
|
||||
return {
|
||||
pages: [
|
||||
{
|
||||
title: this.$t('admin_settings.tabs.payments'),
|
||||
title: this.$t('payments'),
|
||||
route: 'AppPayments',
|
||||
},
|
||||
{
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
<!--Global payment settings-->
|
||||
<div class="card shadow-card">
|
||||
<FormLabel icon="dollar">
|
||||
{{ $t('Subscription Payments') }}
|
||||
{{ $t('subscription_payments') }}
|
||||
</FormLabel>
|
||||
|
||||
<AppInputSwitch
|
||||
:title="$t('Allow Subscription Payments')"
|
||||
:description="$t('User can subscribe to fixed or metered plan')"
|
||||
:title="$t('allow_subscription_payments')"
|
||||
:description="$t('allow_subscription_payments_description')"
|
||||
:is-last="true"
|
||||
>
|
||||
<SwitchInput
|
||||
@@ -22,12 +22,12 @@
|
||||
<!--Metered settings-->
|
||||
<div v-if="config.subscriptionType === 'metered' && allowedPayments" class="card shadow-card">
|
||||
<FormLabel icon="bar-chart">
|
||||
{{ $t('Metered Billing Settings') }}
|
||||
{{ $t('metered_billing_settings') }}
|
||||
</FormLabel>
|
||||
|
||||
<AppInputSwitch
|
||||
:title="$t('Allow Registration Bonus')"
|
||||
:description="$t('Credit user automatically bonus to his balance after registration.')"
|
||||
:title="$t('allow_registration_bonus')"
|
||||
:description="$t('allow_registration_bonus_description')"
|
||||
>
|
||||
<SwitchInput
|
||||
@input="$updateText('/admin/settings', 'allowed_registration_bonus', allowedRegistrationBonus)"
|
||||
@@ -38,21 +38,21 @@
|
||||
|
||||
<AppInputText
|
||||
v-if="allowedRegistrationBonus"
|
||||
:title="$t('The Amount of Registration Bonus')"
|
||||
:description="$t('This bonus will be automatically added when user successfully register his account.')"
|
||||
:title="$t('registration_bonus_amount')"
|
||||
:description="$t('registration_bonus_amount_description')"
|
||||
>
|
||||
<input
|
||||
@input="$updateText('/admin/settings', 'registration_bonus_amount', registrationBonusAmount)"
|
||||
v-model="registrationBonusAmount"
|
||||
:placeholder="$t('Type registration bonus amount...')"
|
||||
:placeholder="$t('registration_bonus_amount_')"
|
||||
type="number"
|
||||
class="focus-border-theme input-dark"
|
||||
/>
|
||||
</AppInputText>
|
||||
|
||||
<AppInputButton
|
||||
:title="$t('Metered Plan')"
|
||||
:description="$t('Your price set up for billing multiple features by user usage.')"
|
||||
:title="$t('metered_plan')"
|
||||
:description="$t('metered_plan_description')"
|
||||
:is-last="true"
|
||||
>
|
||||
<router-link
|
||||
@@ -63,13 +63,13 @@
|
||||
}"
|
||||
>
|
||||
<ButtonBase v-if="config.isCreatedMeteredPlan" class="w-full sm:w-auto" button-style="theme">
|
||||
{{ $t('Plan Details') }}
|
||||
{{ $t('plan_details') }}
|
||||
</ButtonBase>
|
||||
</router-link>
|
||||
|
||||
<router-link v-if="!config.isCreatedMeteredPlan" :to="{ name: 'CreateMeteredPlan' }">
|
||||
<ButtonBase class="w-full sm:w-auto" button-style="theme-solid">
|
||||
{{ $t('Create Plan') }}
|
||||
{{ $t('create_plan') }}
|
||||
</ButtonBase>
|
||||
</router-link>
|
||||
</AppInputButton>
|
||||
@@ -81,7 +81,7 @@
|
||||
|
||||
<AppInputSwitch
|
||||
:title="$t('Allow Stripe Service')"
|
||||
:description="$t('Allow your users pay by their credit card')"
|
||||
:description="$t('allow_pay_by_card')"
|
||||
:is-last="!stripe.allowedService"
|
||||
>
|
||||
<SwitchInput
|
||||
@@ -94,8 +94,8 @@
|
||||
<!--Stripe credentials are set up-->
|
||||
<div v-if="stripe.allowedService">
|
||||
<AppInputText
|
||||
:title="$t('Your Webhook URL')"
|
||||
:description="$t('Please copy your url and paste it to the service webhook setup.')"
|
||||
:title="$t('webhook_url')"
|
||||
:description="$t('copy_webhook_note')"
|
||||
>
|
||||
<CopyInput size="small" :str="getWebhookEndpoint('stripe')" />
|
||||
</AppInputText>
|
||||
@@ -103,8 +103,8 @@
|
||||
<div v-if="stripe.isConfigured">
|
||||
<AppInputText
|
||||
@input="$updateText('/admin/settings', 'stripe_payment_description', stripe.paymentDescription)"
|
||||
:title="$t('Payment Description')"
|
||||
:description="$t('The description showed below user payment method selection.')"
|
||||
:title="$t('payment_description')"
|
||||
:description="$t('payment_description_note')"
|
||||
>
|
||||
<textarea
|
||||
rows="2"
|
||||
@@ -118,7 +118,7 @@
|
||||
"
|
||||
v-model="stripe.paymentDescription"
|
||||
:placeholder="
|
||||
$t('Describe in short which methods user can pay with this payment method...')
|
||||
$t('additional_info_about_payment_method_')
|
||||
"
|
||||
type="text"
|
||||
class="focus-border-theme input-dark"
|
||||
@@ -131,7 +131,7 @@
|
||||
:class="{ 'mb-4': stripe.isVisibleCredentialsForm }"
|
||||
>
|
||||
<edit2-icon size="14" class="vue-feather text-theme mr-2.5" />
|
||||
<b class="text-sm">{{ $t('Update Your Credentials') }}</b>
|
||||
<b class="text-sm">{{ $t('update_your_credentials') }}</b>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
class="rounded-xl p-5 shadow-lg"
|
||||
>
|
||||
<FormLabel v-if="!stripe.isConfigured" icon="shield">
|
||||
{{ $t('Configure Your Credentials') }}
|
||||
{{ $t('configure_your_credentials') }}
|
||||
</FormLabel>
|
||||
<ValidationProvider
|
||||
tag="div"
|
||||
@@ -185,7 +185,7 @@
|
||||
<AppInputText :title="$t('Webhook Secret')" :error="errors[0]">
|
||||
<input
|
||||
v-model="stripe.credentials.webhook"
|
||||
:placeholder="$t('Paste your webhook secret')"
|
||||
:placeholder="$t('paste_webhook_secret')"
|
||||
type="text"
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
class="focus-border-theme input-dark"
|
||||
@@ -200,7 +200,7 @@
|
||||
type="submit"
|
||||
class="w-full"
|
||||
>
|
||||
{{ $t('Store Credentials') }}
|
||||
{{ $t('store_credentials') }}
|
||||
</ButtonBase>
|
||||
</ValidationObserver>
|
||||
</div>
|
||||
@@ -212,7 +212,7 @@
|
||||
|
||||
<AppInputSwitch
|
||||
:title="$t('Allow Paystack Service')"
|
||||
:description="$t('Allow your users pay by their credit card')"
|
||||
:description="$t('allow_pay_by_card')"
|
||||
:is-last="!paystack.allowedService"
|
||||
>
|
||||
<SwitchInput
|
||||
@@ -225,8 +225,8 @@
|
||||
<!--Paystack credentials are set up-->
|
||||
<div v-if="paystack.allowedService">
|
||||
<AppInputText
|
||||
:title="$t('Your Webhook URL')"
|
||||
:description="$t('Please copy your url and paste it to the service webhook setup.')"
|
||||
:title="$t('webhook_url')"
|
||||
:description="$t('copy_webhook_note')"
|
||||
>
|
||||
<CopyInput size="small" :str="getWebhookEndpoint('paystack')" />
|
||||
</AppInputText>
|
||||
@@ -236,8 +236,8 @@
|
||||
@input="
|
||||
$updateText('/admin/settings', 'paystack_payment_description', paystack.paymentDescription)
|
||||
"
|
||||
:title="$t('Payment Description')"
|
||||
:description="$t('The description showed below user payment method selection.')"
|
||||
:title="$t('payment_description')"
|
||||
:description="$t('payment_description_note')"
|
||||
>
|
||||
<textarea
|
||||
rows="2"
|
||||
@@ -251,7 +251,7 @@
|
||||
"
|
||||
v-model="paystack.paymentDescription"
|
||||
:placeholder="
|
||||
$t('Describe in short which methods user can pay with this payment method...')
|
||||
$t('additional_info_about_payment_method_')
|
||||
"
|
||||
type="text"
|
||||
class="focus-border-theme input-dark"
|
||||
@@ -264,7 +264,7 @@
|
||||
:class="{ 'mb-4': paystack.isVisibleCredentialsForm }"
|
||||
>
|
||||
<edit2-icon size="14" class="vue-feather text-theme mr-2.5" />
|
||||
<b class="text-sm">{{ $t('Update Your Credentials') }}</b>
|
||||
<b class="text-sm">{{ $t('update_your_credentials') }}</b>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -278,7 +278,7 @@
|
||||
class="rounded-xl p-5 shadow-lg"
|
||||
>
|
||||
<FormLabel v-if="!paystack.isConfigured" icon="shield">
|
||||
{{ $t('Configure Your Credentials') }}
|
||||
{{ $t('configure_your_credentials') }}
|
||||
</FormLabel>
|
||||
<ValidationProvider
|
||||
tag="div"
|
||||
@@ -316,7 +316,7 @@
|
||||
type="submit"
|
||||
class="w-full"
|
||||
>
|
||||
{{ $t('Store Credentials') }}
|
||||
{{ $t('store_credentials') }}
|
||||
</ButtonBase>
|
||||
</ValidationObserver>
|
||||
</div>
|
||||
@@ -328,7 +328,7 @@
|
||||
|
||||
<AppInputSwitch
|
||||
:title="$t('Allow PayPal Service')"
|
||||
:description="$t('Allow your users pay by their credit card')"
|
||||
:description="$t('allow_pay_by_card')"
|
||||
:is-last="!paypal.allowedService"
|
||||
>
|
||||
<SwitchInput
|
||||
@@ -341,8 +341,8 @@
|
||||
<!--Stripe credentials are set up-->
|
||||
<div v-if="paypal.allowedService">
|
||||
<AppInputText
|
||||
:title="$t('Your Webhook URL')"
|
||||
:description="$t('Please copy your url and paste it to the service webhook setup.')"
|
||||
:title="$t('webhook_url')"
|
||||
:description="$t('copy_webhook_note')"
|
||||
>
|
||||
<CopyInput size="small" :str="getWebhookEndpoint('paypal')" />
|
||||
</AppInputText>
|
||||
@@ -358,8 +358,8 @@
|
||||
|
||||
<AppInputText
|
||||
@input="$updateText('/admin/settings', 'paypal_payment_description', paypal.paymentDescription)"
|
||||
:title="$t('Payment Description')"
|
||||
:description="$t('The description showed below user payment method selection.')"
|
||||
:title="$t('payment_description')"
|
||||
:description="$t('payment_description_note')"
|
||||
>
|
||||
<textarea
|
||||
rows="2"
|
||||
@@ -373,7 +373,7 @@
|
||||
"
|
||||
v-model="paypal.paymentDescription"
|
||||
:placeholder="
|
||||
$t('Describe in short which methods user can pay with this payment method...')
|
||||
$t('additional_info_about_payment_method_')
|
||||
"
|
||||
type="text"
|
||||
class="focus-border-theme input-dark"
|
||||
@@ -386,7 +386,7 @@
|
||||
:class="{ 'mb-4': paypal.isVisibleCredentialsForm }"
|
||||
>
|
||||
<edit2-icon size="14" class="vue-feather text-theme mr-2.5" />
|
||||
<b class="text-sm">{{ $t('Update Your Credentials') }}</b>
|
||||
<b class="text-sm">{{ $t('update_your_credentials') }}</b>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -400,7 +400,7 @@
|
||||
class="rounded-xl p-5 shadow-lg"
|
||||
>
|
||||
<FormLabel v-if="!paypal.isConfigured" icon="shield">
|
||||
{{ $t('Configure Your Credentials') }}
|
||||
{{ $t('configure_your_credentials') }}
|
||||
</FormLabel>
|
||||
<ValidationProvider
|
||||
tag="div"
|
||||
@@ -449,7 +449,7 @@
|
||||
type="submit"
|
||||
class="w-full"
|
||||
>
|
||||
{{ $t('Store Credentials') }}
|
||||
{{ $t('store_credentials') }}
|
||||
</ButtonBase>
|
||||
</ValidationObserver>
|
||||
</div>
|
||||
@@ -549,17 +549,17 @@ export default {
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
label: this.$t('Name'),
|
||||
label: this.$t('name'),
|
||||
field: 'name',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Currency'),
|
||||
label: this.$t('currency'),
|
||||
field: 'currency',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Interval'),
|
||||
label: this.$t('interval'),
|
||||
field: 'interval',
|
||||
sortable: true,
|
||||
},
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
<ColorLabel :color="$getPlanStatusColor(row.data.attributes.status)">
|
||||
{{ row.data.attributes.status }}
|
||||
{{ $t(row.data.attributes.status) }}
|
||||
</ColorLabel>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
@@ -49,7 +49,7 @@
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
<span class="text-sm font-bold capitalize">
|
||||
{{ row.data.attributes.interval }}
|
||||
{{ $t(row.data.attributes.interval) }}
|
||||
</span>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
@@ -119,7 +119,7 @@
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
<span class="text-sm font-bold capitalize">
|
||||
{{ row.data.attributes.interval }}
|
||||
{{ $t(row.data.attributes.interval) }}
|
||||
</span>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
@@ -170,16 +170,16 @@
|
||||
/>
|
||||
|
||||
<h1 class="mb-1 text-2xl font-bold">
|
||||
{{ $t('There is Nothing') }}
|
||||
{{ $t('there_is_nothing') }}
|
||||
</h1>
|
||||
|
||||
<p class="text-sm text-gray-600">
|
||||
{{ $t('All your plans will be visible here') }}
|
||||
{{ $t('all_visible_plans_here') }}
|
||||
</p>
|
||||
|
||||
<router-link :to="{ name: createPlanRoute }" class="mt-6 inline-block">
|
||||
<ButtonBase class="action-confirm" button-style="theme">
|
||||
{{ $t('Create First Plan') }}
|
||||
{{ $t('create_first_plan') }}
|
||||
</ButtonBase>
|
||||
</router-link>
|
||||
</div>
|
||||
@@ -219,22 +219,22 @@ export default {
|
||||
return {
|
||||
metered: [
|
||||
{
|
||||
label: this.$t('Name'),
|
||||
label: this.$t('name'),
|
||||
field: 'name',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Status'),
|
||||
label: this.$t('status'),
|
||||
field: 'status',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Currency'),
|
||||
label: this.$t('currency'),
|
||||
field: 'currency',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Interval'),
|
||||
label: this.$t('interval'),
|
||||
field: 'interval',
|
||||
sortable: true,
|
||||
},
|
||||
@@ -249,22 +249,22 @@ export default {
|
||||
],
|
||||
fixed: [
|
||||
{
|
||||
label: this.$t('Visibility'),
|
||||
label: this.$t('visibility'),
|
||||
field: 'visible',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Name'),
|
||||
label: this.$t('name'),
|
||||
field: 'name',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Price'),
|
||||
label: this.$t('price'),
|
||||
field: 'amount',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Interval'),
|
||||
label: this.$t('interval'),
|
||||
field: 'interval',
|
||||
sortable: true,
|
||||
},
|
||||
@@ -273,7 +273,7 @@ export default {
|
||||
sortable: false,
|
||||
},
|
||||
{
|
||||
label: this.$t('Storage'),
|
||||
label: this.$t('storage'),
|
||||
sortable: false,
|
||||
},
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<ValidationObserver @submit.prevent="createPlan" ref="createPlan" v-slot="{ invalid }" tag="form">
|
||||
<div class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Details') }}
|
||||
{{ $t('details') }}
|
||||
</FormLabel>
|
||||
|
||||
<!--Name-->
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
<div class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Pricing') }}
|
||||
{{ $t('pricing') }}
|
||||
</FormLabel>
|
||||
|
||||
<div class="justify-items md:flex md:space-x-4">
|
||||
@@ -47,10 +47,10 @@
|
||||
v-slot="{ errors }"
|
||||
class="w-full"
|
||||
>
|
||||
<AppInputText :title="$t('admin_page_plans.form.price')" class="w-full">
|
||||
<AppInputText :title="$t('plan_price')" class="w-full">
|
||||
<input
|
||||
v-model="plan.amount"
|
||||
:placeholder="$t('admin_page_plans.form.price_plac')"
|
||||
:placeholder="$t('plan_price')"
|
||||
type="number"
|
||||
step="0.01"
|
||||
min="1"
|
||||
@@ -70,11 +70,11 @@
|
||||
v-slot="{ errors }"
|
||||
class="w-full"
|
||||
>
|
||||
<AppInputText :title="$t('Currency')" class="w-full">
|
||||
<AppInputText :title="$t('currency')" class="w-full">
|
||||
<SelectInput
|
||||
v-model="plan.currency"
|
||||
:options="currencyList"
|
||||
:placeholder="$t('Select plan currency')"
|
||||
:placeholder="$t('select_plan_currency')"
|
||||
:isError="errors[0]"
|
||||
/>
|
||||
</AppInputText>
|
||||
@@ -83,11 +83,11 @@
|
||||
|
||||
<!--Interval-->
|
||||
<ValidationProvider tag="div" mode="passive" name="Interval" rules="required" v-slot="{ errors }">
|
||||
<AppInputText :title="$t('Interval')" :is-last="true">
|
||||
<AppInputText :title="$t('interval')" :is-last="true">
|
||||
<SelectInput
|
||||
v-model="plan.interval"
|
||||
:options="intervalList"
|
||||
:placeholder="$t('Select billing interval')"
|
||||
:placeholder="$t('select_billing_interval')"
|
||||
:isError="errors[0]"
|
||||
/>
|
||||
</AppInputText>
|
||||
@@ -96,7 +96,7 @@
|
||||
|
||||
<div class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Features') }}
|
||||
{{ $t('features') }}
|
||||
</FormLabel>
|
||||
|
||||
<!--Storage Capacity-->
|
||||
@@ -126,13 +126,13 @@
|
||||
<!--Team Members-->
|
||||
<ValidationProvider tag="div" mode="passive" name="Max Team Members" rules="required" v-slot="{ errors }">
|
||||
<AppInputText
|
||||
:title="$t('Team Members')"
|
||||
:description="$t('Type -1 to set unlimited team members.')"
|
||||
:title="$t('team_members')"
|
||||
:description="$t('zero_for_unlimited_members')"
|
||||
:is-last="true"
|
||||
>
|
||||
<input
|
||||
v-model="plan.features.max_team_members"
|
||||
:placeholder="$t('Add max team members in number')"
|
||||
:placeholder="$t('add_max_team_members')"
|
||||
type="number"
|
||||
min="1"
|
||||
max="999999999"
|
||||
|
||||
@@ -2,197 +2,197 @@
|
||||
<ValidationObserver @submit.prevent="createPlan" ref="createPlan" v-slot="{ invalid }" tag="form">
|
||||
<div class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Details') }}
|
||||
{{ $t('details') }}
|
||||
</FormLabel>
|
||||
|
||||
<!--Name-->
|
||||
<!--Name-->
|
||||
<ValidationProvider tag="div" mode="passive" name="Name" rules="required" v-slot="{ errors }">
|
||||
<AppInputText :title="$t('name')">
|
||||
<input
|
||||
v-model="plan.name"
|
||||
:placeholder="$t('plan_name')"
|
||||
type="text"
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
class="focus-border-theme input-dark"
|
||||
/>
|
||||
v-model="plan.name"
|
||||
:placeholder="$t('plan_name')"
|
||||
type="text"
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
class="focus-border-theme input-dark"
|
||||
/>
|
||||
</AppInputText>
|
||||
</ValidationProvider>
|
||||
|
||||
<!--Description-->
|
||||
<!--Description-->
|
||||
<ValidationProvider tag="div" mode="passive" name="Description" v-slot="{ errors }">
|
||||
<AppInputText :title="$t('description_optional')">
|
||||
<textarea
|
||||
v-model="plan.description"
|
||||
:placeholder="$t('plan_description')"
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
class="focus-border-theme input-dark"
|
||||
></textarea>
|
||||
v-model="plan.description"
|
||||
:placeholder="$t('plan_description')"
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
class="focus-border-theme input-dark"
|
||||
></textarea>
|
||||
</AppInputText>
|
||||
</ValidationProvider>
|
||||
|
||||
<!--Currency-->
|
||||
<!--Currency-->
|
||||
<ValidationProvider tag="div" mode="passive" name="Currency" rules="required" v-slot="{ errors }">
|
||||
<AppInputText :title="$t('Currency')" class="w-full" :is-last="true">
|
||||
<AppInputText :title="$t('currency')" class="w-full" :is-last="true">
|
||||
<SelectInput
|
||||
v-model="plan.currency"
|
||||
:options="currencyList"
|
||||
:placeholder="$t('Select plan currency')"
|
||||
:isError="errors[0]"
|
||||
/>
|
||||
v-model="plan.currency"
|
||||
:options="currencyList"
|
||||
:placeholder="$t('select_plan_currency')"
|
||||
:isError="errors[0]"
|
||||
/>
|
||||
</AppInputText>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Charged Features') }}
|
||||
{{ $t('charged_features') }}
|
||||
</FormLabel>
|
||||
|
||||
<!--Bandwidth-->
|
||||
<!--Bandwidth-->
|
||||
<div>
|
||||
<AppInputSwitch
|
||||
:title="$t('Bandwidth Price per 1GB')"
|
||||
:description="$t('Charge your user by the amount of data he upload or download.')"
|
||||
>
|
||||
:title="$t('bandwidth_per_gb')"
|
||||
:description="$t('bandwidth_per_gb_note')"
|
||||
>
|
||||
<SwitchInput
|
||||
v-model="plan.features.bandwidth.active"
|
||||
class="switch"
|
||||
:state="plan.features.bandwidth.active"
|
||||
/>
|
||||
v-model="plan.features.bandwidth.active"
|
||||
class="switch"
|
||||
:state="plan.features.bandwidth.active"
|
||||
/>
|
||||
</AppInputSwitch>
|
||||
|
||||
<ValidationProvider
|
||||
v-if="plan.features.bandwidth.active"
|
||||
class="-mt-3"
|
||||
tag="div"
|
||||
mode="passive"
|
||||
name="Bandwidth Price"
|
||||
rules="required"
|
||||
v-slot="{ errors }"
|
||||
>
|
||||
v-if="plan.features.bandwidth.active"
|
||||
class="-mt-3"
|
||||
tag="div"
|
||||
mode="passive"
|
||||
name="Bandwidth Price"
|
||||
rules="required"
|
||||
v-slot="{ errors }"
|
||||
>
|
||||
<AppInputText class="w-full">
|
||||
<input
|
||||
v-model="plan.features.bandwidth.per_unit"
|
||||
:placeholder="$t('Type the price per 1GB...')"
|
||||
type="number"
|
||||
step="0.01"
|
||||
min="0.01"
|
||||
max="999999999999"
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
class="focus-border-theme input-dark"
|
||||
/>
|
||||
v-model="plan.features.bandwidth.per_unit"
|
||||
:placeholder="$t('type_bandwidth_price')"
|
||||
type="number"
|
||||
step="0.01"
|
||||
min="0.01"
|
||||
max="999999999999"
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
class="focus-border-theme input-dark"
|
||||
/>
|
||||
</AppInputText>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
<!--Storage-->
|
||||
<!--Storage-->
|
||||
<div>
|
||||
<AppInputSwitch
|
||||
:title="$t('Storage Price per 1GB')"
|
||||
:description="$t('Charge your user by the amount of data he has stored on the disk per 1GB.')"
|
||||
>
|
||||
:title="$t('storage_per_gb')"
|
||||
:description="$t('storage_per_gb_note')"
|
||||
>
|
||||
<SwitchInput
|
||||
v-model="plan.features.storage.active"
|
||||
class="switch"
|
||||
:state="plan.features.storage.active"
|
||||
/>
|
||||
v-model="plan.features.storage.active"
|
||||
class="switch"
|
||||
:state="plan.features.storage.active"
|
||||
/>
|
||||
</AppInputSwitch>
|
||||
</div>
|
||||
|
||||
<ValidationProvider
|
||||
v-if="plan.features.storage.active"
|
||||
class="-mt-3"
|
||||
tag="div"
|
||||
mode="passive"
|
||||
name="Storage Price"
|
||||
rules="required"
|
||||
v-slot="{ errors }"
|
||||
>
|
||||
v-if="plan.features.storage.active"
|
||||
class="-mt-3"
|
||||
tag="div"
|
||||
mode="passive"
|
||||
name="Storage Price"
|
||||
rules="required"
|
||||
v-slot="{ errors }"
|
||||
>
|
||||
<AppInputText class="w-full">
|
||||
<input
|
||||
v-model="plan.features.storage.per_unit"
|
||||
:placeholder="$t('Type the price per 1GB...')"
|
||||
type="number"
|
||||
step="0.01"
|
||||
min="0.01"
|
||||
max="999999999999"
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
class="focus-border-theme input-dark"
|
||||
/>
|
||||
v-model="plan.features.storage.per_unit"
|
||||
:placeholder="$t('type_storage_price')"
|
||||
type="number"
|
||||
step="0.01"
|
||||
min="0.01"
|
||||
max="999999999999"
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
class="focus-border-theme input-dark"
|
||||
/>
|
||||
</AppInputText>
|
||||
</ValidationProvider>
|
||||
|
||||
<!--Member-->
|
||||
<!--Member-->
|
||||
<div>
|
||||
<AppInputSwitch
|
||||
:title="$t('Price per 1 Member')"
|
||||
:description="$t('Charge your user by the total members he use in his Team Folders.')"
|
||||
>
|
||||
:title="$t('member_per_unit')"
|
||||
:description="$t('member_per_unit_note')"
|
||||
>
|
||||
<SwitchInput
|
||||
v-model="plan.features.member.active"
|
||||
class="switch"
|
||||
:state="plan.features.member.active"
|
||||
/>
|
||||
v-model="plan.features.member.active"
|
||||
class="switch"
|
||||
:state="plan.features.member.active"
|
||||
/>
|
||||
</AppInputSwitch>
|
||||
</div>
|
||||
|
||||
<ValidationProvider
|
||||
v-if="plan.features.member.active"
|
||||
class="-mt-3"
|
||||
tag="div"
|
||||
mode="passive"
|
||||
name="Member Price"
|
||||
rules="required"
|
||||
v-slot="{ errors }"
|
||||
>
|
||||
v-if="plan.features.member.active"
|
||||
class="-mt-3"
|
||||
tag="div"
|
||||
mode="passive"
|
||||
name="Member Price"
|
||||
rules="required"
|
||||
v-slot="{ errors }"
|
||||
>
|
||||
<AppInputText class="w-full">
|
||||
<input
|
||||
v-model="plan.features.member.per_unit"
|
||||
:placeholder="$t('Type the price per 1 member...')"
|
||||
type="number"
|
||||
step="0.01"
|
||||
min="0.01"
|
||||
max="999999999999"
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
class="focus-border-theme input-dark"
|
||||
/>
|
||||
v-model="plan.features.member.per_unit"
|
||||
:placeholder="$t('type_member_price')"
|
||||
type="number"
|
||||
step="0.01"
|
||||
min="0.01"
|
||||
max="999999999999"
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
class="focus-border-theme input-dark"
|
||||
/>
|
||||
</AppInputText>
|
||||
</ValidationProvider>
|
||||
|
||||
<!--Flat Fee-->
|
||||
<!--Flat Fee-->
|
||||
<div>
|
||||
<AppInputSwitch
|
||||
:title="$t('Flat Fee per Cycle')"
|
||||
:description="$t('Charge monthly flat fee.')"
|
||||
:is-last="!plan.features.flatFee.active"
|
||||
>
|
||||
:title="$t('flat_fee_unit_gb')"
|
||||
:description="$t('flat_fee_unit_gb_note')"
|
||||
:is-last="!plan.features.flatFee.active"
|
||||
>
|
||||
<SwitchInput
|
||||
v-model="plan.features.flatFee.active"
|
||||
class="switch"
|
||||
:state="plan.features.flatFee.active"
|
||||
/>
|
||||
v-model="plan.features.flatFee.active"
|
||||
class="switch"
|
||||
:state="plan.features.flatFee.active"
|
||||
/>
|
||||
</AppInputSwitch>
|
||||
|
||||
<ValidationProvider
|
||||
v-if="plan.features.flatFee.active"
|
||||
class="-mt-3"
|
||||
tag="div"
|
||||
mode="passive"
|
||||
name="FlatFee Price"
|
||||
rules="required"
|
||||
v-slot="{ errors }"
|
||||
>
|
||||
v-if="plan.features.flatFee.active"
|
||||
class="-mt-3"
|
||||
tag="div"
|
||||
mode="passive"
|
||||
name="FlatFee Price"
|
||||
rules="required"
|
||||
v-slot="{ errors }"
|
||||
>
|
||||
<AppInputText class="w-full" :is-last="true">
|
||||
<input
|
||||
v-model="plan.features.flatFee.per_unit"
|
||||
:placeholder="$t('Type the price...')"
|
||||
type="number"
|
||||
step="0.01"
|
||||
min="0.01"
|
||||
max="999999999999"
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
class="focus-border-theme input-dark"
|
||||
/>
|
||||
v-model="plan.features.flatFee.per_unit"
|
||||
:placeholder="$t('type_flat_fee_price')"
|
||||
type="number"
|
||||
step="0.01"
|
||||
min="0.01"
|
||||
max="999999999999"
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
class="focus-border-theme input-dark"
|
||||
/>
|
||||
</AppInputText>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
@@ -208,7 +208,7 @@
|
||||
import SwitchInput from '../../../../components/Others/Forms/SwitchInput'
|
||||
import AppInputSwitch from '../../../../components/Admin/AppInputSwitch'
|
||||
import AppInputText from '../../../../components/Admin/AppInputText'
|
||||
import { ValidationProvider, ValidationObserver } from 'vee-validate/dist/vee-validate.full'
|
||||
import {ValidationProvider, ValidationObserver} from 'vee-validate/dist/vee-validate.full'
|
||||
import SelectInput from '../../../../components/Others/Forms/SelectInput'
|
||||
import ImageInput from '../../../../components/Others/Forms/ImageInput'
|
||||
import MobileHeader from '../../../../components/Mobile/MobileHeader'
|
||||
@@ -217,137 +217,137 @@ import SectionTitle from '../../../../components/Others/SectionTitle'
|
||||
import ButtonBase from '../../../../components/FilesView/ButtonBase'
|
||||
import PageHeader from '../../../../components/Others/PageHeader'
|
||||
import InfoBox from '../../../../components/Others/Forms/InfoBox'
|
||||
import { required } from 'vee-validate/dist/rules'
|
||||
import { mapGetters } from 'vuex'
|
||||
import { events } from '../../../../bus'
|
||||
import {required} from 'vee-validate/dist/rules'
|
||||
import {mapGetters} from 'vuex'
|
||||
import {events} from '../../../../bus'
|
||||
import axios from 'axios'
|
||||
|
||||
export default {
|
||||
name: 'CreateMeteredPlan',
|
||||
components: {
|
||||
ValidationProvider,
|
||||
ValidationObserver,
|
||||
AppInputSwitch,
|
||||
SwitchInput,
|
||||
SectionTitle,
|
||||
AppInputText,
|
||||
MobileHeader,
|
||||
SelectInput,
|
||||
ButtonBase,
|
||||
ImageInput,
|
||||
PageHeader,
|
||||
FormLabel,
|
||||
required,
|
||||
InfoBox,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['currencyList', 'intervalList', 'config']),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
errorMessage: undefined,
|
||||
isLoading: false,
|
||||
isError: false,
|
||||
plan: {
|
||||
type: 'fixed',
|
||||
name: undefined,
|
||||
description: undefined,
|
||||
currency: undefined,
|
||||
features: {
|
||||
bandwidth: {
|
||||
active: false,
|
||||
per_unit: undefined,
|
||||
first_unit: 1,
|
||||
aggregate_strategy: 'sum_of_usage',
|
||||
},
|
||||
storage: {
|
||||
active: false,
|
||||
per_unit: undefined,
|
||||
first_unit: 1,
|
||||
aggregate_strategy: 'maximum_usage',
|
||||
},
|
||||
member: {
|
||||
active: false,
|
||||
per_unit: undefined,
|
||||
first_unit: 1,
|
||||
aggregate_strategy: 'maximum_usage',
|
||||
},
|
||||
flatFee: {
|
||||
active: false,
|
||||
per_unit: undefined,
|
||||
aggregate_strategy: 'maximum_usage',
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async createPlan() {
|
||||
let tiers = []
|
||||
name: 'CreateMeteredPlan',
|
||||
components: {
|
||||
ValidationProvider,
|
||||
ValidationObserver,
|
||||
AppInputSwitch,
|
||||
SwitchInput,
|
||||
SectionTitle,
|
||||
AppInputText,
|
||||
MobileHeader,
|
||||
SelectInput,
|
||||
ButtonBase,
|
||||
ImageInput,
|
||||
PageHeader,
|
||||
FormLabel,
|
||||
required,
|
||||
InfoBox,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['currencyList', 'intervalList', 'config']),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
errorMessage: undefined,
|
||||
isLoading: false,
|
||||
isError: false,
|
||||
plan: {
|
||||
type: 'fixed',
|
||||
name: undefined,
|
||||
description: undefined,
|
||||
currency: undefined,
|
||||
features: {
|
||||
bandwidth: {
|
||||
active: false,
|
||||
per_unit: undefined,
|
||||
first_unit: 1,
|
||||
aggregate_strategy: 'sum_of_usage',
|
||||
},
|
||||
storage: {
|
||||
active: false,
|
||||
per_unit: undefined,
|
||||
first_unit: 1,
|
||||
aggregate_strategy: 'maximum_usage',
|
||||
},
|
||||
member: {
|
||||
active: false,
|
||||
per_unit: undefined,
|
||||
first_unit: 1,
|
||||
aggregate_strategy: 'maximum_usage',
|
||||
},
|
||||
flatFee: {
|
||||
active: false,
|
||||
per_unit: undefined,
|
||||
aggregate_strategy: 'maximum_usage',
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async createPlan() {
|
||||
let tiers = []
|
||||
|
||||
Object.entries(this.plan.features).forEach(([key, feature]) => {
|
||||
if (feature.active) {
|
||||
tiers.push({
|
||||
aggregate_strategy: feature.aggregate_strategy,
|
||||
key: key,
|
||||
tiers: [
|
||||
{
|
||||
per_unit: feature.per_unit,
|
||||
first_unit: 1,
|
||||
flat_fee: null,
|
||||
last_unit: null,
|
||||
},
|
||||
],
|
||||
})
|
||||
}
|
||||
})
|
||||
Object.entries(this.plan.features).forEach(([key, feature]) => {
|
||||
if (feature.active) {
|
||||
tiers.push({
|
||||
aggregate_strategy: feature.aggregate_strategy,
|
||||
key: key,
|
||||
tiers: [
|
||||
{
|
||||
per_unit: feature.per_unit,
|
||||
first_unit: 1,
|
||||
flat_fee: null,
|
||||
last_unit: null,
|
||||
},
|
||||
],
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
// Validate fields
|
||||
const isValid = await this.$refs.createPlan.validate()
|
||||
// Validate fields
|
||||
const isValid = await this.$refs.createPlan.validate()
|
||||
|
||||
if (!isValid) return
|
||||
if (!isValid) return
|
||||
|
||||
// Start loading
|
||||
this.isLoading = true
|
||||
// Start loading
|
||||
this.isLoading = true
|
||||
|
||||
axios
|
||||
.post('/api/subscriptions/admin/plans', {
|
||||
type: 'metered',
|
||||
name: this.plan.name,
|
||||
description: this.plan.description,
|
||||
currency: this.plan.currency,
|
||||
meters: tiers,
|
||||
})
|
||||
.then((response) => {
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('toaster.plan_created'),
|
||||
})
|
||||
axios
|
||||
.post('/api/subscriptions/admin/plans', {
|
||||
type: 'metered',
|
||||
name: this.plan.name,
|
||||
description: this.plan.description,
|
||||
currency: this.plan.currency,
|
||||
meters: tiers,
|
||||
})
|
||||
.then((response) => {
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('toaster.plan_created'),
|
||||
})
|
||||
|
||||
// Go to plan page
|
||||
this.$router.push({
|
||||
name: 'PlanMeteredSettings',
|
||||
params: { id: response.data.data.id },
|
||||
})
|
||||
// Go to plan page
|
||||
this.$router.push({
|
||||
name: 'PlanMeteredSettings',
|
||||
params: {id: response.data.data.id},
|
||||
})
|
||||
|
||||
// Set default state {isEmptyPlans} to false
|
||||
if (this.config.isEmptyPlans) {
|
||||
this.$store.commit('REPLACE_CONFIG_VALUE', {
|
||||
key: 'isEmptyPlans',
|
||||
value: false,
|
||||
})
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
events.$emit('toaster', {
|
||||
type: 'danger',
|
||||
message: this.$t('popup_error.title'),
|
||||
})
|
||||
})
|
||||
.finally(() => {
|
||||
this.isLoading = false
|
||||
})
|
||||
},
|
||||
},
|
||||
// Set default state {isEmptyPlans} to false
|
||||
if (this.config.isEmptyPlans) {
|
||||
this.$store.commit('REPLACE_CONFIG_VALUE', {
|
||||
key: 'isEmptyPlans',
|
||||
value: false,
|
||||
})
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
events.$emit('toaster', {
|
||||
type: 'danger',
|
||||
message: this.$t('popup_error.title'),
|
||||
})
|
||||
})
|
||||
.finally(() => {
|
||||
this.isLoading = false
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<router-view v-if="!isLoading" :plan="plan" />
|
||||
|
||||
<div id="loader" v-if="isLoading">
|
||||
<Spinner></Spinner>
|
||||
<Spinner />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
{{ plan.attributes.name }}
|
||||
</h1>
|
||||
<small class="text-xs font-bold dark:text-gray-500 text-gray-500 sm:text-sm">
|
||||
{{ $t('30 Days intervals') }}
|
||||
{{ $t('x_days_intervals') }}
|
||||
</small>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div>
|
||||
<div class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Details') }}
|
||||
{{ $t('details') }}
|
||||
</FormLabel>
|
||||
|
||||
<!--Visible-->
|
||||
@@ -57,7 +57,7 @@
|
||||
<p>
|
||||
{{
|
||||
$t(
|
||||
'Price change is not possible. If you would like to change your price or currency, please feel free to create a new plan.'
|
||||
'price_change_not_possible_create_new'
|
||||
)
|
||||
}}
|
||||
</p>
|
||||
@@ -65,7 +65,7 @@
|
||||
</div>
|
||||
<div class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Features') }}
|
||||
{{ $t('features') }}
|
||||
</FormLabel>
|
||||
|
||||
<!--Storage Capacity-->
|
||||
@@ -91,7 +91,7 @@
|
||||
</AppInputText>
|
||||
|
||||
<!--Team Members-->
|
||||
<AppInputText :title="$t('Max Team Members')" :description="$t('Type -1 to set unlimited team members.')" is-last="true">
|
||||
<AppInputText :title="$t('max_team_members')" :description="$t('zero_for_unlimited_members')" is-last="true">
|
||||
<input
|
||||
@input="
|
||||
$updateInput(
|
||||
@@ -101,7 +101,7 @@
|
||||
)
|
||||
"
|
||||
v-model="plan.attributes.features.max_team_members"
|
||||
:placeholder="$t('Add max team members in number')"
|
||||
:placeholder="$t('add_max_team_members')"
|
||||
type="number"
|
||||
min="1"
|
||||
max="999999999"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div>
|
||||
<div class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Details') }}
|
||||
{{ $t('details') }}
|
||||
</FormLabel>
|
||||
|
||||
<!--Name-->
|
||||
@@ -36,14 +36,14 @@
|
||||
</div>
|
||||
<div class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Charged Features') }}
|
||||
{{ $t('charged_features') }}
|
||||
</FormLabel>
|
||||
|
||||
<!--Bandwidth-->
|
||||
<AppInputText
|
||||
v-if="plan.attributes.features.bandwidth"
|
||||
:title="$t('Bandwidth Price per 1GB')"
|
||||
:description="$t('Charge your user by the amount of data he upload or download.')"
|
||||
:title="$t('bandwidth_per_gb')"
|
||||
:description="$t('bandwidth_per_gb_note')"
|
||||
class="w-full"
|
||||
>
|
||||
<input
|
||||
@@ -59,8 +59,8 @@
|
||||
<!--Storage-->
|
||||
<AppInputText
|
||||
v-if="plan.attributes.features.storage"
|
||||
:title="$t('Storage Price per 1GB')"
|
||||
:description="$t('Charge your user by the amount of data he has stored on the disk per 1GB.')"
|
||||
:title="$t('storage_per_gb')"
|
||||
:description="$t('storage_per_gb_note')"
|
||||
class="w-full"
|
||||
>
|
||||
<input
|
||||
@@ -76,8 +76,8 @@
|
||||
<!--Member-->
|
||||
<AppInputText
|
||||
v-if="plan.attributes.features.member"
|
||||
:title="$t('Price per 1 Member')"
|
||||
:description="$t('Charge your user by the total members he use in his Team Folders.')"
|
||||
:title="$t('member_per_unit')"
|
||||
:description="$t('member_per_unit_note')"
|
||||
class="w-full"
|
||||
>
|
||||
<input
|
||||
@@ -91,8 +91,8 @@
|
||||
<!--Flat Fee-->
|
||||
<AppInputText
|
||||
v-if="plan.attributes.features.flatFee"
|
||||
:title="$t('Flat Fee per Cycle')"
|
||||
:description="$t('Charge monthly flat fee.')"
|
||||
:title="$t('flat_fee_unit_gb')"
|
||||
:description="$t('flat_fee_unit_gb_note')"
|
||||
class="w-full"
|
||||
>
|
||||
<input
|
||||
@@ -109,7 +109,7 @@
|
||||
<p>
|
||||
{{
|
||||
$t(
|
||||
'Price change is not possible. If you would like to change your price or currency, please feel free to create a new plan.'
|
||||
'price_change_not_possible_create_new'
|
||||
)
|
||||
}}
|
||||
</p>
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
<ColorLabel :color="$getSubscriptionStatusColor(row.data.attributes.status)">
|
||||
{{ row.data.attributes.status }}
|
||||
{{ $t(row.data.attributes.status) }}
|
||||
</ColorLabel>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
@@ -160,12 +160,12 @@ export default {
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Renews At'),
|
||||
label: this.$t('renews_at'),
|
||||
field: 'created_at',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Service'),
|
||||
label: this.$t('service'),
|
||||
field: 'driver',
|
||||
sortable: true,
|
||||
},
|
||||
@@ -177,27 +177,27 @@ export default {
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Status'),
|
||||
label: this.$t('status'),
|
||||
field: 'status',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Note'),
|
||||
label: this.$t('note'),
|
||||
field: 'plan.name',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Renews At'),
|
||||
label: this.$t('renews_at'),
|
||||
field: 'created_at',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Ends At'),
|
||||
label: this.$t('ends_at'),
|
||||
field: 'ends_at',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Service'),
|
||||
label: this.$t('service'),
|
||||
field: 'driver',
|
||||
sortable: true,
|
||||
},
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
<ColorLabel :color="$getSubscriptionStatusColor(row.data.attributes.status)">
|
||||
{{ row.data.attributes.status }}
|
||||
{{ $t(row.data.attributes.status) }}
|
||||
</ColorLabel>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
@@ -87,11 +87,11 @@
|
||||
/>
|
||||
|
||||
<h1 class="mb-1 text-2xl font-bold">
|
||||
{{ $t('There is Nothing') }}
|
||||
{{ $t('there_is_nothing') }}
|
||||
</h1>
|
||||
|
||||
<p class="text-sm text-gray-600">
|
||||
{{ $t('All your subscriptions will be visible here') }}
|
||||
{{ $t('all_visible_subscriptions_here') }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -124,27 +124,27 @@ export default {
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Status'),
|
||||
label: this.$t('status'),
|
||||
field: 'status',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Note'),
|
||||
label: this.$t('note'),
|
||||
field: 'plan.name',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Renews At'),
|
||||
label: this.$t('renews_at'),
|
||||
field: 'created_at',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Ends At'),
|
||||
label: this.$t('ends_at'),
|
||||
field: 'created_at',
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Service'),
|
||||
label: this.$t('service'),
|
||||
field: 'driver.driver',
|
||||
sortable: true,
|
||||
},
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</router-link>
|
||||
|
||||
<MobileActionButton @click.native="$openSpotlight('users')" icon="search">
|
||||
{{ $t('Search') }}
|
||||
{{ $t('search') }}
|
||||
</MobileActionButton>
|
||||
</div>
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
<ColorLabel :color="$getUserRoleColor(row.data.attributes.role)">
|
||||
{{ row.data.attributes.role }}
|
||||
{{ $t(row.data.attributes.role) }}
|
||||
</ColorLabel>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
@@ -134,7 +134,7 @@
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
<ColorLabel :color="$getUserRoleColor(row.data.attributes.role)">
|
||||
{{ row.data.attributes.role }}
|
||||
{{ $t(row.data.attributes.role) }}
|
||||
</ColorLabel>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
@@ -217,7 +217,7 @@
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
<ColorLabel :color="$getUserRoleColor(row.data.attributes.role)">
|
||||
{{ row.data.attributes.role }}
|
||||
{{ $t(row.data.attributes.role) }}
|
||||
</ColorLabel>
|
||||
</td>
|
||||
<td class="px-3 md:px-1">
|
||||
@@ -318,11 +318,11 @@ export default {
|
||||
sortable: false,
|
||||
},
|
||||
{
|
||||
label: this.$t('Billing Est.'),
|
||||
label: this.$t('billing_est.'),
|
||||
sortable: false,
|
||||
},
|
||||
{
|
||||
label: this.$t('admin_page_user.table.created_at'),
|
||||
label: this.$t('created_at'),
|
||||
field: 'created_at',
|
||||
sortable: true,
|
||||
},
|
||||
@@ -343,7 +343,7 @@ export default {
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('Account'),
|
||||
label: this.$t('account'),
|
||||
sortable: false,
|
||||
},
|
||||
{
|
||||
@@ -351,12 +351,12 @@ export default {
|
||||
sortable: false,
|
||||
},
|
||||
{
|
||||
label: this.$t('Max Storage'),
|
||||
label: this.$t('max_storage'),
|
||||
sortable: false,
|
||||
hidden: !this.config.storageLimit,
|
||||
},
|
||||
{
|
||||
label: this.$t('admin_page_user.table.created_at'),
|
||||
label: this.$t('created_at'),
|
||||
field: 'created_at',
|
||||
sortable: true,
|
||||
},
|
||||
@@ -381,12 +381,12 @@ export default {
|
||||
sortable: false,
|
||||
},
|
||||
{
|
||||
label: this.$t('Max Storage'),
|
||||
label: this.$t('max_storage'),
|
||||
sortable: false,
|
||||
hidden: !this.config.storageLimit,
|
||||
},
|
||||
{
|
||||
label: this.$t('admin_page_user.table.created_at'),
|
||||
label: this.$t('created_at'),
|
||||
field: 'created_at',
|
||||
sortable: true,
|
||||
},
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
{{ user.data.relationships.settings.data.attributes.last_name }}
|
||||
|
||||
<ColorLabel color="purple">
|
||||
{{ user.data.attributes.role }}
|
||||
{{ $t(user.data.attributes.role) }}
|
||||
</ColorLabel>
|
||||
</b>
|
||||
<small class="block text-xs text-gray-600 sm:text-sm">
|
||||
@@ -84,7 +84,7 @@ export default {
|
||||
route: 'UserDetail',
|
||||
},
|
||||
{
|
||||
title: this.$t('Storage'),
|
||||
title: this.$t('storage'),
|
||||
route: 'UserStorage',
|
||||
},
|
||||
{
|
||||
@@ -92,7 +92,7 @@ export default {
|
||||
route: 'UserPassword',
|
||||
},
|
||||
{
|
||||
title: this.$t('Delete Account'),
|
||||
title: this.$t('delete_account'),
|
||||
route: 'UserDelete',
|
||||
},
|
||||
]
|
||||
@@ -104,11 +104,11 @@ export default {
|
||||
route: 'UserDetail',
|
||||
},
|
||||
{
|
||||
title: this.$t('Storage'),
|
||||
title: this.$t('storage'),
|
||||
route: 'UserStorage',
|
||||
},
|
||||
{
|
||||
title: this.$t('Billing'),
|
||||
title: this.$t('billing'),
|
||||
route: 'UserSubscription',
|
||||
},
|
||||
{
|
||||
@@ -116,7 +116,7 @@ export default {
|
||||
route: 'UserPassword',
|
||||
},
|
||||
{
|
||||
title: this.$t('Delete Account'),
|
||||
title: this.$t('delete_account'),
|
||||
route: 'UserDelete',
|
||||
},
|
||||
]
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
>
|
||||
<input
|
||||
v-model="user.password_confirmation"
|
||||
:placeholder="$t('admin_page_user.create_user.label_conf_pass')"
|
||||
:placeholder="$t('confirm_password')"
|
||||
type="password"
|
||||
class="focus-border-theme input-dark"
|
||||
:class="{ '!border-rose-600': errors[0] }"
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
<!--Name-->
|
||||
<div class="justify-items md:flex md:space-x-4">
|
||||
<AppInputText :title="$t('First Name')" class="w-full">
|
||||
<AppInputText :title="$t('first_name')" class="w-full">
|
||||
<input
|
||||
disabled
|
||||
:value="user.data.relationships.settings.data.attributes.first_name"
|
||||
@@ -50,7 +50,7 @@
|
||||
class="focus-border-theme input-dark disabled:text-gray-900 disabled:opacity-100"
|
||||
/>
|
||||
</AppInputText>
|
||||
<AppInputText :title="$t('Last Name')" class="w-full">
|
||||
<AppInputText :title="$t('last_name')" class="w-full">
|
||||
<input
|
||||
disabled
|
||||
:value="user.data.relationships.settings.data.attributes.last_name"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Subscription') }}
|
||||
{{ $t('subscription') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-xl font-extrabold sm:text-3xl">
|
||||
@@ -36,14 +36,14 @@ export default {
|
||||
computed: {
|
||||
status() {
|
||||
return {
|
||||
active: `Active until ${this.subscription.attributes.renews_at}`,
|
||||
cancelled: `Active until ${this.subscription.attributes.ends_at}`,
|
||||
active: this.$t('active_until', {date: this.subscription.attributes.renews_at}),
|
||||
cancelled: this.$t('ends_at_date', {date: this.subscription.attributes.ends_at}),
|
||||
}[this.subscription.attributes.status]
|
||||
},
|
||||
price() {
|
||||
return {
|
||||
month: `${this.subscription.relationships.plan.data.attributes.price} Per Month`,
|
||||
year: `${this.subscription.relationships.plan.data.attributes.price} Per Year`,
|
||||
month: this.$t('price_per_month', {price: this.subscription.relationships.plan.data.attributes.price}),
|
||||
year: this.$t('price_per_year', {price: this.subscription.relationships.plan.data.attributes.price}),
|
||||
}[this.subscription.relationships.plan.data.attributes.interval]
|
||||
},
|
||||
},
|
||||
@@ -60,12 +60,12 @@ export default {
|
||||
max_team_members: 'purple',
|
||||
},
|
||||
message: {
|
||||
max_storage_amount: `Total ${item.use} of ${item.total} Used`,
|
||||
max_team_members: `Total ${item.use} of ${item.total} Members`,
|
||||
max_storage_amount: this.$t('total_x_of_x_used', {use: item.use, total:item.total }),
|
||||
max_team_members: this.$t('total_x_of_x_members', {use: item.use, total:item.total }),
|
||||
},
|
||||
title: {
|
||||
max_storage_amount: `Storage`,
|
||||
max_team_members: `Team Members`,
|
||||
max_storage_amount: this.$t('storage'),
|
||||
max_team_members: this.$t('team_members'),
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<!--Balance-->
|
||||
<div class="card shadow-card">
|
||||
<FormLabel icon="hard-drive">
|
||||
{{ $t('Balance') }}
|
||||
{{ $t('balance') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-2xl font-extrabold sm:text-3xl">
|
||||
@@ -19,14 +19,14 @@
|
||||
>
|
||||
<ValidationProvider tag="div" v-slot="{ errors }" mode="passive" name="Balance Amount" rules="required">
|
||||
<AppInputText
|
||||
:description="$t('User balance will be increased for the amount above.')"
|
||||
:description="$t('balance_will_be_increased')"
|
||||
:error="errors[0]"
|
||||
:is-last="true"
|
||||
>
|
||||
<div class="space-y-4 sm:flex sm:space-x-4 sm:space-y-0">
|
||||
<input
|
||||
v-model="balanceAmount"
|
||||
:placeholder="$t('Increase user balance for...')"
|
||||
:placeholder="$t('increase_for')"
|
||||
type="number"
|
||||
min="1"
|
||||
max="999999999"
|
||||
@@ -40,7 +40,7 @@
|
||||
:loading="isUpdatingBalanceAmount"
|
||||
:disabled="isUpdatingBalanceAmount"
|
||||
>
|
||||
{{ $t('Increase Balance') }}
|
||||
{{ $t('increase_balance') }}
|
||||
</ButtonBase>
|
||||
</div>
|
||||
</AppInputText>
|
||||
@@ -51,7 +51,7 @@
|
||||
<!--Usage Estimates-->
|
||||
<div class="card shadow-card">
|
||||
<FormLabel icon="hard-drive">
|
||||
{{ $t('Usage Estimates') }}
|
||||
{{ $t('usage_estimates') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-2xl font-extrabold sm:text-3xl">
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
<b class="mb-3 mb-5 block text-sm text-gray-400">
|
||||
{{ user.data.relationships.subscription.data.attributes.updated_at }}
|
||||
{{ $t('till now') }}
|
||||
{{ $t('till_now') }}
|
||||
</b>
|
||||
|
||||
<div>
|
||||
@@ -142,7 +142,7 @@ export default {
|
||||
|
||||
events.$emit('toaster', {
|
||||
type: 'success',
|
||||
message: this.$t('User balance was successfully increased'),
|
||||
message: this.$t('balance_was_increased'),
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
</FormLabel>
|
||||
|
||||
<AppInputText
|
||||
:title="$t('Reset User Password')"
|
||||
:title="$t('reset_user_password')"
|
||||
:description="$t('user_box_password.description')"
|
||||
:is-last="true"
|
||||
>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<!--Storage Usage-->
|
||||
<div v-if="distribution" class="card shadow-card">
|
||||
<FormLabel icon="hard-drive">
|
||||
{{ $t('Storage Usage') }}
|
||||
{{ $t('storage_usage') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-2xl font-extrabold sm:text-3xl">
|
||||
@@ -16,8 +16,8 @@
|
||||
"
|
||||
class="mt-0.5 block text-sm dark:text-gray-500 text-gray-400"
|
||||
>
|
||||
{{ $t('Total of') }} {{ storage.data.attributes.capacity }}
|
||||
{{ $t('Used') }}
|
||||
{{ $t('total_of', {capacity: storage.data.attributes.capacity}) }}
|
||||
{{ $t('used') }}
|
||||
</b>
|
||||
|
||||
<ProgressLine v-if="storage.data.attributes.used !== '0B'" :data="distribution" class="mt-5" />
|
||||
@@ -26,7 +26,7 @@
|
||||
<!--Upload-->
|
||||
<div v-if="distribution" class="card shadow-card">
|
||||
<FormLabel icon="hard-drive">
|
||||
{{ $t('Upload') }}
|
||||
{{ $t('upload') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-2xl font-extrabold sm:text-3xl">
|
||||
@@ -34,7 +34,7 @@
|
||||
</b>
|
||||
|
||||
<b class="mb-3 mb-5 block text-sm dark:text-gray-500 text-gray-400">
|
||||
{{ $t('In last 45 days') }}
|
||||
{{ $t('in_last_x_days') }}
|
||||
</b>
|
||||
|
||||
<BarChart :data="storage.data.meta.traffic.chart.upload" color="#FFBD2D" />
|
||||
@@ -43,7 +43,7 @@
|
||||
<!--Download-->
|
||||
<div v-if="distribution" class="card shadow-card">
|
||||
<FormLabel icon="hard-drive">
|
||||
{{ $t('Download') }}
|
||||
{{ $t('download') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-2xl font-extrabold sm:text-3xl">
|
||||
@@ -51,7 +51,7 @@
|
||||
</b>
|
||||
|
||||
<b class="mb-3 mb-5 block text-sm dark:text-gray-500 text-gray-400">
|
||||
{{ $t('In last 45 days') }}
|
||||
{{ $t('in_last_x_days') }}
|
||||
</b>
|
||||
|
||||
<BarChart :data="storage.data.meta.traffic.chart.download" color="#9d66fe" />
|
||||
|
||||
@@ -15,22 +15,22 @@
|
||||
<!--Free Plan-->
|
||||
<div v-if="!subscription && config.subscriptionType === 'fixed'" class="card shadow-card">
|
||||
<FormLabel>
|
||||
{{ $t('Subscription') }}
|
||||
{{ $t('subscription') }}
|
||||
</FormLabel>
|
||||
|
||||
<b class="-mt-3 mb-0.5 block text-2xl font-extrabold sm:text-3xl">
|
||||
{{ $t('Free Plan') }}
|
||||
{{ $t('free_plan') }}
|
||||
</b>
|
||||
|
||||
<b class="block text-sm text-gray-400">
|
||||
{{ $t('1GB Free storage space with 5 Team members') }}
|
||||
{{ $t('free_plan_parameters', {storage: config.storageDefaultSpaceFormatted, members: config.teamsDefaultMembers}) }}
|
||||
</b>
|
||||
</div>
|
||||
|
||||
<!--Transactions-->
|
||||
<div class="card shadow-card">
|
||||
<FormLabel icon="file-text">
|
||||
{{ $t('Transactions') }}
|
||||
{{ $t('transactions') }}
|
||||
</FormLabel>
|
||||
|
||||
<DatatableWrapper
|
||||
@@ -60,7 +60,7 @@
|
||||
<template v-slot:empty-page>
|
||||
<InfoBox style="margin-bottom: 0">
|
||||
<p>
|
||||
{{ $t("User doesn't have any transactions yet.") }}
|
||||
{{ $t("user_dont_have_transactions") }}
|
||||
</p>
|
||||
</InfoBox>
|
||||
</template>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
<div class="mb-auto">
|
||||
<!--Locations-->
|
||||
<ContentGroup :title="$t('Base')">
|
||||
<ContentGroup :title="$t('base')">
|
||||
<b
|
||||
@click="goHome"
|
||||
class="flex cursor-pointer items-center py-2.5"
|
||||
@@ -21,7 +21,7 @@
|
||||
>
|
||||
<home-icon size="17" class="vue-feather icon-active mr-2.5" />
|
||||
<small class="text-active text-xs font-bold">
|
||||
{{ $t('Home') }}
|
||||
{{ $t('home') }}
|
||||
</small>
|
||||
</b>
|
||||
</ContentGroup>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user