language strings updates

This commit is contained in:
Čarodej
2022-03-20 12:12:09 +01:00
parent 98d9f3ab0d
commit 881facc867
121 changed files with 1729 additions and 1400 deletions

View File

@@ -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

View File

@@ -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"
}

View File

@@ -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,
},

View File

@@ -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,
},

View File

@@ -15,7 +15,7 @@
>
<template slot="loading">
<b>
{{ $t('loading content...') }}
{{ $t('loading_content') }}
</b>
</template>
</pdf>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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)
}

View File

@@ -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"

View File

@@ -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"

View File

@@ -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>

View File

@@ -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 (

View File

@@ -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>

View File

@@ -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
>

View File

@@ -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>

View File

@@ -9,7 +9,7 @@
@click.native="closeSelecting"
class="action-btn close-icon"
source="close"
:action="$t('actions.close')"
:action="$t('close')"
/>
</div>
</transition>

View File

@@ -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">
&lt;!&ndash;More Actions&ndash;&gt;
<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>

View File

@@ -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

View File

@@ -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'),
})
})
},

View File

@@ -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" />

View File

@@ -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

View File

@@ -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">

View File

@@ -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" />

View File

@@ -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>

View File

@@ -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),
},

View File

@@ -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'))
}
},
},

View File

@@ -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

View File

@@ -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'))
}
},
},

View File

@@ -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>

View File

@@ -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() {

View File

@@ -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>

View File

@@ -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" />

View File

@@ -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')
)
},

View File

@@ -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>

View File

@@ -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>

View File

@@ -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" />

View File

@@ -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>

View File

@@ -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',
},
],

View File

@@ -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'),
})
})
}

View File

@@ -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">

View File

@@ -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">

View File

@@ -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())

View File

@@ -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

View File

@@ -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>

View File

@@ -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

View File

@@ -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>

View File

@@ -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())

View File

@@ -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"
),

View File

@@ -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>

View File

@@ -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>

View File

@@ -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]
},
},

View File

@@ -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

View File

@@ -1,7 +1,7 @@
<template>
<div class="card shadow-card">
<FormLabel icon="file-text">
{{ $t('Transactions') }}
{{ $t('transactions') }}
</FormLabel>
<DatatableWrapper

View File

@@ -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">

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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'),
})
}

View File

@@ -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]
}

View File

@@ -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,

View File

@@ -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',
},
],

View File

@@ -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,
})
}

View File

@@ -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',
},
],

View File

@@ -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)"

View File

@@ -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(() => {

View File

@@ -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

View File

@@ -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,

View File

@@ -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

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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"

View File

@@ -22,7 +22,7 @@ export default {
return {
pages: [
{
title: this.$t('admin_settings.tabs.payments'),
title: this.$t('payments'),
route: 'AppPayments',
},
{

View File

@@ -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,
},

View File

@@ -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,
},
{

View File

@@ -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"

View File

@@ -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>

View File

@@ -17,7 +17,7 @@
<router-view v-if="!isLoading" :plan="plan" />
<div id="loader" v-if="isLoading">
<Spinner></Spinner>
<Spinner />
</div>
</div>
</template>

View File

@@ -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>

View File

@@ -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"

View File

@@ -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>

View File

@@ -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,
},

View File

@@ -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,
},

View File

@@ -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,
},

View File

@@ -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',
},
]

View File

@@ -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] }"

View File

@@ -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"

View File

@@ -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'),
},
}

View File

@@ -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(() => {

View File

@@ -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"
>

View File

@@ -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" />

View File

@@ -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>

View File

@@ -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