Merge pull request #8907 from ever-co/fix/internationalization

[Feat] Internationalization plugin marketplace
This commit is contained in:
Kifungo A
2025-04-12 14:50:20 +02:00
committed by GitHub
parent 9928850a38
commit c5d46a199b
38 changed files with 1515 additions and 165 deletions
@@ -5,10 +5,12 @@ import { PluginManager } from '../data-access/plugin-manager';
import { IPluginManager, PluginChannel, PluginHandlerChannel } from '../shared';
import { PluginEventManager } from './plugin-event.manager';
import { ID } from '@gauzy/contracts';
import { TranslateService } from '../../translation';
class ElectronPluginListener {
private pluginManager: IPluginManager;
private eventManager = PluginEventManager.getInstance();
private readonly translateService = TranslateService;
constructor(pluginManager: IPluginManager) {
this.pluginManager = pluginManager;
@@ -122,9 +124,16 @@ class ElectronPluginListener {
}
private async downloadPlugin(event: IpcMainEvent, config: any): Promise<void> {
event.reply(PluginChannel.STATUS, { status: 'inProgress', message: 'Plugin Downloading...' });
event.reply(PluginChannel.STATUS, {
status: 'inProgress',
message: this.translateService.instant('PLUGIN.TOASTR.INFO.INSTALLING')
});
const data = await this.pluginManager.downloadPlugin(config);
event.reply(PluginChannel.STATUS, { status: 'success', message: 'Plugin Downloaded', data });
event.reply(PluginChannel.STATUS, {
status: 'success',
message: this.translateService.instant('PLUGIN.TOASTR.SUCCESS.INSTALLED'),
data
});
}
private async activatePlugin(event: IpcMainEvent, name: string): Promise<void> {
@@ -140,9 +149,15 @@ class ElectronPluginListener {
}
private async uninstallPlugin(event: IpcMainEvent, name: string): Promise<void> {
event.reply(PluginChannel.STATUS, { status: 'inProgress', message: 'Plugin Uninstalling...' });
event.reply(PluginChannel.STATUS, {
status: 'inProgress',
message: this.translateService.instant('PLUGIN.TOASTR.INFO.UNINSTALLING')
});
await this.pluginManager.uninstallPlugin(name);
event.reply(PluginChannel.STATUS, { status: 'success', message: 'Plugin Uninstalled' });
event.reply(PluginChannel.STATUS, {
status: 'success',
message: this.translateService.instant('PLUGIN.TOASTR.SUCCESS.UNINSTALLED')
});
}
}
@@ -1,4 +1,4 @@
<nb-card class="dialog-card" [status]="data.status">
<nb-card class="dialog-card" [status]="data.status || 'basic'">
<nb-card-header class="mb-0">
<span class="cancel"><i (click)="dismiss()" class="fas fa-times"></i></span>
<h5 class="title">{{ data.title | translate }}</h5>
@@ -8,8 +8,10 @@
</nb-card-body>
<nb-card-footer class="text-right mt-0">
<button nbButton type="button" (click)="dismiss()" outline status="basic">
{{ 'BUTTONS.CANCEL' | translate }}
{{ data?.dismissText || 'BUTTONS.CANCEL' | translate }}
</button>
<button nbButton type="submit" status="success" (click)="confirm()">
{{ data?.confirmText || 'BUTTONS.OK' | translate }}
</button>
<button nbButton type="submit" status="success" (click)="confirm()">{{ 'BUTTONS.OK' | translate }}</button>
</nb-card-footer>
</nb-card>
@@ -5,6 +5,8 @@ export interface AlertDialogOptions {
title?: string;
message?: string;
status?: string;
confirmText?: string;
dismissText?: string;
}
@Component({
selector: 'ngx-alert',
@@ -51,7 +51,7 @@
(click)="redirectToStore()"
>
<nb-icon icon="grid-outline"></nb-icon>
{{ 'Marketplace' | translate }}
{{ 'BUTTONS.MARKETPLACE' | translate }}
</button>
</div>
</ng-container>
@@ -78,7 +78,7 @@
placeholder="https://cdn.server.tld/public/plugin.zip"
/>
<div class="error" *ngIf="error">
{{ error }}
{{ error | translate }}
</div>
<button
nbButton
@@ -117,7 +117,7 @@
required
#pkgName="ngModel"
[status]="error ? 'danger' : 'basic'"
placeholder="Package name"
[placeholder]="'TIMER_TRACKER.SETTINGS.PACKAGE_NAME' | translate"
/>
<input
@@ -127,11 +127,11 @@
name="pkgVersion"
[(ngModel)]="npmModel.pkg.version"
[status]="error ? 'danger' : 'basic'"
placeholder="Package version"
[placeholder]="'TIMER_TRACKER.SETTINGS.PACKAGE_VERSION' | translate"
/>
<nb-toggle [checked]="showRegistry" (checkedChange)="toggleRegistry($event)" status="basic">
{{ 'Registry' | translate }}
{{ 'TIMER_TRACKER.SETTINGS.REGISTRY' | translate }}
</nb-toggle>
<ng-container *ngIf="showRegistry">
@@ -148,7 +148,7 @@
id="authToken"
name="authToken"
[status]="error ? 'danger' : 'basic'"
placeholder="Authentication Token"
[placeholder]="'TIMER_TRACKER.SETTINGS.AUTH_TOKEN' | translate"
/>
<input
nbInput
@@ -159,12 +159,12 @@
pattern="https?://.+"
#privateURL="ngModel"
[status]="error ? 'danger' : 'basic'"
placeholder="Private registry URL"
[placeholder]="'TIMER_TRACKER.SETTINGS.PRIVATE_REGISTRY_URL' | translate"
/>
</ng-container>
<div class="error" *ngIf="error">
{{ error }}
{{ error | translate }}
</div>
<button nbButton [disabled]="!pkgName.value || installing" status="primary" type="submit">
@@ -34,7 +34,7 @@ export class AddPluginComponent {
public installPlugin(value: string) {
if (!value) {
this.error = "The server URL mustn't be empty.";
this.error = 'TIMER_TRACKER.SETTINGS.PLUGIN_INSTALL_CDN_ERROR';
return;
}
this.context = 'cdn';
@@ -1,4 +1,4 @@
@let installing = installationQuery.installing$ |async; @let uninstalling = installationQuery.unistalling$|async; @let
@let installing = installationQuery.installing$ |async; @let uninstalling = installationQuery.uninstalling$|async; @let
activating = query.activating$ |async; @let deactivating = query.deactivating$ |async; @let disabled = installing ||
uninstalling || activating || deactivating; @let selected = query.plugin$ | async; @let loading = query.isLoading$ |
async; @let source = sourceData$ | async;
@@ -68,7 +68,7 @@ async; @let source = sourceData$ | async;
</div>
<ng-template #noPlugin>
<div class="no-data">
<ngx-no-data-message [message]="(loading ? 'Plugins loading...' : 'SM_TABLE.NO_DATA.PLUGIN') | translate">
<ngx-no-data-message [message]="(loading ? 'SM_TABLE.NO_DATA.LOADING' : 'SM_TABLE.NO_DATA.PLUGIN') | translate">
</ngx-no-data-message>
</div>
</ng-template>
@@ -133,8 +133,9 @@ export class PluginListComponent implements OnInit, OnDestroy {
backdropClass: 'backdrop-blur',
context: {
data: {
title: 'Deactivate',
message: 'Would you like to deactivate this plugin?',
title: 'PLUGIN.DIALOG.DEACTIVATE.TITLE',
message: 'PLUGIN.DIALOG.DEACTIVATE.DESCRIPTION',
confirmText: 'PLUGIN.DIALOG.DEACTIVATE.CONFIRM',
status: 'basic'
}
}
@@ -173,8 +174,9 @@ export class PluginListComponent implements OnInit, OnDestroy {
backdropClass: 'backdrop-blur',
context: {
data: {
title: 'Uninstall',
message: 'Would you like to uninstall this plugin?',
title: 'PLUGIN.DIALOG.UNINSTALL.TITLE',
message: 'PLUGIN.DIALOG.UNINSTALL.DESCRIPTION',
confirmText: 'PLUGIN.DIALOG.UNINSTALL.CONFIRM',
status: 'basic'
}
}
@@ -1,3 +1,8 @@
<div class="badge-container">
<nb-badge [status]="state?.status" [text]="state?.message | titlecase" class="badge" position="center"></nb-badge>
<nb-badge
[status]="state?.status"
[text]="state?.message | translate | titlecase"
class="badge"
position="center"
></nb-badge>
</div>
@@ -10,7 +10,7 @@ export class PluginStatusComponent {
public get state() {
return this.rowData.isActivate
? { message: 'active', status: 'success' }
: { message: 'inactive', status: 'danger' };
? { message: 'PLUGIN.FORM.STATUSES.ACTIVE', status: 'success' }
: { message: 'PLUGIN.FORM.STATUSES.INACTIVE', status: 'danger' };
}
}
@@ -10,9 +10,10 @@ import { IPlugin } from '../../../../services/plugin-loader.service';
import { PluginService } from '../../../../services/plugin.service';
import { PluginInstallationActions } from '../actions/plugin-installation.action';
import { PluginMarketplaceQuery } from '../queries/plugin-marketplace.query';
import { PluginInsatallationStore } from '../stores/plugin-installation.store';
import { PluginInstallationStore } from '../stores/plugin-installation.store';
import { PluginMarketplaceStore } from '../stores/plugin-market.store';
import { PluginInstallationQuery } from '../queries/plugin-installation.query';
import { TranslateService } from '@ngx-translate/core';
@Injectable({ providedIn: 'root' })
export class PluginInstallationEffects {
@@ -20,11 +21,12 @@ export class PluginInstallationEffects {
private readonly action$: Actions,
private readonly pluginMarketplaceStore: PluginMarketplaceStore,
private readonly pluginMarketplaceQuery: PluginMarketplaceQuery,
private readonly pluginInstallationStore: PluginInsatallationStore,
private readonly pluginInstallationStore: PluginInstallationStore,
private readonly pluginInstallationQuery: PluginInstallationQuery,
private readonly pluginService: PluginService,
private readonly pluginElectronService: PluginElectronService,
private readonly toastrService: ToastrNotificationService
private readonly toastrService: ToastrNotificationService,
private readonly translateService: TranslateService
) {}
uninstall$ = createEffect(() =>
@@ -91,7 +93,9 @@ export class PluginInstallationEffects {
let plugin = state.plugins[existingPluginIndex] || this.pluginInstallationQuery.plugin;
if (!plugin) {
throw new Error(`Plugin with ID ${pluginId} not found`);
throw new Error(
this.translateService.instant('PLUGIN.TOASTR.ERROR.NOT_FOUND', { id: pluginId })
);
}
// Ensure the plugin is marked as installed
@@ -113,7 +117,7 @@ export class PluginInstallationEffects {
this.pluginInstallationStore.setToggle({ isChecked: true });
this.toastrService.success('Install plugin successfully!');
this.toastrService.success(this.translateService.instant('PLUGIN.TOASTR.SUCCESS.INSTALLED'));
}),
catchError(async (error) => {
this.pluginInstallationStore.setToggle({ isChecked: false });
@@ -128,7 +132,9 @@ export class PluginInstallationEffects {
const plugin = await this.pluginElectronService.checkInstallation(pluginId);
this.pluginElectronService.uninstall(plugin);
} catch (err) {
this.toastrService.error(err?.message || 'Failed to revert installation');
this.toastrService.error(
err?.message || this.translateService.instant('PLUGIN.TOASTR.ERROR.REVERT_INSTALLATION')
);
}
}
@@ -141,7 +147,7 @@ export class PluginInstallationEffects {
private handleError(error: any) {
const isChecked = !this.pluginInstallationQuery.checked;
this.pluginInstallationStore.setToggle({ isChecked });
this.toastrService.error(error?.message || 'Installation failed');
this.toastrService.error(error?.message || this.translateService.instant('PLUGIN.TOASTR.ERROR.INSTALL'));
return EMPTY; // Ensure the stream does not break
}
@@ -154,7 +160,7 @@ export class PluginInstallationEffects {
let plugin = plugins[existingPluginIndex] || this.pluginInstallationQuery.plugin;
if (!plugin) {
throw new Error(`Plugin with ID ${pluginId} not found`);
throw new Error(this.translateService.instant('PLUGIN.TOASTR.ERROR.NOT_FOUND', { id: pluginId }));
}
// Ensure plugin is marked as uninstalled
@@ -171,7 +177,7 @@ export class PluginInstallationEffects {
plugin: updatedPlugin
});
this.pluginInstallationStore.setToggle({ isChecked: false });
this.toastrService.success(`Uninstall plugin successfully!`);
this.toastrService.success(this.translateService.instant('PLUGIN.TOASTR.SUCCESS.UNINSTALLED'));
}),
catchError((error) => {
this.pluginInstallationStore.setToggle({ isChecked: true });
@@ -8,6 +8,7 @@ import { PluginMarketplaceActions } from '../actions/plugin-marketplace.action';
import { PluginMarketplaceStore } from '../stores/plugin-market.store';
import { Router } from '@angular/router';
import { coalesceValue } from '../../../../../../utils';
import { TranslateService } from '@ngx-translate/core';
@Injectable({ providedIn: 'root' })
export class PluginMarketplaceEffects {
@@ -16,6 +17,7 @@ export class PluginMarketplaceEffects {
private readonly pluginMarketplaceStore: PluginMarketplaceStore,
private readonly pluginService: PluginService,
private readonly toastrService: ToastrNotificationService,
private readonly translateService: TranslateService,
private readonly router: Router
) {}
@@ -24,7 +26,7 @@ export class PluginMarketplaceEffects {
ofType(PluginMarketplaceActions.upload),
tap(() => {
this.pluginMarketplaceStore.setUpload({ uploading: true });
this.toastrService.info('Uploading...');
this.toastrService.info(this.translateService.instant('PLUGIN.TOASTR.INFO.UPLOADING'));
}),
switchMap(({ plugin }) =>
this.pluginService.upload(plugin).pipe(
@@ -36,11 +38,13 @@ export class PluginMarketplaceEffects {
plugins: [uploaded, ...state.plugins], // Immutable update
count: state.count + 1
}));
this.toastrService.success('Upload plugin successfully!');
this.toastrService.success(this.translateService.instant('PLUGIN.TOASTR.SUCCESS.UPLOADED'));
}),
finalize(() => this.pluginMarketplaceStore.setUpload({ uploading: false })), // Always stop loading
catchError((error) => {
this.toastrService.error(error.message || 'Upload failed');
this.toastrService.error(
error.message || this.translateService.instant('PLUGIN.TOASTR.ERROR.UPLOAD')
);
return EMPTY; // Ensure the stream continues
})
)
@@ -97,7 +101,7 @@ export class PluginMarketplaceEffects {
ofType(PluginMarketplaceActions.update),
tap(() => {
this.pluginMarketplaceStore.update({ updating: true });
this.toastrService.info('Updating plugin...');
this.toastrService.info(this.translateService.instant('PLUGIN.TOASTR.INFO.UPDATING'));
}),
switchMap(({ id, plugin }) =>
this.pluginService.update(id, plugin).pipe(
@@ -106,7 +110,7 @@ export class PluginMarketplaceEffects {
plugins: [...new Map([...state.plugins, plugin].map((item) => [item.id, item])).values()],
plugin: { ...state.plugin, ...plugin }
}));
this.toastrService.success('Update plugin successfully!');
this.toastrService.success(this.translateService.instant('PLUGIN.TOASTR.SUCCESS.UPDATED'));
}),
finalize(() => this.pluginMarketplaceStore.update({ updating: false })),
catchError((error) => {
@@ -123,7 +127,7 @@ export class PluginMarketplaceEffects {
ofType(PluginMarketplaceActions.delete),
tap(() => {
this.pluginMarketplaceStore.update({ deleting: true });
this.toastrService.info('Deleting plugin...');
this.toastrService.info(this.translateService.instant('PLUGIN.TOASTR.INFO.DELETING'));
}),
switchMap(({ id }) =>
this.pluginService.delete(id).pipe(
@@ -133,7 +137,7 @@ export class PluginMarketplaceEffects {
plugins: [...state.plugins.filter((plugin) => plugin.id !== id)],
plugin: null
}));
this.toastrService.success('Delete plugin successfully!');
this.toastrService.success(this.translateService.instant('PLUGIN.TOASTR.SUCCESS.DELETED'));
}),
finalize(() => this.pluginMarketplaceStore.update({ deleting: false })),
catchError((error) => {
@@ -8,6 +8,7 @@ import { PluginVersionActions } from '../actions/plugin-version.action';
import { PluginMarketplaceStore } from '../stores/plugin-market.store';
import { PluginVersionStore } from '../stores/plugin-version.store';
import { coalesceValue } from '../../../../../../utils';
import { TranslateService } from '@ngx-translate/core';
@Injectable({ providedIn: 'root' })
export class PluginVersionEffects {
@@ -16,7 +17,8 @@ export class PluginVersionEffects {
private readonly pluginVersionStore: PluginVersionStore,
private readonly pluginService: PluginService,
private readonly toastrService: ToastrNotificationService,
private readonly pluginMarketplaceStore: PluginMarketplaceStore
private readonly pluginMarketplaceStore: PluginMarketplaceStore,
private readonly translateService: TranslateService
) {}
getAll$ = createEffect(() =>
@@ -49,7 +51,7 @@ export class PluginVersionEffects {
tap(() => {
this.pluginVersionStore.update({ creating: true });
this.pluginMarketplaceStore.setUpload({ uploading: true });
this.toastrService.info('Adding new plugin version...');
this.toastrService.info(this.translateService.instant('PLUGIN.TOASTR.INFO.VERSION.ADDING'));
}),
switchMap(({ pluginId, version }) =>
this.pluginService.addVersion(pluginId, version).pipe(
@@ -61,7 +63,11 @@ export class PluginVersionEffects {
version: created,
versions: [created, ...state.versions]
}));
this.toastrService.success(`Create plugin version v${created.number} successfully!`);
this.toastrService.success(
this.translateService.instant('PLUGIN.TOASTR.SUCCESS.VERSION.CREATED', {
number: created.number
})
);
}),
finalize(() => {
this.pluginMarketplaceStore.setUpload({ uploading: false });
@@ -81,7 +87,7 @@ export class PluginVersionEffects {
ofType(PluginVersionActions.update),
tap(() => {
this.pluginVersionStore.update({ updating: true });
this.toastrService.info('Updating plugin version...');
this.toastrService.info(this.translateService.instant('PLUGIN.TOASTR.INFO.VERSION.UPDATING'));
}),
switchMap(({ pluginId, versionId, version }) =>
this.pluginService.updateVersion(pluginId, versionId, version).pipe(
@@ -98,7 +104,11 @@ export class PluginVersionEffects {
return { versions, version };
});
this.toastrService.success('Update plugin version successfully!');
this.toastrService.success(
this.translateService.instant('PLUGIN.TOASTR.SUCCESS.VERSION.UPDATED', {
number: version.number
})
);
}),
finalize(() => this.pluginVersionStore.update({ updating: false })),
catchError((error) => {
@@ -115,7 +125,7 @@ export class PluginVersionEffects {
ofType(PluginVersionActions.delete),
tap(() => {
this.pluginVersionStore.update({ deleting: true });
this.toastrService.info('Deleting plugin version...');
this.toastrService.info(this.translateService.instant('PLUGIN.TOASTR.INFO.VERSION.DELETING'));
}),
mergeMap(({ pluginId, versionId }) =>
this.pluginService.deleteVersion(pluginId, versionId).pipe(
@@ -129,7 +139,9 @@ export class PluginVersionEffects {
)
]
}));
this.toastrService.success('Delete plugin version successfully!');
this.toastrService.success(
this.translateService.instant('PLUGIN.TOASTR.SUCCESS.VERSION.DELETED')
);
}),
finalize(() => this.pluginVersionStore.update({ deleting: false })),
catchError((error) => {
@@ -146,7 +158,7 @@ export class PluginVersionEffects {
ofType(PluginVersionActions.restore),
tap(() => {
this.pluginVersionStore.update({ restoring: true });
this.toastrService.info('Restoring plugin version...');
this.toastrService.info(this.translateService.instant('PLUGIN.TOASTR.INFO.VERSION.RESTORING'));
}),
mergeMap(({ pluginId, versionId }) =>
this.pluginService.restoreVersion(pluginId, versionId).pipe(
@@ -158,11 +170,13 @@ export class PluginVersionEffects {
version.id === versionId ? { ...version, deletedAt: null } : version
)
}));
this.toastrService.success('Plugin version restored successfully!');
this.toastrService.success(
this.translateService.instant('PLUGIN.TOASTR.SUCCESS.VERSION.RESTORED')
);
}),
catchError((error) => {
console.error('Restore failed:', error);
this.toastrService.error('Failed to restore plugin version. Please try again.');
this.toastrService.error(this.translateService.instant('PLUGIN.TOASTR.ERROR.VERSION.RESTORE'));
return EMPTY;
}),
finalize(() => this.pluginVersionStore.update({ restoring: false }))
@@ -2,18 +2,18 @@ import { Injectable } from '@angular/core';
import { Query } from '@datorama/akita';
import { Observable } from 'rxjs';
import { IPluginInstallationState, PluginInsatallationStore } from '../stores/plugin-installation.store';
import { IPluginInstallationState, PluginInstallationStore } from '../stores/plugin-installation.store';
import { IPlugin } from '@gauzy/contracts';
@Injectable({ providedIn: 'root' })
export class PluginInstallationQuery extends Query<IPluginInstallationState> {
public readonly installing$: Observable<boolean> = this.select((state) => state.installing);
public readonly unistalling$: Observable<boolean> = this.select((state) => state.uninstalling);
public readonly uninstalling$: Observable<boolean> = this.select((state) => state.uninstalling);
public readonly activating$: Observable<boolean> = this.select((state) => state.activating);
public readonly deactivating$: Observable<boolean> = this.select((state) => state.deactivating);
public readonly toggle$: Observable<IPluginInstallationState['toggle']> = this.select((state) => state.toggle);
constructor(readonly pluginInstallationStore: PluginInsatallationStore) {
constructor(readonly pluginInstallationStore: PluginInstallationStore) {
super(pluginInstallationStore);
}
@@ -28,7 +28,7 @@ export function createInitialInstallationState(): IPluginInstallationState {
@StoreConfig({ name: '_plugin_installation' })
@Injectable({ providedIn: 'root' })
export class PluginInsatallationStore extends Store<IPluginInstallationState> {
export class PluginInstallationStore extends Store<IPluginInstallationState> {
constructor() {
super(createInitialInstallationState());
}
@@ -1,4 +1,4 @@
@let installing = installationQuery.installing$ |async; @let uninstalling = installationQuery.unistalling$|async; @let
@let installing = installationQuery.installing$ |async; @let uninstalling = installationQuery.uninstalling$|async; @let
checked = isChecked$ | async; @let toggle = installationQuery.toggle$ | async ; @let disabled = installing ||
uninstalling; @let isSelected = plugin?.id === toggle.plugin?.id; @let showProgress = disabled && isSelected; @let
editing = marketplaceQuery.updating$ | async; @if(plugin) {
@@ -8,7 +8,14 @@ editing = marketplaceQuery.updating$ | async; @if(plugin) {
<div class="plugin-name" (click)="openPlugin()">{{ plugin.name }}</div>
<div class="plugin-version">{{ plugin.version.number || plugin.version }}</div>
</div>
<div [readMore]="80" class="plugin-description">{{ plugin.description }}</div>
<div
[readMore]="80"
[readMoreText]="'BUTTONS.READ_MORE' | translate"
[readLessText]="'BUTTONS.READ_LESS' | translate"
class="plugin-description"
>
{{ plugin.description }}
</div>
</div>
<div class="plugin-actions">
@if(isOwner){
@@ -143,8 +143,9 @@ export class PluginMarketplaceDetailComponent implements OnInit {
backdropClass: 'backdrop-blur',
context: {
data: {
title: 'Uninstall',
message: 'Would you like to uninstall this plugin?',
title: 'PLUGIN.DIALOG.UNINSTALL.TITLE',
message: 'PLUGIN.DIALOG.UNINSTALL.DESCRIPTION',
confirmText: 'PLUGIN.DIALOG.UNINSTALL.CONFIRM',
status: 'basic'
}
}
@@ -2,7 +2,11 @@
<nb-card class="dialog-card" status="basic">
<nb-card-header class="mb-0">
<h5 class="title">
{{ version ? 'Update version v' + version.number : 'Create new version for ' + plugin?.name }}
{{
version
? ('PLUGIN.DIALOG.VERSION.UPDATE.TITLE' | translate : { number: version.number })
: ('PLUGIN.DIALOG.VERSION.CREATE.TITLE' | translate : { name: plugin?.name })
}}
</h5>
<span class="cancel"><i (click)="dismiss()" class="fas fa-times"></i></span>
</nb-card-header>
@@ -2,9 +2,10 @@ import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/
import { AbstractControl, FormBuilder, FormGroup, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';
import { IPlugin, IPluginVersion, PluginSourceType, PluginStatus, PluginType } from '@gauzy/contracts';
import { distinctUntilChange } from '@gauzy/ui-core/common';
import { NbDateService, NbDialogRef, NbToastrService } from '@nebular/theme';
import { NbDateService, NbDialogRef } from '@nebular/theme';
import { TranslateService } from '@ngx-translate/core';
import { filter, Subject, takeUntil, tap } from 'rxjs';
import { ToastrNotificationService } from '../../../../../../services';
@Component({
selector: 'lib-dialog-create-version',
@@ -27,7 +28,7 @@ export class DialogCreateVersionComponent implements OnInit, OnDestroy {
constructor(
private readonly fb: FormBuilder,
private readonly dialogRef: NbDialogRef<DialogCreateVersionComponent>,
private readonly toastrService: NbToastrService,
private readonly toastrService: ToastrNotificationService,
private readonly translateService: TranslateService,
protected readonly dateService: NbDateService<Date>
) {
@@ -134,10 +135,7 @@ export class DialogCreateVersionComponent implements OnInit, OnDestroy {
if (this.versionForm.invalid) {
this.markFormGroupTouched(this.versionForm);
this.scrollToFirstInvalidControl();
this.toastrService.danger(
this.translateService.instant('Validation failed'),
this.translateService.instant('Gauzy')
);
this.toastrService.error(this.translateService.instant('PLUGIN.FORM.VALIDATION.FAILED'));
return;
}
@@ -147,10 +145,7 @@ export class DialogCreateVersionComponent implements OnInit, OnDestroy {
const data = this.versionForm.value;
this.dialogRef.close(data);
} catch (error) {
this.toastrService.danger(
error.message || this.translateService.instant('PLUGINS.UPLOAD.ERROR'),
this.translateService.instant('TOASTR.TITLE.ERROR')
);
this.toastrService.error(error.message || error);
} finally {
this.isSubmitting = false;
}
@@ -1,6 +1,6 @@
@let plugin = plugin$ | async; @let editing = marketplaceQuery.updating$ | async; @let toggle =
installationQuery.toggle$ | async; @let isSelected = toggle.plugin?.id === plugin?.id; @let installing =
installationQuery.installing$ |async; @let uninstalling = installationQuery.unistalling$ |async; @let deleting =
installationQuery.installing$ |async; @let uninstalling = installationQuery.uninstalling$ |async; @let deleting =
marketplaceQuery.deleting$ | async; @let adding = versionQuery.creating$ | async; @let needUpdate = needUpdate$ | async;
@let installed = installed$ | async; @let loading = marketplaceQuery.isLoading$ | async; @let disabled = editing ||
installing || uninstalling || deleting || adding; @let selectedVersion = versionQuery.version$ | async; @let uploading =
@@ -9,7 +9,7 @@ marketplaceQuery.uploading$ | async; @let progress = marketplaceQuery.progress$
<nb-card class="content-active first plugin-details-card">
<nb-card-header class="d-flex align-items-center justify-content-between">
<div class="d-flex align-items-center">
<h5 class="mb-0">{{ plugin?.name || 'Plugin Details' }}</h5>
<h5 class="mb-0">{{ plugin?.name || ('SM_TABLE.NO_DATA.LOADING' | translate) }}</h5>
<div class="ml-3">
<nb-badge
*ngIf="plugin"
@@ -101,7 +101,14 @@ marketplaceQuery.uploading$ | async; @let progress = marketplaceQuery.progress$
<!-- Description -->
@if(plugin.description) {
<div class="description-container mb-4">
<p [readMore]="256" class="plugin-description">{{ plugin.description }}</p>
<p
[readMore]="256"
[readMoreText]="'BUTTONS.READ_MORE' | translate"
[readLessText]="'BUTTONS.READ_LESS' | translate"
class="plugin-description"
>
{{ plugin.description }}
</p>
</div>
}
@@ -160,7 +167,7 @@ marketplaceQuery.uploading$ | async; @let progress = marketplaceQuery.progress$
@if(selectedVersion; as version) {
<div class="info-card mb-4">
<div class="d-flex align-items-center mb-3">
<h6 class="section-title m-0">What's New</h6>
<h6 class="section-title m-0">{{ 'CHANGELOG_MENU.HEADER' | translate }}</h6>
<button nbButton ghost status="basic" class="ml-2 mr-2" (click)="navigateToHistory()">
<nb-icon icon="arrow-ios-forward-outline"></nb-icon>
</button>
@@ -169,7 +176,14 @@ marketplaceQuery.uploading$ | async; @let progress = marketplaceQuery.progress$
<div class="label">Version {{ version.number }}</div>
<div class="value">{{ version.createdAt | humanize }}</div>
</div>
<p [readMore]="128" class="plugin-description">{{ version.changelog }}</p>
<p
[readMore]="128"
[readMoreText]="'BUTTONS.READ_MORE' | translate"
[readLessText]="'BUTTONS.READ_LESS' | translate"
class="plugin-description"
>
{{ version.changelog }}
</p>
</div>
}
@@ -238,8 +238,9 @@ export class PluginMarketplaceItemComponent implements OnInit, OnDestroy {
backdropClass: 'backdrop-blur',
context: {
data: {
title: 'Uninstall',
message: 'Would you like to uninstall this plugin?',
title: 'PLUGIN.DIALOG.UNINSTALL.TITLE',
message: 'PLUGIN.DIALOG.UNINSTALL.DESCRIPTION',
confirmText: 'PLUGIN.DIALOG.UNINSTALL.CONFIRM',
status: 'basic'
}
}
@@ -327,8 +328,9 @@ export class PluginMarketplaceItemComponent implements OnInit, OnDestroy {
.open(AlertComponent, {
context: {
data: {
message: 'Would you like to delete this plugin?',
title: 'Delete plugin',
message: 'PLUGIN.DIALOG.DELETE.DESCRIPTION',
title: 'PLUGIN.DIALOG.DELETE.TITLE',
confirmText: 'PLUGIN.DIALOG.DELETE.CONFIRM',
status: 'Danger'
}
}
@@ -5,7 +5,7 @@ isEditing; @let selectedVersionId = (query.version$ | async)?.id;
<nb-card class="content-active first">
<nb-card-header class="d-flex justify-content-between header">
<h5 class="title">Version History</h5>
<h5 class="title">{{ 'PLUGIN.LAYOUT.VERSION_HISTORY' | translate }}</h5>
<button nbButton ghost size="small" (click)="navigateBack()">
<nb-icon icon="close-outline"></nb-icon>
</button>
@@ -30,7 +30,13 @@ isEditing; @let selectedVersionId = (query.version$ | async)?.id;
</h6>
</nb-card-header>
<nb-card-body class="changelog">
<p [readMore]="256">{{ version.changelog }}</p>
<p
[readMore]="256"
[readMoreText]="'BUTTONS.READ_MORE' | translate"
[readLessText]="'BUTTONS.READ_LESS' | translate"
>
{{ version.changelog }}
</p>
</nb-card-body>
@if(isOwner(version)){
<nb-card-footer class="version-actions">
@@ -48,7 +54,7 @@ isEditing; @let selectedVersionId = (query.version$ | async)?.id;
*gauzySpinnerButton="selectedVersionId === version.id && isRecovering"
icon="refresh-outline"
></nb-icon>
{{ 'Recover' | translate }}
{{ 'BUTTONS.RECOVER' | translate }}
</button>
} @else {
<button
@@ -109,9 +115,9 @@ isEditing; @let selectedVersionId = (query.version$ | async)?.id;
} }
</nb-card-body>
} @else if (isLoading) {
<ngx-no-data-message message="Loading changelogs..."></ngx-no-data-message>
<ngx-no-data-message [message]="'SM_TABLE.NO_DATA.LOADING' | translate"></ngx-no-data-message>
} @else {
<ngx-no-data-message message="No history"></ngx-no-data-message>
<ngx-no-data-message [message]="'SM_TABLE.NO_DATA.HISTORY' | translate"></ngx-no-data-message>
}
<nb-card-footer class="d-flex justify-content-between footer">
@@ -106,8 +106,9 @@ export class VersionHistoryComponent implements OnInit, OnDestroy {
.open(AlertComponent, {
context: {
data: {
message: `Would you like to delete version ${version.number}?`,
title: 'Delete plugin version',
message: 'PLUGIN.DIALOG.VERSION.DELETE.DESCRIPTION',
title: 'PLUGIN.DIALOG.VERSION.DELETE.TITLE',
confirmText: 'PLUGIN.DIALOG.VERSION.DELETE.CONFIRM',
status: 'basic'
}
}
@@ -129,8 +130,9 @@ export class VersionHistoryComponent implements OnInit, OnDestroy {
.open(AlertComponent, {
context: {
data: {
message: `Would you like to restore version ${version.number}?`,
title: 'Restore plugin version',
message: 'PLUGIN.DIALOG.VERSION.RESTORE.DESCRIPTION',
title: 'PLUGIN.DIALOG.VERSION.RESTORE.TITLE',
confirmText: 'PLUGIN.DIALOG.VERSION.RESTORE.CONFIRM',
status: 'warn'
}
}
@@ -1,6 +1,6 @@
<nb-card class="dialog-card" status="basic">
<nb-card-header class="mb-0">
<h5 class="title">{{ (!!plugin ? 'Edit' : 'PLUGIN.FORM.TITLE') | translate }}</h5>
<h5 class="title">{{ (!!plugin ? 'POP_UPS.EDIT' : 'PLUGIN.FORM.TITLE') | translate }}</h5>
<span class="cancel"><i (click)="dismiss()" class="fas fa-times"></i></span>
</nb-card-header>
@@ -2,9 +2,10 @@ import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewChild } from
import { AbstractControl, FormBuilder, FormGroup, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';
import { IPlugin, PluginSourceType, PluginStatus, PluginType } from '@gauzy/contracts';
import { distinctUntilChange } from '@gauzy/ui-core/common';
import { NbDateService, NbDialogRef, NbStepperComponent, NbToastrService } from '@nebular/theme';
import { NbDateService, NbDialogRef, NbStepperComponent } from '@nebular/theme';
import { TranslateService } from '@ngx-translate/core';
import { filter, Subject, takeUntil, tap } from 'rxjs';
import { ToastrNotificationService } from '../../../../../services';
@Component({
selector: 'lib-plugin-marketplace-upload',
@@ -28,7 +29,7 @@ export class PluginMarketplaceUploadComponent implements OnInit, OnDestroy {
constructor(
private readonly fb: FormBuilder,
private readonly dialogRef: NbDialogRef<PluginMarketplaceUploadComponent>,
private readonly toastrService: NbToastrService,
private readonly toastrService: ToastrNotificationService,
private readonly translateService: TranslateService,
protected readonly dateService: NbDateService<Date>
) {
@@ -159,10 +160,7 @@ export class PluginMarketplaceUploadComponent implements OnInit, OnDestroy {
if (this.pluginForm.invalid) {
this.markFormGroupTouched(this.pluginForm);
this.scrollToFirstInvalidControl();
this.toastrService.danger(
this.translateService.instant('PLUGINS.VALIDATION.FORM_INVALID'),
this.translateService.instant('TOASTR.TITLE.ERROR')
);
this.toastrService.error(this.translateService.instant('PLUGIN.FORM.VALIDATION.FAILED'));
return;
}
@@ -172,10 +170,7 @@ export class PluginMarketplaceUploadComponent implements OnInit, OnDestroy {
const pluginData = this.pluginForm.value;
this.dialogRef.close(pluginData);
} catch (error) {
this.toastrService.danger(
error.message || this.translateService.instant('PLUGINS.UPLOAD.ERROR'),
this.translateService.instant('TOASTR.TITLE.ERROR')
);
this.toastrService.error(error.message || error);
} finally {
this.isSubmitting = false;
}
@@ -36,17 +36,23 @@ isOffline = store.isOffline$ | async;
</div>
} } } @else if (isLoading) {
<div class="no-data">
<ngx-no-data-message message="Marketplace is loading plugins..."></ngx-no-data-message>
<ngx-no-data-message [message]="'SM_TABLE.NO_DATA.LOADING' | translate"></ngx-no-data-message>
</div>
} @else {
<div class="no-data">
<ngx-no-data-message
[message]="isOffline ? 'You are currently offline/disconnected ⛓️‍' : 'There are no available plugins'"
[message]="(isOffline ? 'PLUGIN.MARKETPLACE.OFFLINE' : 'SM_TABLE.NO_DATA.PLUGIN') | translate"
></ngx-no-data-message>
</div>
} @if (isUploadAvailable) { @defer (on idle) {
<div class="button-upload">
<button (click)="upload()" nbTooltip="Upload new plugin" status="primary" nbButton [disabled]="isOffline">
<button
(click)="upload()"
[nbTooltip]="'PLUGIN.MARKETPLACE.UPLOAD' | translate"
status="primary"
nbButton
[disabled]="isOffline"
>
<nb-icon *gauzySpinnerButton="uploading" icon="cloud-upload-outline"></nb-icon>
@if (uploading) {
<span>{{ progress | percent : '1.2-2' }}</span>
+103 -5
View File
@@ -170,10 +170,16 @@
"SHARE": "مشاركة",
"GET_INFO": "الحصول على المعلومات",
"RETRY": "إعادة المحاولة",
"UPLOAD": "رفع"
"UPLOAD": "رفع",
"MARKETPLACE": "السوق",
"ADD_VERSION": "اضافة نسخة",
"READ_MORE": "قراءة المزيد",
"READ_LESS": "قراءة أقل",
"RECOVER": "استعادة"
},
"SM_TABLE": {
"NO_DATA": {
"HISTORY": "لا يوجد سجل",
"RECEIVE_ESTIMATE": "لم تتلقَ أي تقدير.",
"INCOME": "لم تقم بإنشاء أي دخل.",
"EXPENSE_CATEGORY": "لم تقم بإنشاء أي فئة نفقات.",
@@ -217,7 +223,8 @@
"PRODUCT_TYPE_NO_DATA": "لم تقم بإنشاء أي نوع منتج.",
"TEAM_DASHBOARD": "ليس لديك أي فرق",
"PLUGIN": "لم تقم بتثبيت أي ملحق.",
"PLUGIN_MARKETPLACE": "هذا المكون الإضافي غير متوفر في السوق"
"PLUGIN_MARKETPLACE": "هذا المكون الإضافي غير متوفر في السوق",
"LOADING": "جار التحميل"
},
"TRANSACTION_TYPE": "النوع",
"AMOUNT": "المبلغ",
@@ -4002,7 +4009,14 @@
},
"VERSION": "الإصدار",
"ADD_PLUGIN_INSTALLATION_DESCRIPTION": "قم بتثبيت المكونات الإضافية من الملفات المحلية أو CDN. محلي للمكونات الإضافية المخصصة/الخاصة، وCDN للمكونات العامة. اختر بناءً على احتياجاتك.",
"ADD_PLUGIN_CDN_DESCRIPTION": "تتيح لك التثبيت من CDN الوصول بسهولة إلى المكونات الإضافية المتاحة علنًا."
"ADD_PLUGIN_CDN_DESCRIPTION": "تتيح لك التثبيت من CDN الوصول بسهولة إلى المكونات الإضافية المتاحة علنًا.",
"ADD_PLUGIN_NPM_DESCRIPTION": "يتيح تثبيت NPM الوصول إلى الإضافات المتاحة للعموم والخاصة.",
"PACKAGE_NAME": "اسم حزمة NPM",
"PACKAGE_VERSION": "إصدار حزمة NPM",
"REGISTRY": "سجل NPM",
"AUTH_TOKEN": "رمز المصادقة",
"PRIVATE_REGISTRY_URL": "رابط السجل الخاص",
"PLUGIN_INSTALL_CDN_ERROR": "يجب ألا يكون عنوان URL للخادم فارغًا."
},
"WEEKLY_LIMIT_EXCEEDED": "تجاوز الحد الأسبوعي",
"OF_HRS": "من {{ limit }} ساعة",
@@ -4774,7 +4788,10 @@
"INVALID_PACKAGE_NAME": "تنسيق اسم الحزمة غير صالح",
"INVALID_SCOPE": "تنسيق النطاق غير صالح",
"AUTHOR_TOO_LONG": "اسم المؤلف طويل جدًا",
"LICENSE_TOO_LONG": "حقل الترخيص طويل جدًا"
"LICENSE_TOO_LONG": "حقل الترخيص طويل جدًا",
"FAILED": "فشل التحقق",
"CHANGELOG_TOO_SHORT": "سجل التغييرات قصير جدًا",
"CHANGELOG_REQUIRED": "سجل التغييرات مطلوب"
},
"TYPE": "نوع الإضافة",
"TYPE_PLACEHOLDER": "اختر نوع الإضافة",
@@ -4848,7 +4865,88 @@
},
"LAYOUT": {
"DISCOVER": "اكتشف",
"INSTALLED": "مثبت"
"INSTALLED": "مثبت",
"VERSION_HISTORY": "سجل الإصدارات"
},
"MARKETPLACE": {
"UPLOAD": "رفع ملحق جديد",
"OFFLINE": "أنت غير متصل حالياً ⛓️‍"
},
"DIALOG": {
"DEACTIVATE": {
"TITLE": "إلغاء تنشيط الإضافة",
"DESCRIPTION": "هل أنت متأكد أنك تريد إلغاء تنشيط هذه الإضافة؟",
"CONFIRM": "إلغاء التنشيط"
},
"UNINSTALL": {
"TITLE": "إلغاء تثبيت الإضافة",
"DESCRIPTION": "هل أنت متأكد أنك تريد إلغاء تثبيت هذه الإضافة؟",
"CONFIRM": "إلغاء التثبيت"
},
"DELETE": {
"TITLE": "حذف الملحق",
"DESCRIPTION": "هل أنت متأكد أنك تريد حذف هذا الملحق؟",
"CONFIRM": "حذف"
},
"VERSION": {
"UPDATE": {
"TITLE": "تحديث الإصدار v{{number}}",
"DESCRIPTION": "هل أنت متأكد أنك تريد تحديث هذا الملحق؟",
"CONFIRM": "تحديث"
},
"CREATE": {
"TITLE": "إنشاء إصدار جديد لـ {{name}}",
"DESCRIPTION": "هل أنت متأكد أنك تريد إنشاء هذا الإصدار؟",
"CONFIRM": "إنشاء"
},
"DELETE": {
"TITLE": "حذف الإصدار",
"DESCRIPTION": "هل أنت متأكد أنك تريد حذف هذا الإصدار؟",
"CONFIRM": "حذف"
},
"RESTORE": {
"TITLE": "استعادة الإصدار",
"DESCRIPTION": "هل أنت متأكد أنك تريد استعادة هذا الإصدار؟",
"CONFIRM": "استعادة"
}
}
},
"TOASTR": {
"SUCCESS": {
"VERSION": {
"CREATED": "تم إنشاء إصدار الملحق v{{number}} بنجاح!",
"UPDATED": "تم تحديث إصدار الملحق v{{number}} بنجاح!",
"DELETED": "تم حذف إصدار الملحق بنجاح!",
"RESTORED": "تم استعادة إصدار الملحق بنجاح!"
},
"UPLOADED": "تم رفع الملحق بنجاح!",
"UPDATED": "تم تحديث الملحق بنجاح!",
"DELETED": "تم حذف الملحق بنجاح!",
"INSTALLED": "تم تثبيت الملحق بنجاح!",
"UNINSTALLED": "تم إلغاء تثبيت الملحق بنجاح!"
},
"INFO": {
"VERSION": {
"ADDING": "جاري إضافة إصدار جديد للملحق...",
"UPDATING": "جاري تحديث إصدار الملحق...",
"DELETING": "جاري حذف إصدار الملحق...",
"RESTORING": "جاري استعادة إصدار الملحق..."
},
"UPLOADING": "جاري رفع الملحق...",
"UPDATING": "جاري تحديث إصدار الملحق...",
"DELETING": "جاري حذف الملحق...",
"INSTALLING": "جاري تثبيت الملحق...",
"UNINSTALLING": "جاري إلغاء تثبيت الملحق..."
},
"ERROR": {
"VERSION": {
"RESTORE": "فشل في استعادة إصدار الملحق. يرجى المحاولة مرة أخرى!"
},
"UPLOAD": "فشل في رفع الملحق. يرجى المحاولة مرة أخرى!",
"NOT_FOUND": "الملحق بالمعرف {{ id }} غير موجود.",
"INSTALL": "فشل في تثبيت الملحق. يرجى المحاولة مرة أخرى!",
"REVERT_INSTALLATION": "فشل في التراجع عن التثبيت!"
}
}
},
"SERVER_DOWN": {
+101 -4
View File
@@ -179,10 +179,16 @@
"SHARE": "Споделяне",
"GET_INFO": "Получаване на информация",
"RETRY": "Опитайте отново",
"UPLOAD": "Качване"
"UPLOAD": "Качване",
"ADD_VERSION": "Добавяне на версия",
"MARKETPLACE": "Маркетплейс",
"READ_MORE": "Прочети още",
"READ_LESS": "Прочети по-малко",
"RECOVER": "Възстанови"
},
"SM_TABLE": {
"NO_DATA": {
"HISTORY": "Няма история",
"LOADING": "Зареждане, моля изчакайте...",
"RECEIVE_ESTIMATE": "Не сте получили никакви оценки.",
"INCOME": "Не сте създали никакви приходи.",
@@ -4065,7 +4071,14 @@
"SSL_CERT_FILE_INFO": "Път към файла с клиентски сертификат за SSL.",
"SECURE": "Сигурно",
"SECURE_INFO": "Вярно, ако искате да проверите SSL сертификатите."
}
},
"ADD_PLUGIN_NPM_DESCRIPTION": "Инсталацията чрез NPM позволява достъп до публично достъпни и частни приставки.",
"PACKAGE_NAME": "Име на NPM пакет",
"PACKAGE_VERSION": "Версия на NPM пакет",
"REGISTRY": "NPM регистър",
"AUTH_TOKEN": "Удостоверителен токен",
"PRIVATE_REGISTRY_URL": "URL на частен регистър",
"PLUGIN_INSTALL_CDN_ERROR": "URL адресът на сървъра не трябва да е празен."
},
"WEEKLY_LIMIT_EXCEEDED": "Седмичната лимита е превишена",
"OF_HRS": "От {{ limit }} часа",
@@ -4816,7 +4829,10 @@
"INVALID_PACKAGE_NAME": "Невалиден формат на името на пакета",
"INVALID_SCOPE": "Невалиден формат на обхвата",
"AUTHOR_TOO_LONG": "Името на автора е твърде дълго",
"LICENSE_TOO_LONG": "Полето за лиценз е твърде дълго"
"LICENSE_TOO_LONG": "Полето за лиценз е твърде дълго",
"FAILED": "Проверката не бе успешна",
"CHANGELOG_TOO_SHORT": "Измененията са твърде кратки",
"CHANGELOG_REQUIRED": "Измененията са задължителни"
},
"TYPE": "Тип на приставката",
"TYPE_PLACEHOLDER": "Изберете тип на приставката",
@@ -4890,7 +4906,88 @@
},
"LAYOUT": {
"DISCOVER": "Открийте",
"INSTALLED": "Инсталирани"
"INSTALLED": "Инсталирани",
"VERSION_HISTORY": "История на версиите"
},
"MARKETPLACE": {
"UPLOAD": "Качване на нов плъгин",
"OFFLINE": "В момента сте офлайн/изключен ⛓️‍"
},
"DIALOG": {
"DEACTIVATE": {
"TITLE": "Деактивиране на приставката",
"DESCRIPTION": "Сигурни ли сте, че искате да деактивирате тази приставка?",
"CONFIRM": "Деактивирай"
},
"UNINSTALL": {
"TITLE": "Деинсталиране на приставката",
"DESCRIPTION": "Сигурни ли сте, че искате да деинсталирате тази приставка?",
"CONFIRM": "Деинсталирай"
},
"DELETE": {
"TITLE": "Изтриване на приставка",
"DESCRIPTION": "Сигурни ли сте, че искате да изтриете тази приставка?",
"CONFIRM": "Изтрий"
},
"VERSION": {
"UPDATE": {
"TITLE": "Актуализиране на версия v{{number}}",
"DESCRIPTION": "Сигурни ли сте, че искате да актуализирате тази приставка?",
"CONFIRM": "Актуализиране"
},
"CREATE": {
"TITLE": "Създаване на нова версия за {{name}}",
"DESCRIPTION": "Сигурни ли сте, че искате да създадете тази версия?",
"CONFIRM": "Създай"
},
"DELETE": {
"TITLE": "Изтриване на версия",
"DESCRIPTION": "Сигурни ли сте, че искате да изтриете тази версия?",
"CONFIRM": "Изтрий"
},
"RESTORE": {
"TITLE": "Възстановяване на версия",
"DESCRIPTION": "Сигурни ли сте, че искате да възстановите тази версия?",
"CONFIRM": "Възстанови"
}
}
},
"TOASTR": {
"SUCCESS": {
"VERSION": {
"CREATED": "Версия на приставката v{{number}} е създадена успешно!",
"UPDATED": "Версия на приставката v{{number}} е обновена успешно!",
"DELETED": "Версия на приставката е изтрита успешно!",
"RESTORED": "Версия на приставката е възстановена успешно!"
},
"UPLOADED": "Приставката е качена успешно!",
"UPDATED": "Приставката е обновена успешно!",
"DELETED": "Приставката е изтрита успешно!",
"INSTALLED": "Приставката е инсталирана успешно!",
"UNINSTALLED": "Приставката е деинсталирана успешно!"
},
"INFO": {
"VERSION": {
"ADDING": "Добавяне на нова версия на приставката...",
"UPDATING": "Обновяване на версия на приставката...",
"DELETING": "Изтриване на версия на приставката...",
"RESTORING": "Възстановяване на версия на приставката..."
},
"UPLOADING": "Качване на приставка...",
"UPDATING": "Обновяване на версия на приставката...",
"DELETING": "Изтриване на приставка...",
"INSTALLING": "Инсталиране на приставка...",
"UNINSTALLING": "Деинсталиране на приставка..."
},
"ERROR": {
"VERSION": {
"RESTORE": "Неуспешно възстановяване на версия на приставката. Моля, опитайте отново!"
},
"UPLOAD": "Неуспешно качване на приставка. Моля, опитайте отново!",
"NOT_FOUND": "Приставка с ID {{ id }} не е намерена.",
"INSTALL": "Неуспешно инсталиране на приставка. Моля, опитайте отново!",
"REVERT_INSTALLATION": "Неуспешен обратен ход на инсталацията!"
}
}
},
"SERVER_DOWN": {
+103 -5
View File
@@ -170,10 +170,16 @@
"SHARE": "Teilen",
"GET_INFO": "Informationen abrufen",
"RETRY": "Erneut versuchen",
"UPLOAD": "Hochladen"
"UPLOAD": "Hochladen",
"ADD_VERSION": "Version hinzufügen",
"MARKETPLACE": "Marktplatz",
"READ_MORE": "Mehr lesen",
"READ_LESS": "Weniger lesen",
"RECOVER": "Wiederherstellen"
},
"SM_TABLE": {
"NO_DATA": {
"HISTORY": "Kein Verlauf vorhanden",
"RECEIVE_ESTIMATE": "Sie haben keine Schätzung erhalten.",
"INCOME": "Sie haben kein Einkommen erstellt.",
"EXPENSE_CATEGORY": "Du hast keine Ausgabekategorie erstellt.",
@@ -218,7 +224,8 @@
"PRODUCT_TYPE_NO_DATA": "Sie haben keine Produktart erstellt.",
"TEAM_DASHBOARD": "Du hast keine Teams.",
"PLUGIN": "Sie haben kein Plugin installiert.",
"PLUGIN_MARKETPLACE": "Dieses Plugin ist im Marktplatz nicht verfügbar"
"PLUGIN_MARKETPLACE": "Dieses Plugin ist im Marktplatz nicht verfügbar",
"LOADING": "Laden..."
},
"TRANSACTION_TYPE": "Art\n",
"AMOUNT": "Menge",
@@ -4013,7 +4020,14 @@
"SSL_CERT_FILE_INFO": "Pfad zur Client-Zertifikatsdatei für SSL.",
"SECURE": "Sicher",
"SECURE_INFO": "True, wenn Sie die SSL-Zertifikate überprüfen möchten."
}
},
"ADD_PLUGIN_NPM_DESCRIPTION": "Die NPM-Installation ermöglicht den Zugriff auf öffentlich und privat verfügbare Plugins.",
"PACKAGE_NAME": "NPM-Paketname",
"PACKAGE_VERSION": "NPM-Paketversion",
"REGISTRY": "NPM-Register",
"AUTH_TOKEN": "Authentifizierungs-Token",
"PRIVATE_REGISTRY_URL": "Private Registry-URL",
"PLUGIN_INSTALL_CDN_ERROR": "Die Server-URL darf nicht leer sein."
},
"WEEKLY_LIMIT_EXCEEDED": "Wöchentliches Limit überschritten",
"OF_HRS": "Von {{ limit }} Stunden",
@@ -4785,7 +4799,10 @@
"INVALID_PACKAGE_NAME": "Ungültiges Paketnamenformat",
"INVALID_SCOPE": "Ungültiges Scope-Format",
"AUTHOR_TOO_LONG": "Autorenname ist zu lang",
"LICENSE_TOO_LONG": "Lizenzfeld ist zu lang"
"LICENSE_TOO_LONG": "Lizenzfeld ist zu lang",
"FAILED": "Validierung fehlgeschlagen",
"CHANGELOG_TOO_SHORT": "Changelog ist zu kurz",
"CHANGELOG_REQUIRED": "Changelog ist erforderlich"
},
"TYPE": "Plugin-Typ",
"TYPE_PLACEHOLDER": "Wählen Sie den Plugin-Typ",
@@ -4859,7 +4876,88 @@
},
"LAYOUT": {
"DISCOVER": "Entdecken",
"INSTALLED": "Installiert"
"INSTALLED": "Installiert",
"VERSION_HISTORY": "Versionsverlauf"
},
"MARKETPLACE": {
"UPLOAD": "Neues Plugin hochladen",
"OFFLINE": "Sie sind derzeit offline/getrennt ⛓️‍"
},
"DIALOG": {
"DEACTIVATE": {
"TITLE": "Plugin deaktivieren",
"DESCRIPTION": "Möchten Sie dieses Plugin wirklich deaktivieren?",
"CONFIRM": "Deaktivieren"
},
"UNINSTALL": {
"TITLE": "Plugin deinstallieren",
"DESCRIPTION": "Möchten Sie dieses Plugin wirklich deinstallieren?",
"CONFIRM": "Deinstallieren"
},
"DELETE": {
"TITLE": "Plugin löschen",
"DESCRIPTION": "Sind Sie sicher, dass Sie dieses Plugin löschen möchten?",
"CONFIRM": "Löschen"
},
"VERSION": {
"UPDATE": {
"TITLE": "Version v{{number}} aktualisieren",
"DESCRIPTION": "Sind Sie sicher, dass Sie dieses Plugin aktualisieren möchten?",
"CONFIRM": "Aktualisieren"
},
"CREATE": {
"TITLE": "Neue Version für {{name}} erstellen",
"DESCRIPTION": "Sind Sie sicher, dass Sie diese Version erstellen möchten?",
"CONFIRM": "Erstellen"
},
"DELETE": {
"TITLE": "Version löschen",
"DESCRIPTION": "Sind Sie sicher, dass Sie diese Version löschen möchten?",
"CONFIRM": "Löschen"
},
"RESTORE": {
"TITLE": "Version wiederherstellen",
"DESCRIPTION": "Sind Sie sicher, dass Sie diese Version wiederherstellen möchten?",
"CONFIRM": "Wiederherstellen"
}
}
},
"TOASTR": {
"SUCCESS": {
"VERSION": {
"CREATED": "Plugin-Version v{{number}} erfolgreich erstellt!",
"UPDATED": "Plugin-Version v{{number}} erfolgreich aktualisiert!",
"DELETED": "Plugin-Version erfolgreich gelöscht!",
"RESTORED": "Plugin-Version erfolgreich wiederhergestellt!"
},
"UPLOADED": "Plugin erfolgreich hochgeladen!",
"UPDATED": "Plugin erfolgreich aktualisiert!",
"DELETED": "Plugin erfolgreich gelöscht!",
"INSTALLED": "Plugin erfolgreich installiert!",
"UNINSTALLED": "Plugin erfolgreich deinstalliert!"
},
"INFO": {
"VERSION": {
"ADDING": "Neue Plugin-Version wird hinzugefügt...",
"UPDATING": "Plugin-Version wird aktualisiert...",
"DELETING": "Plugin-Version wird gelöscht...",
"RESTORING": "Plugin-Version wird wiederhergestellt..."
},
"UPLOADING": "Plugin wird hochgeladen...",
"UPDATING": "Plugin wird aktualisiert...",
"DELETING": "Plugin wird gelöscht...",
"INSTALLING": "Plugin wird installiert...",
"UNINSTALLING": "Plugin wird deinstalliert..."
},
"ERROR": {
"VERSION": {
"RESTORE": "Wiederherstellung der Plugin-Version fehlgeschlagen. Bitte versuchen Sie es erneut!"
},
"UPLOAD": "Hochladen des Plugins fehlgeschlagen. Bitte versuchen Sie es erneut!",
"NOT_FOUND": "Plugin mit ID {{ id }} nicht gefunden.",
"INSTALL": "Installation des Plugins fehlgeschlagen. Bitte versuchen Sie es erneut!",
"REVERT_INSTALLATION": "Rückgängigmachen der Installation fehlgeschlagen!"
}
}
},
"SERVER_DOWN": {
+100 -5
View File
@@ -180,7 +180,11 @@
"GET_INFO": "Get Info",
"RETRY": "Retry",
"UPLOAD": "Upload",
"ADD_VERSION": "Add Version"
"ADD_VERSION": "Add Version",
"MARKETPLACE": "Marketplace",
"READ_MORE": "Read More",
"READ_LESS": "Read Less",
"RECOVER": "Recover"
},
"SM_TABLE": {
"NO_DATA": {
@@ -229,7 +233,8 @@
"PRODUCT_TYPE_NO_DATA": "You have not created any product types.",
"TEAM_DASHBOARD": "You don't have any teams.",
"PLUGIN": "You haven't install any plugin.",
"PLUGIN_MARKETPLACE": "This plugin is unvailable on marketplace"
"PLUGIN_MARKETPLACE": "This plugin is unvailable on marketplace",
"HISTORY": "There's no history"
},
"TRANSACTION_TYPE": "Type",
"AMOUNT": "Amount",
@@ -4148,7 +4153,13 @@
"VERSION": "Version",
"ADD_PLUGIN_INSTALLATION_DESCRIPTION": "Install plugins from local files or CDN. Local for custom/private plugins, CDN for public ones. Choose based on your needs.",
"ADD_PLUGIN_CDN_DESCRIPTION": "CDN installation allows for easy access to publicly available plugins.",
"ADD_PLUGIN_NPM_DESCRIPTION": "NPM installation allows for access to publicly and private available plugins."
"ADD_PLUGIN_NPM_DESCRIPTION": "NPM installation allows for access to publicly and private available plugins.",
"PACKAGE_NAME": "NPM Package Name",
"PACKAGE_VERSION": "NPM Package Version",
"REGISTRY": "NPM Registry",
"AUTH_TOKEN": "Authentication Token",
"PRIVATE_REGISTRY_URL": "Private Registry URL",
"PLUGIN_INSTALL_CDN_ERROR": "The server URL mustn't be empty."
},
"WEEKLY_LIMIT_EXCEEDED": "Weekly limit exceeded",
"OF_HRS": "Of {{ limit }} hrs",
@@ -4944,7 +4955,10 @@
"INVALID_PACKAGE_NAME": "Invalid package name format",
"INVALID_SCOPE": "Invalid scope format",
"AUTHOR_TOO_LONG": "Author name is too long",
"LICENSE_TOO_LONG": "License field is too long"
"LICENSE_TOO_LONG": "License field is too long",
"CHANGELOG_TOO_SHORT": "Changelog is too short",
"CHANGELOG_REQUIRED": "Changelog is required",
"FAILED": "Validation failed"
},
"TYPE": "Plugin Type",
"TYPE_PLACEHOLDER": "Select plugin type",
@@ -5016,9 +5030,90 @@
"INSTALLED": "Installed",
"HIDDEN_FOR_SECURITY": "Hidden for security reasons"
},
"MARKETPLACE": {
"UPLOAD": "Upload New Plugin",
"OFFLINE": "You are currently offline/disconnected ⛓️‍"
},
"LAYOUT": {
"DISCOVER": "Discover",
"INSTALLED": "Installed"
"INSTALLED": "Installed",
"VERSION_HISTORY": "Version History"
},
"DIALOG": {
"DEACTIVATE": {
"TITLE": "Deactivate Plugin",
"DESCRIPTION": "Are you sure you want to deactivate this plugin?",
"CONFIRM": "Deactivate"
},
"UNINSTALL": {
"TITLE": "Uninstall Plugin",
"DESCRIPTION": "Are you sure you want to uninstall this plugin?",
"CONFIRM": "Uninstall"
},
"DELETE": {
"TITLE": "Delete Plugin",
"DESCRIPTION": "Are you sure you want to delete this plugin?",
"CONFIRM": "Delete"
},
"VERSION": {
"UPDATE": {
"TITLE": "Update version v{{number}}",
"DESCRIPTION": "Are you sure you want to update this plugin version?",
"CONFIRM": "Update"
},
"CREATE": {
"TITLE": "Create new version for {{name}}",
"DESCRIPTION": "Are you sure you want to create this version?",
"CONFIRM": "Create"
},
"DELETE": {
"TITLE": "Delete version",
"DESCRIPTION": "Are you sure you want to delete this version?",
"CONFIRM": "Delete"
},
"RESTORE": {
"TITLE": "Restore version",
"DESCRIPTION": "Are you sure you want to restore this version?",
"CONFIRM": "Restore"
}
}
},
"TOASTR": {
"SUCCESS": {
"VERSION": {
"CREATED": "Create plugin version v{{number}} successfully!",
"UPDATED": "Update plugin version v{{number}} successfully!",
"DELETED": "Delete plugin version successfully!",
"RESTORED": "Restore plugin version successfully!"
},
"UPLOADED": "Upload plugin successfully!",
"UPDATED": "Update plugin successfully!",
"DELETED": "Delete plugin successfully!",
"INSTALLED": "Install plugin successfully!",
"UNINSTALLED": "Uninstall plugin successfully!"
},
"INFO": {
"VERSION": {
"ADDING": "Adding new plugin version...",
"UPDATING": "Updating plugin version...",
"DELETING": "Deleting plugin version...",
"RESTORING": "Restoring plugin version..."
},
"UPLOADING": "Uploading plugin...",
"UPDATING": "Updating plugin version...",
"DELETING": "Deleting plugin...",
"INSTALLING": "Installing plugin...",
"UNINSTALLING": "Uninstalling plugin..."
},
"ERROR": {
"VERSION": {
"RESTORE": "Failed to restore plugin version. Please try again!"
},
"UPLOAD": "Failed to upload plugin. Please try again!",
"NOT_FOUND": "Plugin with ID {{ id }} not found.",
"INSTALL": "Failed to install plugin. Please try again!",
"REVERT_INSTALLATION": "Failed to revert installation!"
}
}
},
"SERVER_DOWN": {
+104 -5
View File
@@ -169,10 +169,17 @@
"ADD_MODULE": "Añadir módulo",
"SHARE": "Compartir",
"GET_INFO": "Obtener información",
"RETRY": "Reintentar"
"RETRY": "Reintentar",
"UPLOAD": "Subir",
"MARKETPLACE": "Mercado",
"ADD_VERSION": "Añadir Versión",
"READ_MORE": "Leer más",
"READ_LESS": "Leer menos",
"RECOVER": "Recuperar"
},
"SM_TABLE": {
"NO_DATA": {
"HISTORY": "No hay historial",
"RECEIVE_ESTIMATE": "No has recibido ningún presupuesto.",
"INCOME": "No has creado ningún ingreso.",
"EXPENSE_CATEGORY": "No has creado ninguna categoría de gasto.",
@@ -217,7 +224,8 @@
"PRODUCT_TYPE_NO_DATA": "No has creado ningún tipo de producto.",
"TEAM_DASHBOARD": "No tienes ningún equipo.",
"PLUGIN": "No has instalado ningún complemento.",
"PLUGIN_MARKETPLACE": "Este complemento no está disponible en el mercado"
"PLUGIN_MARKETPLACE": "Este complemento no está disponible en el mercado",
"LOADING": "Cargando..."
},
"TRANSACTION_TYPE": "Tipo",
"AMOUNT": "Cantidad",
@@ -4018,7 +4026,14 @@
"SSL_CERT_FILE_INFO": "Ruta al archivo de certificado de cliente para SSL.",
"SECURE": "Seguro",
"SECURE_INFO": "Verdadero, si desea verificar los certificados SSL."
}
},
"ADD_PLUGIN_NPM_DESCRIPTION": "La instalación de NPM permite el acceso a complementos disponibles públicamente y de forma privada.",
"PACKAGE_NAME": "Nombre del paquete NPM",
"PACKAGE_VERSION": "Versión del paquete NPM",
"REGISTRY": "Registro de NPM",
"AUTH_TOKEN": "Token de autenticación",
"PRIVATE_REGISTRY_URL": "URL del registro privado",
"PLUGIN_INSTALL_CDN_ERROR": "La URL del servidor no debe estar vacía."
},
"WEEKLY_LIMIT_EXCEEDED": "Límite semanal excedido",
"OF_HRS": "De {{ limit }} horas.",
@@ -4790,7 +4805,10 @@
"INVALID_PACKAGE_NAME": "Formato de nombre de paquete no válido",
"INVALID_SCOPE": "Formato de alcance no válido",
"AUTHOR_TOO_LONG": "El nombre del autor es demasiado largo",
"LICENSE_TOO_LONG": "El campo de la licencia es demasiado largo"
"LICENSE_TOO_LONG": "El campo de la licencia es demasiado largo",
"FAILED": "Validación fallida",
"CHANGELOG_TOO_SHORT": "El changelog es demasiado corto",
"CHANGELOG_REQUIRED": "El changelog es obligatorio"
},
"TYPE": "Tipo de complemento",
"TYPE_PLACEHOLDER": "Seleccione el tipo de complemento",
@@ -4864,7 +4882,88 @@
},
"LAYOUT": {
"DISCOVER": "Descubrir",
"INSTALLED": "Instalado"
"INSTALLED": "Instalado",
"VERSION_HISTORY": "Historial de versiones"
},
"MARKETPLACE": {
"UPLOAD": "Subir nuevo complemento",
"OFFLINE": "Actualmente estás desconectado ⛓️‍"
},
"DIALOG": {
"DEACTIVATE": {
"TITLE": "Desactivar complemento",
"DESCRIPTION": "¿Estás seguro de que quieres desactivar este complemento?",
"CONFIRM": "Desactivar"
},
"UNINSTALL": {
"TITLE": "Desinstalar complemento",
"DESCRIPTION": "¿Estás seguro de que quieres desinstalar este complemento?",
"CONFIRM": "Desinstalar"
},
"DELETE": {
"TITLE": "Eliminar complemento",
"DESCRIPTION": "¿Estás seguro de que quieres eliminar este complemento?",
"CONFIRM": "Eliminar"
},
"VERSION": {
"UPDATE": {
"TITLE": "Actualizar versión v{{number}}",
"DESCRIPTION": "¿Estás seguro de que quieres actualizar este complemento?",
"CONFIRM": "Actualizar"
},
"CREATE": {
"TITLE": "Crear nueva versión para {{name}}",
"DESCRIPTION": "¿Estás seguro de que quieres crear esta versión?",
"CONFIRM": "Crear"
},
"DELETE": {
"TITLE": "Eliminar versión",
"DESCRIPTION": "¿Estás seguro de que quieres eliminar esta versión?",
"CONFIRM": "Eliminar"
},
"RESTORE": {
"TITLE": "Restaurar versión",
"DESCRIPTION": "¿Estás seguro de que quieres restaurar esta versión?",
"CONFIRM": "Restaurar"
}
}
},
"TOASTR": {
"SUCCESS": {
"VERSION": {
"CREATED": "¡Versión del complemento v{{number}} creada con éxito!",
"UPDATED": "¡Versión del complemento v{{number}} actualizada con éxito!",
"DELETED": "¡Versión del complemento eliminada con éxito!",
"RESTORED": "¡Versión del complemento restaurada con éxito!"
},
"UPLOADED": "¡Complemento subido con éxito!",
"UPDATED": "¡Complemento actualizado con éxito!",
"DELETED": "¡Complemento eliminado con éxito!",
"INSTALLED": "¡Complemento instalado con éxito!",
"UNINSTALLED": "¡Complemento desinstalado con éxito!"
},
"INFO": {
"VERSION": {
"ADDING": "Añadiendo nueva versión del complemento...",
"UPDATING": "Actualizando versión del complemento...",
"DELETING": "Eliminando versión del complemento...",
"RESTORING": "Restaurando versión del complemento..."
},
"UPLOADING": "Subiendo complemento...",
"UPDATING": "Actualizando complemento...",
"DELETING": "Eliminando complemento...",
"INSTALLING": "Instalando complemento...",
"UNINSTALLING": "Desinstalando complemento..."
},
"ERROR": {
"VERSION": {
"RESTORE": "Error al restaurar la versión del complemento. ¡Por favor, inténtelo de nuevo!"
},
"UPLOAD": "Error al subir el complemento. ¡Por favor, inténtelo de nuevo!",
"NOT_FOUND": "Complemento con ID {{ id }} no encontrado.",
"INSTALL": "Error al instalar el complemento. ¡Por favor, inténtelo de nuevo!",
"REVERT_INSTALLATION": "¡Error al revertir la instalación!"
}
}
},
"SERVER_DOWN": {
+103 -5
View File
@@ -170,10 +170,16 @@
"SHARE": "Partager",
"GET_INFO": "Obtenir des infos",
"RETRY": "Réessayer",
"UPLOAD": "Téléverser"
"UPLOAD": "Téléverser",
"MARKETPLACE": "Marketplace",
"ADD_VERSION": "Ajouter une version",
"READ_MORE": "Lire plus",
"READ_LESS": "Lire moins",
"RECOVER": "Récupérer"
},
"SM_TABLE": {
"NO_DATA": {
"HISTORY": "Il n'y a pas d'historique",
"RECEIVE_ESTIMATE": "Vous n'avez reçu aucun devis.",
"INCOME": "Vous n'avez créé aucun revenu.",
"EXPENSE_CATEGORY": "Vous n'avez créé aucune catégorie de dépenses.",
@@ -218,7 +224,8 @@
"PRODUCT_TYPE_NO_DATA": "Vous n'avez créé aucun type de produit.",
"TEAM_DASHBOARD": "Vous n'avez aucune équipe.",
"PLUGIN": "Vous n'avez installé aucun plugin.",
"PLUGIN_MARKETPLACE": "Ce plugin n'est pas disponible sur le marché"
"PLUGIN_MARKETPLACE": "Ce plugin n'est pas disponible sur le marché",
"LOADING": "Chargement..."
},
"TRANSACTION_TYPE": "Taper",
"AMOUNT": "Montant",
@@ -4008,7 +4015,14 @@
"SSL_CERT_FILE_INFO": "Chemin du fichier de certificat client pour SSL.",
"SECURE": "Sécurisé",
"SECURE_INFO": "Vrai, si vous souhaitez vérifier les certificats SSL."
}
},
"ADD_PLUGIN_NPM_DESCRIPTION": "L'installation NPM permet d'accéder à des plugins disponibles publiquement et en privé.",
"PACKAGE_NAME": "Nom du package NPM",
"PACKAGE_VERSION": "Version du package NPM",
"REGISTRY": "Registre NPM",
"AUTH_TOKEN": "Jeton d'authentification",
"PRIVATE_REGISTRY_URL": "URL du registre privé",
"PLUGIN_INSTALL_CDN_ERROR": "L'URL du serveur ne doit pas être null."
},
"WEEKLY_LIMIT_EXCEEDED": "La limite hebdomadaire est dépassée.",
"OF_HRS": "De {{ limit }} heures",
@@ -4780,7 +4794,10 @@
"INVALID_PACKAGE_NAME": "Format de nom de package invalide",
"INVALID_SCOPE": "Format de portée invalide",
"AUTHOR_TOO_LONG": "Le nom de l'auteur est trop long",
"LICENSE_TOO_LONG": "Le champ de la licence est trop long"
"LICENSE_TOO_LONG": "Le champ de la licence est trop long",
"FAILED": "Échec de la validation",
"CHANGELOG_TOO_SHORT": "Le changelog est trop court",
"CHANGELOG_REQUIRED": "Le changelog est requis"
},
"TYPE": "Type de plugin",
"TYPE_PLACEHOLDER": "Sélectionnez le type de plugin",
@@ -4854,7 +4871,88 @@
},
"LAYOUT": {
"DISCOVER": "Découvrir",
"INSTALLED": "Installé"
"INSTALLED": "Installé",
"VERSION_HISTORY": "Historique des versions"
},
"MARKETPLACE": {
"UPLOAD": "Télécharger un nouveau plugin",
"OFFLINE": "Vous êtes actuellement hors ligne/déconnecté ⛓️‍"
},
"DIALOG": {
"DEACTIVATE": {
"TITLE": "Désactiver l'extension",
"DESCRIPTION": "Êtes-vous sûr de vouloir désactiver cette extension ?",
"CONFIRM": "Désactiver"
},
"UNINSTALL": {
"TITLE": "Désinstaller l'extension",
"DESCRIPTION": "Êtes-vous sûr de vouloir désinstaller cette extension ?",
"CONFIRM": "Désinstaller"
},
"DELETE": {
"TITLE": "Supprimer le plugin",
"DESCRIPTION": "Êtes-vous sûr de vouloir supprimer ce plugin ?",
"CONFIRM": "Supprimer"
},
"VERSION": {
"UPDATE": {
"TITLE": "Mettre à jour la version v{{number}}",
"DESCRIPTION": "Êtes-vous sûr de vouloir mettre à jour cette version ?",
"CONFIRM": "Mettre à jour"
},
"CREATE": {
"TITLE": "Créer une nouvelle version pour {{name}}",
"DESCRIPTION": "Êtes-vous sûr de vouloir créer cette version ?",
"CONFIRM": "Créer"
},
"DELETE": {
"TITLE": "Supprimer la version",
"DESCRIPTION": "Êtes-vous sûr de vouloir supprimer cette version ?",
"CONFIRM": "Supprimer"
},
"RESTORE": {
"TITLE": "Restaurer la version",
"DESCRIPTION": "Êtes-vous sûr de vouloir restaurer cette version ?",
"CONFIRM": "Restaurer"
}
}
},
"TOASTR": {
"SUCCESS": {
"VERSION": {
"CREATED": "Version du plugin v{{number}} créée avec succès !",
"UPDATED": "Version du plugin v{{number}} mise à jour avec succès !",
"DELETED": "Version du plugin supprimée avec succès !",
"RESTORED": "Version du plugin restaurée avec succès !"
},
"UPLOADED": "Plugin téléchargé avec succès !",
"UPDATED": "Plugin mis à jour avec succès !",
"DELETED": "Plugin supprimé avec succès !",
"INSTALLED": "Plugin installé avec succès !",
"UNINSTALLED": "Plugin désinstallé avec succès !"
},
"INFO": {
"VERSION": {
"ADDING": "Ajout d'une nouvelle version du plugin...",
"UPDATING": "Mise à jour de la version du plugin...",
"DELETING": "Suppression de la version du plugin...",
"RESTORING": "Restauration de la version du plugin..."
},
"UPLOADING": "Téléchargement du plugin...",
"UPDATING": "Mise à jour du plugin...",
"DELETING": "Suppression du plugin...",
"INSTALLING": "Installation du plugin...",
"UNINSTALLING": "Désinstallation du plugin..."
},
"ERROR": {
"VERSION": {
"RESTORE": "Échec de la restauration de la version du plugin. Veuillez réessayer !"
},
"UPLOAD": "Échec du téléchargement du plugin. Veuillez réessayer !",
"NOT_FOUND": "Plugin avec l'ID {{ id }} introuvable.",
"INSTALL": "Échec de l'installation du plugin. Veuillez réessayer !",
"REVERT_INSTALLATION": "Échec de l'annulation de l'installation !"
}
}
},
"SERVER_DOWN": {
+102 -5
View File
@@ -169,7 +169,12 @@
"SHARE": "שיתוף",
"GET_INFO": "קבל מידע",
"RETRY": "נסה שוב",
"UPLOAD": "העלה"
"UPLOAD": "העלה",
"MARKEPLACE": "מרקט",
"ADD_VERSION": "הוסף גרסה",
"READ_MORE": "קרא עוד",
"READ_LESS": "קרא פחות",
"RECOVER": "שחזר"
},
"SM_TABLE": {
"NO_DATA": {
@@ -218,7 +223,8 @@
"PRODUCT_TYPE_NO_DATA": "לא יצרתם סוגי מוצרים.",
"TEAM_DASHBOARD": "אין לך שום צוותים.",
"PLUGIN": "לא התקנת שום תוסף.",
"PLUGIN_MARKETPLACE": "תוסף זה אינו זמין בשוק"
"PLUGIN_MARKETPLACE": "תוסף זה אינו זמין בשוק",
"HISTORY": "אין היסטוריה"
},
"TRANSACTION_TYPE": "סוג",
"AMOUNT": "כמות",
@@ -4028,7 +4034,14 @@
"SSL_CERT_FILE_INFO": "נתיב לקובץ תעודת הלקוח עבור SSL.",
"SECURE": "מאובטח",
"SECURE_INFO": "נכון, אם ברצונך לאמת את תעודות ה-SSL."
}
},
"ADD_PLUGIN_NPM_DESCRIPTION": "התקנת NPM מאפשרת גישה לתוספים זמינים לציבור ופרטיים.",
"PACKAGE_NAME": "שם חבילת NPM",
"PACKAGE_VERSION": "גרסת חבילת NPM",
"REGISTRY": "מרשם NPM",
"AUTH_TOKEN": "אסימון אימות",
"PRIVATE_REGISTRY_URL": "כתובת URL של מרשם פרטי",
"PLUGIN_INSTALL_CDN_ERROR": "כתובת ה-URL של השרת לא יכולה להיות ריקה."
},
"WEEKLY_LIMIT_EXCEEDED": "הגעת למגבלת השבוע",
"OF_HRS": "מתוך {{ limit }} שעות",
@@ -4779,7 +4792,10 @@
"INVALID_PACKAGE_NAME": "פורמט שם חבילה לא תקין",
"INVALID_SCOPE": "פורמט היקף לא תקין",
"AUTHOR_TOO_LONG": "שם המחבר ארוך מדי",
"LICENSE_TOO_LONG": "שדה הרישיון ארוך מדי"
"LICENSE_TOO_LONG": "שדה הרישיון ארוך מדי",
"FAILED": "האימות נכשל",
"CHANGELOG_TOO_SHORT": "שדה השינויים ארוך מדי",
"CHANGELOG_REQUIRED": "שדה השינויים נדרש"
},
"TYPE": "סוג התוסף",
"TYPE_PLACEHOLDER": "בחר סוג תוסף",
@@ -4853,7 +4869,88 @@
},
"LAYOUT": {
"DISCOVER": "לגלות",
"INSTALLED": "מותקן"
"INSTALLED": "מותקן",
"VERSION_HISTORY": "היסטוריית גרסאות"
},
"MARKETPLACE": {
"UPLOAD": "העלה תוסף חדש",
"OFFLINE": "אתה לא מחובר כרגע ⛓️‍"
},
"DIALOG": {
"DEACTIVATE": {
"TITLE": "לבטל את ההפעלה של התוסף",
"DESCRIPTION": "האם אתה בטוח שברצונך לבטל את ההפעלה של התוסף הזה?",
"CONFIRM": "בטל הפעלה"
},
"UNINSTALL": {
"TITLE": "הסר את התוסף",
"DESCRIPTION": "האם אתה בטוח שברצונך להסיר את התוסף הזה?",
"CONFIRM": "הסר התקנה"
},
"DELETE": {
"TITLE": "מחיקת תוסף",
"DESCRIPTION": "האם אתה בטוח שברצונך למחוק תוסף זה?",
"CONFIRM": "מחק"
},
"VERSION": {
"UPDATE": {
"TITLE": "עדכון גרסה v{{number}}",
"DESCRIPTION": "האם אתה בטוח שברצונך לעדכן את התוסף הזה?",
"CONFIRM": "עדכן"
},
"CREATE": {
"TITLE": "צור גרסה חדשה עבור {{name}}",
"DESCRIPTION": "האם אתה בטוח שברצונך ליצור גרסה זו?",
"CONFIRM": "צור"
},
"DELETE": {
"TITLE": "מחיקת גרסה",
"DESCRIPTION": "האם אתה בטוח שברצונך למחוק גרסה זו?",
"CONFIRM": "מחק"
},
"RESTORE": {
"TITLE": "שחזור גרסה",
"DESCRIPTION": "האם אתה בטוח שברצונך לשחזר גרסה זו?",
"CONFIRM": "שחזר"
}
}
},
"TOASTR": {
"SUCCESS": {
"VERSION": {
"CREATED": "גרסת התוסף v{{number}} נוצרה בהצלחה!",
"UPDATED": "גרסת התוסף v{{number}} עודכנה בהצלחה!",
"DELETED": "גרסת התוסף נמחקה בהצלחה!",
"RESTORED": "גרסת התוסף שוחזרה בהצלחה!"
},
"UPLOADED": "התוסף הועלה בהצלחה!",
"UPDATED": "התוסף עודכן בהצלחה!",
"DELETED": "התוסף נמחק בהצלחה!",
"INSTALLED": "התוסף הותקן בהצלחה!",
"UNINSTALLED": "התוסף הוסר בהצלחה!"
},
"INFO": {
"VERSION": {
"ADDING": "מוסיף גרסת תוסף חדשה...",
"UPDATING": "מעדכן גרסת תוסף...",
"DELETING": "מוחק גרסת תוסף...",
"RESTORING": "משחזר גרסת תוסף..."
},
"UPLOADING": "מעלה תוסף...",
"UPDATING": "מעדכן תוסף...",
"DELETING": "מוחק תוסף...",
"INSTALLING": "מתקין תוסף...",
"UNINSTALLING": "מסיר תוסף..."
},
"ERROR": {
"VERSION": {
"RESTORE": "שחזור גרסת התוסף נכשל. נא לנסות שוב!"
},
"UPLOAD": "העלאת התוסף נכשלה. נא לנסות שוב!",
"NOT_FOUND": "תוסף עם מזהה {{ id }} לא נמצא.",
"INSTALL": "התקנת התוסף נכשלה. נא לנסות שוב!",
"REVERT_INSTALLATION": "ביטול ההתקנה נכשל!"
}
}
},
"SERVER_DOWN": {
+103 -5
View File
@@ -170,10 +170,16 @@
"SHARE": "Condividi",
"GET_INFO": "Ottieni informazioni",
"RETRY": "Riprova",
"UPLOAD": "Carica"
"UPLOAD": "Carica",
"MARKETPLACE": "Mercato",
"ADD_VERSION": "Aggiungi versione",
"READ_MORE": "Leggi di più",
"READ_LESS": "Leggi meno",
"RECOVER": "Recupera"
},
"SM_TABLE": {
"NO_DATA": {
"HISTORY": "Nessuna cronologia",
"RECEIVE_ESTIMATE": "Non hai ricevuto alcuna stima",
"INCOME": "Non hai creato alcun reddito",
"EXPENSE_CATEGORY": "Non hai creato nessuna categoria di spese",
@@ -218,7 +224,8 @@
"PRODUCT_TYPE_NO_DATA": "Non hai creato alcun tipo di prodotto",
"TEAM_DASHBOARD": "Non hai nessuna squadra",
"PLUGIN": "Non hai installato alcun plugin.",
"PLUGIN_MARKETPLACE": "Questo plugin non è disponibile sul marketplace"
"PLUGIN_MARKETPLACE": "Questo plugin non è disponibile sul marketplace",
"LOADING": "Caricamento..."
},
"TRANSACTION_TYPE": "Tipo",
"AMOUNT": "Importo",
@@ -4017,7 +4024,14 @@
"SSL_CERT_FILE_INFO": "Percorso del file certificato client per SSL.",
"SECURE": "Sicuro",
"SECURE_INFO": "True, se desideri verificare i certificati SSL."
}
},
"ADD_PLUGIN_NPM_DESCRIPTION": "L'installazione di NPM consente l'accesso a plugin disponibili pubblicamente e privati.",
"PACKAGE_NAME": "Nome del pacchetto NPM",
"PACKAGE_VERSION": "Versione del pacchetto NPM",
"REGISTRY": "Registro NPM",
"AUTH_TOKEN": "Token di autenticazione",
"PRIVATE_REGISTRY_URL": "URL del registro privato",
"PLUGIN_INSTALL_CDN_ERROR": "L'URL del server non deve essere vuoto."
},
"WEEKLY_LIMIT_EXCEEDED": "Limite settimanale superato",
"OF_HRS": "Di {{ limit }} ore",
@@ -4789,7 +4803,10 @@
"INVALID_PACKAGE_NAME": "Formato del nome del pacchetto non valido",
"INVALID_SCOPE": "Formato dell'ambito non valido",
"AUTHOR_TOO_LONG": "Il nome dell'autore è troppo lungo",
"LICENSE_TOO_LONG": "Il campo della licenza è troppo lungo"
"LICENSE_TOO_LONG": "Il campo della licenza è troppo lungo",
"FAILED": "Validazione fallita",
"CHANGELOG_TOO_SHORT": "Changelog troppo corto",
"CHANGELOG_REQUIRED": "Changelog obbligatorio"
},
"TYPE": "Tipo di plugin",
"TYPE_PLACEHOLDER": "Seleziona il tipo di plugin",
@@ -4863,7 +4880,88 @@
},
"LAYOUT": {
"DISCOVER": "Scopri",
"INSTALLED": "Installato"
"INSTALLED": "Installato",
"VERSION_HISTORY": "Cronologia versioni"
},
"MARKETPLACE": {
"UPLOAD": "Carica nuovo plugin",
"OFFLINE": "Sei attualmente offline/disconnesso ⛓️‍"
},
"DIALOG": {
"DEACTIVATE": {
"TITLE": "Disattiva plugin",
"DESCRIPTION": "Sei sicuro di voler disattivare questo plugin?",
"CONFIRM": "Disattiva"
},
"UNINSTALL": {
"TITLE": "Disinstalla plugin",
"DESCRIPTION": "Sei sicuro di voler disinstallare questo plugin?",
"CONFIRM": "Disinstalla"
},
"DELETE": {
"TITLE": "Elimina plugin",
"DESCRIPTION": "Sei sicuro di voler eliminare questo plugin?",
"CONFIRM": "Elimina"
},
"VERSION": {
"UPDATE": {
"TITLE": "Aggiorna versione v{{number}}",
"DESCRIPTION": "Sei sicuro di voler aggiornare questo plugin?",
"CONFIRM": "Aggiorna"
},
"CREATE": {
"TITLE": "Crea nuova versione per {{name}}",
"DESCRIPTION": "Sei sicuro di voler creare questa versione?",
"CONFIRM": "Crea"
},
"DELETE": {
"TITLE": "Elimina versione",
"DESCRIPTION": "Sei sicuro di voler eliminare questa versione?",
"CONFIRM": "Elimina"
},
"RESTORE": {
"TITLE": "Ripristina versione",
"DESCRIPTION": "Sei sicuro di voler ripristinare questa versione?",
"CONFIRM": "Ripristina"
}
}
},
"TOASTR": {
"SUCCESS": {
"VERSION": {
"CREATED": "Versione plugin v{{number}} creata con successo!",
"UPDATED": "Versione plugin v{{number}} aggiornata con successo!",
"DELETED": "Versione plugin eliminata con successo!",
"RESTORED": "Versione plugin ripristinata con successo!"
},
"UPLOADED": "Plugin caricato con successo!",
"UPDATED": "Plugin aggiornato con successo!",
"DELETED": "Plugin eliminato con successo!",
"INSTALLED": "Plugin installato con successo!",
"UNINSTALLED": "Plugin disinstallato con successo!"
},
"INFO": {
"VERSION": {
"ADDING": "Aggiunta nuova versione plugin...",
"UPDATING": "Aggiornamento versione plugin...",
"DELETING": "Eliminazione versione plugin...",
"RESTORING": "Ripristino versione plugin..."
},
"UPLOADING": "Caricamento plugin...",
"UPDATING": "Aggiornamento plugin...",
"DELETING": "Eliminazione plugin...",
"INSTALLING": "Installazione plugin...",
"UNINSTALLING": "Disinstallazione plugin..."
},
"ERROR": {
"VERSION": {
"RESTORE": "Ripristino versione plugin fallito. Riprova!"
},
"UPLOAD": "Caricamento plugin fallito. Riprova!",
"NOT_FOUND": "Plugin con ID {{ id }} non trovato.",
"INSTALL": "Installazione plugin fallita. Riprova!",
"REVERT_INSTALLATION": "Annullamento installazione fallito!"
}
}
},
"SERVER_DOWN": {
+103 -5
View File
@@ -170,10 +170,16 @@
"SHARE": "Delen",
"GET_INFO": "Informatie ophalen",
"RETRY": "Opnieuw proberen",
"UPLOAD": "Uploaden"
"UPLOAD": "Uploaden",
"MARKETPLACE": "Marktplaats",
"ADD_VERSION": "Versie toevoegen",
"READ_MORE": "Meer lezen",
"READ_LESS": "Minder lezen",
"RECOVER": "Herstellen"
},
"SM_TABLE": {
"NO_DATA": {
"HISTORY": "Geen geschiedenis",
"RECEIVE_ESTIMATE": "Je hebt geen offerte ontvangen.",
"INCOME": "Je hebt geen enkel inkomen gecreëerd.",
"EXPENSE_CATEGORY": "U heeft geen uitgavencategorie gemaakt.",
@@ -218,7 +224,8 @@
"PRODUCT_TYPE_NO_DATA": "U heeft geen producttype gemaakt.",
"TEAM_DASHBOARD": "Je hebt geen teams.",
"PLUGIN": "Je hebt geen enkele plugin geïnstalleerd.",
"PLUGIN_MARKETPLACE": "Deze plugin is niet beschikbaar op de marktplaats"
"PLUGIN_MARKETPLACE": "Deze plugin is niet beschikbaar op de marktplaats",
"LOADING": "Laden..."
},
"TRANSACTION_TYPE": "Type",
"AMOUNT": "Bedrag",
@@ -4017,7 +4024,14 @@
"SSL_CERT_FILE_INFO": "Pad naar het client-certificaatbestand voor SSL.",
"SECURE": "Veilig",
"SECURE_INFO": "True, als je de SSL-certificaten wilt verifiëren."
}
},
"ADD_PLUGIN_NPM_DESCRIPTION": "NPM-installatie biedt toegang tot openbaar en privé beschikbare plug-ins.",
"PACKAGE_NAME": "NPM-pakketnaam",
"PACKAGE_VERSION": "NPM-pakketversie",
"REGISTRY": "NPM-register",
"AUTH_TOKEN": "Authenticatietoken",
"PRIVATE_REGISTRY_URL": "URL van privéregister",
"PLUGIN_INSTALL_CDN_ERROR": "De server-URL mag niet leeg zijn."
},
"WEEKLY_LIMIT_EXCEEDED": "Weeklimiet overschreden",
"OF_HRS": "Van {{ limit }} uur",
@@ -4789,7 +4803,10 @@
"INVALID_PACKAGE_NAME": "Ongeldig pakketnaamformaat",
"INVALID_SCOPE": "Ongeldig bereikformaat",
"AUTHOR_TOO_LONG": "Auteursnaam is te lang",
"LICENSE_TOO_LONG": "Licentieveld is te lang"
"LICENSE_TOO_LONG": "Licentieveld is te lang",
"FAILED": "Validatie mislukt",
"CHANGELOG_TOO_SHORT": "Changelog is te kort",
"CHANGELOG_REQUIRED": "Changelog is vereist"
},
"TYPE": "Plugintype",
"TYPE_PLACEHOLDER": "Selecteer plugintype",
@@ -4863,7 +4880,88 @@
},
"LAYOUT": {
"DISCOVER": "Ontdekken",
"INSTALLED": "Geïnstalleerd"
"INSTALLED": "Geïnstalleerd",
"VERSION_HISTORY": "Versiegeschiedenis"
},
"MARKETPLACE": {
"UPLOAD": "Nieuwe plugin uploaden",
"OFFLINE": "U bent momenteel offline/verbinding verbroken ⛓️‍"
},
"DIALOG": {
"DEACTIVATE": {
"TITLE": "Plugin deactiveren",
"DESCRIPTION": "Weet u zeker dat u deze plugin wilt deactiveren?",
"CONFIRM": "Deactiveren"
},
"UNINSTALL": {
"TITLE": "Plugin verwijderen",
"DESCRIPTION": "Weet u zeker dat u deze plugin wilt verwijderen?",
"CONFIRM": "Verwijderen"
},
"DELETE": {
"TITLE": "Plugin verwijderen",
"DESCRIPTION": "Weet u zeker dat u deze plugin wilt verwijderen?",
"CONFIRM": "Verwijderen"
},
"VERSION": {
"UPDATE": {
"TITLE": "Versie v{{number}} bijwerken",
"DESCRIPTION": "Weet u zeker dat u deze plugin wilt bijwerken?",
"CONFIRM": "Bijwerken"
},
"CREATE": {
"TITLE": "Nieuwe versie maken voor {{name}}",
"DESCRIPTION": "Weet u zeker dat u deze versie wilt maken?",
"CONFIRM": "Maken"
},
"DELETE": {
"TITLE": "Versie verwijderen",
"DESCRIPTION": "Weet u zeker dat u deze versie wilt verwijderen?",
"CONFIRM": "Verwijderen"
},
"RESTORE": {
"TITLE": "Versie herstellen",
"DESCRIPTION": "Weet u zeker dat u deze versie wilt herstellen?",
"CONFIRM": "Herstellen"
}
}
},
"TOASTR": {
"SUCCESS": {
"VERSION": {
"CREATED": "Pluginversie v{{number}} succesvol aangemaakt!",
"UPDATED": "Pluginversie v{{number}} succesvol bijgewerkt!",
"DELETED": "Pluginversie succesvol verwijderd!",
"RESTORED": "Pluginversie succesvol hersteld!"
},
"UPLOADED": "Plugin succesvol geüpload!",
"UPDATED": "Plugin succesvol bijgewerkt!",
"DELETED": "Plugin succesvol verwijderd!",
"INSTALLED": "Plugin succesvol geïnstalleerd!",
"UNINSTALLED": "Plugin succesvol gedeïnstalleerd!"
},
"INFO": {
"VERSION": {
"ADDING": "Nieuwe pluginversie wordt toegevoegd...",
"UPDATING": "Pluginversie wordt bijgewerkt...",
"DELETING": "Pluginversie wordt verwijderd...",
"RESTORING": "Pluginversie wordt hersteld..."
},
"UPLOADING": "Plugin wordt geüpload...",
"UPDATING": "Plugin wordt bijgewerkt...",
"DELETING": "Plugin wordt verwijderd...",
"INSTALLING": "Plugin wordt geïnstalleerd...",
"UNINSTALLING": "Plugin wordt gedeïnstalleerd..."
},
"ERROR": {
"VERSION": {
"RESTORE": "Herstellen van pluginversie mislukt. Probeer het opnieuw!"
},
"UPLOAD": "Uploaden van plugin mislukt. Probeer het opnieuw!",
"NOT_FOUND": "Plugin met ID {{ id }} niet gevonden.",
"INSTALL": "Installeren van plugin mislukt. Probeer het opnieuw!",
"REVERT_INSTALLATION": "Terugdraaien van installatie mislukt!"
}
}
},
"SERVER_DOWN": {
+102 -5
View File
@@ -170,7 +170,12 @@
"SHARE": "Udostępnij",
"GET_INFO": "Pobierz informacje",
"RETRY": "Spróbuj ponownie",
"UPLOAD": "Prześlij"
"UPLOAD": "Prześlij",
"MARKETPLACE": "Rynek",
"ADD_VERSION": "Dodaj wersje",
"READ_MORE": "Czytaj więcej",
"READ_LESS": "Czytaj mniej",
"RECOVER": "Przywróć"
},
"SM_TABLE": {
"NO_DATA": {
@@ -218,7 +223,8 @@
"PRODUCT_TYPE_NO_DATA": "Nie utworzyłeś żadnego typu produktu",
"TEAM_DASHBOARD": "Nie masz żadnych zespołów",
"PLUGIN": "Nie zainstalowano żadnych wtyczek.",
"PLUGIN_MARKETPLACE": "Ta wtyczka nie jest dostępna na rynku"
"PLUGIN_MARKETPLACE": "Ta wtyczka nie jest dostępna na rynku",
"LOADING": "Ładuje..."
},
"TRANSACTION_TYPE": "Rodzaj",
"AMOUNT": "Kwota",
@@ -4017,7 +4023,14 @@
"SSL_CERT_FILE_INFO": "Ścieżka do pliku certyfikatu klienta dla SSL.",
"SECURE": "Bezpieczne",
"SECURE_INFO": "True, jeśli chcesz zweryfikować certyfikaty SSL."
}
},
"ADD_PLUGIN_NPM_DESCRIPTION": "Instalacja NPM umożliwia dostęp do publicznie i prywatnie dostępnych wtyczek.",
"PACKAGE_NAME": "Nazwa pakietu NPM",
"PACKAGE_VERSION": "Wersja pakietu NPM",
"REGISTRY": "Rejestr NPM",
"AUTH_TOKEN": "Token uwierzytelniający",
"PRIVATE_REGISTRY_URL": "Prywatny adres URL rejestru",
"PLUGIN_INSTALL_CDN_ERROR": "Adres URL serwera nie może być pusty."
},
"WEEKLY_LIMIT_EXCEEDED": "Przekroczono limit tygodniowy",
"OF_HRS": "Z {{ limit }} godz",
@@ -4789,7 +4802,10 @@
"INVALID_PACKAGE_NAME": "Nieprawidłowy format nazwy pakietu",
"INVALID_SCOPE": "Nieprawidłowy format zakresu",
"AUTHOR_TOO_LONG": "Nazwa autora jest zbyt długa",
"LICENSE_TOO_LONG": "Pole licencji jest zbyt długie"
"LICENSE_TOO_LONG": "Pole licencji jest zbyt długie",
"FAILED": "Walidacja nie powiodła się",
"CHANGELOG_TOO_SHORT": "Log zmian jest zbyt krotki",
"CHANGELOG_REQUIRED": "Log zmian jest wymagany"
},
"TYPE": "Typ wtyczki",
"TYPE_PLACEHOLDER": "Wybierz typ wtyczki",
@@ -4863,7 +4879,88 @@
},
"LAYOUT": {
"DISCOVER": "Odkryj",
"INSTALLED": "Zainstalowane"
"INSTALLED": "Zainstalowane",
"VERSION_HISTORY": "Historia wersji"
},
"MARKETPLACE": {
"UPLOAD": "Prześlij nową wtyczkę",
"OFFLINE": "Jesteś obecnie offline/rozłączony ⛓️‍"
},
"DIALOG": {
"DEACTIVATE": {
"TITLE": "Dezaktywuj wtyczkę",
"DESCRIPTION": "Czy na pewno chcesz dezaktywować tę wtyczkę?",
"CONFIRM": "Dezaktywuj"
},
"UNINSTALL": {
"TITLE": "Odinstaluj wtyczkę",
"DESCRIPTION": "Czy na pewno chcesz odinstalować tę wtyczkę?",
"CONFIRM": "Odinstaluj"
},
"DELETE": {
"TITLE": "Usuń wtyczkę",
"DESCRIPTION": "Czy na pewno chcesz usunąć tę wtyczkę?",
"CONFIRM": "Usuń"
},
"VERSION": {
"UPDATE": {
"TITLE": "Aktualizuj wersję v{{number}}",
"DESCRIPTION": "Czy na pewno chcesz zaktualizować tę wtyczkę?",
"CONFIRM": "Aktualizuj"
},
"CREATE": {
"TITLE": "Utwórz nową wersję dla {{name}}",
"DESCRIPTION": "Czy na pewno chcesz utworzyć tę wersję?",
"CONFIRM": "Utwórz"
},
"DELETE": {
"TITLE": "Usuń wersję",
"DESCRIPTION": "Czy na pewno chcesz usunąć tę wersję?",
"CONFIRM": "Usuń"
},
"RESTORE": {
"TITLE": "Przywróć wersję",
"DESCRIPTION": "Czy na pewno chcesz przywrócić tę wersję?",
"CONFIRM": "Przywróć"
}
}
},
"TOASTR": {
"SUCCESS": {
"VERSION": {
"CREATED": "Wersja wtyczki v{{number}} została pomyślnie utworzona!",
"UPDATED": "Wersja wtyczki v{{number}} została pomyślnie zaktualizowana!",
"DELETED": "Wersja wtyczki została pomyślnie usunięta!",
"RESTORED": "Wersja wtyczki została pomyślnie przywrócona!"
},
"UPLOADED": "Wtyczka została pomyślnie przesłana!",
"UPDATED": "Wtyczka została pomyślnie zaktualizowana!",
"DELETED": "Wtyczka została pomyślnie usunięta!",
"INSTALLED": "Wtyczka została pomyślnie zainstalowana!",
"UNINSTALLED": "Wtyczka została pomyślnie odinstalowana!"
},
"INFO": {
"VERSION": {
"ADDING": "Dodawanie nowej wersji wtyczki...",
"UPDATING": "Aktualizowanie wersji wtyczki...",
"DELETING": "Usuwanie wersji wtyczki...",
"RESTORING": "Przywracanie wersji wtyczki..."
},
"UPLOADING": "Przesyłanie wtyczki...",
"UPDATING": "Aktualizowanie wtyczki...",
"DELETING": "Usuwanie wtyczki...",
"INSTALLING": "Instalowanie wtyczki...",
"UNINSTALLING": "Odinstalowywanie wtyczki..."
},
"ERROR": {
"VERSION": {
"RESTORE": "Nie udało się przywrócić wersji wtyczki. Spróbuj ponownie!"
},
"UPLOAD": "Nie udało się przesłać wtyczki. Spróbuj ponownie!",
"NOT_FOUND": "Nie znaleziono wtyczki o ID {{ id }}.",
"INSTALL": "Nie udało się zainstalować wtyczki. Spróbuj ponownie!",
"REVERT_INSTALLATION": "Nie udało się cofnąć instalacji!"
}
}
},
"SERVER_DOWN": {
+103 -5
View File
@@ -170,10 +170,16 @@
"SHARE": "Compartilhar",
"GET_INFO": "Obter informações",
"RETRY": "Tentar novamente",
"UPLOAD": "Carregar"
"UPLOAD": "Carregar",
"MARKETPLACE": "Mercado",
"ADD_VERSION": "Adicionar versão",
"READ_MORE": "Ler mais",
"READ_LESS": "Ler menos",
"RECOVER": "Recuperar"
},
"SM_TABLE": {
"NO_DATA": {
"HISTORY": "Não há histórico",
"RECEIVE_ESTIMATE": "Você não recebeu nenhuma estimativa.",
"INCOME": "Você não criou nenhuma renda.",
"EXPENSE_CATEGORY": "Você não criou nenhuma categoria de despesa.",
@@ -218,7 +224,8 @@
"PRODUCT_TYPE_NO_DATA": "Você não criou nenhum tipo de produto.",
"TEAM_DASHBOARD": "Você não tem nenhum time.",
"PLUGIN": "Você não instalou nenhum plugin.",
"PLUGIN_MARKETPLACE": "Este plugin não está disponível no marketplace"
"PLUGIN_MARKETPLACE": "Este plugin não está disponível no marketplace",
"LOADING": "Carregando..."
},
"TRANSACTION_TYPE": "Digite",
"AMOUNT": "Quantia.",
@@ -4017,7 +4024,14 @@
"SSL_CERT_FILE_INFO": "Caminho para o arquivo de certificado do cliente para SSL.",
"SECURE": "Seguro",
"SECURE_INFO": "True, se desejar verificar os certificados SSL."
}
},
"ADD_PLUGIN_NPM_DESCRIPTION": "A instalação do NPM permite o acesso a plug-ins disponíveis publicamente e privados.",
"PACKAGE_NAME": "Nome do pacote NPM",
"PACKAGE_VERSION": "Versão do pacote NPM",
"REGISTRY": "Registro NPM",
"AUTH_TOKEN": "Token de autenticação",
"PRIVATE_REGISTRY_URL": "URL do registro privado",
"PLUGIN_INSTALL_CDN_ERROR": "O URL do servidor não deve estar vazio."
},
"WEEKLY_LIMIT_EXCEEDED": "Limite semanal excedido",
"OF_HRS": "De {{ limit }} horas.",
@@ -4789,7 +4803,10 @@
"INVALID_PACKAGE_NAME": "Formato de nome de pacote inválido",
"INVALID_SCOPE": "Formato de escopo inválido",
"AUTHOR_TOO_LONG": "O nome do autor é muito longo",
"LICENSE_TOO_LONG": "O campo da licença é muito longo"
"LICENSE_TOO_LONG": "O campo da licença é muito longo",
"FAILED": "Validação falhou",
"CHANGELOG_TOO_SHORT": "O changelog é muito curto",
"CHANGELOG_REQUIRED": "O changelog é obrigatório"
},
"TYPE": "Tipo de plugin",
"TYPE_PLACEHOLDER": "Selecione o tipo de plugin",
@@ -4863,7 +4880,88 @@
},
"LAYOUT": {
"DISCOVER": "Descobrir",
"INSTALLED": "Instalado"
"INSTALLED": "Instalado",
"VERSION_HISTORY": "Histórico de versões"
},
"MARKETPLACE": {
"UPLOAD": "Enviar novo plugin",
"OFFLINE": "Você está atualmente offline/desconectado ⛓️‍"
},
"DIALOG": {
"DEACTIVATE": {
"TITLE": "Desativar plugin",
"DESCRIPTION": "Tem certeza de que deseja desativar este plugin?",
"CONFIRM": "Desativar"
},
"UNINSTALL": {
"TITLE": "Desinstalar plugin",
"DESCRIPTION": "Tem certeza de que deseja desinstalar este plugin?",
"CONFIRM": "Desinstalar"
},
"DELETE": {
"TITLE": "Excluir plugin",
"DESCRIPTION": "Tem certeza de que deseja excluir este plugin?",
"CONFIRM": "Excluir"
},
"VERSION": {
"UPDATE": {
"TITLE": "Atualizar versão v{{number}}",
"DESCRIPTION": "Tem certeza de que deseja atualizar este plugin?",
"CONFIRM": "Atualizar"
},
"CREATE": {
"TITLE": "Criar nova versão para {{name}}",
"DESCRIPTION": "Tem certeza de que deseja criar esta versão?",
"CONFIRM": "Criar"
},
"DELETE": {
"TITLE": "Excluir versão",
"DESCRIPTION": "Tem certeza de que deseja excluir esta versão?",
"CONFIRM": "Excluir"
},
"RESTORE": {
"TITLE": "Restaurar versão",
"DESCRIPTION": "Tem certeza de que deseja restaurar esta versão?",
"CONFIRM": "Restaurar"
}
}
},
"TOASTR": {
"SUCCESS": {
"VERSION": {
"CREATED": "Versão do plugin v{{number}} criada com sucesso!",
"UPDATED": "Versão do plugin v{{number}} atualizada com sucesso!",
"DELETED": "Versão do plugin excluída com sucesso!",
"RESTORED": "Versão do plugin restaurada com sucesso!"
},
"UPLOADED": "Plugin enviado com sucesso!",
"UPDATED": "Plugin atualizado com sucesso!",
"DELETED": "Plugin excluído com sucesso!",
"INSTALLED": "Plugin instalado com sucesso!",
"UNINSTALLED": "Plugin desinstalado com sucesso!"
},
"INFO": {
"VERSION": {
"ADDING": "Adicionando nova versão do plugin...",
"UPDATING": "Atualizando versão do plugin...",
"DELETING": "Excluindo versão do plugin...",
"RESTORING": "Restaurando versão do plugin..."
},
"UPLOADING": "Enviando plugin...",
"UPDATING": "Atualizando plugin...",
"DELETING": "Excluindo plugin...",
"INSTALLING": "Instalando plugin...",
"UNINSTALLING": "Desinstalando plugin..."
},
"ERROR": {
"VERSION": {
"RESTORE": "Falha ao restaurar versão do plugin. Por favor, tente novamente!"
},
"UPLOAD": "Falha ao enviar plugin. Por favor, tente novamente!",
"NOT_FOUND": "Plugin com ID {{ id }} não encontrado.",
"INSTALL": "Falha ao instalar plugin. Por favor, tente novamente!",
"REVERT_INSTALLATION": "Falha ao reverter instalação!"
}
}
},
"SERVER_DOWN": {
+101 -4
View File
@@ -169,10 +169,16 @@
"SHARE": "Поделиться",
"GET_INFO": "Получить информацию",
"RETRY": "Повторить попытку",
"UPLOAD": "Загрузить"
"UPLOAD": "Загрузить",
"MARKETPLACE": "Рынок",
"ADD_VERSION": "Добавить версию",
"READ_MORE": "Читать далее",
"READ_LESS": "Свернуть",
"RECOVER": "Восстановить"
},
"SM_TABLE": {
"NO_DATA": {
"HISTORY": "Нет истории",
"LOADING": "Загрузка, пожалуйста, подождите...",
"RECEIVE_ESTIMATE": "Вы не получили ни одной оценки.",
"INCOME": "Вы не создали ни одного дохода.",
@@ -4035,7 +4041,14 @@
"SSL_CERT_FILE_INFO": "Путь к файлу сертификата клиента для SSL.",
"SECURE": "Безопасно",
"SECURE_INFO": "True, если вы хотите проверить SSL-сертификаты."
}
},
"ADD_PLUGIN_NPM_DESCRIPTION": "Установка через NPM позволяет получить доступ к общедоступным и частным плагинам.",
"PACKAGE_NAME": "Имя пакета NPM",
"PACKAGE_VERSION": "Версия пакета NPM",
"REGISTRY": "Реестр NPM",
"AUTH_TOKEN": "Токен аутентификации",
"PRIVATE_REGISTRY_URL": "URL частного реестра",
"PLUGIN_INSTALL_CDN_ERROR": "URL сервера не должен быть пустым."
},
"WEEKLY_LIMIT_EXCEEDED": "Еженедельный лимит превышен",
"OF_HRS": "Из {{ limit }} часов",
@@ -4786,7 +4799,10 @@
"INVALID_PACKAGE_NAME": "Неверный формат имени пакета",
"INVALID_SCOPE": "Неверный формат области",
"AUTHOR_TOO_LONG": "Имя автора слишком длинное",
"LICENSE_TOO_LONG": "Поле лицензии слишком длинное"
"LICENSE_TOO_LONG": "Поле лицензии слишком длинное",
"FAILED": "Проверка не удалась",
"CHANGELOG_TOO_SHORT": "Changelog слишком короткий",
"CHANGELOG_REQUIRED": "Changelog обязателен"
},
"TYPE": "Тип плагина",
"TYPE_PLACEHOLDER": "Выберите тип плагина",
@@ -4860,7 +4876,88 @@
},
"LAYOUT": {
"DISCOVER": "Открыть",
"INSTALLED": "Установлено"
"INSTALLED": "Установлено",
"VERSION_HISTORY": "История версий"
},
"MARKETPLACE": {
"UPLOAD": "Загрузить новый плагин",
"OFFLINE": "Вы сейчас не в сети/отключены ⛓️‍"
},
"DIALOG": {
"DEACTIVATE": {
"TITLE": "Деактивировать плагин",
"DESCRIPTION": "Вы уверены, что хотите деактивировать этот плагин?",
"CONFIRM": "Деактивировать"
},
"UNINSTALL": {
"TITLE": "Удалить плагин",
"DESCRIPTION": "Вы уверены, что хотите удалить этот плагин?",
"CONFIRM": "Удалить"
},
"DELETE": {
"TITLE": "Удалить плагин",
"DESCRIPTION": "Вы уверены, что хотите удалить этот плагин?",
"CONFIRM": "Удалить"
},
"VERSION": {
"UPDATE": {
"TITLE": "Обновить версию v{{number}}",
"DESCRIPTION": "Вы уверены, что хотите обновить этот плагин?",
"CONFIRM": "Обновить"
},
"CREATE": {
"TITLE": "Создать новую версию для {{name}}",
"DESCRIPTION": "Вы уверены, что хотите создать эту версию?",
"CONFIRM": "Создать"
},
"DELETE": {
"TITLE": "Удалить версию",
"DESCRIPTION": "Вы уверены, что хотите удалить эту версию?",
"CONFIRM": "Удалить"
},
"RESTORE": {
"TITLE": "Восстановить версию",
"DESCRIPTION": "Вы уверены, что хотите восстановить эту версию?",
"CONFIRM": "Восстановить"
}
}
},
"TOASTR": {
"SUCCESS": {
"VERSION": {
"CREATED": "Версия плагина v{{number}} успешно создана!",
"UPDATED": "Версия плагина v{{number}} успешно обновлена!",
"DELETED": "Версия плагина успешно удалена!",
"RESTORED": "Версия плагина успешно восстановлена!"
},
"UPLOADED": "Плагин успешно загружен!",
"UPDATED": "Плагин успешно обновлен!",
"DELETED": "Плагин успешно удален!",
"INSTALLED": "Плагин успешно установлен!",
"UNINSTALLED": "Плагин успешно удален!"
},
"INFO": {
"VERSION": {
"ADDING": "Добавление новой версии плагина...",
"UPDATING": "Обновление версии плагина...",
"DELETING": "Удаление версии плагина...",
"RESTORING": "Восстановление версии плагина..."
},
"UPLOADING": "Загрузка плагина...",
"UPDATING": "Обновление плагина...",
"DELETING": "Удаление плагина...",
"INSTALLING": "Установка плагина...",
"UNINSTALLING": "Удаление плагина..."
},
"ERROR": {
"VERSION": {
"RESTORE": "Не удалось восстановить версию плагина. Пожалуйста, попробуйте еще раз!"
},
"UPLOAD": "Не удалось загрузить плагин. Пожалуйста, попробуйте еще раз!",
"NOT_FOUND": "Плагин с ID {{ id }} не найден.",
"INSTALL": "Не удалось установить плагин. Пожалуйста, попробуйте еще раз!",
"REVERT_INSTALLATION": "Не удалось отменить установку!"
}
}
},
"SERVER_DOWN": {
+103 -5
View File
@@ -170,10 +170,16 @@
"SHARE": "分享",
"GET_INFO": "获取信息",
"RETRY": "重试",
"UPLOAD": "上传"
"UPLOAD": "上传",
"MARKETPLACE": "市场",
"ADD_VERSION": "添加版本",
"READ_MORE": "阅读更多",
"READ_LESS": "收起",
"RECOVER": "恢复"
},
"SM_TABLE": {
"NO_DATA": {
"HISTORY": "没有历史记录",
"RECEIVE_ESTIMATE": "您尚未收到任何估计。",
"INCOME": "您还没有创造任何收入。",
"EXPENSE_CATEGORY": "您尚未创建任何费用类别。",
@@ -218,7 +224,8 @@
"PRODUCT_TYPE_NO_DATA": "你还没有创建任何产品类型。",
"TEAM_DASHBOARD": "你没有任何团队",
"PLUGIN": "您尚未安装任何插件。",
"PLUGIN_MARKETPLACE": "该插件在市场上不可用"
"PLUGIN_MARKETPLACE": "该插件在市场上不可用",
"LOADING": "加载中..."
},
"TRANSACTION_TYPE": "类型 (Lèixíng)",
"AMOUNT": "金额",
@@ -4017,7 +4024,14 @@
"SSL_CERT_FILE_INFO": "SSL 客户端证书文件路径。",
"SECURE": "安全",
"SECURE_INFO": "True,如果您想要验证 SSL 证书。"
}
},
"ADD_PLUGIN_NPM_DESCRIPTION": "NPM安装允许访问公开和私有的插件。",
"PACKAGE_NAME": "NPM包名称",
"PACKAGE_VERSION": "NPM包版本",
"REGISTRY": "NPM注册表",
"AUTH_TOKEN": "认证令牌",
"PRIVATE_REGISTRY_URL": "私有注册表URL",
"PLUGIN_INSTALL_CDN_ERROR": "服务器URL不能为空。"
},
"WEEKLY_LIMIT_EXCEEDED": "每周限制已超过。",
"OF_HRS": "的{{ limit }}小时",
@@ -4789,7 +4803,10 @@
"INVALID_PACKAGE_NAME": "包名称格式无效",
"INVALID_SCOPE": "作用域格式无效",
"AUTHOR_TOO_LONG": "作者名称过长",
"LICENSE_TOO_LONG": "许可证字段过长"
"LICENSE_TOO_LONG": "许可证字段过长",
"FAILED": "验证失败",
"CHANGELOG_TOO_SHORT": "更新日志过短",
"CHANGELOG_REQUIRED": "更新日志必填"
},
"TYPE": "插件类型",
"TYPE_PLACEHOLDER": "选择插件类型",
@@ -4863,7 +4880,88 @@
},
"LAYOUT": {
"DISCOVER": "发现",
"INSTALLED": "已安装"
"INSTALLED": "已安装",
"VERSION_HISTORY": "版本历史"
},
"MARKETPLACE": {
"UPLOAD": "上传新插件",
"OFFLINE": "您当前处于离线/断开连接状态 ⛓️‍"
},
"DIALOG": {
"DEACTIVATE": {
"TITLE": "停用插件",
"DESCRIPTION": "确定要停用此插件吗?",
"CONFIRM": "停用"
},
"UNINSTALL": {
"TITLE": "卸载插件",
"DESCRIPTION": "确定要卸载此插件吗?",
"CONFIRM": "卸载"
},
"DELETE": {
"TITLE": "删除插件",
"DESCRIPTION": "您确定要删除此插件吗?",
"CONFIRM": "删除"
},
"VERSION": {
"UPDATE": {
"TITLE": "更新版本 v{{number}}",
"DESCRIPTION": "您确定要更新此插件吗?",
"CONFIRM": "更新"
},
"CREATE": {
"TITLE": "为 {{name}} 创建新版本",
"DESCRIPTION": "您确定要创建此版本吗?",
"CONFIRM": "创建"
},
"DELETE": {
"TITLE": "删除版本",
"DESCRIPTION": "您确定要删除此版本吗?",
"CONFIRM": "删除"
},
"RESTORE": {
"TITLE": "恢复版本",
"DESCRIPTION": "您确定要恢复此版本吗?",
"CONFIRM": "恢复"
}
}
},
"TOASTR": {
"SUCCESS": {
"VERSION": {
"CREATED": "插件版本 v{{number}} 创建成功!",
"UPDATED": "插件版本 v{{number}} 更新成功!",
"DELETED": "插件版本删除成功!",
"RESTORED": "插件版本恢复成功!"
},
"UPLOADED": "插件上传成功!",
"UPDATED": "插件更新成功!",
"DELETED": "插件删除成功!",
"INSTALLED": "插件安装成功!",
"UNINSTALLED": "插件卸载成功!"
},
"INFO": {
"VERSION": {
"ADDING": "正在添加新插件版本...",
"UPDATING": "正在更新插件版本...",
"DELETING": "正在删除插件版本...",
"RESTORING": "正在恢复插件版本..."
},
"UPLOADING": "正在上传插件...",
"UPDATING": "正在更新插件...",
"DELETING": "正在删除插件...",
"INSTALLING": "正在安装插件...",
"UNINSTALLING": "正在卸载插件..."
},
"ERROR": {
"VERSION": {
"RESTORE": "恢复插件版本失败。请重试!"
},
"UPLOAD": "上传插件失败。请重试!",
"NOT_FOUND": "未找到ID为 {{ id }} 的插件。",
"INSTALL": "安装插件失败。请重试!",
"REVERT_INSTALLATION": "回滚安装失败!"
}
}
},
"SERVER_DOWN": {