diff --git a/README.md b/README.md index 3aa453689..34d6fe44c 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Akaunting is a free, online and open source accounting software designed for sma ## Framework -Akaunting uses [Laravel](http://laravel.com), the best existing PHP framework, as the foundation framework and [Laravel Modules](https://nwidart.com/laravel-modules) package for Apps. +Akaunting uses [Laravel](http://laravel.com), the best existing PHP framework, as the foundation framework and [Modules](https://nwidart.com/laravel-modules) package for Apps. ## Installation @@ -26,7 +26,7 @@ Akaunting uses [Laravel](http://laravel.com), the best existing PHP framework, a * Download the [repository](https://github.com/akaunting/akaunting/archive/master.zip) and unzip into your server * Open and point your command line to the directory you unzipped Akaunting * Run the following command: `composer install` - * Finally, go to the Akaunting folder via your browser + * Finally, launch the [installer](https://akaunting.com/docs/installation) ## Contributing @@ -48,7 +48,7 @@ Please see [Releases](../../releases) for more information what has changed rece ## Security -If you discover any security related issues, please email security[at]akaunting[dot]com instead of using the issue tracker. +If you discover any security related issues, please email security@akaunting.com instead of using the issue tracker. ## Credits diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 618379594..b447f2f42 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -27,7 +27,7 @@ class Kernel extends ConsoleKernel protected function schedule(Schedule $schedule) { // Not installed yet - if (env('DB_DATABASE', '') == '') { + if (!env('APP_INSTALLED')) { return; } diff --git a/app/Http/Controllers/Install/Database.php b/app/Http/Controllers/Install/Database.php index e5657dd02..916e1c0e7 100644 --- a/app/Http/Controllers/Install/Database.php +++ b/app/Http/Controllers/Install/Database.php @@ -61,7 +61,7 @@ class Database extends Controller 'database' => $request['database'], 'username' => $request['username'], 'password' => $request['password'], - 'driver' => 'mysql', + 'driver' => env('DB_CONNECTION', 'mysql'), 'port' => env('DB_PORT', '3306'), ]); @@ -105,18 +105,20 @@ class Database extends Controller ], ])->save(); + $con = env('DB_CONNECTION', 'mysql'); + // Change current connection - $mysql = Config::get('database.connections.mysql'); + $db = Config::get('database.connections.' . $con); - $mysql['host'] = $request['hostname']; - $mysql['database'] = $request['database']; - $mysql['username'] = $request['username']; - $mysql['password'] = $request['password']; - $mysql['prefix'] = $prefix; + $db['host'] = $request['hostname']; + $db['database'] = $request['database']; + $db['username'] = $request['username']; + $db['password'] = $request['password']; + $db['prefix'] = $prefix; - Config::set('database.connections.mysql', $mysql); + Config::set('database.connections.' . $con, $db); - DB::purge('mysql'); - DB::reconnect('mysql'); + DB::purge($con); + DB::reconnect($con); } } diff --git a/app/Http/Controllers/Install/Requirements.php b/app/Http/Controllers/Install/Requirements.php index 29b3c4263..bd87542d9 100644 --- a/app/Http/Controllers/Install/Requirements.php +++ b/app/Http/Controllers/Install/Requirements.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Install; use DotenvEditor; +use File; use Illuminate\Routing\Controller; class Requirements extends Controller @@ -19,7 +20,9 @@ class Requirements extends Controller if (empty($requirements)) { // Create the .env file - $this->createEnvFile(); + if (!File::exists(base_path('.env'))) { + $this->createEnvFile(); + } redirect('install/language')->send(); } else { @@ -80,6 +83,10 @@ class Requirements extends Controller $requirements[] = trans('install.requirements.extension', ['extension' => 'cURL']); } + if (!extension_loaded('xml')) { + $requirements[] = trans('install.requirements.extension', ['extension' => 'XML']); + } + if (!extension_loaded('zip')) { $requirements[] = trans('install.requirements.extension', ['extension' => 'ZIP']); } @@ -120,13 +127,17 @@ class Requirements extends Controller 'key' => 'APP_ENV', 'value' => 'production', ], + [ + 'key' => 'APP_INSTALLED', + 'value' => 'false', + ], [ 'key' => 'APP_KEY', 'value' => 'base64:'.base64_encode(random_bytes(32)), ], [ 'key' => 'APP_DEBUG', - 'value' => 'false', + 'value' => 'true', ], [ 'key' => 'APP_LOG_LEVEL', diff --git a/app/Http/Controllers/Install/Settings.php b/app/Http/Controllers/Install/Settings.php index e8720ec1c..9ed7580d0 100644 --- a/app/Http/Controllers/Install/Settings.php +++ b/app/Http/Controllers/Install/Settings.php @@ -6,6 +6,7 @@ use Artisan; use App\Http\Requests\Install\Setting as Request; use App\Models\Auth\User; use App\Models\Company\Company; +use DotenvEditor; use File; use Illuminate\Routing\Controller; use Setting; @@ -85,6 +86,18 @@ class Settings extends Controller //Artisan::call('config:cache'); //Artisan::call('route:cache'); + // Update .env file + DotenvEditor::setKeys([ + [ + 'key' => 'APP_INSTALLED', + 'value' => 'true', + ], + [ + 'key' => 'APP_DEBUG', + 'value' => 'false', + ], + ])->save(); + // Rename the robots.txt file try { File::move(base_path('robots.txt.dist'), base_path('robots.txt')); diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 4f1078885..631d622d6 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -34,7 +34,7 @@ class Kernel extends HttpKernel \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, - \App\Http\Middleware\CheckIfInstalled::class, + \App\Http\Middleware\RedirectIfNotInstalled::class, \App\Http\Middleware\LoadSettings::class, ], diff --git a/app/Http/Middleware/CheckIfInstalled.php b/app/Http/Middleware/RedirectIfNotInstalled.php similarity index 82% rename from app/Http/Middleware/CheckIfInstalled.php rename to app/Http/Middleware/RedirectIfNotInstalled.php index 970eb3c7a..cff90ac62 100644 --- a/app/Http/Middleware/CheckIfInstalled.php +++ b/app/Http/Middleware/RedirectIfNotInstalled.php @@ -3,8 +3,9 @@ namespace App\Http\Middleware; use Closure; +use File; -class CheckIfInstalled +class RedirectIfNotInstalled { /** * Handle an incoming request. @@ -15,8 +16,8 @@ class CheckIfInstalled */ public function handle($request, Closure $next) { - // DB_DATABASE not empty means installed - if (env('DB_DATABASE', '') != '') { + // Check if .env file exists + if (File::exists(base_path('.env'))) { return $next($request); } diff --git a/app/Http/ViewComposers/All.php b/app/Http/ViewComposers/All.php index 80845ddec..afa649aba 100644 --- a/app/Http/ViewComposers/All.php +++ b/app/Http/ViewComposers/All.php @@ -18,7 +18,7 @@ class All public function compose(View $view) { // Make sure it's installed - if (env('DB_DATABASE', '') != '') { + if (env('APP_INSTALLED')) { // Share date format $view->with(['date_format' => $this->getCompanyDateFormat()]); } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 5c3cebb3d..80c8b0abc 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -31,7 +31,7 @@ class AppServiceProvider extends ServiceProvider */ public function register() { - if (env('APP_DEBUG')) { + if (env('APP_INSTALLED') && env('APP_DEBUG')) { $this->app->register(\Barryvdh\Debugbar\ServiceProvider::class); } diff --git a/config/language.php b/config/language.php index 66c152e18..0b71f716a 100644 --- a/config/language.php +++ b/config/language.php @@ -115,7 +115,7 @@ return [ | */ - 'allowed' => ['en-GB', 'de-DE', 'fr-FR', 'pt-BR', 'tr-TR'], + 'allowed' => ['en-GB', 'de-DE', 'es-ES', 'fr-FR', 'pt-BR', 'tr-TR'], /* |-------------------------------------------------------------------------- diff --git a/resources/lang/es-ES/accounts.php b/resources/lang/es-ES/accounts.php new file mode 100644 index 000000000..87ddccd70 --- /dev/null +++ b/resources/lang/es-ES/accounts.php @@ -0,0 +1,15 @@ + 'Nombre de Cuenta', + 'number' => 'Número', + 'opening_balance' => 'Saldo de apertura', + 'current_balance' => 'Saldo actual', + 'bank_name' => 'Nombre del Banco', + 'bank_phone' => 'Teléfono Banco', + 'bank_address' => 'Dirección del Banco', + 'default_account' => 'Cuenta Predeterminada', + 'all' => 'Todas las cuentas', + +]; diff --git a/resources/lang/es-ES/auth.php b/resources/lang/es-ES/auth.php new file mode 100644 index 000000000..26235e3d4 --- /dev/null +++ b/resources/lang/es-ES/auth.php @@ -0,0 +1,29 @@ + 'Perfil', + 'logout' => 'Salir', + 'login' => 'Iniciar sesión', + 'login_to' => 'Inicia sesión para empezar', + 'remember_me' => 'Recordarme', + 'forgot_password' => 'Olvidé mi contraseña', + 'reset_password' => 'Restablecer Contraseña', + 'enter_email' => 'Introduce tu dirección de correo', + 'current_email' => 'Correo electrónico actual', + 'reset' => 'Resetear', + 'never' => 'nunca', + 'password' => [ + 'current' => 'Actual', + 'current_confirm' => 'Confirmar contraseña', + 'new' => 'Nueva contraseña', + 'new_confirm' => 'Confirmar contraseña', + ], + 'error' => [ + 'self_delete' => 'Error: No puede eliminarse usted mismo!' + ], + + 'failed' => 'Estas credenciales no coinciden con nuestros registros.', + 'throttle' => 'Demasiados intentos fallidos de inicio de sesión. Por favor vuelva a intentarlo después de %s segundos.', + +]; diff --git a/resources/lang/es-ES/bills.php b/resources/lang/es-ES/bills.php new file mode 100644 index 000000000..4fe97d9b3 --- /dev/null +++ b/resources/lang/es-ES/bills.php @@ -0,0 +1,36 @@ + 'Nº de Recibo', + 'bill_date' => 'Fecha Recibo', + 'total_price' => 'Precio Total', + 'due_date' => 'Fecha de vencimiento', + 'order_number' => 'Número de pedido', + 'bill_from' => 'Recibo de', + + 'quantity' => 'Cantidad', + 'price' => 'Precio', + 'sub_total' => 'Subtotal', + 'tax_total' => 'Total Impuestos', + 'total' => 'Total ', + + 'item_name' => 'Nombre del artículo | Nombres de artículo', + + 'payment_due' => 'Vencimiento de pago', + 'amount_due' => 'Importe Vencido', + 'paid' => 'Pagado', + 'histories' => 'Historial', + 'payments' => 'Pagos', + 'add_payment' => 'Añadir pago', + 'download_pdf' => 'Descargar PDF', + 'send_mail' => 'Enviar Email', + + 'status' => [ + 'new' => 'Nuevo', + 'updated' => 'Actualizado', + 'partial' => 'Parcial', + 'paid' => 'Pagado', + ], + +]; diff --git a/resources/lang/es-ES/categories.php b/resources/lang/es-ES/categories.php new file mode 100644 index 000000000..7ceddea0a --- /dev/null +++ b/resources/lang/es-ES/categories.php @@ -0,0 +1,7 @@ + 'Todas las categorías', + 'all_types' => 'Todos los tipos' +]; diff --git a/resources/lang/es-ES/companies.php b/resources/lang/es-ES/companies.php new file mode 100644 index 000000000..509e045fe --- /dev/null +++ b/resources/lang/es-ES/companies.php @@ -0,0 +1,13 @@ + 'Dominio', + 'logo' => 'Logo', + 'manage' => 'Gestionar empresas', + 'all' => 'Todas las empresas', + 'error' => [ + 'delete_active' => 'Error: No puede eliminar la empresa activa, por favor, cámbiela antes!', + ], + +]; diff --git a/resources/lang/es-ES/currencies.php b/resources/lang/es-ES/currencies.php new file mode 100644 index 000000000..aa20674b3 --- /dev/null +++ b/resources/lang/es-ES/currencies.php @@ -0,0 +1,9 @@ + 'Código', + 'rate' => 'Cotización', + 'default' => 'Moneda Predeterminada', + +]; diff --git a/resources/lang/es-ES/customer.php b/resources/lang/es-ES/customer.php new file mode 100644 index 000000000..545c28b09 --- /dev/null +++ b/resources/lang/es-ES/customer.php @@ -0,0 +1,5 @@ + 'Todos los clientes', +]; diff --git a/resources/lang/es-ES/dashboard.php b/resources/lang/es-ES/dashboard.php new file mode 100644 index 000000000..66e1d65de --- /dev/null +++ b/resources/lang/es-ES/dashboard.php @@ -0,0 +1,24 @@ + 'Total ingresos', + 'receivables' => 'Cuentas por cobrar', + 'open_invoices' => 'Facturas pendientes', + 'overdue_invoices' => 'Facturas vencidas', + 'total_expenses' => 'Total de gastos', + 'payables' => 'Cuentas por pagar', + 'open_bills' => 'Facturas Pendientes', + 'overdue_bills' => 'Facturas Vencidas', + 'total_profit' => 'Ingresos Totales', + 'open_profit' => 'Ingresos Pendientes', + 'overdue_profit' => 'Ingresos Vencidos', + 'cash_flow' => 'Flujo de efectivo', + 'no_profit_loss' => 'No hay pérdidas', + 'incomes_by_category' => 'Ingresos por categoría', + 'expenses_by_category' => 'Gastos por categoría', + 'account_balance' => 'Saldo de la cuenta', + 'latest_incomes' => 'Últimos ingresos', + 'latest_expenses' => 'Últimos gastos', + +]; diff --git a/resources/lang/es-ES/demo.php b/resources/lang/es-ES/demo.php new file mode 100644 index 000000000..c1ad1ca9c --- /dev/null +++ b/resources/lang/es-ES/demo.php @@ -0,0 +1,17 @@ + 'Efectivo', + 'categories_uncat' => 'Sin categoría', + 'categories_deposit' => 'Depósito', + 'categories_sales' => 'Ventas', + 'currencies_usd' => 'Dólar EEUU', + 'currencies_eur' => 'Euro', + 'currencies_gbp' => 'Libra esterlina', + 'currencies_try' => 'Libra turca', + 'taxes_exempt' => 'Exentos de impuestos', + 'taxes_normal' => 'Normal', + 'taxes_sales' => 'Impuesto sobre Ventas', + +]; diff --git a/resources/lang/es-ES/footer.php b/resources/lang/es-ES/footer.php new file mode 100644 index 000000000..1a535edb4 --- /dev/null +++ b/resources/lang/es-ES/footer.php @@ -0,0 +1,9 @@ + 'Versión', + 'powered' => 'Powered By Akaunting', + 'software' => 'Software de Contabilidad Libre', + +]; diff --git a/resources/lang/es-ES/general.php b/resources/lang/es-ES/general.php new file mode 100644 index 000000000..01e616e3b --- /dev/null +++ b/resources/lang/es-ES/general.php @@ -0,0 +1,110 @@ + 'Artículo | Artículos', + 'incomes' => 'Ingresos | Ingresos', + 'invoices' => 'Factura | Facturas', + 'revenues' => 'Ingresos | Ingresos', + 'customers' => 'Cliente | Clientes', + 'expenses' => 'Gastos | Gastos', + 'bills' => 'Recibo | Recibos', + 'payments' => 'Pago | Pagos', + 'vendors' => 'Proveedor | Proveedores', + 'accounts' => 'Cuenta | Cuentas', + 'transfers' => 'Transferencia | Transferencias', + 'transactions' => 'Transacción | Transacciones', + 'reports' => 'Informe | Informes', + 'settings' => 'Ajuste | Ajustes', + 'categories' => 'Categoría | Categorías', + 'currencies' => 'Moneda | Monedas', + 'tax_rates' => 'Tasa de impuestos | Tasas de impuestos', + 'users' => 'Usuario | Usuarios', + 'roles' => 'Rol|Roles', + 'permissions' => 'Permiso | Permisos', + 'modules' => 'App|Apps', + 'companies' => 'Empresa | Empresas', + 'profits' => 'Beneficio | Beneficios', + 'taxes' => 'Impuestos | Impuestos', + 'pictures' => 'Imagen | Imágenes', + 'types' => 'Tipo | Tipos', + 'payment_methods' => 'Forma de pago | Métodos de pago', + 'compares' => 'Ingreso vs Gasto | Ingresos vs Gastos', + 'notes' => 'Nota | Notas', + 'totals' => 'Total | Totales', + 'languages' => 'Idioma | Idiomas', + 'updates' => 'Actualización | Actualizaciones', + 'numbers' => 'Número | Números', + + 'dashboard' => 'Panel de Control', + 'banking' => 'Banking', + 'general' => 'General', + 'no_records' => 'No hay registros.', + 'date' => 'Fecha', + 'amount' => 'Importe', + 'enabled' => 'Activo', + 'disabled' => 'Deshabilitado', + 'yes' => 'Sí', + 'no' => 'No', + 'na' => 'N/D', + 'daily' => 'Diario', + 'monthly' => 'Mensual', + 'yearly' => 'Anual', + 'add' => 'Añadir', + 'add_new' => 'Agregar Nuevo', + 'show' => 'Mostrar', + 'edit' => 'Editar', + 'delete' => 'Borrar', + 'send' => 'Envíar', + 'download' => 'Descargar', + 'delete_confirm' => 'Confirma el borrado de :name :type?', + 'name' => 'Nombre', + 'email' => 'Correo electrónico', + 'tax_number' => 'CIF/NIF', + 'phone' => 'Teléfono', + 'address' => 'Dirección', + 'website' => 'Página web', + 'actions' => 'Acciones', + 'description' => 'Descripción', + 'manage' => 'Administrar', + 'code' => 'Código', + 'alias' => 'Alias', + 'balance' => 'Saldo', + 'reference' => 'Referencia', + 'attachment' => 'Adjunto', + 'change' => 'Cambiar', + 'color' => 'Color', + 'save' => 'Guardar', + 'cancel' => 'Cancelar', + 'status' => 'Estado', + 'from' => 'De ', + 'to' => 'Para', + 'print' => 'Imprimir', + 'search' => 'Buscar', + 'search_placeholder' => 'Escriba para buscar..', + 'filter' => 'Filtro', + 'create_user' => 'Crear Usuario', + 'created_user' => 'Usuario Creado', + 'all_statuses' => 'Todos los Estados', + 'bank' => 'Transferencia Bancaria', + 'cash' => 'Efectivo', + 'paypal' => 'PayPal', + 'help' => 'Ayuda', + 'all' => 'Todos', + 'upcoming' => 'Próximos', + 'created' => 'Creado', + + 'title' => [ + 'new' => 'Nuevo :type', + 'edit' => 'Editar :type', + ], + 'form' => [ + 'enter' => 'Ingrese :field', + 'select' => [ + 'field' => '- Seleccione :field -', + 'file' => 'Seleccionar archivo', + ], + 'no_file_selected' => 'Ningún archivo seleccionado...', + ], + +]; diff --git a/resources/lang/es-ES/header.php b/resources/lang/es-ES/header.php new file mode 100644 index 000000000..687d49471 --- /dev/null +++ b/resources/lang/es-ES/header.php @@ -0,0 +1,14 @@ + 'Cambiar idioma', + 'last_login' => 'Último ingreso :time', + 'notifications' => [ + 'counter' => '{0} No tiene notificaciones |{1} Tiene :count notificación | [2,*] Tiene :count notificaciones', + 'overdue_invoices' => '{1} :count factura vencida | [2,*] :count facturas vencidas', + 'upcoming_bills' => '{1} :count factura vencida|[2,*] :count facturas vencidas', + 'view_all' => 'Ver todas' + ], + +]; diff --git a/resources/lang/es-ES/install.php b/resources/lang/es-ES/install.php new file mode 100644 index 000000000..0c6ec6cc6 --- /dev/null +++ b/resources/lang/es-ES/install.php @@ -0,0 +1,45 @@ + 'Siguiente', + 'refresh' => 'Actualizar', + + 'steps' => [ + 'requirements' => 'Por favor, cumpla los siguientes requisitos!', + 'language' => 'Paso 1/3: Selección de idioma', + 'database' => 'Paso 2/3: Configuración de la base de datos', + 'settings' => 'Paso 3/3: Detalles de la Empresa y el Administrador', + ], + + 'language' => [ + 'select' => 'Seleccione el idioma', + ], + + 'requirements' => [ + 'php_version' => 'Se requiere PHP 5.6.4 o superior!', + 'enabled' => ':feature debe estar habilitado!', + 'disabled' => ':feature debe estar deshabilitado!', + 'extension' => 'La extensión :extension debe estar cargada!', + 'directory' => 'El directorio :directorio necesita tener permiso de escritura!', + ], + + 'database' => [ + 'hostname' => 'Nombre del servidor', + 'username' => 'Nombre de usuario', + 'password' => 'Contraseña', + 'name' => 'Base de datos', + ], + + 'settings' => [ + 'company_name' => 'Nombre de la empresa', + 'company_email' => 'Correo electrónico de la Empresa', + 'admin_email' => 'Correo electrónico del Administrador', + 'admin_password' => 'Contraseña de Administrador', + ], + + 'error' => [ + 'connection' => 'Error: No se pudo conectar a la base de datos! Por favor, asegúrese de que los datos son correctos.', + ], + +]; diff --git a/resources/lang/es-ES/invoices.php b/resources/lang/es-ES/invoices.php new file mode 100644 index 000000000..ed71a3bdb --- /dev/null +++ b/resources/lang/es-ES/invoices.php @@ -0,0 +1,37 @@ + 'Número de Factura', + 'invoice_date' => 'Fecha de Factura', + 'total_price' => 'Precio Total', + 'due_date' => 'Fecha de vencimiento', + 'order_number' => 'Nº Pedido', + 'bill_to' => 'Facturar a', + + 'quantity' => 'Cantidad', + 'price' => 'Precio', + 'sub_total' => 'Subtotal', + 'tax_total' => 'Total Impuestos', + 'total' => 'Total ', + + 'item_name' => 'Nombre del artículo | Nombres de artículo', + + 'payment_due' => 'Vencimiento de pago', + 'paid' => 'Pagado', + 'histories' => 'Historias', + 'payments' => 'Pagos', + 'add_payment' => 'Añadir pago', + 'download_pdf' => 'Descargar PDF', + 'send_mail' => 'Enviar Email', + + 'status' => [ + 'draft' => 'Borrador', + 'sent' => 'Enviado', + 'viewed' => 'Visto', + 'approved' => 'Aprobado', + 'partial' => 'Parcial', + 'paid' => 'Pagado', + ], + +]; diff --git a/resources/lang/es-ES/items.php b/resources/lang/es-ES/items.php new file mode 100644 index 000000000..8ee20578d --- /dev/null +++ b/resources/lang/es-ES/items.php @@ -0,0 +1,10 @@ + 'Cantidad | Cantidades', + 'sales_price' => 'Precio de Venta', + 'purchase_price' => 'Precio de Compra', + 'sku' => 'SKU', + +]; diff --git a/resources/lang/es-ES/messages.php b/resources/lang/es-ES/messages.php new file mode 100644 index 000000000..bbd1411ff --- /dev/null +++ b/resources/lang/es-ES/messages.php @@ -0,0 +1,17 @@ + [ + 'added' => ':type creado!', + 'updated' => ':type actualizado!', + 'deleted' => ':type borrado!', + ], + 'error' => [ + 'not_user_company' => 'Error: No tiene permisos para administrar esta empresa!', + ], + 'warning' => [ + 'deleted' => 'Advertencia: No puede borrar :type porque tiene :text', + ], + +]; diff --git a/resources/lang/es-ES/modules.php b/resources/lang/es-ES/modules.php new file mode 100644 index 000000000..a80184ce3 --- /dev/null +++ b/resources/lang/es-ES/modules.php @@ -0,0 +1,43 @@ + 'API Token', + 'api_token' => 'Token', + 'top_paid' => 'Top de pago', + 'new' => 'Nuevo', + 'top_free' => 'Top gratis', + 'free' => 'GRATIS', + 'install' => 'Instalar', + 'buy_now' => 'Comprar ahora', + 'faq' => 'Preguntas frecuentes', + 'changelog' => 'Historial de cambios', + 'installed' => 'Instalado', + 'uninstalled' => 'Desinstalado', + 'token_link' => 'Haga Click aquí para obtener su API token.', + + 'enabled' => ':module módulo habilitado', + 'disabled' => ':module módulo deshabilitado', + + 'installation' => [ + 'header' => 'Instalación del módulo', + 'start' => 'instalando :module .', + 'download' => 'Descargando archivo :module .', + 'unzip' => 'Extrayendo archivo :module .', + 'install' => 'Subiendo archivo :module .', + ], + + 'history' => [ + 'installed' => ':module instalado', + 'uninstalled' => ':module desinstalado', + 'updated' => ':module actualizado', + 'enabled' => ':module habilitado', + 'disabled' => ':module deshabilitado', + ], + + 'button' => [ + 'uninstall' => 'Desinstalar', + 'disable' => 'Deshabilitar', + 'enable' => 'Habilitar', + ], +]; diff --git a/resources/lang/es-ES/pagination.php b/resources/lang/es-ES/pagination.php new file mode 100644 index 000000000..e1dbac6d5 --- /dev/null +++ b/resources/lang/es-ES/pagination.php @@ -0,0 +1,9 @@ + '« Anterior', + 'next' => 'Siguiente »', + 'showing' => 'Mostrando :first a :last de :total :type', + +]; diff --git a/resources/lang/es-ES/passwords.php b/resources/lang/es-ES/passwords.php new file mode 100644 index 000000000..ba38b0f40 --- /dev/null +++ b/resources/lang/es-ES/passwords.php @@ -0,0 +1,22 @@ + 'Los passwords deben tener mínimo 6 caracteres y coincidir.', + 'reset' => 'Su contraseña ha sido reestablecida!', + 'sent' => 'Hemos enviado un enlace para resetear su contraseña!', + 'token' => 'Ese token de contraseña ya no es válido.', + 'user' => "No podemos encontrar un usuario con esa dirección de correo electrónico.", + +]; diff --git a/resources/lang/es-ES/reports.php b/resources/lang/es-ES/reports.php new file mode 100644 index 000000000..1b5b542f4 --- /dev/null +++ b/resources/lang/es-ES/reports.php @@ -0,0 +1,11 @@ + [ + 'income' => 'Resumen de Ingresos', + 'expense' => 'Resumen de Gastos', + 'income_expense' => 'Ingresos vs Gastos', + ], + +]; diff --git a/resources/lang/es-ES/roles.php b/resources/lang/es-ES/roles.php new file mode 100644 index 000000000..8b935d447 --- /dev/null +++ b/resources/lang/es-ES/roles.php @@ -0,0 +1,7 @@ + 'Todos los roles', + +]; diff --git a/resources/lang/es-ES/settings.php b/resources/lang/es-ES/settings.php new file mode 100644 index 000000000..00c8e3ecd --- /dev/null +++ b/resources/lang/es-ES/settings.php @@ -0,0 +1,85 @@ + [ + 'name' => 'Nombre', + 'email' => 'Correo electrónico', + 'phone' => 'Teléfono', + 'address' => 'Dirección', + 'logo' => 'Logo', + ], + 'localisation' => [ + 'tab' => 'Localización', + 'date' => [ + 'format' => 'Formato de Fecha', + 'separator' => 'Separador de fecha', + 'dash' => 'Guión (-)', + 'dot' => 'Punto (.)', + 'comma' => 'Coma (,)', + 'slash' => 'Barra (/)', + 'space' => 'Espacio ( )', + ], + 'timezone' => 'Zona horaria', + ], + 'invoice' => [ + 'tab' => 'Factura', + 'prefix' => 'Prefijo de Factura', + 'digit' => 'Dígitos del Nº de Factura', + 'start' => 'Número de Factura Inicial', + 'logo' => 'Logotipo de la factura', + ], + 'default' => [ + 'tab' => 'Por defecto', + 'account' => 'Cuenta Predeterminada', + 'currency' => 'Moneda Predeterminada', + 'tax' => 'Impuesto Predeterminado', + 'payment' => 'Método de pago Predeterminado', + 'language' => 'Idioma Predeterminado', + ], + 'email' => [ + 'protocol' => 'Protocolo', + 'php' => 'PHP Mail', + 'smtp' => [ + 'name' => 'SMTP', + 'host' => 'SMTP Host', + 'port' => 'Puerto SMTP', + 'username' => 'Nombre de usuario SMTP', + 'password' => 'Contraseña SMTP', + 'encryption' => 'Seguridad SMTP', + 'none' => 'Ninguna', + ], + 'sendmail' => 'Sendmail', + 'sendmail_path' => 'Ruta de acceso de sendmail', + 'log' => 'Registrar Correos', + ], + 'scheduling' => [ + 'tab' => 'Programación', + 'send_invoice' => 'Enviar Recordatorio de Factura', + 'invoice_days' => 'Enviar después del vencimiento', + 'send_bill' => 'Enviar Recordatorio de Factura', + 'bill_days' => 'Enviar Antes del Vencimiento', + 'cron_command' => 'Comando Cron', + 'schedule_time' => 'Hora de ejecución', + ], + 'appearance' => [ + 'tab' => 'Apariencia', + 'theme' => 'Tema', + 'light' => 'Claro', + 'dark' => 'Oscuro', + 'list_limit' => 'Registros por página', + 'use_gravatar' => 'Usar Gravatar', + ], + 'system' => [ + 'tab' => 'Sistema', + 'session' => [ + 'lifetime' => 'Duración de la sesión (minutos)', + 'handler' => 'Gestor de sesiones', + 'file' => 'Archivo', + 'database' => 'Base de datos', + ], + 'file_size' => 'Tamaño Máximo (MB)', + 'file_types' => 'Tipos de Archivo Permitidos', + ], + +]; diff --git a/resources/lang/es-ES/taxes.php b/resources/lang/es-ES/taxes.php new file mode 100644 index 000000000..7365b2ea5 --- /dev/null +++ b/resources/lang/es-ES/taxes.php @@ -0,0 +1,8 @@ + 'Tasa', + 'rate_percent' => 'Tasa (%)', + +]; diff --git a/resources/lang/es-ES/transfers.php b/resources/lang/es-ES/transfers.php new file mode 100644 index 000000000..900a5bf07 --- /dev/null +++ b/resources/lang/es-ES/transfers.php @@ -0,0 +1,8 @@ + 'De Cuenta', + 'to_account' => 'A Cuenta', + +]; diff --git a/resources/lang/es-ES/updates.php b/resources/lang/es-ES/updates.php new file mode 100644 index 000000000..9562b5df6 --- /dev/null +++ b/resources/lang/es-ES/updates.php @@ -0,0 +1,13 @@ + 'Versión instalada', + 'latest_version' => 'Última versión', + 'update' => 'Actualizar Akaunting a versión :version', + 'changelog' => 'Historial de cambios', + 'check' => 'Comprobar', + 'new_core' => 'Una versión actualizada de Akaunting está disponible.', + 'latest_core' => '¡Felicidades! Tienes la última versión de Akaunting. Las actualizaciones de seguridad futuras se aplicarán automáticamente.', + +]; diff --git a/resources/lang/es-ES/validation.php b/resources/lang/es-ES/validation.php new file mode 100644 index 000000000..386ef8f85 --- /dev/null +++ b/resources/lang/es-ES/validation.php @@ -0,0 +1,119 @@ + ':attribute debe ser aceptado.', + 'active_url' => ':attribute no es una URL correcta.', + 'after' => ':attribute debe ser posterior a :date.', + 'after_or_equal' => ':attribute debe ser posterior a :date.', + 'alpha' => ':attribute solo acepta letras.', + 'alpha_dash' => ':attribute solo acepta letras, números y guiones.', + 'alpha_num' => ':attribute solo acepta letras y números.', + 'array' => ':attribute debe ser un array.', + 'before' => ':attribute debe ser anterior a :date.', + 'before_or_equal' => ':attribute debe ser anterior o igual a :date.', + 'between' => [ + 'numeric' => ':attribute debe estar entre :min - :max.', + 'file' => ':attribute debe estar entre :min - :max kilobytes.', + 'string' => ':attribute debe estar entre :min - :max caracteres.', + 'array' => ':attribute debe tener entre :min y :max items.', + ], + 'boolean' => ':attribute debe ser verdadero o falso.', + 'confirmed' => ':attribute la confirmación no coincide.', + 'date' => ':attribute no es una fecha válida.', + 'date_format' => ':attribute no cumple el formato :format.', + 'different' => ':attribute y :other deben ser diferentes.', + 'digits' => ':attribute debe tener :digits dígitos.', + 'digits_between' => ':attribute debe tener entre :min y :max dígitos.', + 'dimensions' => ':attribute tiene dimensiones de imagen no válido.', + 'distinct' => ':attribute tiene un valor duplicado.', + 'email' => ':attribute debe ser una dirección de email válida.', + 'exists' => 'El :attribute seleccionado no es correcto.', + 'file' => ':attribute debe ser un archivo.', + 'filled' => ':attribute debe tener un valor.', + 'image' => ':attribute debe ser una imagen.', + 'in' => 'El :attribute seleccionado es inválido.', + 'in_array' => ':attribute no existe en :other.', + 'integer' => ':attribute debe ser un número entero.', + 'ip' => ':attribute debe ser una dirección IP válida.', + 'json' => ':attribute debe ser una cadena JSON válida.', + 'max' => [ + 'numeric' => ':attribute no debe ser mayor que :max.', + 'file' => ':attribute no debe ser mayor que :max kilobytes.', + 'string' => ':attribute no debe tener como máximo :max caracteres.', + 'array' => ':attribute no debe tener más de :max items.', + ], + 'mimes' => ':attribute debe ser un archivo del tipo: :values.', + 'mimetypes' => ':attribute debe ser un archivo del tipo: :values.', + 'min' => [ + 'numeric' => ':attribute debe ser como mínimo :min.', + 'file' => ':attribute debe ser como mínimo de :min kilobytes.', + 'string' => ':attribute debe contener como mínimo :min caracteres.', + 'array' => ':attribute debe contener como mínimo :min items.', + ], + 'not_in' => 'El :attribute seleccionado es inválido.', + 'numeric' => ':attribute debe ser un número.', + 'present' => ':attribute debe tener un valor.', + 'regex' => ':attribute tiene un formato incorrecto.', + 'required' => ':attribute es obligatorio.', + 'required_if' => ':attribute es obligatorio cuando :other es :value.', + 'required_unless' => ':attribute es obligatorio a menos que :other esté en :values.', + 'required_with' => ':attribute es obligatorio cuando :values está presente.', + 'required_with_all' => ':attribute es obligatorio cuando :values está presente.', + 'required_without' => ':attribute es obligatorio cuando :values no está presente.', + 'required_without_all' => ':attribute es obligatorio cuando ningún :values está presente.', + 'same' => ':attribute y :other deben coincidir.', + 'size' => [ + 'numeric' => ':attribute debe ser :size.', + 'file' => ':attribute debe tener :size kilobytes.', + 'string' => ':attribute debe tener :size caracteres.', + 'array' => ':attribute debe tener al menos :size items.', + ], + 'string' => ':attribute debe ser una cadena de caracteres.', + 'timezone' => ':attribute debe ser una zona válida.', + 'unique' => ':attribute ya ha sido introducido.', + 'uploaded' => ':attribute no se pudo cargar.', + 'url' => ':attribute tiene un formato incorrecto.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'mensaje personalizado', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/routes/web.php b/routes/web.php index 40239a628..6df387faa 100644 --- a/routes/web.php +++ b/routes/web.php @@ -133,6 +133,7 @@ Route::group(['middleware' => ['guest', 'language']], function () { }); Route::group(['prefix' => 'install'], function () { + Route::get('/', 'Install\Requirements@show'); Route::get('requirements', 'Install\Requirements@show'); Route::get('language', 'Install\Language@create');