From d76a3a61dfea246b773e1fc2cdf9549366a5796e Mon Sep 17 00:00:00 2001 From: Klocus Date: Tue, 10 Apr 2018 17:51:13 +0200 Subject: [PATCH] Add Spanish language --- docs/es.md | 1345 +++++++++++++++++ inc/jscripts/wysiwyg/lang/es_spanish.js | 155 ++ inc/lang/es_spanish/admin/general.ini | 34 + inc/modules/blog/lang/admin/es_spanish.ini | 84 + inc/modules/blog/lang/es_spanish.ini | 40 + .../carousel/lang/admin/es_spanish.ini | 2 + inc/modules/contact/lang/admin/es_spanish.ini | 21 + inc/modules/contact/lang/es_spanish.ini | 10 + .../dashboard/lang/admin/es_spanish.ini | 6 + inc/modules/devbar/lang/admin/es_spanish.ini | 2 + .../galleries/lang/admin/es_spanish.ini | 28 + .../langswitcher/lang/admin/es_spanish.ini | 3 + inc/modules/modules/lang/admin/es_spanish.ini | 40 + .../navigation/lang/admin/es_spanish.ini | 22 + inc/modules/pages/lang/admin/es_spanish.ini | 21 + inc/modules/pages/lang/es_spanish.ini | 1 + inc/modules/sample/lang/admin/es_spanish.ini | 6 + inc/modules/sample/lang/es_spanish.ini | 2 + .../searchbox/lang/admin/es_spanish.ini | 2 + inc/modules/searchbox/lang/es_spanish.ini | 4 + .../settings/lang/admin/es_spanish.ini | 71 + inc/modules/sitemap/lang/admin/es_spanish.ini | 2 + .../snippets/lang/admin/es_spanish.ini | 12 + .../statistics/lang/admin/es_spanish.ini | 27 + inc/modules/users/lang/admin/es_spanish.ini | 23 + 25 files changed, 1963 insertions(+) create mode 100644 docs/es.md create mode 100644 inc/jscripts/wysiwyg/lang/es_spanish.js create mode 100644 inc/lang/es_spanish/admin/general.ini create mode 100644 inc/modules/blog/lang/admin/es_spanish.ini create mode 100644 inc/modules/blog/lang/es_spanish.ini create mode 100644 inc/modules/carousel/lang/admin/es_spanish.ini create mode 100644 inc/modules/contact/lang/admin/es_spanish.ini create mode 100644 inc/modules/contact/lang/es_spanish.ini create mode 100644 inc/modules/dashboard/lang/admin/es_spanish.ini create mode 100644 inc/modules/devbar/lang/admin/es_spanish.ini create mode 100644 inc/modules/galleries/lang/admin/es_spanish.ini create mode 100644 inc/modules/langswitcher/lang/admin/es_spanish.ini create mode 100644 inc/modules/modules/lang/admin/es_spanish.ini create mode 100644 inc/modules/navigation/lang/admin/es_spanish.ini create mode 100644 inc/modules/pages/lang/admin/es_spanish.ini create mode 100644 inc/modules/pages/lang/es_spanish.ini create mode 100644 inc/modules/sample/lang/admin/es_spanish.ini create mode 100644 inc/modules/sample/lang/es_spanish.ini create mode 100644 inc/modules/searchbox/lang/admin/es_spanish.ini create mode 100644 inc/modules/searchbox/lang/es_spanish.ini create mode 100644 inc/modules/settings/lang/admin/es_spanish.ini create mode 100644 inc/modules/sitemap/lang/admin/es_spanish.ini create mode 100644 inc/modules/snippets/lang/admin/es_spanish.ini create mode 100644 inc/modules/statistics/lang/admin/es_spanish.ini create mode 100644 inc/modules/users/lang/admin/es_spanish.ini diff --git a/docs/es.md b/docs/es.md new file mode 100644 index 0000000..faea84c --- /dev/null +++ b/docs/es.md @@ -0,0 +1,1345 @@ +General +======= + +Batflat es un sistema de gestión de contenidos simple, ligero y rápido polaco. Fue publicado por primera vez en mayo de 2016. La versión gratuita está compartida bajo [license](/license) que exige deja información sobre los autores y enlaces de referencia. Batflat funciona genial para la creación de sitios pequeños tales como presentaciones de negocios, portfolios, blogs o páginas de inicio. Con esta documentaciń aprenderás cómo instalar, configurar y crear tus propios módulos y temas. + +La documentación está dividida en varias secciones. La primera es para instrucciones generales, la segunda para diseñadores web, y las dos últimas para desarrolladores web. + + +Prerrequisitos +-------------- + +Los prerrequisitos de sistema para Batflat son modestos ya que todos los modernos servidores pueden proporcionarlos. + ++ Apache 2.2+ con `mod_rewrite` ++ PHP version 5.5+ ++ Accesso a SQLite + +La configuración de PHP debe tener las extensiones siguientes : + ++ dom ++ gd ++ mbstring ++ pdo ++ zip ++ cURL + + +Instalación +------------ + +En primer lugar, descargar la última versión de [Batflat](http://feed.sruu.pl/batflat/download/latest). + +Extraer todos los ficheros del paquete comprimido y colocarlo en el directorio local o del servidor remoto deseado. En el caso de un servidor remoto, conectar vía cliente (S)FTP, como el programa gratuito de [FileZilla](https://filezilla-project.org). Habitualmente los ficheros suelen ser subidos a carpetas llamadas `www`, `htdocs` o `public_html`. + +**¡AVISO!** Asegúrese de que el fichero `.htaccess` está también en el servidor. Sin él el CMS no funcionará. + +Algunos servidores pueden necesitar de permisos adicionales como `chmod 777` para los siguiente directorios y ficheros: + ++ tmp/ ++ uploads/ ++ admin/tmp/ ++ inc/data/ ++ inc/data/database.sdb + +Abra su navegador y localice la dirección donde los ficheros de Batflat están alojados. Debería ver una plantilla por defecto con contenido de ejemplo. + +Vaya al panel de administración añadiendo `/admin/` al final de la URL. **El usuario y la contraseña iniciales son *"admin"*.** Debería cambiarlos justo despues que haya accedido por razones de seguridad. También recomendamos renombrar el directorio del panel de administración. *(necesitará cambiar el valor de la constante en el fichero de definiciones)*. + + +Configuración +------------- + +CMS puede configurarse modificando los parámetros del panel de administración o mediante el fichero de definiciones. Aunque, no recomendamos cambiar la configuración del fichero si no es una persona con experiencia en ello. + +### Panel de Administración +Para cambiar la configuración básica en el panel de administrador, seleccione la pestaña `Párametros`. Puede indicar un nombre de página, una descripción o palabras clave en las metaetiquetas, the meta tags, así como en cualquier parte de la plantilla por defecto, como en su cabecera. Puede cambiar la página de inicio, el idioma por defecto, *(indistintamente para el sitio web como para el panel)*, definir el contenido del pié de página, y elegir el editor *(HTML o WYSIWYG)* que estará disponible al editar subpáginas y artículos del blog. + +Cambiará la configuración de los restantes módulos en las pestañas correspondientes con sus nombres. + +### Fichero de definiciones +Más avanzadas cosas pueden cambiarse en el fichero `inc/core/defines.php`, el cual contiene definiciones de variables constantes. + ++ `ADMIN` — el nombre del directorio que contiene el panel de administración ++ `THEMES` — ruta al directorio que contiene los temas ++ `MODULES` — ruta al directorio que contiene los módulos ++ `UPLOADS` — ruta al directorio que contiene los ficheros subidos ++ `FILE_LOCK` — bloque la posibilidad de modificar ficheros mediante el panel de administración ++ `BASIC_MODULES` — listado de los módulos básicos que no pueden eliminarse ++ `HTML_BEAUTY` — formato HTML embellecido tras parseo del código ++ `DEV_MODE` — modo desarrollador, donde los errores PHP y los avisos son mostrados + + +Actualizar +---------- + +Si desea estar al día con las últimas novedades, corrección de errores e incidencias de seguridad, deberá revisar regularmente las actualizaciones de Batflat. Puede hacerlo en `Parámetros -> Actualizaciones`. El sistema comprobará si hay una nueva versión y automáticamente descargará un nuevo paquete desde nuestro servidor que actualice los ficheros principales y los módulos. + +En caso de complicaciones puede usar el modo manual. Para hacerlo así, descargue la última versión de Batflat, súbala al directorio principal de la aplicación, y, entonces, añada el parámetro `&manual` al final del marcador URL de actualización. El CMS debería detectar un paquete zipeado y al hacer click sobre el botón de actualización, el proceso de extracción y sobreescritura de ficheros se ejecutará. + +Antes de cada actualización, Batflat crea una copia de seguridad. La encontrará en el directorio de scripts, en la carpeta de `backup/`. Si la actualización ha fallado, puede restaurarla en cualquier momento. + + +Temas +====== + +Estructura +---------- + +La estructura de los temas en Batflat es muy simple. Tan sólo cree una nueva carpeta en el directorio `themes/` con los ficheros siguientes: + ++ `index.html` — plantilla por defecto para subpáginas ++ `manifest.json` — información del tema ++ `preview.png` — pantallazo que muestre el tema *(opcional)* + +Cada subpágina puede usar otra plantilla, por lo que, además del mencionado fichero, puede también crear otror, p. ej. `xyz.html`. La selección de plantillas está disponible en el panel de administración mientras crea una página. No hay reglas sobre ficheros CSS y JS. Total libertad. + +En la carpeta del tema puede también crear sus propias vistas del módulo. Para hacer ésto debe crear un directorio `modules/nombre_modulo` y ficheros `*.html` con los nombres correspondientes a los nombres de las vista originales. Por ejemplo, la vista del formulario de contacto debe estar contenida en la ruta siguiente: `themes/theme_name/modules/contact/form.html`. Batflat automáticamente detecta una nueva vista y la usa en lugar de la vista por defecto del módulo. + + +Etiquetas de Plantillas (Template tags) +--------------------------------------- + +CMS usa un sistema de plantillas sencillo que incluye las siguientes etiquetas: + +### Variables +```php +{$foo} // simple variable +{$foo|e} // HTML escape for variable +{$foo|cut:10} // content of the variable cut to 10 characters +{$foo.bar} // array +``` +El acceso a los elementos del array se hace por el carácter '.' (punto). + +### Condiciones +```php +{if: $foo > 5} + lorem +{elseif: $foo == 5} + ipsum +{else} + dolor +{/if} +``` + +### Bucles (loop) +```html + +``` +La etiqueta loop tiene 3 niveles de expansión. El primero is una variable array que el sistema de plantillas interrumpirá en tres variables llamadas `$key`,` $value` y `$counter`, las cuales contienen sucesivas iteraciones inicializadas desde cero. El segundo paso permite indicar el el nombre de la variable que contiene el valor, y el tercero es también el nombre de la variable índice. + +### Incluir ficheros de plantilla +```html + + + {template: header.html} +
+

Lorem ipsum dolor sit amet.

+
+ {template: footer.html} + + +``` + +### Código PHP +```php +Today`s date: {?= date('Y-m-d') ?} +``` +Si deja el carácter `=`, el código sólo se ejecutará y no mostrará nada. Esto permite, por ejemplo, definir nuevas variables dentro de la plantilla: +```php +{? $foo = 5 ?} +``` + +### Deshabilitar intérprete (parseo) +``` +{noparse}Use the {$ contact.form} tag to display contact form.{/noparse} +``` +Cualquier etiqueta dentro de la expresión *noparse* se mantendrá sin variaciones. + +### Comentarios +``` +{* this is a comment *} +``` +Los Comentarios no serán visibles en el código fuente tras compliarse la plantilla. + +### Idiomas +``` +{lang: pl_polski} + Witaj świecie! +{/lang} +{lang: en_english} + Hello world! +{/lang} +{lang: es_spanish} + ¡Hola, mundo! +{/lang} +``` +Si desea personalizar los elementos de la plantilla en un idioma particular, utilice las etiquetas susodichas. + + +Sistema de variables +-------------------- +Batflat, como sus módulos, proporciona muchas variables *(habitualmente arrays)* que sirven para mostrar cada elemento de la página. He aquí algunos de los más importantes: + ++ `{$settings.pole}` — un elemento array conteniendo el valor del parámetro dado por Batflat ++ `{$settings.moduł.pole}` — un elemento array conteniendo el valor del parámetro dado por el módulo ++ `{$bat.path}` — almacena la ruta donde se aloja el sistema ++ `{$bat.lang}` — muestra el idioma actual utilizado ++ `{$bat.notify}` — la última modificación ++ `{$bat.notify.text}` - texto de notificación ++ `{$bat.notify.type}` - tipo de mensaje correspondiente a las Bootstrap *(danger, success)* ++ `{$bat.header}` — metaetiquetas adicionales, scripts JS y hojas de estilo CSS cargadas por los módulos ++ `{$bat.footer}` — scripts JS adicionales cargados por los módulos ++ `{$bat.theme}` — muestra la ruta al tema activo con el servidor ++ `{$bat.powered}` — muestra *Powered by Batflat* con un enlace al sitio oficial ++ `{$navigation.xyz}` — muestra una lista de `
  • ` elementos de navegación ++ `{$page.title}` — muestra el nombre de la subpágina ++ `{$page.content}` — muestra el contenido de la subpágina + +Ejemplo +------- + +### manifest.json + +``` +{ + "name": "Example", + "version": "1.0", + "author": "Bruce Wayne", + "email": "contact@waynecorp.com", + "thumb": "preview.png" +} +``` + +### index.html + +```html + + + + + + {$page.title} - {$settings.title} + + + + {loop: $bat.header}{$value}{/loop} + + + + + +
    +

    {$page.title}

    + {$page.content} +
    + +
    + {$settings.footer} {$bat.powered} +
    + + + {loop: $bat.footer}{$value}{/loop} + + +``` + +Módulos +======= + +Estructura +----------- + +Cada módulo, como los temas, deben estar en carpetas separadas creadas en el directorio `inc/modules/`. Por favor, observe qeu el directorio no contiene ni mayúsculas ni caracteres especiales, tales como espacios. + +Cuando cree un módulo, reflexione sobre qué el tipo de módulo desea usar. ¿Será configurable en el panel de administración? ¿o sólo funcionará en el lado de presentación? Debido a esta división, en Batflat distinguimos tres archivos principales del módulo: + ++ `Info.php` — contiene información sobre el módulo, tal como nombre, descripción, autor o icon ++ `Admin.php` — el contenido de este fichero será accessible mediante el panel de administración ++ `Site.php` — el contenido de este fichero estará disponible a los visitantes del sitio + +El cuarto y opcional fichero es el `ReadMe.md` que debería contener información adicional para futuros usuarios en formato [Markdown](https://es.wikipedia.org/wiki/Markdown), p.ej. cómo usar el módulo. + +Si planea escribir un módulo que use HTML, sería bueno que se asegure que el código PHP está separado del lenguaje HTML en sí mismo. Para ello, necesita crear un directorio `views` dentro de la carpeta del módulo. Incluya cualquier fichero de vistas en él. + +El problema multidioma del módulo es similar. Tan sólo cree ficheros de idioma con la extensión `ini` dentro del directorio `lang`. + +La estructura del módulo debiera verse algo parecido a ésto: +``` +ejemplo/ +|-- lang/ +| |-- admin/ +| | |-- en_english.ini +| | |-- pl_polski.ini +| | |-- es_spanish.ini +| |-- en_english.ini +| |-- pl_polski.ini +| |-- es_spanish.ini +|-- views/ +| |-- admin/ +| | |-- bar.html +| |-- foo.html +|-- Admin.php +|-- Info.php +|-- Site.php ++-- ReadMe.md +``` + +Crear un módulo +----------------- + +### Info file + +El fichero más importante para cada módulo. Contiene información básica e instrucciones durante la instalación y desinstalación. + +```php + 'Example', + 'description' => 'Lorem ipsum....', + 'author' => 'Robin', + 'version' => '1.0', + 'compatibility' => '1.3.*', // Compatibility with Batflat version + 'icon' => 'bolt', + + 'pages' => ['Example' => 'example'], // Registration as a page (optional) + + 'install' => function() use($core) // Install commands + { + // lorem ipsum... + }, + 'uninstall' => function() use($core) // Uninstall commands + { + // lorem ipsum... + } + ]; +``` + +Una lista de iconos que puede usar en este fichero esta disponible en [fontawesome.io](http://fontawesome.io/icons/). Asegúrese de que no se indica el nombre del icono con el prefijo `fa-`. + +Registrar un módulo como una página le permite, libremente, usar el enrutamiento y su selección como página de inicio. + + +### Fichero Admin + +El contenido de este fichero se lanzará en el panel de administración. + +```php + 'foo', + 'Bar' => 'bar', + ]; + } + + public function getFoo($parm) + { + return "Foo $parm!"; + } + + public function postBar() + { + return "Bar!"; + } + } +``` + +En el método `navigation`, incluir un array con las subpáginas del módulo. Cada página debería ser asignada a un método *(sin un prefijo)*. Los elementos de este array se mostrarán en el menú del panel de administración. + +Los métodos también aceptan argumentos que son pasados vía URL. Por ejemplo, tras introducir la dirección `/ejemplo/foo/abc`, el método `getFoo` devolverá *"Foo abc!"*. + +Como puede ver en la siguiente lista, cada método que representa la subpágina del módulo debería tener un prefijo especificando el tipo de solicitud. En muchos casos usará la nomenclatura `getFoo`, y el formulario de envío `postFoo`. Si el método soporta todos los tipos, debería preceder el prefijo `any` *(por ejemplo, `anyFoo`)*. Esto es importante porque páginas sin prefijo no serán manejadas. Los métodos soportados son traducidos por enrutado dinámico como sigue: + ++ `getFoo()` — como `/ejemplo/foo` para una petición GET ++ `getFoo($parm)` — como `/ejemplo/foo/abc` para una petición GET ++ `postBar()` — como `ejemplo/bar` para peticiones POST *(formulario de envío)* ++ `anyFoo()` — como `/ejemplo/foo` para cada tipo de petición + +### Site file + +Este fichero se responsabiliza de la parte vista por los visitantes del sitio. Si el módulo es demasiado largo, una buena práctica es registrarlo como una página y aplicarle un enrutado. + +```php +_foo(); + } + + public function routes() + { + $this->route('ejemplo', '_mySite'); + } + + private function _mySite() + { + $page = [ + 'title' => 'Título ejemplo..', + 'desc' => 'Descripción del sitio', + 'content' => 'Lorem ipsum dolor...' + ]; + + $this->setTemplate('index.html'); + $this->tpl->set('page', $page); + } + + private function _foo() + { + $this->tpl->set('bar', '¿Por qué tan serio?'); + } + } +``` + +En el anterior ejemplo, una nueva variable de plantilla `bar` se ha creado la cual, por llamada al método `_foo()` en el módulo initializer, puede usarse en los ficherso del tema como `{$bar}`. En suma, el método `routes()` ha creado una subrutina `/ejemplo` que apunta a la llamada del método `_mySite()`. Si va a `http://example.com/ejemplo`, llamará al método `_mySite()`. + +### Fichero de Idiomas + +El módulo puede contener variables de idiomas que pueden usarse en clases y vistas. Los ficheros de idiomas tienen una extension `.ini` y están localizados en el directorio` lang` del módulo. +Por ejemplo, si deseas añadir un fichero de idioma conteniendo expresiones en Español para la parte administrativa del módulo `Ejemplo`, deberá crear un fichero en la ruta `inc/modules/example/lang/admin /es_spanish.ini`. +El contenido debería asemejarse al siguiente listado: + +``` +full_name = "Nombre y apellidos" +email = "Correo" +subject = "Asunto" +message = "Mensaje" +send = "Enviar" +send_success = "Correo correctamente enviado. Le responderemos pronto." +send_failure = "Imposible enviar mensaje. Quizál la función mail() está deshabilitada en el servidor." +wrong_email = "La dirección de correo enviada es incorrecta." +empty_inputs = "Rellene todos los campos necesarios para enviar un mensaje." +antiflood = "Debe esperar un rato antes de volver a enviar otro mensaje." +``` + +Utilice la construcción `$this->lang('subject')` en la clase del módulo y `{$lang.example.subject}` en la vista. Para una clase, podemos dejar el segundo parámetro del método `lang`, el cual será el nombre del módulo. + + +Enrutado +-------- + +Enrutado es el proceso de tramitar una petición de dirección recibida y decidir que debería ejecutarse o mostrarse. Se supone que llama al método/función adecuado en base a la URL de la página. Debe usar el enrutado dentro del método público `routes()`. + +```php +void route(string $pattern, mixed $callback) +``` + +El primer parámetro del método `route` es una expresión regular. Algunas de tales expresiones ya se han definido: + ++ `:any` — cualquier cadena de carácteres (string) ++ `:int` — números enteros ++ `:str` — una string que es una etiqueta del tipo slug + +El segundo parámetro es un nombre de método o una función anónima que pasa un número de argumentos definidos en una expresión regular. + +#### Ejemplo +```php +public function routes() +{ + // URL: http://example.com/blog + + // - by calling the method inside the module: + $this->route('blog', 'importAllPosts'); + + // - by calling an anonymous function: + $this->route('blog', function() { + $this->importAllPosts(); + }); + + // URL: http://example.com/blog/2 + $this->route('blog/(:int)', function($page) { + $this->importAllPosts($page); + }); + + // URL: http://example.com/blog/post/lorem-ipsum + $this->route('blog/post/(:str)', function($slug) { + $this->importPost($slug); + }); + + // URL: http://example.com/blog/post/lorem-ipsum/4 + $this->route('blog/post/(:str)/(:int)', function($slug, $page) { + $this->importPost($slug, $page); + }); +} +``` + + +Métodos +------- + +Los módulos muestran fachadas especiales que facilitan el acceso a los métodos dentro del núcleo (core). Esto permite acortar las llamadas como `$this->core->foo->bar`. + +### db + +```php +void db([string $table]) +``` + +Permite operar en una base de datos. Los detalles se describen en la sección del núcleo (core). + +#### Argumentos ++ `table` — Database table name *(opcional)* + +#### Ejemplo +```php +$this->db('table')->where('age', 20)->delete(); +``` + + +### draw + +```php +string draw(string $file [, array $variables]) +``` + +Devuelve el código compilado de la vista que, previamente, ha empleado las etiquetas del sistema de plantillas. También permite definir variables por sustitución con el método `set()`. + +#### Argumentos ++ `file` — fichero con la vista dentro del módulo o la ruta a un fichero fuera de él. ++ `variables` — un array de definición de variables que pueden usarse como etiquetas *(opcional)* + +#### Ejemplo +```php +// Compilation of the view inside the module +$this->draw('form.html', ['form' => $this->formFields]); + +// Compilation of the view outside the module +$this->draw('../path/to/view.html', ['foo' => 'bar']); +``` + + +### lang + +```php +string lang(string $key [, string $module]) +``` + +Devuelve el contenido de la palabra clave en el idioma correspondiente para el módulo actual o, si se indica, para el módulo referenciado. + +#### Argumentos ++ `key` — el nombre de la clave del array del idioma ++ `module` — el nombre del módulo desde el que se quiere seleccionar la clave *(opcional)* + +#### Ejemplo +```php +// Reference to local translation +$this->lang('foo'); // $this->core->lang['module-name']['foo']; + +// Reference to general translation +$this->lang('cancel', 'general'); // $this->core->lang['general']['cancel']; + +// Reference to the translation of "pages" module +$this->lang('slug', 'pages') // $this->core->lang['pages']['slug']; +``` + + +### notify + +```php +void notify(string $type, string $text [, mixed $args [, mixed $... ]]) +``` + +Permite llamadas a notificaciones para el usuario. + +#### Argumentos ++ `type` — tipo de notificación: *success* or *failure* ++ `text` — contenido de la notificación ++ `args` — arguemntos adicionales *(opcional)* + +#### Ejemplo +```php +$foo = 'Bar'; +$this->notify('success', 'This is %s!', $foo); // $this->core->setNotify('success', 'This is %s!', $foo); + +``` + + +### settings + +```php +mixed settings(string $module [, string $field [, string $value]]) +``` + +Obtiene o establece el valor del módulo de parámetros. + +#### Argumentos ++ `module` — nombre del módulo y, opcionalmente, campo separado por un período ++ `field` — nombre del campo del módulo *(opcional)* ++ `value` — el valor que el campo módulo cambiará *(opcional)* + +#### Ejemplo +```php +// Select the "desc" field from the "blog" module +$this->settings('blog.desc'); // $this->core->getSettings('blog', 'desc'); + +// Select the "desc" field from the "blog" module +$this->settings('blog', 'desc'); // $this->core->getSettings('blog', 'desc'); + +// Set the content of the "desc" field from the "blog" module +$this->settings('blog', 'desc', 'Lorem ipsum...'); +``` + +### setTemplate + +```php +void setTemplate(string $file) +``` + +Permite cambiar el fichero de la plantilla de presentación. Este método funciona sólo en la clase `Site`. + +#### Argumentos ++ `file` — El nombre del fichero de la plantilla + +#### Ejemplo +```php +$this->setTemplate('index.html'); // $this->core->template = 'index.html'; +``` + + +Núcleo (Core) +============= + +Este es el kernel/motor de Batflat, la parte más importante que se responsabiliza de todas sus tareas básicas. El core contiene muchas definiciones de constantes, funciones, y métodos que se pueden usar al escribir módulos. + +Constantes +---------- + +Todas las definiciones de constantes se describen en la primera parte de esta documentación. Para usarlas en un fichero PHP tan sólo llame a sus nombres. Las constantes son particularmente útiles al crear URLs y rutas de ficheros. + +#### Ejemplo +```php +echo MODULES.'/contact/view/form.html'; + +``` + + +Funciones +--------- + +Batflat tiene varias funciones de ayuda incorporada (built-in helper functions) que facilitan la creación de módulos. + +### domain + +```php +string domain([bool $with_protocol = true]) +``` + +Devuelve el nombre de dominio con o sin http(s). + +#### Argumentos ++ `with_protocol` — decide si la dirección será devuelta con o sin protocolo + +#### Valor devuelto +String con el nombre de dominio. + +#### Ejemplo +```php +echo domain(false); +// Result: example.com +``` + + +### checkEmptyFields + +```php +bool checkEmptyFields(array $keys, array $array) +``` + +Comprueba si el array contiene elementos vacíos. Es útil al valir formularios. + +#### Argumentos ++ `keys` — lista de elementos del array que la función ha revisado ++ `array` — source array + +#### Valor devuelto +Devuelve `TRUE` si, al menos, uno de los elementos está vacío. `FALSE` cuando todos los elementos están completos. + +#### Ejemplo +```php +if(checkEmptyFields(['name', 'phone', 'email'], $_POST) { + echo 'Fill in all fields!'; +} +``` + + +### currentURL + +```php +string currentURL() +``` + +Devuelve la actual URL. + +#### Ejemplo +```php +echo currentURL(); +// Result: http://example.com/contact +``` + + +### createSlug + +```php +string createSlug(string $text) +``` + +Traduce texto en caracteres no alfanuméricos, guiones y espacios, y elimina caracteres especiales. Se usar para crear barras en URLs y nombres de variables en el sistema de plantillas. + +#### Argumentos ++ `text` — texto a convertir + +#### Valor devuelto +Devuelve el texto en formato amigable. + +#### Ejemplo +```php +echo createSlug('To be, or not to be, that is the question!'); +// Result: to-be-or-not-to-be-that-is-the-question +``` + + +### deleteDir + +```php +bool deleteDir(string $path) +``` + +Función recursiva que elimina el directorio y todos sus contenidos. + +#### Argumentos ++ `path` — ruta del directorio + +#### Valor devuelto +Devuelve `TRUE` si ha iod bien, `FALSE` si ha fallado. + +#### Ejemplo +```php +deleteDir('foo/bar'); +``` + + +### getRedirectData +```php +mixed getRedirectData() +``` + +Devuelve los datos pasados a la sesión al usar `redirect()`. + +#### Valor devuelto +Un array o `null`. + +#### Ejemplo +```php +$postData = getRedirectData(); +``` + + +### htmlspecialchars_array + +```php +string htmlspecialchars_array(array $array) +``` + +Sustituye caracteres especiales de los elementos de un array en entidades HTML. + +#### Argumentos ++ `array` — el array que se convertirá + +#### Valor devuelto +Devuelve el texto convertido. + +#### Ejemplo +```php +$_POST = htmlspecialchars_array($_POST); +``` + + +### isset_or + +```php +mixed isset_or(mixed $var [, mixed $alternate = null ]) +``` + +Sustituye una variable vacía con un valor alternativo. + +#### Argumentos ++ `var` — variable ++ `alternate` — valor sustitutorio de la variable *(opcional)* + +#### Valor devuelto +Devuelve un valor alternativo. + +#### Ejemplo +```php +$foo = isset_or($_GET['bar'], 'baz'); +``` + + +### parseURL +```php +mixed parseURL([ int $key = null ]) +``` + +Parsea la actual URL del script. + +#### Argumentos ++ `key` — Número del parámetro de la URL *(opcional)* + +#### Valor devuelto +Un array o su elemento individual. + +#### Ejemplo +```php +// URL: http://example.com/foo/bar/4 + +var_dump(parseURL()) +// Result: +// array(3) { +// [0] => +// string(3) "foo" +// [1] => +// string(3) "bar" +// [2] => +// int(4) +// } + +echo parseURL(2); +// Result: "bar" +``` + + +### redirect + +```php +void redirect(string $url [, array $data = [] ]) +``` + +Redirección a la URL específica. Permite guardar datos desde el array a la sesión. Es útil para memorizar datos no guardados de los formularios. + +#### Argumentos ++ `url` — dirección a la que redireccionar ++ `data` — un array que será pasado a la sesión *(opcional)* + +#### Ejemplo +```php +redirect('http://www.example.com/'); + +// Save the array to session: +redirect('http://www.example.com/', $_POST); +``` + + +### url +```php +string url([ mixed $data = null ]) +``` + +Crer una URL absoluta. El panel de administración automáticamente añade un token. + +#### Argumentos ++ `data` — string o array + +#### Valor devuelto +URL absoluta. + +#### Ejemplo +```php +echo url(); +// Result: http://example.com + +echo url('foo/bar') +// Result: http://example.com/foo/bar + +echo url('admin/foo/bar'); +// Result: http://example.com/admin/foo/bar?t=[token] + +echo url(['admin', 'foo', 'bar']); +// Result: http://example.com/admin/foo/bar?t=[token] +``` + + +Métodos +------- + +Además de las funciones, existen varios métodos importantes que aceleran el proceso de creación de nuevas funcionalidades del sistema. + +### addCSS + +```php +void addCSS(string $path) +``` + +Importa el fichero CSS en la cabecera del tema. + +#### Argumentos ++ `path` — URL al fichero + +#### Ejemplo +```php +$this->core->addCSS('http://example.com/style.css'); +// Result: +``` + + +### addJS + +```php +void addJS(string $path [, string $location = 'header']) +``` + +Importa el fichero JS en la cabecera o al pié del tema. + +#### Argumentos ++ `path` — URL al fichero. ++ `location` — *header* o *footer* *(opcional)* + +#### Ejemplo +```php +$this->core->addJS('http://example.com/script.js'); +// Result: +``` + + +### append + +```php +void append(string $string, string $location) +``` + +Añade un string a la cabecera o al pié de la página. + +#### Argumentos ++ `string` — cadena de caracteres ++ `location` — *header* o *footer* + +#### Ejemplo +```php +$this->core->append('', 'header'); +``` + + +### getModuleInfo + +```php +array getModuleInfo(string $dir) +``` + +Devuelve información del módulo. Este método funciona sólo en la clase `Admin`. + +#### Argumentos ++ `name` — nombre del directorio del módule + +#### Valor devuelto +Array con las informaciones. + +#### Ejemplo +```php +$foo = $this->core->getModuleInfo('contact'); +``` + + +### getSettings + +```php +mixed getSettings([string $module = 'settings', string $field = null]) +``` + +Obtienes el valor de los parámetros del módulo. Por defecto son los parámetros generales de Batflat. + +#### Argumentos ++ `module` — nombre del módulo *(opcional)* ++ `field` — campo con la definición del parámetro *(opcional)* + +#### Valor devuelto +Array o string. + +#### Ejemplo +```php +echo $this->core->getSettings('blog', 'title'); +``` + + +### getUserInfo + +```php +string getUserInfo(string $field [, int $id ]) +``` + +Devuelve información sobre el usuario registrado o el usuario con la ID obtenida. Este método funciona sólo en la clase `Admin`. + +#### Argumentos ++ `field` — nombre del campo en la base de datos ++ `id` — número de ID *(opcional)* + +#### Valor devuelto +El string del campo seleccionado. + +#### Ejemplo +```php +// The currently logged in user +$foo = $this->core->getUserInfo('username'); + +// User with given ID +$foo = $this->core->getUserInfo('username', 1); +``` + + +### setNotify + +```php +void setNotify(string $type, string $text [, mixed $args [, mixed $... ]]) +``` + +Genera una notificación. + +#### Argumentos ++ `type` — tipo de notificación: *success* o *failure* ++ `text` — contenido de la notificación ++ `args` — argumentos adicionales *(opcional)* + +#### Ejemplo +```php +$foo = 'Bar'; +$this->core->setNotify('success', 'This is %s!', $foo); +// Result: "This is Bar!" +``` + + +Base de datos +------------- + +La base de datos que usa Batflat es SQLite version 3. Para su uso el CMS utiliza una simple clase que facilita la creación de consultas. No es necesario saber de SQL para ser capaz de operar con ello. + +Además, recomendamos la herramienta [phpLiteAdmin](https://github.com/sruupl/batflat-pla) para la gestión de bases de datos. Es un script en un único fichero PHP similar a *phpMyAdmin*, donde se pueden administrar tablas de Batflat. Le permitirá familiarizarse con la estructura de las tablas existentes. +El fichero de la base de datos está ubicado en `inc/data/database.sdb`. + + +### SELECT + +Seleccionar multiple registros: + +```php +// JSON +$rows = $this->core->db('table')->toJson(); + +// Array +$rows = $this->core->db('table')->select('foo')->select('bar')->toArray(); + +// Object +$rows = $this->core->db('table')->select(['foo', 'b' => 'bar'])->toObject(); +``` + +Seleccionar un único registro: +```php +// JSON +$row = $this->core->db('table')->oneJson(); + +// Array +$row = $this->core->db('table')->select('foo')->select('bar')->oneArray(); + +// Object +$row = $this->core->db('table')->select(['foo', 'b' => 'bar'])->oneObject(); +``` + + +### WHERE + +Seleccionar un registro con el número indicado en la columna `id`: + +```php +$row = $this->core->db('table')->oneArray(1); +// or +$row = $this->core->db('table')->oneArray('id', 1); +// or +$row = $this->core->db('table')->where(1)->oneArray(); +// or +$row = $this->core->db('table')->where('id', 1)->oneArray(); +``` + +Condiciones de complejidad: +```php +// Fetch rows whose column value 'foo' is GREATER than 4 +$rows = $this->core->db('table')->where('foo', '>', 4)->toArray(); + +// Fetch rows whose column value 'foo' is GREATER than 4 and LOWER than 8 +$rows = $this->core->db('table')->where('foo', '>', 4)->where('foo', '<', 8)->toArray(); +``` + +OR WHERE: +```php +// Fetch rows whose column value 'foo' is EQUAL 4 or 8 +$rows = $this->core->db('table')->where('foo', '=', 4)->orWhere('foo', '=', 8)->toArray(); +``` + +WHERE LIKE: +```php +// Fetch rows whose column 'foo' CONTAINS the string 'bar' OR 'bases' +$rows = $this->core->db('table')->like('foo', '%bar%')->orLike('foo', '%baz%')->toArray(); +``` + +WHERE NOT LIKE: +```php +// Fetch rows whose column 'foo' DOES NOT CONTAIN the string 'bar' OR 'baz' +$rows = $this->core->db('table')->notLike('foo', '%bar%')->orNotLike('foo', '%baz%')->toArray(); +``` + +WHERE IN: +```php +// Fetch rows whose column value 'foo' CONTAINS in array [1,2,3] OR [7,8,9] +$rows = $this->core->db('table')->in('foo', [1,2,3])->orIn('foo', [7,8,9])->toArray(); +``` + +WHERE NOT IN: +```php +// Fetch rows whose column value 'foo' DOES NOT CONTAIN in array [1,2,3] OR [7,8,9] +$rows = $this->core->db('table')->notIn('foo', [1,2,3])->orNotIn('foo', [7,8,9])->toArray(); +``` + +Condiciones de agrupamiento: +```php +// Fetch rows those column value 'foo' is 1 or 2 AND status is 1 +$rows = $this->core->db('table')->where(function($st) { + $st->where('foo', 1)->orWhere('foo', 2); + })->where('status', 1)->toArray(); +``` + +Operadores de comparaciones permitidos: `=`, `>`, `<`, `>=`, `<=`, `<>`, `!=`. + + +### JOIN + +INNER JOIN: +```php +$rows = $this->core->db('table')->join('foo', 'foo.table_id = table.id')->toJson(); +``` + +LEFT JOIN: +```php +$rows = $this->core->db('table')->leftJoin('foo', 'foo.table_id = table.id')->toJson(); +``` + + +### HAVING + +```php +$rows = $this->core->db('table')->having('COUNT(*)', '>', 5)->toArray(); +``` + +OR HAVING: +```php +$rows = $this->core->db('table')->orHaving('COUNT(*)', '>', 5)->toArray(); +``` + + +### INSERT + +El método `save` puede añadir un nuevo registro a la tabla o actualizar uno existente si tiene tal condición. +- Cuando se añade un nuevo registro, el número de identificación será el valor devuelto. +- Cuando se actualiza un registro existente, un booleano será el valor devuelto. + +```php +// Add a new record +$id = $this->core->db('table')->save(['name' => 'James Gordon', 'city' => 'Gotham']); +// Return value: ID number of new record + +// Update an existing record +$this->core->db('table')->where('age', 50)->save(['name' => 'James Gordon', 'city' => 'Gotham']); +// Return value: TRUE on success or FALSE on failure +``` + + +### UPDATE + +Actualizar registros, en caso de éxito se devuelve `TRUE`. Sino, se devuelve `FALSE`. + +```php +// Changing one column +$this->core->db('table')->where('city', 'Gotham')->update('name', 'Joker'); + +// Changing multiple columns +$this->core->db('table')->where('city', 'Gotham')->update(['name' => 'Joker', 'type' => 'Villain']); +``` + + +### SET + +```php +$this->core->db('table')->where('age', 65)->set('age', 70)->set('name', 'Alfred Pennyworth')->update(); +``` + + +### DELETE + +La eliminación correcta de un registro devolverá su número de identificación. + +```php +// Delete record with `id` equal to 1 +$this->core->db('table')->delete(1); + +// Deletion of record with condition +$this->core->db('table')->where('age', 20)->delete(); +``` + + +### ORDER BY + +Orden Ascendente: +```php +$this->core->db('table')->asc('created_at')->toJson(); +``` + +Orden Descendente: +```php +$this->core->db('table')->desc('created_at')->toJson(); +``` + +Orden Combinado: +```php +$this->core->db('table')->desc('created_at')->asc('id')->toJson(); +``` + + +### GROUP BY + +```php +$this->core->db('table')->group('city')->toArray(); +``` + + +### OFFSET, LIMIT + +```php +// Fetch 5 records starting at tenth +$this->core->db('table')->offset(10)->limit(5)->toJson(); +``` + + +### PDO + +No todas las consulta se pueden crear usando los métodos anteriores *(p.ej. crear o eliminar una tabla)*, por lo que se puede también escribir consultas utilizando [PDO](http://php.net/manual/es/book.pdo.php): + +```php +$this->core->db()->pdo()->exec("DROP TABLE `example`"); +``` + + +Sistema de plantillas (Template system) +---------------------------------------- + +Operar con el sistema de plantillas es fácil y se basa fundamentalmente en dos métodos. Uno permite asignar variables, mientras que el otro devuelve el código compilado. En situaciones exceptionales, los otros dos métodos son útiles. + +### set + +```php +void set(string $name, mixed $value) +``` + +Asigna un valor a una variable que puede usarse en las vistas. + +#### Argumentos ++ `name` — nombre de la variable ++ `value` — valor de la variable + +#### Ejemplo +```php +$foo = ['bar', 'baz', 'qux']; +$this->tpl->set('foo', $foo); +``` + + +### draw + +```php +string draw(string $file) +``` + +Devuelve el código compilado de la vista que, previamente, ha empleado las etiquetas del sistema de plantillas. + +#### Argumentos ++ `file` — ruta del fichero + +#### Valor devuelto +Un string, es decir, una vista compilada. + +#### Ejemplo +```php +$this->tpl->draw(MODULES.'/galleries/view/admin/manage.html'); +``` + + +### noParse + +```php +string noParse(string $text) +``` + +Protege ante la compilación de etiquetas del sistema de plantillas. + +#### Argumentos ++ `text` — string a dejar intacta + +#### Ejemplo +```php +$this->tpl->noParse('Place this tag in website template: {$contact.form}'); +``` + + +### noParse_array + +```php +array noParse_array(array $array) +``` + +Protege ante la compilación de etiquetas del sistema de plantillas dentro del array. + +#### Argumentos ++ `array` — array a dejar intacto + +#### Ejemplo +```php +$this->tpl->noParse_array(['{$no}', '{$changes}']); +``` + +Idiomas +------- + +Todos los ficheros de idiomas están ubicados en los directorios `lang` dentro del módulo y en la ruta `inc/lang`. +En esta última ruta hay las correspondientes carpetas para los idiomas con el siguiente formato: `en_english`. La primera parte es la abreviatura del idioma y la segunda es el nombre completo en inglés. +Dentro del directorio está el fichero `general.ini`, que contiene variables generales del idioma para el sistema. +Tras crear una nueva carpeta de idioma, Batflat automáticamente detecta el idioma añadido y permite su selección en el panel de administración. Tenga en cuenta que el proceso de creación de un nuevo idioma deberá repetirse para cada módulo. diff --git a/inc/jscripts/wysiwyg/lang/es_spanish.js b/inc/jscripts/wysiwyg/lang/es_spanish.js new file mode 100644 index 0000000..a6c6514 --- /dev/null +++ b/inc/jscripts/wysiwyg/lang/es_spanish.js @@ -0,0 +1,155 @@ +(function($) { + $.extend($.summernote.lang, { + 'es_spanish': { + font: { + bold: 'Negrita', + italic: 'Cursiva', + underline: 'Subrayada', + clear: 'Eliminar formato de texto', + height: 'Interlineado', + name: 'Familia de fuente', + strikethrough: 'Tachado', + superscript: 'Superíndice', + subscript: 'Subíndice', + size: 'Tamaño de fuente' + }, + image: { + image: 'Imagen', + insert: 'Insertar una imagen', + resizeFull: 'Tamaño original', + resizeHalf: 'Redimensionar al 50 %', + resizeQuarter: 'Redimensionar al 25 %', + floatLeft: 'Alinear a izquierda', + floatRight: 'Alinear a derecha', + floatNone: 'Sin alinear', + shapeRounded: 'Forma: Redondeado', + shapeCircle: 'Forma: Círculo', + shapeThumbnail: 'Forma: Miniatura', + shapeNone: 'Forma: Ninguna', + dragImageHere: 'Arrastrar una imagen o texto aquí dentro', + dropImage: 'Soltar imagen o texto', + selectFromFiles: 'Elegir un fichero', + maximumFileSize: 'Tamaño máximo del fichero', + maximumFileSizeError: 'Tamaño máximo del fichero sobrepasado', + url: 'URL de la imagen', + remove: 'Eliminar la imagen', + original: 'Original' + }, + video: { + video: 'Vídeo', + videoLink: 'Enlazar un vídeo', + insert: 'Insertar un vídeo', + url: 'URL del vídeo', + providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)' + }, + link: { + link: 'Enlace', + insert: 'Insertar un enlace', + unlink: 'Eliminar un enlace', + edit: 'Modificar', + textToDisplay: 'Texto a mostrar', + url: 'URL del enlace', + openInNewWindow: 'Abrir en una nueva ventana' + }, + table: { + table: 'Tabla', + addRowAbove: 'Añadir una línea debajo', + addRowBelow: 'Añadir una línea encima', + addColLeft: 'Añadir una columna a la izquierda', + addColRight: 'Añadir una columna a la derecha', + delRow: 'Eliminar la línea', + delCol: 'Eliminar la columna', + delTable: 'Eliminar la tabla' + }, + hr: { + insert: 'Insertar una línea horizontal' + }, + style: { + style: 'Estilo', + p: 'Normal', + blockquote: 'Cita', + pre: 'Preformateado', + h1: 'Encabezado 1', + h2: 'Encabezado 2', + h3: 'Encabezado 3', + h4: 'Encabezado 4', + h5: 'Encabezado 5', + h6: 'Encabezado 6' + }, + lists: { + unordered: 'Lista desordenada', + ordered: 'Lista ordenada' + }, + options: { + help: 'Ayuda', + fullscreen: 'Pantalla completa', + codeview: 'Mostrar código HTML' + }, + paragraph: { + paragraph: 'Párrafo', + outdent: 'Disminuir indentación', + indent: 'Aumentar indentación', + left: 'Alinear a izquierda', + center: 'Centrar', + right: 'Alinear a derecha', + justify: 'Justificar' + }, + color: { + recent: 'Último color seleccionado', + more: 'Más colores', + background: 'Color de fondo', + foreground: 'Color de frente', + transparent: 'Transparente', + setTransparent: 'Definir la transparencia', + reset: 'Restaurar', + resetToDefault: 'Restaurar el color por defecto' + }, + shortcut: { + shortcuts: 'Atajos', + close: 'Cerrar', + textFormatting: 'Formatear un texto', + action: 'Acción', + paragraphFormatting: 'Formatear los párrafos', + documentStyle: 'Estilo del documento', + extraKeys: 'Claves complementarias' + }, + help: { + 'insertParagraph': 'Insertar párrafo', + 'undo': 'Deshacer el último comando', + 'redo': 'Rehacer el último comando', + 'tab': 'Tabular', + 'untab': 'Destabular', + 'bold': 'Poner en negrita', + 'italic': 'Poner en cursiva', + 'underline': 'Subrayar', + 'strikethrough': 'Tachar', + 'removeFormat': 'Quitar estilos', + 'justifyLeft': 'Alinear a izquierda', + 'justifyCenter': 'Centrar', + 'justifyRight': 'Alinear a derecha', + 'justifyFull': 'Justificar', + 'insertUnorderedList': 'Poner lista desordenada', + 'insertOrderedList': 'Poner lista ordenada', + 'outdent': 'Disminuir indentación del párrafo', + 'indent': 'Aumentar indentación del párrafo', + 'formatPara': 'Cambiar a normal el párrafo actual (P)', + 'formatH1': 'Cambiar del párrafo actual el encabezado H1', + 'formatH2': 'Cambiar del párrafo actual el encabezado H2', + 'formatH3': 'Cambiar del párrafo actual el encabezado H3', + 'formatH4': 'Cambiar del párrafo actual el encabezado H4', + 'formatH5': 'Cambiar del párrafo actual el encabezado H5', + 'formatH6': 'Cambiar del párrafo actual el encabezado H6', + 'insertHorizontalRule': 'Incluir separación horizontal', + 'linkDialog.show': 'Mostrar ventana del enlace' + }, + history: { + undo: 'Cancelar la última acción', + redo: 'Recuperar la última acción cancelada' + }, + specialChar: { + specialChar: 'CARACTERES ESPECIALES', + select: 'Elegir los caracteres especiales' + } + } + }); +})(jQuery); diff --git a/inc/lang/es_spanish/admin/general.ini b/inc/lang/es_spanish/admin/general.ini new file mode 100644 index 0000000..c43b275 --- /dev/null +++ b/inc/lang/es_spanish/admin/general.ini @@ -0,0 +1,34 @@ +hello = "Hola, %s?" +add = "Añadir" +save = "Guardar" +cancel = "Cancelar" +say_yes = "Sí" +say_no = "No" +close = "Cerrar" +manage = "Gestionar" +upload = "Subir" +delete = "Eliminar" +edit = "Editar" +change = "Cambiar" +login_failure = "¡Usuario o contraseña incorrecta!" +login_attempts = "Máximo número de intentos alcanzado. Espere %s minutos para conectarse de nuevo." +sign_in = "Acceder" +remember_me = "Recuérdame" +username = "Usuario" +password = "Contraseña" +actions = "Acciones" +title = "Título" +name = "Nombre" +lang = "Idioma" +theme = "Tema" +template = "Plantilla" +can_be_empty = "Puede que no haya nada" +empty_inputs = "¡Rellenar todos los campos solicitados!" +logout = "Salir" +show_site = "Ver el sitio" +settings = "Parámetros" +unsaved_warning = "¡Cambios sin guardarse! ¿Seguro que desea abandonar esta página?" +update_available = "Actualización disponible" +file = "Fichero" +unknown_method = "La ruta solicitada no existe." +empty_array = "Nada que mostrar." diff --git a/inc/modules/blog/lang/admin/es_spanish.ini b/inc/modules/blog/lang/admin/es_spanish.ini new file mode 100644 index 0000000..ff67b62 --- /dev/null +++ b/inc/modules/blog/lang/admin/es_spanish.ini @@ -0,0 +1,84 @@ +module_name = "Blog" +module_desc = "Crear entradas en un blog." + +add_new = "Añadir nuevo" +new_post = "Nuevo artículo" +categories = "Categorías" +post_count = "Artículos:" +edit_post = "Modificar artículo" +post_del_confirm = "¿Seguro que desea eliminar los artículos seleccionados?" + +settings = "Parámetros" +blog_title = "Título del Blog" +blog_desc = "Descripción" +perpage = "Artículos por página" +latest_posts_count = "Número de artículos recientes" +disqus_shortname = "Apodo Disqus" +date_format = "Formato fecha" +settings_saved = "Parámetros guardados" + +manage_title = "Título" +manage_status = "Estado" +manage_author = "Autor" +manage_comments = "Comentarios" +manage_date = "Fecha" + +comments_on = "Habilitado" +comments_off = "Deshabilitado" + +post_hidden = "Pendiente" +post_sketch = "Borrador" +post_published = "Publicado" + +content = "Contenido" +intro = "Intro" +slug = "URL amigable" +status = "Estado" +tags = "Etiquetas" +add_a_tag = "añadir una etiqueta" +author = "Autor" +publish = "Publicado el" +options = "Opciones" +display_comments = "Ver comentarios Disqus" +markdown = "Enable Markdown" +cover = "Portada foto" +delete_photo = "Quitar" + +save_success = "Artículo correctamente guardado" +save_failure = "Fallo al guardar el artículo" +delete_success = "Artículo correctamente eliminado" +delete_failure = "Fallo al eliminar el artículo" +cover_deleted = "Cover photo deleted" + +not_found = "Ups.. No existe el artículo :(" + +editor_upload_fail = "No puede cargar la imagen. Quizá sea un tipo no soportado." + +today = "Hoy" +yesterday = "Ayer" + +janx = "Enero" +febx = "Febrero" +marx = "Marzo" +aprx = "Abril" +mayx = "Mayo" +junx = "Junio" +julx = "Julio" +augx = "Agosto" +sepx = "Septiembre" +octx = "Octubre" +novx = "Noviembre" +decx = "Diciembre" + +jan = "Enero" +feb = "Febrero" +mar = "Marzo" +apr = "Abril" +may = "Mayo" +jun = "Junio" +jul = "Julio" +aug = "Agosto" +sep = "Septiembre" +oct = "Octubre" +nov = "Noviembre" +dec = "Diciembre" diff --git a/inc/modules/blog/lang/es_spanish.ini b/inc/modules/blog/lang/es_spanish.ini new file mode 100644 index 0000000..0131993 --- /dev/null +++ b/inc/modules/blog/lang/es_spanish.ini @@ -0,0 +1,40 @@ +post_draft = "Este artículo es un borrador. Sólo el administrador puede verlo." +post_time = "Este artículo no está publicado aún. Sólo el administrador puede verlo." +latest_posts = "Últimos artículos" +categories = "Categorías" +readmore = "Continuar leyendo" +share = "Compartir" + +today = "Hoy" +yesterday = "Ayer" + +janx = "Enero" +febx = "Febrero" +marx = "Marzo" +aprx = "Abril" +mayx = "Mayo" +junx = "Junio" +julx = "Julio" +augx = "Agosto" +sepx = "Septiembre" +octx = "Octubre" +novx = "Noviembre" +decx = "Diciembre" + +jan = "Enero" +feb = "Febrero" +mar = "Marzo" +apr = "Abril" +may = "Mayo" +jun = "Junio" +jul = "Julio" +aug = "Agosto" +sep = "Septiembre" +oct = "Octubre" +nov = "Noviembre" +dec = "Diciembre" + +posted = "Escrito por %s el %s" +older = "Artículos anteriores" +newer = "Artículos recientes" +no_comments = "Sin comentarios" diff --git a/inc/modules/carousel/lang/admin/es_spanish.ini b/inc/modules/carousel/lang/admin/es_spanish.ini new file mode 100644 index 0000000..029fac6 --- /dev/null +++ b/inc/modules/carousel/lang/admin/es_spanish.ini @@ -0,0 +1,2 @@ +module_name = "Carrusel" +module_desc = "Carrusel de imágenes. Necesita el módulo de galería." diff --git a/inc/modules/contact/lang/admin/es_spanish.ini b/inc/modules/contact/lang/admin/es_spanish.ini new file mode 100644 index 0000000..a6b8e82 --- /dev/null +++ b/inc/modules/contact/lang/admin/es_spanish.ini @@ -0,0 +1,21 @@ +module_name = "Contacto" +module_desc = "Mostrar formulario de contacto en la página." + +recipient = "Recipiente" +custom = "-- Dirección de email personalizada --" +or_mail = "o dirección de email personalizada" +example = "Ejemplo: contact@johndoe.com" +save_success = "Datos de contacto guardados." +save_failure = "Fallo al guardar los datos de contacto." +info = "Ponga esta etiqueta en la plantilla del sitio" + +phpmailer_error = "Disculpas, pero no encuento la clase PHPMailer. Por favor, ejecute composer require phpmailer/phpmailer en su terminal." + +driver = "Mail driver" +mail = "mail() (default)" +phpmailer = "PHPMailer (SMTP)" +server = "Servidor" +port = "Puerto" +username = "Usuario" +password = "Contraseña" +name = "Remitente" diff --git a/inc/modules/contact/lang/es_spanish.ini b/inc/modules/contact/lang/es_spanish.ini new file mode 100644 index 0000000..962c3fb --- /dev/null +++ b/inc/modules/contact/lang/es_spanish.ini @@ -0,0 +1,10 @@ +full_name = "Nombre y apellido(s)" +email = "E-mail" +subject = "Asunto" +message = "Mensaje" +send = "Enviar" +send_success = "Correo correctamente enviado. Responderemos pronto." +send_failure = "Imposible enviar el mensaje. Quizá la función mail() esté deshabilitada en el servidor." +wrong_email = "La dirección e-mail indicada no es correcta." +empty_inputs = "Rellene todos los campos solicitados para enviar el mensaje." +antiflood = "Se debe esperar un rato antes de volver a enviar otro mensaje." diff --git a/inc/modules/dashboard/lang/admin/es_spanish.ini b/inc/modules/dashboard/lang/admin/es_spanish.ini new file mode 100644 index 0000000..25c5c92 --- /dev/null +++ b/inc/modules/dashboard/lang/admin/es_spanish.ini @@ -0,0 +1,6 @@ +module_name = "Escritorio" +module_desc = "Rápido acceso a módulos y novedades." + +news = "Novedades" +rss_fail_title = "Conexión caducada" +rss_fail_desc = "Imposible descargar las novedades de Batflat.org." diff --git a/inc/modules/devbar/lang/admin/es_spanish.ini b/inc/modules/devbar/lang/admin/es_spanish.ini new file mode 100644 index 0000000..7fab0f3 --- /dev/null +++ b/inc/modules/devbar/lang/admin/es_spanish.ini @@ -0,0 +1,2 @@ +module_name = "Barra Depuración" +module_desc = "Muestra información de ayuda para desarrolladores" diff --git a/inc/modules/galleries/lang/admin/es_spanish.ini b/inc/modules/galleries/lang/admin/es_spanish.ini new file mode 100644 index 0000000..389b42f --- /dev/null +++ b/inc/modules/galleries/lang/admin/es_spanish.ini @@ -0,0 +1,28 @@ +module_name = "Galerías" +module_desc = "Permite crear galerías y mostrarlas después en la página." + +add_gallery = "Añadir una galería" +edit = "Modificar una galería" +settings = "Parámetros" +delete_confirm = "¿Seguro que la desea eliminar?" +delete_gallery_success = "Galería correctamente eliminada." +delete_gallery_failure = "Fallo al eliminar la galería." +add_gallery_success = "Galería creada." +add_gallery_failure = "Imposible crear una nueva galería." +gallery_already_exists = "Ya existe una galería con este nombre." +img_per_page = "Imágenes por página" +sort = "Ordenar" +desc = "Descendente" +asc = "Ascendente" +add_images = "Añadir foto" +thumbnail = "Miniatura" +data = "Datos" +title = "Título" +description = "Descripción" +no_files = "Debe seleccionar al menos una imagen para subir." +wrong_extension = "Una o más tienen una extensión incorrecta. Las extensiones permitidas son: %s." +add_images_success = "Nueva fotos correctamente añadidas." +save_settings_success = "Datos de la galería correctamente guardados." +delete_image_success = "Imagen correctamente eliminada." +delete_image_failure = "Imposible eliminar la foto del servidor. Eliminarla manualmente y revisar permisos del directorio (CHMOD)." +image_doesnt_exists = "¡La imagen no existe!" diff --git a/inc/modules/langswitcher/lang/admin/es_spanish.ini b/inc/modules/langswitcher/lang/admin/es_spanish.ini new file mode 100644 index 0000000..9ed24ea --- /dev/null +++ b/inc/modules/langswitcher/lang/admin/es_spanish.ini @@ -0,0 +1,3 @@ +module_name = "Intercambiador" +module_desc = "Permite cambiar el idioma a los invitados." +autodetect = "Auto detectar idioma del navegador" diff --git a/inc/modules/modules/lang/admin/es_spanish.ini b/inc/modules/modules/lang/admin/es_spanish.ini new file mode 100644 index 0000000..67a588e --- /dev/null +++ b/inc/modules/modules/lang/admin/es_spanish.ini @@ -0,0 +1,40 @@ +module_name = "Módulos" +module_desc = "Gestión de módulos." + +module = "Módulo" +version = "Versión" +status = "Estado" +author = "Autor" +active = "Activo" +activate = "Activar" +inactive = "Inactivo" +deactivate = "Desactivar" +details = "Detalles" +upload_new = "Subir" +outdated = "obsoleto" +compatible = "compatible" +short_description = "Breve descripción" +full_description = "Amplia descripción" +created_by = "Creado por" +compatible_with = "Compatible con" +last_modified = "Último cambio" +module_outdated = "No se puede instalar el módulo porque está obsoleto. Por favor, actualice el módulo y pruebe de nueve." +deactivate_success = "Módulo '%s' correctamente desactivado." +deactivate_failure = "Imposible desactivar módulo '%s'." +deactivate_confirm = "¿Seguro que desea desactivar este módulo?" +activate_success = "Módulo '%s' correctamente activado." +activate_failure = "Imposible activar módulo '%s'." +activate_failure_files = "Imposible activar módulo '%s' ya que no contiene los ficheros necesarios." +remove_confirm = "¿Seguro que desea eliminar el módulo seleccionado?" +remove_success = "Los ficheros del módulo '%s' han sido correctamente eliminados." +remove_failure = "Imposible eliminar los ficheros del módulo '%s'." +select_zip = "Seleccionar módulo con extensión .zip." +upload_zip_subinfo = "Mantenga al día sus módulos y suba los módulo comprimidos con extensión .zip." +upload_zip_warning = "El módulo será reemplazado si ya existe." +upload_zip = "Subir" +upload_bad_file = "El módulo es incorrecto o ha sido interrumpido." +upload_no_info = "El fichero con información del módulo no existe." +upload_success = "Módulo correctamente añadido. Vaya la página Inactivo y actívelo." +upload_bad_version = "Módulo subido más antiguo o no tiene instalada la misma versión." + +file_lock = "Subida de Ficheros deshabilitada. Tendrá que usar FTP para subir los paquetes." diff --git a/inc/modules/navigation/lang/admin/es_spanish.ini b/inc/modules/navigation/lang/admin/es_spanish.ini new file mode 100644 index 0000000..237f216 --- /dev/null +++ b/inc/modules/navigation/lang/admin/es_spanish.ini @@ -0,0 +1,22 @@ +module_name = "Navegación" +module_desc = "Gestionar elementos de navegación." + +add_link = "Añadir enlace" +edit_link = "Modificar enlace" +save_link_success = "Enlace correctamente guardado." +save_link_failure = "Fallo al guardar el enlace." +delete_link_success = "Enlace correctamente eliminado." +delete_link_failure = "Imposible eliminar enlace." +delete_link_confirm = "¿Seguro que desea eliminar el enlace?" +add_nav = "Añadir navegación" +edit_nav = "Modificar navigation" +save_nav_success = "Navegación correctamente guardado." +save_nav_failure = "Fallo al guardar navegación." +delete_nav_success = "Navigation correctamente eliminado." +delete_nav_failure = "Imposible eliminar navegación." +delete_nav_confirm = "¿Seguro que desea eliminar la navegación?" +nav_already_exists = "Navegación ya existente." +page = "Página" +url = "URL" +class = "Clase CSS adicional" +parent = "Superior" diff --git a/inc/modules/pages/lang/admin/es_spanish.ini b/inc/modules/pages/lang/admin/es_spanish.ini new file mode 100644 index 0000000..8e2f508 --- /dev/null +++ b/inc/modules/pages/lang/admin/es_spanish.ini @@ -0,0 +1,21 @@ +module_name = "Páginas" +module_desc = "Gestión de sub-páginas." + +pages_count = "Páginas:" +add_new = "Añadir nueva" +new_page = "Nueva página" +edit_page = "Modificar página" +description = "Descripción" +keywords = "Etiquetas" +content = "Contenido" +view = "Previsualizar" +slug = "URL amigable" +markdown = "Habilitar Markdown" +save_success = "Página correctamente guardada." +save_failure = "Fallo al guardar la página." +delete_success = "Página correctamente eliminada." +delete_failure = "Imposible eliminar la página." +delete_confirm = "¿Seguro que desea eliminar esta página?" +page_exists = "URL amigable de página ya existente. Los cambios en la página no se ha guardado." + +editor_upload_fail = "No puede cargar la imagen. Quizá sea de un tipo no soportado." diff --git a/inc/modules/pages/lang/es_spanish.ini b/inc/modules/pages/lang/es_spanish.ini new file mode 100644 index 0000000..2c89634 --- /dev/null +++ b/inc/modules/pages/lang/es_spanish.ini @@ -0,0 +1 @@ +not_found = "Disculpas, la página no existe." diff --git a/inc/modules/sample/lang/admin/es_spanish.ini b/inc/modules/sample/lang/admin/es_spanish.ini new file mode 100644 index 0000000..c4dd20f --- /dev/null +++ b/inc/modules/sample/lang/admin/es_spanish.ini @@ -0,0 +1,6 @@ +module_name = "Módulo Ejemplo" +module_desc = "Este es un ejemplo de estructura y uso de módulo en Batflat." + +index = "¡Mira aquí!" +example = "¡Hola, Mundo!" +button = "Ir a la portada del módulo de ejemplo" diff --git a/inc/modules/sample/lang/es_spanish.ini b/inc/modules/sample/lang/es_spanish.ini new file mode 100644 index 0000000..1d172e4 --- /dev/null +++ b/inc/modules/sample/lang/es_spanish.ini @@ -0,0 +1,2 @@ +title = "Título del Módulo de Ejemplo" +desc = "La descripción de la página" diff --git a/inc/modules/searchbox/lang/admin/es_spanish.ini b/inc/modules/searchbox/lang/admin/es_spanish.ini new file mode 100644 index 0000000..e6673d8 --- /dev/null +++ b/inc/modules/searchbox/lang/admin/es_spanish.ini @@ -0,0 +1,2 @@ +module_name = "Cuadro de Búsquedas" +module_desc = "Te permite buscar por páginas y artículos del blog que contengan la frase introducida." diff --git a/inc/modules/searchbox/lang/es_spanish.ini b/inc/modules/searchbox/lang/es_spanish.ini new file mode 100644 index 0000000..fe36a67 --- /dev/null +++ b/inc/modules/searchbox/lang/es_spanish.ini @@ -0,0 +1,4 @@ +placeholder = "Buscar..." +results_for = "Resultado para la búsqueda '%s'" +too_short_phrase = "¡La frase indicada es muy breve! Por favor, indique al menos %d caracteres." +no_results = "No se han encontrado resultados para '%s'." diff --git a/inc/modules/settings/lang/admin/es_spanish.ini b/inc/modules/settings/lang/admin/es_spanish.ini new file mode 100644 index 0000000..b22b198 --- /dev/null +++ b/inc/modules/settings/lang/admin/es_spanish.ini @@ -0,0 +1,71 @@ +module_name = "Parámetros" +module_desc = "Parámetros básicos de Batflat." + +general = "General" +translation = "Traducción" +system_info = "Información del sistema" +php_version = "Versión PHP" +sqlite_version = "Versión SQLite" +system_size = "Tamaño de Batflat" +sqlite_size = "Tamaño de la base de datos" +other = "Otros" +updates = "Actualizaciones" +title = "Título del sitio" +description = "Descripción" +keywords = "Palabras clave" +homepage = "Inicio" +site_lang = "Idioma del sitio" +admin_lang = "Idioma de administración" +footer = "Pié de página" +editor = "Editor" +timezone = "Zona horaria" + +version = "Versión" +license = "Licencia" +check_updates = "Comprobar actualizaciones" +update_fopen_error = "Imposible actualizar el sistema con la configuración del servidor actual." +update_curl_error = "Imposible actualizar el sistema con la configuración del servidor actual." + +author = "Autor" +active = "Activo" +activate = "Activar" +theme_changed = "La plantilla por defecto fue cambiada." + +update_info = "¡Gracias a las actualizaciones de Batflat el sistema se mantiene seguro y al día!" +update_available = "Nueva versión disponible" +update_button = "Actualizar" +update_check = "Comprobar actualización" +up_to_date = "¡Genial! Batflat está al día :)" +update_newer_version = "Es raro pero... tienes una versión más actual que la nuestra :D" + +save_settings_success = "Parámetros correctamente guardados." +save_settings_failure = "Fallo al guardar los parámetros." +save_file_success = "Fichero correctamente guardado." +save_file_failure = "Imposible guardar fichero." + +file_lock = "Modificación de fichero deshabilitada. No puede moficiar ficheros mediante el panel de administración." + +notranslation = "Sin traducción" +new_lang = "Nuevo idioma" +new_lang_failure = "Nombre de idioma incorrecto. Debería corresponder al patrón: en_english." +new_lang_exists = "Idioma ya existente." +new_lang_success = "Idioma correctamente creado." +new_lang_create_fail = "Imposible crear el idioma." +lang_export = "Exportar idioma" +lang_import = "Importar idioma" +lang_import_success = "Idioma correctamente actualizado." +lang_import_error = "El paquete contiene uno o más ficheros ilegales." +lang_upload = "Elija el fichero ZIP conteniendo el paquete del idioma." + +license_key = "Clave Licencia" +license_invalid_key = "Clave Licencia Incorrecta." +license_good_key = "Clave Licencia correctamente aceptada." +confirm_downgrade = "¿Seguro que desea pasar Batflat a una Licencia Libre?" +downgrade = "Desactualizar a Licencia Libre" +upgrade = "Actualizar a Licencia Comercial" +free = "Libre" +commercial = "Comercial" +invalid_license = "Licencia incorrecta" + +get_commercial = "Si desea crear un sitio para sus clientes, elija una licencia comercial." +activate_info = "Para activar la versión comercial del sistema, indique el código de licencia. La encontrará en el correo de confirmación de la compra de la licencia BatFlat." diff --git a/inc/modules/sitemap/lang/admin/es_spanish.ini b/inc/modules/sitemap/lang/admin/es_spanish.ini new file mode 100644 index 0000000..0ba7ff3 --- /dev/null +++ b/inc/modules/sitemap/lang/admin/es_spanish.ini @@ -0,0 +1,2 @@ +module_name = "Generador de Mapa del Sitio" +module_desc = "Generador Sitemap.xml para Batflat." diff --git a/inc/modules/snippets/lang/admin/es_spanish.ini b/inc/modules/snippets/lang/admin/es_spanish.ini new file mode 100644 index 0000000..13a954f --- /dev/null +++ b/inc/modules/snippets/lang/admin/es_spanish.ini @@ -0,0 +1,12 @@ +module_name = "Aportes" +module_desc = "Muestra tus aportaciones de código en esta página." + +add = "Añadir" +edit = "Modificar aporte" +save_success = "Aporte correctamente guardado." +save_failure = "Fallo al guardar el Aporte." +content = "Contenido" +delete_success = "Aporte correctamente eliminado." +delete_failure = "Imposible eliminar Aporte." +delete_confirm = "¿Seguro que desea eliminar el Aporte seleccionado?" +already_exists = "Un Aporte con ese nombre ya existe." diff --git a/inc/modules/statistics/lang/admin/es_spanish.ini b/inc/modules/statistics/lang/admin/es_spanish.ini new file mode 100644 index 0000000..09e3977 --- /dev/null +++ b/inc/modules/statistics/lang/admin/es_spanish.ini @@ -0,0 +1,27 @@ +module_name = "Estadísticas" +module_desc = "Proporciona información estadística sencilla sobre el sitio." +unique_today = "Único de Hoy" +today_visits = "Visita de Hoy" +online = "Online" +unique = "Único" +all_unique = "Todos los únicos" +visits = "Visitas" +all_visits = "Todas visitas" +show = "Ver todo" +all_referrals = "Todos las referidas" +yesterday = "Ayer" +7days = "Últimos 7 días" +30days = "Últimos 30 días" +total = "Total" +target = "Objetivo" +pages = "Páginas" +os = "Sistema Operativos" +browsers = "Navegadores" +countries = "Países" +referrals = "URLs referidas" +direct_visit = "visita directa" +url = "Url" +all_pages = "Todas las visitas al sitio" +referrals_from = "Todas las páginas referidas desde" +from_address = "Desde la url" +stats_page = "Estadísticas por página" diff --git a/inc/modules/users/lang/admin/es_spanish.ini b/inc/modules/users/lang/admin/es_spanish.ini new file mode 100644 index 0000000..bdc4a1d --- /dev/null +++ b/inc/modules/users/lang/admin/es_spanish.ini @@ -0,0 +1,23 @@ +module_name = "Usuarios" +module_desc = "Gestión de cuentas de usuarios." + +add_new = "Añadir usuario" +new_user = "Nuevo usuario" +edit_user = "Modificar usuario" +display_name = "Nombre mostrado" +description = "Breve descripción sobre ti" +photo = "Avatar / Foto" +email = "E-mail" +new_password = "Nueva contraseña..." +access = "Accesso" +role = "Rol" +user = "Usuario" +admin = "Administrador" +save_success = "Usuario guardado correctamente." +save_failure = "Fallo al guardar usuario." +delete_success = "Usuario eliminado correctamente." +delete_failure = "Imposible eliminar usuario." +delete_confirm = "¿Seguro que desea eliminar el usuario seleccionado?" +user_already_exists = "Usuario ya existente." +wrong_email = "E-mail no es correcto!" +too_short_pswd = "La longitud mínima de la contraseña es de 5 caracteres."