= $relationPivotWidget->render() ?>
@@ -38,7 +38,7 @@
= $relationPivotWidget->render() ?>
diff --git a/modules/backend/controllers/Index.php b/modules/backend/controllers/Index.php
index 06d392dc6..fcb66108f 100644
--- a/modules/backend/controllers/Index.php
+++ b/modules/backend/controllers/Index.php
@@ -3,7 +3,6 @@
use BackendMenu;
use Backend\Classes\Controller;
use Backend\Widgets\ReportContainer;
-use Backend\Traits\InspectableContainer;
/**
* Dashboard controller
@@ -14,7 +13,7 @@ use Backend\Traits\InspectableContainer;
*/
class Index extends Controller
{
- use InspectableContainer;
+ use \Backend\Traits\InspectableContainer;
public $requiredPermissions = ['backend.access_dashboard'];
diff --git a/modules/backend/lang/es/lang.php b/modules/backend/lang/es/lang.php
new file mode 100644
index 000000000..bf1d2e4de
--- /dev/null
+++ b/modules/backend/lang/es/lang.php
@@ -0,0 +1,251 @@
+ [
+ 'invalid_type' => 'El tipo de campo utilizado es inválido :type.',
+ 'options_method_not_exists' => 'El modelo clase: model debe definir un método: method() opciones recurrentes para el ":field" desde campo.',
+ ],
+ 'widget' => [
+ 'not_registered' => "La clase del modulo ':name' no ha sido registrada",
+ 'not_bound' => "El módulo con la clase ':name' no se ha unido al controlador",
+ ],
+ 'page' => [
+ 'untitled' => "Sin título",
+ 'access_denied' => [
+ 'label' => "Acceso denegado",
+ 'help' => "No tiene permisos necesarios para ver esta página.",
+ 'cms_link' => "Volver al panel de administración",
+ ],
+ ],
+ 'partial' => [
+ 'not_found' => "El parcial ':name' no se encuentra.",
+ ],
+ 'account' => [
+ 'sign_out' => 'Desconectarse',
+ 'login' => 'Entrar',
+ 'reset' => 'Restablecer',
+ 'restore' => 'Restaurar',
+ 'login_placeholder' => 'usuario',
+ 'password_placeholder' => 'clave',
+ 'forgot_password' => "¿Olvidó su clave?",
+ 'enter_email' => "Ingrese su correo",
+ 'enter_login' => "Ingrese su usuario",
+ 'email_placeholder' => "correo",
+ 'enter_new_password' => "Ingrese una nueva clave",
+ 'password_reset' => "Restablecer la clave",
+ 'restore_success' => "Un correo electrónico ha sido enviado a su dirección con las instruciones para restablecer la contraseña.",
+ 'restore_error' => "No se ha encontrado el usuario ':login'",
+ 'reset_success' => "Su contraseña ha sido restablecido correctamente. Ahora puede iniciar sesión",
+ 'reset_error' => "La información para restablecer la contraseña no es valida. ¡Por favor, vuelva a intentarlo!",
+ 'reset_fail' => "¡No es posible restablecer la contraseña!",
+ 'apply' => 'Aplicar',
+ 'cancel' => 'Cancelar',
+ 'delete' => 'Borrar',
+ 'ok' => 'OK',
+ ],
+ 'dashboard' => [
+ 'menu_label' => 'Escritorio',
+ 'widget_label' => 'Módulo',
+ 'widget_width' => 'Ancho',
+ 'full_width' => 'Ancho completo',
+ 'add_widget' => 'Agregar un módulo',
+ 'widget_inspector_title' => 'Configuración del módulo',
+ 'widget_inspector_description' => 'Configuración del módulo de reporte',
+ 'widget_columns_label' => 'Ancho :columns',
+ 'widget_columns_description' => 'El ancho del módulo, número entre 1 y 10.',
+ 'widget_columns_error' => 'Por favor, ingrese un número entre 1 y 10 para el ancho del módulo.',
+ 'columns' => '{1} columna|[2,Inf] columnas',
+ 'widget_new_row_label' => 'Forzar nueva línea',
+ 'widget_new_row_description' => 'Insertar el módulo en una nueva fila.',
+ 'widget_title_label' => 'Título del módulo',
+ 'widget_title_error' => 'El título del módulo es obligatorio.',
+ 'status' => [
+ 'widget_title_default' => 'Estado del sistema',
+ 'online' => 'en línea',
+ 'update_available' => '{0} actualizaciones disponibles!|{1} actualización disponible!|[2,Inf] actualizaciones disponibles!',
+ ]
+ ],
+ 'user' => [
+ 'name' => 'Administrador',
+ 'menu_label' => 'Administradores',
+ 'menu_description' => 'Gestionar usuarios, grupos y permisos para el backend.',
+ 'list_title' => 'Gestionar administradores',
+ 'new' => 'Nuevo administrador',
+ 'login' => "Inicio de sesión",
+ 'first_name' => "Nombres",
+ 'last_name' => "Apellidos",
+ 'full_name' => "Nombre Completo",
+ 'email' => "Correo",
+ 'groups' => "Grupos",
+ 'groups_comment' => "Especifique a que grupo pertenece esta persona.",
+ 'avatar' => "Avatar",
+ 'password' => "Contraseña",
+ 'password_confirmation' => "Confirmar Contraseña",
+ 'superuser' => "Super Usuario",
+ 'superuser_comment' => "Marque esta casilla para permitir que esta persona tenga acceso a todas las áreas.",
+ 'send_invite' => 'Enviar invitación por correo electrónico',
+ 'send_invite_comment' => 'Usar esta opción para enviar una invitación al usuario por correo electrónico',
+ 'delete_confirm' => '¿Realmente desea eliminar este administrador?',
+ 'return' => 'Regresar a la lista de administradores',
+ 'allow' => 'Permitir',
+ 'inherit' => 'Heredar',
+ 'deny' => 'Denegar',
+ 'group' => [
+ 'name' => 'Grupos',
+ 'name_field' => 'Nombre',
+ 'menu_label' => 'Grupos',
+ 'list_title' => 'Gestionar Grupos',
+ 'new' => 'Nuevo Grupo de Administradores',
+ 'delete_confirm' => '¿Realmente desea eliminar este grupo de administrador?',
+ 'return' => 'Volver a la lista de grupos',
+ ],
+ 'preferences' => [
+ 'not_authenticated' => 'No existe un usuario autenticado para cargar o guardar las preferencias para.'
+ ]
+ ],
+ 'list' => [
+ 'default_title' => 'Lista',
+ 'search_prompt' => 'Buscar...',
+ 'no_records' => 'No hay registros en esta vista.',
+ 'missing_model' => 'El comportamiento de la lista utilizada en :class no tiene un modelo definido.',
+ 'missing_column' => 'No hay definiciones de columna para :columns.',
+ 'missing_columns' => 'List used in :class has no list columns defined.',
+ 'missing_definition' => "List behavior does not contain a column for ':field'.",
+ 'behavior_not_ready' => 'List behavior has not been initialized, check that you have called makeLists() in your controller.',
+ 'invalid_column_datetime' => "Column value ':column' is not a DateTime object, are you missing a \$dates reference in the Model?",
+ 'pagination' => 'Registros visualizados: :from-:to of :total',
+ 'prev_page' => 'Página anterior',
+ 'next_page' => 'Página siguiente',
+ 'loading' => 'Cargando...',
+ 'setup_title' => 'Configurar lista',
+ 'setup_help' => 'Utilice las casillas de verificación para seleccionar las columnas que desea ver en la lista. Usted puede cambiar la posición de las columnas arrastrándolas arriba o hacia abajo.',
+ 'records_per_page' => 'Registros por página',
+ 'records_per_page_help' => 'Seleccione el número de registros por página para mostrar. Tenga en cuenta que un número alto de registros en una sola página puede reducir el rendimiento.'
+ ],
+ 'fileupload' => [
+ 'attachment' => 'Adjunto',
+ 'help' => 'Agregue un título y descripción al adjunto',
+ 'title_label' => 'Título',
+ 'description_label' => 'Descripción'
+ ],
+ 'form' => [
+ 'create_title' => "Nuevo :name",
+ 'update_title' => "Editar :name",
+ 'preview_title' => "Vista previa de :name",
+ 'create_success' => ':name ha sido creado con éxito',
+ 'update_success' => ':name ha sido actualizado con éxito',
+ 'delete_success' => ':name ha sido borrado con éxito',
+ 'missing_id' => "No se ha especificado el identificador del registro de formulario.",
+ 'missing_model' => 'Form behavior used in :class does not have a model defined.',
+ 'missing_definition' => "Form behavior does not contain a field for ':field'.",
+ 'not_found' => 'Form record with an ID of :id could not be found.',
+ 'create' => 'Crear',
+ 'create_and_close' => 'Crear y cerrar',
+ 'create_and_add_new' => 'Crear y agregar otro',
+ 'creating' => 'Creando ...',
+ 'save' => 'Guardar',
+ 'save_and_close' => 'Guardar y cerrar',
+ 'saving' => 'Guardando ...',
+ 'delete' => 'Borrar',
+ 'deleting' => 'Borrando ...',
+ 'undefined_tab' => 'Misc',
+ 'field_off' => 'Apagado',
+ 'field_on' => 'Encendido',
+ 'add' => 'Agregar',
+ 'apply' => 'Aplicar',
+ 'cancel' => 'Cancelar',
+ 'close' => 'Cerrar',
+ 'ok' => 'OK',
+ 'or' => 'o',
+ 'confirm_tab_close' => '¿Realmente desea cerrar la pestaña? Se perderán los cambios no guardados.',
+ 'behavior_not_ready' => 'El comportamiento del formulario no se ha inicializado, compruebe que ha llamado initForm() en el controlador.',
+ 'preview_no_files_message' => 'Los archivos no se han subido',
+ 'select' => 'Seleccionar',
+ 'select_all' => 'todos',
+ 'select_none' => 'ninguno',
+ 'select_placeholder' => 'por favor seleccione',
+ 'insert_row' => 'Agregar Fila',
+ 'delete_row' => 'Borrar Fila'
+ ],
+ 'relation' => [
+ 'missing_definition' => "Relación comportamiento no contiene una definición para ':field'.",
+ 'missing_model' => "Relación comportamiento utilizado en :class no tiene un modelo definido.",
+ 'invalid_action_single' => "Esta acción no se puede realizar en una relación singular.",
+ 'invalid_action_multi' => "Esta acción no se puede realizar en una relación múltiple.",
+ 'help' => "Haga clic en un elemento para añadir.",
+ 'related_data' => "Relacionar :name datos",
+ 'add' => "Agregar",
+ 'add_selected' => "Agregar seleccionado",
+ 'add_a_new' => "Agregar un nuevo :name",
+ 'cancel' => "Cancelar",
+ 'add_name' => "Agregar :name",
+ 'create' => "Crear",
+ 'create_name' => "Crear :name",
+ 'update' => "Actualizar",
+ 'update_name' => "Actualizar :name",
+ 'remove' => "Remover",
+ 'remove_name' => "Remover :name",
+ 'delete' => "Borrar",
+ 'delete_name' => "Borrar :name",
+ 'delete_confirm' => "¿Está usted seguro?",
+ ],
+ 'model' => [
+ 'name' => "Modelo",
+ 'not_found' => "Modelo ':class' con el ID :id no se pudo encontrar",
+ 'missing_id' => "No se ha especificado un ID para encontrar el modelo guardado.",
+ 'missing_relation' => "Modelo ':class' no contiene una definición para ':relation'.",
+ 'invalid_class' => "Modelo :model utilizado en :class no es váildo, este debería heredar la clase del \Model.",
+ 'mass_assignment_failed' => "Asignación masiva falló para el atributo del Modelo ':attribute'.",
+ ],
+ 'warnings' => [
+ 'tips' => 'Consejos de configuración del sistema',
+ 'tips_description' => 'Hay problemas que necesitan de su atención para configurar el sistema correctamente.',
+ 'permissions' => 'Directorio :name o los subdirectorios no se puede escribir por PHP. Por favor establecer los permisos correctos para el servidor web en este directorio.',
+ 'extension' => 'La extensión PHP :name no está instalada. Por favor instalar esta librería y activar la extensión.'
+ ],
+ 'editor' => [
+ 'menu_label' => 'Preferencias del Editor de Código',
+ 'menu_description' => 'Configurar las preferencias del editor de código, como el tamaño de la letra y el color del esquema.',
+ 'font_size' => 'Tamaño de la letra',
+ 'tab_size' => '>Tamaño de la Solapa',
+ 'use_hard_tabs' => 'Espacio entre solapas',
+ 'code_folding' => 'Código Plegable',
+ 'word_wrap' => 'Ajuste de línea',
+ 'highlight_active_line' => 'Resaltar línea activa',
+ 'show_invisibles' => 'Mostrar caracteres invisibles',
+ 'show_gutter' => 'Mostrar canal',
+ 'theme' => 'Color del esquema',
+ ],
+ 'tooltips' => [
+ 'preview_website' => 'Vista previa del sitio'
+ ],
+ 'mysettings' => [
+ 'menu_label' => 'Mis configuraciones',
+ 'menu_description' => 'Configuraciones relacionadas con su cuenta',
+ ],
+ 'myaccount' => [
+ 'menu_label' => 'Mi Cuenta',
+ 'menu_description' => 'Actualice la información de su cuenta, como nombre, dirección de correo electrónico y contraseña.',
+ 'menu_keywords' => 'security login'
+ ],
+ 'backend_preferences' => [
+ 'menu_label' => 'Preferencias del panel de administración',
+ 'menu_description' => 'Gestione la preferencia de idioma y la apariencia del panel.',
+ 'locale' => 'Idioma',
+ 'locale_comment' => 'Seleccione su localización deseada para el uso del idioma.',
+ ],
+ 'access_log' => [
+ 'hint' => 'Este registro muestra la lista de ingresos al panel de administración. Los registros se mantienen por un total de :days días.',
+ 'menu_label' => 'Registro de acceso',
+ 'menu_description' => 'Ver registro de ingresos al panel de administracion.',
+ 'created_at' => 'Fecha y hora',
+ 'login' => 'Acceso',
+ 'ip_address' => 'IP',
+ 'first_name' => 'Nombre',
+ 'last_name' => 'Apellido',
+ 'email' => 'Email',
+ ],
+ 'filter' => [
+ 'all' => 'Todo'
+ ]
+ ];
diff --git a/modules/backend/lang/fa/lang.php b/modules/backend/lang/fa/lang.php
index 4ca8d61c8..e41fd5cb2 100644
--- a/modules/backend/lang/fa/lang.php
+++ b/modules/backend/lang/fa/lang.php
@@ -1,6 +1,9 @@
[
+ 'title' => 'بخش مدیریت',
+ ],
'field' => [
'invalid_type' => 'نوع فیلد :type نا معتبر می باشد.',
'options_method_not_exists' => 'کلاس مدل :model باید شامل متد :method() باشد و گزینه های مورد نیاز ":field" را بازگرداند.',
@@ -139,14 +142,18 @@ return [
'missing_model' => 'مدلی برای فرن تعریف شده در کلاس :class مشخص نشده است.',
'missing_definition' => "فرم مورد نظر شامل فیلدی برای ':field' نمی باشد.",
'not_found' => 'فرمی با مشخصه :id یافت نشد.',
+ 'action_confirm' => "آیا اطمینان دارید؟",
'create' => 'ایجاد',
'create_and_close' => 'ایجاد و خروج',
'creating' => 'در حال ایجاد...',
+ 'creating_name' => 'درحال ایجاد :name...',
'save' => 'ذخیره',
'save_and_close' => 'ذخیره و خروج',
'saving' => 'در حال ذخیره...',
+ 'saving_name' => 'درحال ذخیره :name...',
'delete' => 'حذف',
'deleting' => 'در حال حذف...',
+ 'deleting_name' => 'درحال حذف :name...',
'undefined_tab' => 'متفرقه',
'field_off' => 'خاموش',
'field_on' => 'روشن',
@@ -154,6 +161,8 @@ return [
'apply' => 'اعمال',
'cancel' => 'انصراف',
'close' => 'خروج',
+ 'confirm' => 'تایید',
+ 'reload' => 'بارگذاری مجدد',
'ok' => 'تایید',
'or' => 'یا',
'confirm_tab_close' => 'در صورت بستن این پنجره موارد ذخیره نشده از بین خواهند رفت. آیا از حذف شدن این پنجره اطمینان دارید؟',
@@ -165,9 +174,8 @@ return [
'select_placeholder' => 'لطفا انتخاب نمایید',
'insert_row' => 'افزودن سطر',
'delete_row' => 'حذف سطر',
- 'concurrency-file-changed-title' => 'فایل تغییر کرد',
- 'concurrency-file-changed-description' => 'فایلی که شما ویرایش کردید توسط کاربر دیگری تغییر یافته و ذخیره شده است. شما میتوانید فایل را مجددا بارگذاری نمایید و تغییراتی که اعمال کرده اید را از دست بدهید و یا تغییرات اعمال شده توسط آن کاربر را بین برده و فایل را بازنویسی نمایید.',
- 'reload' => 'بارگذاری مجدد',
+ 'concurrency_file_changed_title' => 'فایل تغییر کرد',
+ 'concurrency_file_changed_description' => 'فایلی که شما ویرایش کردید توسط کاربر دیگری تغییر یافته و ذخیره شده است. شما میتوانید فایل را مجددا بارگذاری نمایید و تغییراتی که اعمال کرده اید را از دست بدهید و یا تغییرات اعمال شده توسط آن کاربر را بین برده و فایل را بازنویسی نمایید.',
],
'relation' => [
'missing_definition' => "در ارتباط مورد نظر فیلد ':field' وجود ندارد.",
@@ -230,6 +238,10 @@ return [
'menu_description' => 'به روز رسانی اطلاعات حساب کار بری شما مانند نام و کلمه عبور و ... .',
'menu_keywords' => 'ورود امن'
],
+ 'branding' => [
+ 'menu_label' => 'شخصی سازی بخش مدیریت',
+ 'menu_description' => 'شخصی سازی بخش مدیریت مانند نام، رنگ ها و لوگو.',
+ ],
'backend_preferences' => [
'menu_label' => 'تنظیمات مدیریت',
'menu_description' => 'تنظیمات مربوط به زبان مربوط به قسمت مدیریت.',
@@ -253,4 +265,4 @@ return [
'layout' => [
'direction' => 'rtl'
]
-];
+];
\ No newline at end of file
diff --git a/modules/backend/models/BackendPreferences.php b/modules/backend/models/BackendPreferences.php
index d747047f2..752e50f22 100644
--- a/modules/backend/models/BackendPreferences.php
+++ b/modules/backend/models/BackendPreferences.php
@@ -51,6 +51,7 @@ class BackendPreferences extends Model
'es-ar' => [Lang::get('system::lang.locale.es-ar'), 'flag-ar'],
'pt-br' => [Lang::get('system::lang.locale.pt-br'), 'flag-br'],
'fa' => [Lang::get('system::lang.locale.fa'), 'flag-ir'],
+ 'es' => [Lang::get('system::lang.locale.es'), 'flag-es'],
];
// Sort locales alphabetically
diff --git a/modules/backend/widgets/Toolbar.php b/modules/backend/widgets/Toolbar.php
index 7305675f0..5e235fa97 100644
--- a/modules/backend/widgets/Toolbar.php
+++ b/modules/backend/widgets/Toolbar.php
@@ -43,10 +43,12 @@ class Toolbar extends WidgetBase
*/
if (isset($this->config->search)) {
- $searchConfig = $this->makeConfig($this->config->search);
if (is_string($this->config->search)) {
$searchConfig = $this->makeConfig(['partial' => $this->config->search]);
}
+ else {
+ $searchConfig = $this->makeConfig($this->config->search);
+ }
$searchConfig->alias = $this->alias . 'Search';
$this->searchWidget = $this->makeWidget('Backend\Widgets\Search', $searchConfig);
diff --git a/modules/cms/classes/CmsCompoundObject.php b/modules/cms/classes/CmsCompoundObject.php
index a28613ed2..a086ce4a4 100644
--- a/modules/cms/classes/CmsCompoundObject.php
+++ b/modules/cms/classes/CmsCompoundObject.php
@@ -223,7 +223,7 @@ class CmsCompoundObject extends CmsObject
}
if ($this->code) {
- if ($this->wrapCodeToPhpTags() && $this->originalData['code'] != $this->code) {
+ if ($this->wrapCodeToPhpTags() && array_get($this->originalData, 'code') != $this->code) {
$code = preg_replace('/^\<\?php/', '', $this->code);
$code = preg_replace('/^\<\?/', '', $code);
$code = preg_replace('/\?>$/', '', $code);
diff --git a/modules/cms/lang/es/lang.php b/modules/cms/lang/es/lang.php
new file mode 100644
index 000000000..3e8c6e515
--- /dev/null
+++ b/modules/cms/lang/es/lang.php
@@ -0,0 +1,170 @@
+ [
+ 'invalid_file' => 'Nombre inválido del archivo: :name. El nombre del archivo debe contener solamente caracteres alfanuméricos, guiones bajos, barras y puntos. Algunos ejemplos de nombres correctos son: archivo.htm, archivo, subdirectorio/archivo',
+ 'invalid_property' => 'La propiedad ":name" no puede establecerse',
+ 'file_already_exists' => 'Archivo ":name" ya existe.',
+ 'error_saving' => 'Error guardando archivo ":name". Por favor revisar los permisos de escritura.',
+ 'error_creating_directory' => 'Error creando el directorio :name. Por favor revisar los permisos de escritura.',
+ 'invalid_file_extension' => 'Extensión de archivo inválida: :invalid. Las extensiones permitidas son: :allowed.',
+ 'error_deleting' => 'Error borrando el archivo template ":name". Por favor revisar los permisos de escritura.',
+ 'delete_success' => 'Los templates fueron borrados exitosamente: :count.',
+ 'file_name_required' => 'Falta el nombre del campo del archivo.'
+ ],
+ 'theme' => [
+ 'active' => [
+ 'not_set' => "El tema activo no se ha establecido.",
+ 'not_found' => "El tema activo no se encuentra.",
+ ],
+ 'edit' => [
+ 'not_set' => "El tema de edición no se ha establecido.",
+ 'not_found' => "El tema de edición no se encuentra.",
+ 'not_match' => "El objeto que está intentando acceder no pertenece al tema que se está editando. Vuelve a cargar la página."
+ ],
+ 'settings_menu' => 'Plantilla',
+ 'settings_menu_description' => 'Vista previa de la lista de las plantillas instaladas.',
+ 'find_more_themes' => 'Busque más Plantillas',
+ 'activate_button' => 'Activar',
+ 'active_button' => 'Activar',
+ ],
+ 'page' => [
+ 'not_found' => [
+ 'label' => "Página no encontrada",
+ 'help' => "La página solicitada no se puede encontrar.",
+ ],
+ 'custom_error' => [
+ 'label' => "Error de página",
+ 'help' => "Lo sentimos, ha ocurrido un error y la página no se puede mostrar.",
+ ],
+ 'menu_label' => 'Páginas',
+ 'no_list_records' => 'No se encontraron páginas',
+ 'new' => 'Nueva página',
+ 'invalid_url' => 'Formato de URL inválido. El URL debe comenzar con el símbolo de barra diagonal y puede contener dígitos, letras latinas y los siguientes símbolos: _-[]:?|/+*',
+ 'delete_confirm_multiple' => '¿Realmente quiere eliminar las páginas seleccionadas?',
+ 'delete_confirm_single' => '¿Realmente quieres eliminar esta página?',
+ 'no_layout' => '-- ninguna disposición --'
+ ],
+ 'layout' => [
+ 'not_found' => "El diseño ':name' no se encuentra",
+ 'menu_label' => 'Diseños',
+ 'no_list_records' => 'No se ecnontraron diseños',
+ 'new' => 'Nuevo diseño',
+ 'delete_confirm_multiple' => 'Realmente quiere borrar los diseños seleccionados?',
+ 'delete_confirm_single' => 'Realmente quiere borrar este diseño?'
+ ],
+ 'partial' => [
+ 'invalid_name' => "Nombre parcial inválido: :name.",
+ 'not_found' => "El nombre parcial ':name' no se encuentra.",
+ 'menu_label' => 'Parciales',
+ 'no_list_records' => 'No se encontraron parciales',
+ 'delete_confirm_multiple' => 'Realmente quiere borrar los parciales seleccionados?',
+ 'delete_confirm_single' => 'Realmente quiere borrar este parcial?',
+ 'new' => 'Nuevo parcial'
+ ],
+ 'content' => [
+ 'not_found' => "El contenido del archivo ':name' no se encuentra.",
+ 'menu_label' => 'Contenido',
+ 'no_list_records' => 'No se encuentra el conteinod de los archivos',
+ 'delete_confirm_multiple' => 'Realmente desea borrar los contenidos seleccionados de los archivos o directorios?',
+ 'delete_confirm_single' => 'Realmente desea borrar el contenido de este archivo?',
+ 'new' => 'Nuevo contenido de archivo'
+ ],
+ 'ajax_handler' => [
+ 'invalid_name' => "Manejador de AJAX inválido: :name.",
+ 'not_found' => "El manejador de AJAX ':name' no se encuentra.",
+ ],
+ 'cms' => [
+ 'menu_label' => "Gestión"
+ ],
+ 'sidebar' => [
+ 'add' => 'Agregar',
+ 'search' => 'Buscar...'
+ ],
+ 'editor' => [
+ 'settings' => 'Configuración',
+ 'title' => 'Título',
+ 'new_title' => 'Nuevo título de la página',
+ 'url' => 'URL',
+ 'filename' => 'Nombre del archivo',
+ 'layout' => 'Disposición',
+ 'description' => 'Descripción',
+ 'preview' => 'Vista previa',
+ 'meta' => 'Meta',
+ 'meta_title' => 'Meta Título',
+ 'meta_description' => 'Meta Descripción',
+ 'markup' => 'Marcado',
+ 'code' => 'Código',
+ 'content' => 'Contenido',
+ 'hidden' => 'Oculto',
+ 'hidden_comment' => 'A las páginas ocultas solamente pueden acceder los usuarios del back-end que se encuentren logueados.',
+ 'enter_fullscreen' => 'Ingresar en el modo pantalla completa',
+ 'exit_fullscreen' => 'Salir de pantalla completa'
+ ],
+ 'asset' => [
+ 'menu_label' => "Assets",
+ 'drop_down_add_title' => 'Add...',
+ 'drop_down_operation_title' => 'Action...',
+ 'upload_files' => 'Upload file(s)',
+ 'create_file' => 'Create file',
+ 'create_directory' => 'Create directory',
+ 'directory_popup_title' => 'Nuevo directorio',
+ 'directory_name' => 'Nombre del directorio',
+ 'rename' => 'Renombrar',
+ 'delete' => 'Borrar',
+ 'move' => 'Mover',
+ 'select' => 'Seleccionar',
+ 'new' => 'Nuevo archivo',
+ 'rename_popup_title' => 'Renombrar',
+ 'rename_new_name' => 'Nuevo nombre',
+ 'invalid_path' => 'El path solamente puede contener dígitos, letras, espacios y los símbolos siguientes: ._-/',
+ 'error_deleting_file' => 'Error al borrar el archivo :name.',
+ 'error_deleting_dir_not_empty' => 'Error borrando el directorio :name. El directorio no está vacío.',
+ 'error_deleting_dir' => 'Error borrando el archivo :name.',
+ 'invalid_name' => 'El nombre solamente puede contener dígitos, letras, espacios y los símbolos siguientes: ._-',
+ 'original_not_found' => 'El archivo o directorio original no se encuentra',
+ 'already_exists' => 'Un archivo o directorio con este nombre ya existe',
+ 'error_renaming' => 'Error renombrando el archivo o directorio',
+ 'name_cant_be_empty' => 'El nombre no puede estar vacío',
+ 'too_large' => 'El archivo subido es demasiado pesado. El tamaño máximo permitido es :max_size',
+ 'type_not_allowed' => 'Solamente los siguientes tipos de archivos están permitidos: :allowed_types',
+ 'file_not_valid' => 'El archivo no es válido',
+ 'error_uploading_file' => 'Error subiendo el archivo ":name": :error',
+ 'move_please_select' => 'por favor seleccionar',
+ 'move_destination' => 'Directorio destino',
+ 'move_popup_title' => 'Mover los títulos emergentes',
+ 'move_button' => 'Mover',
+ 'selected_files_not_found' => 'Los archivos seleccionados no se encuentran',
+ 'select_destination_dir' => 'Por favor seleccione un directorio destino',
+ 'destination_not_found' => 'El directorio destino no se encuentra',
+ 'error_moving_file' => 'Error moviendo archivo :file',
+ 'error_moving_directory' => 'Error moviendo el directorio :dir',
+ 'error_deleting_directory' => 'Error borrando el directorio original :dir',
+ 'path' => 'Path'
+ ],
+ 'component' => [
+ 'menu_label' => "Componentes",
+ 'unnamed' => "Sin nombre",
+ 'no_description' => "No se proporciona descripción",
+ 'alias' => "Alias",
+ 'alias_description' => "Se le ha asignado un nombre único a este componente cuando se lo utilizaba en la página o en el código de disposición.",
+ 'validation_message' => "El componente alias es requerido y puede contener solamente letras, números y guión bajo. El alias debe empezar con una letra.",
+ 'invalid_request' => "La plantilla no puede ser guardada porque tiene datos inválidos.",
+ 'no_records' => 'No se encontraron componentes',
+ 'not_found' => "El componente ':name' no se encuentra.",
+ 'method_not_found' => "El componente ':name' no contiene un método ':method'.",
+ ],
+ 'template' => [
+ 'invalid_type' => "Tipo de plantilla Desconocido.",
+ 'not_found' => "No se encontró la plantilla solicitada.",
+ 'saved' => "La plantilla se ha guardado correctamente."
+ ],
+ 'permissions' => [
+ 'manage_content' => 'Gestionar contenido',
+ 'manage_assets' => 'Gestionar archivos',
+ 'manage_pages' => 'Gestionar páginas',
+ 'manage_layouts' => 'Gestionar diseños',
+ 'manage_partials' => 'Gestionar parciales',
+ 'manage_themes' => 'Gestionar plantilla'
+ ]
+ ];
diff --git a/modules/cms/twig/DebugExtension.php b/modules/cms/twig/DebugExtension.php
index d6982bf95..d0c79de1e 100644
--- a/modules/cms/twig/DebugExtension.php
+++ b/modules/cms/twig/DebugExtension.php
@@ -12,6 +12,7 @@ use October\Rain\Database\Model;
class DebugExtension extends Twig_Extension
{
const PAGE_CAPTION = 'Page variables';
+ const ARRAY_CAPTION = 'Array variables';
const OBJECT_CAPTION = 'Object variables';
const COMPONENT_CAPTION = 'Component variables';
@@ -87,6 +88,7 @@ class DebugExtension extends Twig_Extension
$count = func_num_args();
if ($count == 2) {
+
$this->variablePrefix = true;
$vars = [];
foreach ($context as $key => $value) {
@@ -96,16 +98,25 @@ class DebugExtension extends Twig_Extension
}
$result .= $this->dump($vars, static::PAGE_CAPTION);
+
} else {
+
$this->variablePrefix = false;
for ($i = 2; $i < $count; $i++) {
+
$var = func_get_arg($i);
- $caption = $var instanceof ComponentBase
- ? static::COMPONENT_CAPTION
- : static::OBJECT_CAPTION;
+
+ if ($var instanceof ComponentBase) {
+ $caption = [static::COMPONENT_CAPTION, get_class($var)];
+ } elseif (is_array($var)) {
+ $caption = static::ARRAY_CAPTION;
+ } else {
+ $caption = [static::OBJECT_CAPTION, get_class($var)];
+ }
$result .= $this->dump($var, $caption);
}
+
}
return $result;
@@ -125,7 +136,7 @@ class DebugExtension extends Twig_Extension
* Dump information about a variable
*
* @param mixed $variable Variable to dump
- * @param string $caption Caption of the dump
+ * @param mixed $caption Caption [and subcaption] of the dump
* @return void
*/
public function dump($variables = null, $caption = null)
@@ -163,14 +174,25 @@ class DebugExtension extends Twig_Extension
/**
* Builds the HTML used for the table header.
- * @param string $caption
+ * @param mixed $caption Caption [and subcaption] of the dump
* @return string
*/
protected function makeTableHeader($caption)
{
+ if (is_array($caption)) {
+ list($caption, $subcaption) = $caption;
+ }
+
$output = [];
$output[] = '
';
- $output[] = '| '.$caption.'';
+ $output[] = ' | ';
+ $output[] = $caption;
+
+ if (isset($subcaption)) {
+ $output[] = ' '.$subcaption.' ';
+ }
+
+ $output[] = '';
$output[] = ' |
';
return implode(PHP_EOL, $output);
}
@@ -499,6 +521,24 @@ class DebugExtension extends Twig_Extension
]);
}
+ /**
+ * Get the CSS string for the output subheader
+ *
+ * @return string
+ */
+ protected function getSubheaderCss()
+ {
+ return $this->arrayToCss([
+ 'font-size' => '12px',
+ 'font-weight' => 'normal',
+ 'font-style' => 'italic',
+ 'margin' => '0',
+ 'padding' => '0',
+ 'background-color' => '#7B8892',
+ 'color' => '#FFF',
+ ]);
+ }
+
/**
* Convert a key/value pair array into a CSS string
*
diff --git a/modules/system/ServiceProvider.php b/modules/system/ServiceProvider.php
index 7b205999b..85f38db1b 100644
--- a/modules/system/ServiceProvider.php
+++ b/modules/system/ServiceProvider.php
@@ -178,7 +178,7 @@ class ServiceProvider extends ModuleServiceProvider
BackendMenu::registerCallback(function ($manager) {
$manager->registerMenuItems('October.System', [
'system' => [
- 'label' => 'system::lang.system.menu_label',
+ 'label' => 'system::lang.settings.menu_label',
'icon' => 'icon-cog',
'url' => Backend::url('system/settings'),
'permissions' => ['backend.manage_users', 'system.*'],
diff --git a/modules/system/assets/js/framework.extras.js b/modules/system/assets/js/framework.extras.js
index 68a886896..35ec88167 100644
--- a/modules/system/assets/js/framework.extras.js
+++ b/modules/system/assets/js/framework.extras.js
@@ -65,17 +65,22 @@
// ==============
$(document)
- .on('ajaxPromise', '[data-request]', function() {
+ .on('ajaxPromise', '[data-request]', function(event) {
+ // Prevent this event from bubbling up to a non-related data-request
+ // element, for example a