summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2016-09-24 16:13:55 -0400
committerFrederic Guillot <fred@kanboard.net>2016-09-24 16:13:55 -0400
commit88549330fa16e6e500e536b54d6c1d8316a05291 (patch)
tree83f8eb9a951a89b26eefc20bdcaddeb30b0e46b6 /doc
parent15dbf5c7fd5440b24e2b8e7a1505755f842031b8 (diff)
Merge manually #2694
Diffstat (limited to 'doc')
-rw-r--r--doc/es_ES/api-category-procedures.markdown172
-rw-r--r--doc/es_ES/api-column-procedures.markdown229
-rwxr-xr-xdoc/es_ES/api-group-procedures.markdown174
-rw-r--r--doc/es_ES/api-internal-task-link-procedures.markdown187
-rw-r--r--doc/es_ES/api-link-procedures.markdown285
-rwxr-xr-xdoc/es_ES/creating-projects.markdown40
-rwxr-xr-xdoc/es_ES/creating-tasks.markdown31
-rw-r--r--doc/es_ES/heroku.markdown38
-rwxr-xr-xdoc/es_ES/requirements.markdown111
-rwxr-xr-xdoc/es_ES/reverse-proxy-authentication.markdown64
-rwxr-xr-xdoc/es_ES/swimlanes.markdown34
11 files changed, 1365 insertions, 0 deletions
diff --git a/doc/es_ES/api-category-procedures.markdown b/doc/es_ES/api-category-procedures.markdown
new file mode 100644
index 00000000..eb5dc223
--- /dev/null
+++ b/doc/es_ES/api-category-procedures.markdown
@@ -0,0 +1,172 @@
+API Procedimientos de Categoría
+=======================
+
+## createCategory
+
+- Propósito: **Crea una nueva categoría**
+- Parámetros:
+- **project_id** (integer, required)
+ - **name** (string, required, must be unique for the given project)
+- Resultado en caso exitoso: **category_id**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "createCategory",
+ "id": 541909890,
+ "params": {
+ "name": "Super category",
+ "project_id": 1
+ }
+}
+```
+
+Ejemplo de respuesta::
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 541909890,
+ "result": 4
+}
+```
+
+## getCategory
+
+- Propósito: **Obtiene información de la categoría**
+- Parámetros:
+ - **category_id** (integer, required)
+- Resultado en caso exitoso: **category properties**
+- Resultado en caso fallido: **null**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getCategory",
+ "id": 203539163,
+ "params": {
+ "category_id": 1
+ }
+}
+```
+
+Ejemplo de respuesta::
+
+```json
+{
+
+ "jsonrpc": "2.0",
+ "id": 203539163,
+ "result": {
+ "id": "1",
+ "name": "Super category",
+ "project_id": "1"
+ }
+}
+```
+
+## getAllCategories
+
+- Propósito: **Obtiene todas las categorías disponibles**
+- Parámetros:
+ - **project_id** (integer, required)
+- Resultado en caso exitoso: **List of categories**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getAllCategories",
+ "id": 1261777968,
+ "params": {
+ "project_id": 1
+ }
+}
+```
+
+Ejemplo de respuesta::
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 1261777968,
+ "result": [
+ {
+ "id": "1",
+ "name": "Super category",
+ "project_id": "1"
+ }
+ ]
+}
+```
+
+## updateCategory
+
+- Propósito: **Actualiza una categoría**
+- Parámetros:
+ - **id** (integer, required)
+ - **name** (string, required)
+- Resultado en caso exitoso: **true**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "updateCategory",
+ "id": 570195391,
+ "params": {
+ "id": 1,
+ "name": "Renamed category"
+ }
+}
+```
+
+Ejemplo de respuesta::
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 570195391,
+ "result": true
+}
+```
+
+## removeCategory
+
+- Propósito: **Elimina una categoría**
+- Parámetros:
+ - **category_id** (integer)
+- Resultado en caso exitoso: **true**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "removeCategory",
+ "id": 88225706,
+ "params": {
+ "category_id": 1
+ }
+}
+```
+
+Ejemplo de respuesta::
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 88225706,
+ "result": true
+}
+```
diff --git a/doc/es_ES/api-column-procedures.markdown b/doc/es_ES/api-column-procedures.markdown
new file mode 100644
index 00000000..ff9b853d
--- /dev/null
+++ b/doc/es_ES/api-column-procedures.markdown
@@ -0,0 +1,229 @@
+API Procedimientos de columna
+=====================
+
+## getColumns
+
+- Propósito: **Obtiene toda la información de columnas para un proyecto dado**
+- Parametros:
+ - **project_id** (integer, required)
+- Resultados en caso exitoso: **columns properties**
+- Resultados en caso fallido: **empty list**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getColumns",
+ "id": 887036325,
+ "params": [
+ 1
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 887036325,
+ "result": [
+ {
+ "id": "1",
+ "title": "Backlog",
+ "position": "1",
+ "project_id": "1",
+ "task_limit": "0"
+ },
+ {
+ "id": "2",
+ "title": "Ready",
+ "position": "2",
+ "project_id": "1",
+ "task_limit": "0"
+ },
+ {
+ "id": "3",
+ "title": "Work in progress",
+ "position": "3",
+ "project_id": "1",
+ "task_limit": "0"
+ }
+ ]
+}
+```
+
+## getColumn
+
+- Propósito: **Obtiene una columna individual**
+- Parametros:
+ - **column_id** (integer, required)
+- Resultados en caso exitoso: **column properties**
+- Resultados en caso fallido: **null**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getColumn",
+ "id": 1242049935,
+ "params": [
+ 2
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 1242049935,
+ "result": {
+ "id": "2",
+ "title": "Youpi",
+ "position": "2",
+ "project_id": "1",
+ "task_limit": "5"
+ }
+}
+```
+
+## changeColumnPosition
+
+- Propósito: **Cambia la posición de columna**
+- Parametros:
+ - **project_id** (integer, required)
+ - **column_id** (integer, required)
+ - **position** (integer, required, must be >= 1)
+- Resultados en caso exitoso: **true**
+- Resultados en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "changeColumnPosition",
+ "id": 99275573,
+ "params": [
+ 1,
+ 2,
+ 3
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 99275573,
+ "result": true
+}
+```
+
+## updateColumn
+
+- Propósito: **Actualiza las propiedades de la columna**
+- Parametros:
+ - **column_id** (integer, required)
+ - **title** (string, required)
+ - **task_limit** (integer, optional)
+ - **description** (string, optional)
+- Resultados en caso exitoso: **true**
+- Resultados en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "updateColumn",
+ "id": 480740641,
+ "params": [
+ 2,
+ "Boo",
+ 5
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 480740641,
+ "result": true
+}
+```
+
+## addColumn
+
+- Propósito: **Agrega una nueva columna**
+- Parametros:
+ - **project_id** (integer, required)
+ - **title** (string, required)
+ - **task_limit** (integer, optional)
+ - **description** (string, optional)
+- Resultados en caso exitoso: **column_id**
+- Resultados en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "addColumn",
+ "id": 638544704,
+ "params": [
+ 1,
+ "Boo"
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 638544704,
+ "result": 5
+}
+```
+
+## removeColumn
+
+- Propósito: **Elimina una columna**
+- Parametros:
+ - **column_id** (integer, required)
+- Resultados en caso exitoso: **true**
+- Resultados en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "removeColumn",
+ "id": 1433237746,
+ "params": [
+ 1
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 1433237746,
+ "result": true
+}
+```
diff --git a/doc/es_ES/api-group-procedures.markdown b/doc/es_ES/api-group-procedures.markdown
new file mode 100755
index 00000000..cb11fb96
--- /dev/null
+++ b/doc/es_ES/api-group-procedures.markdown
@@ -0,0 +1,174 @@
+Group API Procedures
+====================
+
+## createGroup
+
+- Purpose: **Create a new group**
+- Parameters:
+ - **name** (string, required)
+ - **external_id** (string, optional)
+- Result on success: **link_id**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "createGroup",
+ "id": 1416806551,
+ "params": [
+ "My Group B",
+ "1234"
+ ]
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 1416806551,
+ "result": 2
+}
+```
+
+## updateGroup
+
+- Purpose: **Update a group**
+- Parameters:
+ - **group_id** (integer, required)
+ - **name** (string, optional)
+ - **external_id** (string, optional)
+- Result on success: **true**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "updateGroup",
+ "id": 866078030,
+ "params": {
+ "group_id": "1",
+ "name": "ABC",
+ "external_id": "something"
+ }
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 866078030,
+ "result": true
+}
+```
+
+## removeGroup
+
+- Purpose: **Remove a group**
+- Parameters:
+ - **group_id** (integer, required)
+- Result on success: **true**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "removeGroup",
+ "id": 566000661,
+ "params": [
+ "1"
+ ]
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 566000661,
+ "result": true
+}
+```
+
+## getGroup
+
+- Purpose: **Get one group**
+- Parameters:
+ - **group_id** (integer, required)
+- Result on success: **Group dictionary**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getGroup",
+ "id": 1968647622,
+ "params": [
+ "1"
+ ]
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 1968647622,
+ "result": {
+ "id": "1",
+ "external_id": "",
+ "name": "My Group A"
+ }
+}
+```
+
+## getAllGroups
+
+- Purpose: **Get all groups**
+- Parameters: none
+- Result on success: **list of groups**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getAllGroups",
+ "id": 546070742
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 546070742,
+ "result": [
+ {
+ "id": "1",
+ "external_id": "",
+ "name": "My Group A"
+ },
+ {
+ "id": "2",
+ "external_id": "1234",
+ "name": "My Group B"
+ }
+ ]
+}
+```
diff --git a/doc/es_ES/api-internal-task-link-procedures.markdown b/doc/es_ES/api-internal-task-link-procedures.markdown
new file mode 100644
index 00000000..43d410d7
--- /dev/null
+++ b/doc/es_ES/api-internal-task-link-procedures.markdown
@@ -0,0 +1,187 @@
+API Procedimientos de Tareas Internas de Enlace
+=================================
+
+## createTaskLink
+
+- Propósito: **Crea un enlace entre dos tareas**
+- Parametros:
+ - **task_id** (integer, required)
+ - **opposite_task_id** (integer, required)
+ - **link_id** (integer, required)
+- Resultado en caso exitoso: **task_link_id**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "createTaskLink",
+ "id": 509742912,
+ "params": [
+ 2,
+ 3,
+ 1
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 509742912,
+ "result": 1
+}
+```
+
+## updateTaskLink
+
+- Propósito: **Actualiza enlace de tarea**
+- Parametros:
+ - **task_link_id** (integer, required)
+ - **task_id** (integer, required)
+ - **opposite_task_id** (integer, required)
+ - **link_id** (integer, required)
+- Resultado en caso exitoso: **true**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "updateTaskLink",
+ "id": 669037109,
+ "params": [
+ 1,
+ 2,
+ 4,
+ 2
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 669037109,
+ "result": true
+}
+```
+
+## getTaskLinkById
+
+- Propósito: **Obtiene un enlace de tarea**
+- Parametros:
+ - **task_link_id** (integer, required)
+- Resultado en caso exitoso: **task link properties**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getTaskLinkById",
+ "id": 809885202,
+ "params": [
+ 1
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 809885202,
+ "result": {
+ "id": "1",
+ "link_id": "1",
+ "task_id": "2",
+ "opposite_task_id": "3"
+ }
+}
+```
+
+## getAllTaskLinks
+
+- Propósito: **Obtiene todos los enlaces relacionados a una tarea**
+- Parametros:
+ - **task_id** (integer, required)
+- Resultado en caso exitoso: **list of task link**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getAllTaskLinks",
+ "id": 810848359,
+ "params": [
+ 2
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 810848359,
+ "result": [
+ {
+ "id": "1",
+ "task_id": "3",
+ "label": "relates to",
+ "title": "B",
+ "is_active": "1",
+ "project_id": "1",
+ "task_time_spent": "0",
+ "task_time_estimated": "0",
+ "task_assignee_id": "0",
+ "task_assignee_username": null,
+ "task_assignee_name": null,
+ "column_title": "Backlog"
+ }
+ ]
+}
+```
+
+## removeTaskLink
+
+- Propósito: **Elimina un enlace entre dos tareas**
+- Parametros:
+ - **task_link_id** (integer, required)
+- Resultado en caso exitoso: **true**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "removeTaskLink",
+ "id": 473028226,
+ "params": [
+ 1
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 473028226,
+ "result": true
+}
+```
diff --git a/doc/es_ES/api-link-procedures.markdown b/doc/es_ES/api-link-procedures.markdown
new file mode 100644
index 00000000..2ed08ecd
--- /dev/null
+++ b/doc/es_ES/api-link-procedures.markdown
@@ -0,0 +1,285 @@
+API Procedimientos de enlace
+===================
+
+## getAllLinks
+
+- Propósito: **Obtiene la lista de posibles relaciones entre tareas**
+- Parametros: ninguno
+- Resultado en caso exitoso: **List of links**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getAllLinks",
+ "id": 113057196
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 113057196,
+ "result": [
+ {
+ "id": "1",
+ "label": "relates to",
+ "opposite_id": "0"
+ },
+ {
+ "id": "2",
+ "label": "blocks",
+ "opposite_id": "3"
+ },
+ {
+ "id": "3",
+ "label": "is blocked by",
+ "opposite_id": "2"
+ },
+ {
+ "id": "4",
+ "label": "duplicates",
+ "opposite_id": "5"
+ },
+ {
+ "id": "5",
+ "label": "is duplicated by",
+ "opposite_id": "4"
+ },
+ {
+ "id": "6",
+ "label": "is a child of",
+ "opposite_id": "7"
+ },
+ {
+ "id": "7",
+ "label": "is a parent of",
+ "opposite_id": "6"
+ },
+ {
+ "id": "8",
+ "label": "targets milestone",
+ "opposite_id": "9"
+ },
+ {
+ "id": "9",
+ "label": "is a milestone of",
+ "opposite_id": "8"
+ },
+ {
+ "id": "10",
+ "label": "fixes",
+ "opposite_id": "11"
+ },
+ {
+ "id": "11",
+ "label": "is fixed by",
+ "opposite_id": "10"
+ }
+ ]
+}
+```
+
+## getOppositeLinkId
+
+- Propósito: **Obtiene el identificador de enlace opuesto de un enlace de tarea**
+- Parametros:
+ - **link_id** (integer, required)
+- Resultado en caso exitoso: **link_id**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getOppositeLinkId",
+ "id": 407062448,
+ "params": [
+ 2
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 407062448,
+ "result": "3"
+}
+```
+
+## getLinkByLabel
+
+- Propósito: **Obtiene un enlace por etiqueta**
+- Parametros:
+ - **label** (integer, required)
+- Resultado en caso exitoso: **link properties**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getLinkByLabel",
+ "id": 1796123316,
+ "params": [
+ "blocks"
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 1796123316,
+ "result": {
+ "id": "2",
+ "label": "blocks",
+ "opposite_id": "3"
+ }
+}
+```
+
+## getLinkById
+
+- Propósito: **Obtiene un enlace por identificador**
+- Parametros:
+ - **link_id** (integer, required)
+- Resultado en caso exitoso: **link properties**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getLinkById",
+ "id": 1190238402,
+ "params": [
+ 4
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 1190238402,
+ "result": {
+ "id": "4",
+ "label": "duplicates",
+ "opposite_id": "5"
+ }
+}
+```
+
+## createLink
+
+- Propósito: **Crea una nueva relación de tarea**
+- Parametros:
+ - **label** (integer, required)
+ - **opposite_label** (integer, optional)
+- Resultado en caso exitoso: **link_id**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "createLink",
+ "id": 1040237496,
+ "params": [
+ "foo",
+ "bar"
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 1040237496,
+ "result": 13
+}
+```
+
+## updateLink
+
+- Propósito: **Actualiza un enlace**
+- Parametros:
+ - **link_id** (integer, required)
+ - **opposite_link_id** (integer, required)
+ - **label** (string, required)
+- Resultado en caso exitoso: **true**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "updateLink",
+ "id": 2110446926,
+ "params": [
+ "14",
+ "12",
+ "boo"
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 2110446926,
+ "result": true
+}
+```
+
+## removeLink
+
+- Propósito: **Elimina un enlace**
+- Parametros:
+ - **link_id** (integer, required)
+- Resultado en caso exitoso: **true**
+- Resultado en caso fallido: **false**
+
+Ejemplo de petición:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "removeLink",
+ "id": 2136522739,
+ "params": [
+ "14"
+ ]
+}
+```
+
+Ejemplo de respuesta:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 2136522739,
+ "result": true
+}
+```
diff --git a/doc/es_ES/creating-projects.markdown b/doc/es_ES/creating-projects.markdown
new file mode 100755
index 00000000..87510d12
--- /dev/null
+++ b/doc/es_ES/creating-projects.markdown
@@ -0,0 +1,40 @@
+Creación de proyectos
+=================
+
+Kanboard puede manejar múltiples proyectos. Hay dos tipos de proyectos
+
+- Proyectos por equipos
+- Proyectos privados pra una sola persona
+
+Creando proyectos para multiples usuarios
+------------------------------------------
+
+- Solamente los administradores y los administradores de proyecto pueden crear los proyectos.
+- La gestión de usuarios está disponible
+
+Desde el dashboard, click en el link **Nuevo proyecto**:
+
+![Formulario para la creación de proyecto](screenshots/new-project.png)
+
+Es muy facil , solo tienes que buscar un nombre para tu proyecto!
+
+Crear un proyecto privado
+--------------------------
+
+- Cualquiera puede crear un proyecto privado
+- **No hay** gestión de usuarios
+- Sólo el propietario y los administradores pueden acceder al proyecto
+
+Desde el dashboard, haga clic en el enlace **Nuevo proyecto privado**.
+
+
+Crear proyectos desde otro proyecto
+--------------------------------------
+
+Cuando tu creas un nuevo proyecto, tu puedes escoger o duplicar las propiedades de otro proyecto :
+
+- Permisos
+- Acciones
+- Swimlanes
+- Categorias
+- Tareas
diff --git a/doc/es_ES/creating-tasks.markdown b/doc/es_ES/creating-tasks.markdown
new file mode 100755
index 00000000..970be533
--- /dev/null
+++ b/doc/es_ES/creating-tasks.markdown
@@ -0,0 +1,31 @@
+Creación de tarea
+==============
+
+Desde el tablero, haga clic en el signo más **plus** al lado del nombre de la columna
+
+![Creación de tarea desde el tablero](screenshots/task-creation-board.png)
+
+A continuación, aparece el formulario de creación de tareas:
+
+![Formulario de creación de tareas](screenshots/task-creation-form.png)
+
+Descripción de campos:
+
+- **Titulo**: El título de su tarea, que se podrá ver en el tablero.
+- **Descripción**: Descripción que usa el formato [Markdown](syntax-guide.markdown).
+- **Tags**: Lista de etiquetas asociadas a las tareas
+- **Crear otra tarea**:Marque esta casilla si desea crear una tarea similar (serán pre-llenados algunos campos)..
+- **Color**: Escoger el color de la tarjeta.
+- **Asignado**: Persona que trabajara en la tarea.
+- **Categoría**: Sólo una categoría puede ser asignado a una tarea (visibles sólo si los proyectos tienen categorías).
+- **Columna**: La columna en la que se creó la tarea, su tarea se coloca en la parte inferior.
+- **Prioridad**: AL Prioridad de la tarea, el intervalo se puede definir en la configuración del proyecto, los valores por defecto son P0 a P3.
+- **Complejidad**: Se utiliza en la gestión de proyectos ágiles (Scrum), los puntos de complejidad o de la historia es un número que le dice al equipo lo difícil es la historia. A menudo, las personas utilizan la serie de Fibonacci.
+- **Referencia**: ID externo para la tarea, por ejemplo, puede ser el número de entradas que provienen de otro sistema
+- **Estimación original** : Estimación de horas para completar la tarea.
+- **Tiempo transcurrido** : El tiempo dedicado a trabajar en la tarea.
+- **Fecha de Inicio** : Se trata de un campo de fecha y hora.
+- **Fecha de vencimiento** : Las tareas vencidas se tiene una fecha de vencimiento próxima rojo y las fechas de vencimiento será de color negro en el tablero. Varios formato de fecha se aceptan además del selector de fecha.
+
+
+Con el enlace de vista previa, se puede ver la descripción de la tarea convertiendo la sintaxis de Markdown.
diff --git a/doc/es_ES/heroku.markdown b/doc/es_ES/heroku.markdown
new file mode 100644
index 00000000..8de8b4da
--- /dev/null
+++ b/doc/es_ES/heroku.markdown
@@ -0,0 +1,38 @@
+Implementar Kanboard en Heroku
+=========================
+
+Usted puede tratar de forma gratuita en Kanboard[Heroku](https://www.heroku.com/).
+Puede utilizar este botón de un solo clic instalar o siga las instrucciones del manual abajo:
+
+[![Deploy](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy?template=https://github.com/kanboard/kanboard)
+
+Requerimientos
+------------
+- Cuenta de Heroku, se puede utilizar una cuenta gratuita
+- Herramientas de línea de comandos instalados Heroku
+
+Manual de Instrucciones
+-------------------
+
+```bash
+# Obtener la ultima version de desarrollo
+git clone https://github.com/kanboard/kanboard.git
+cd kanboard
+
+# Empuje el código para Heroku (También puede utilizar SSH si Git sobre HTTP no funciona)
+heroku create
+git push heroku master
+
+# Iniciar un nuevo banco de pruebas con una base de datos PostgreSQL
+heroku ps:scale web=1
+heroku addons:add heroku-postgresql:hobby-dev
+
+# Abra su navegador
+heroku open
+```
+
+Limitaciones
+-----------
+
+- El almacenamiento de Heroku es efímera, eso significa que los archivos cargados a través de Kanboard no son persistentes después de un reinicio. Es posible que desee instalar un plugin para almacenar sus archivos en un proveedor de almacenamiento en la nube como [Amazon S3](https://github.com/kanboard/plugin-s3).
+- Algunas funciones de Kanboard requieren que ejecute [un trabajo en segundo plano todos los días] (cronjob.markdown).
diff --git a/doc/es_ES/requirements.markdown b/doc/es_ES/requirements.markdown
new file mode 100755
index 00000000..57c90110
--- /dev/null
+++ b/doc/es_ES/requirements.markdown
@@ -0,0 +1,111 @@
+Requerimientos
+===============
+
+Lado del servidor
+--------------------
+
+### Sistemas operativos compatibles
+
+| Sistemas operativos |
+|--------------------------------------|
+| Linux Ubuntu Xenial Xerus 16.04 LTS |
+| Linux Ubuntu Trusty 14.04 LTS |
+| Linux Centos 6.x |
+| Linux Centos 7.x |
+| Linux Redhat 6.x |
+| Linux Redhat 7.x |
+| Linux Debian 8 |
+| FreeBSD 10.x |
+| Microsoft Windows 2012 R2 |
+| Microsoft Windows 2008 |
+
+### Base de datos compatibles
+
+| Base de datos |
+|--------------------|
+| Sqlite 3.x |
+| Mysql >= 5.5 |
+| MariaDB >= 10 |
+| Postgresql >= 9.3 |
+
+Qué base de datos para elegir?
+
+| Tipo | Uso |
+|-----------------|-----------------------------------------------------|
+| Sqlite | un solo usuario o equipo pequeño (casi no hay concurrencia) |
+| Mysql/Postgres | Equipo grande, configuración de alta disponibilidad |
+
+No usar Sqlite en montajes de NFS, use Sqlite solo cuando tengas un disco con Fast I/O
+
+### Servidores Web Compatibles
+
+| Servidores Web |
+|--------------------|
+| Apache HTTP Server |
+| Nginx |
+| Microsoft IIS |
+
+Kanboard esta pre configurado para trabajar con Apache (URL rewriting).
+
+### Versiones de PHP
+
+| Versión de PHP |
+|----------------|
+| PHP >= 5.3.9 |
+| PHP 5.4 |
+| PHP 5.5 |
+| PHP 5.6 |
+| PHP 7.x |
+
+### PHP Extensiones Requeridas
+
+| PHP Extensiones Requeridas | Nota |
+|----------------------------|-------------------------------|
+| pdo_sqlite | Solo si usas Sqlite |
+| pdo_mysql | Solo si usas Mysql/MariaDB |
+| pdo_pgsql | Solo si usas Postgres |
+| gd | |
+| mbstring | |
+| openssl | |
+| json | |
+| hash | |
+| ctype | |
+| session | |
+| ldap | Solamente para autenticación LDAP |
+| Zend OPcache | Recomendado |
+
+### Extensiones PHP opcionales
+
+| PHP Extensiones Requeridas | Nota |
+|----------------------------|--------------------------------------------|
+| zip | Usado para instalar plugins desde Kanboard |
+
+### Recomendaciones
+
+- Usar sistemas operativos modernos de Linux o Unix.
+- El mejor performace se obtienen con la última versión de PHP junto con la operación de OPcode esta activado.
+
+
+Lado del cliente
+----------------
+
+### Browsers [Navegadores]
+
+Siempre usar el navegador mas moderno o la ultima versión posible:
+
+| Browser |
+|---------------------------------------|
+| Safari |
+| Google Chrome |
+| Mozilla Firefox |
+| Microsoft Internet Explorer >= 11 |
+| Microsoft Edge |
+
+### Dispositivos
+
+| Device | Resolución de la pantalla |
+|-------------------|--------------------|
+| Laptop o desktop | >= 1366 x 768 |
+| Tablet | >= 1024 x 768 |
+
+Kanboard aún no está optimizado para smartphones. Está funcionando, pero la interfaz de usuario no es muy cómoda de usar.
diff --git a/doc/es_ES/reverse-proxy-authentication.markdown b/doc/es_ES/reverse-proxy-authentication.markdown
new file mode 100755
index 00000000..f8a0719f
--- /dev/null
+++ b/doc/es_ES/reverse-proxy-authentication.markdown
@@ -0,0 +1,64 @@
+Autenticación por proxy inverso
+============================
+
+Este metodo de autenticación a menudo es usado por [SSO](http://en.wikipedia.org/wiki/Single_sign-on) (Single Sign-On) especialmente para organizaciones mayores.
+
+La autenticación se realiza mediante otro sistema, Kanboard no conoce su contraseña y supongamos que ya está autenticado.
+
+Requerimentos
+------------
+
+- Un proxy inverso bien configurado
+
+o
+
+- Apache Auth en el mismo servidor
+
+
+¿Como funciona esto?
+-------------------
+
+1. Su proxy inverso autentica al usuario y envia el nombre de usuario a través de una cabecera HTTP.
+2. Kanboard recuperar el nombre de usuario de la solicitud
+ - El usuario se crea automáticamente si es necesario
+ - Abrir una nueva sesión Kanboard sin ningún símbolo asumiendo que es válida
+
+Instrucciones de instalación
+----------------------------
+
+### Configuración de su proxy inverso
+
+Esto esta fuera del alcance de esta documentación.
+Debería comprobar la conexión del usuario ya que es enviado por el proxy inverso utilizando una cabecera HTTP.
+
+### Configuración de Kanboard
+
+Crear un archivo `config.php` copiar el archivo` config.default.php`:
+
+```php
+<?php
+
+// Activar / desactivar la autenticación del proxy inverso
+define('REVERSE_PROXY_AUTH', true); // Set this value to true
+
+// La cabecera HTTP para recuperar. Si no se especifica, el valor por defecto es REMOTE_USER
+define('REVERSE_PROXY_USER_HEADER', 'REMOTE_USER');
+
+// El Kanboard predeterminado esta el administrador para su organización.
+// Ya que todo debe ser filtrada por el proxy inverso,
+// Debe tener un usuario administrador para el arranque.
+define('REVERSE_PROXY_DEFAULT_ADMIN', 'myadmin');
+
+// El dominio predeterminado para asumir la dirección de correo electrónico.
+// En caso de que el nombre de usuario no es una dirección de correo electrónico,
+// Se actualizará automáticamente como USER@mydomain.com
+define('REVERSE_PROXY_DEFAULT_DOMAIN', 'mydomain.com');
+```
+
+Notas:
+
+- Si el proxy esta en el mismo servidor Web que ejecuta Kanboard, según la [CGI protocol](http://www.ietf.org/rfc/rfc3875) el Header será `REMOTE_USER`. Por ejemplo, Apache añadir `REMOTE_USER` por defecto si` Require valid-usuario de la red se establece.
+
+- Si Apache es un proxy inverso a otro Apache corriendo Kanboard, la cabecera `REMOTE_USER` no se establece (mismo comportamiento con IIS y Nginx)
+
+- Si tu tienes un autentico reverse proxy, the [HTTP ICAP draft](http://tools.ietf.org/html/draft-stecher-icap-subid-00#section-3.4) proposes the header to be `X-Authenticated-User`. This de facto standard has been adopted by a number of tools.
diff --git a/doc/es_ES/swimlanes.markdown b/doc/es_ES/swimlanes.markdown
new file mode 100755
index 00000000..21e36754
--- /dev/null
+++ b/doc/es_ES/swimlanes.markdown
@@ -0,0 +1,34 @@
+Swimlanes
+=========
+
+Swimlanes son separaciones horizontales en tu tablero.
+Por ejemplo, es útil para separar las versiones de software, dividir las tareas en diferentes productos, equipos o lo que quieras.
+
+Tablero con swimlanes
+----------------------
+
+![Swimlanes](screenshots/swimlanes.png)
+
+- Tu puedes colapsar los swimlanes haciendo click en el icono de la izquierda
+- El swimlane por defecto se muestra siempre en la parte superior
+
+La gestión de swimlanes
+-----------------------
+
+- Todos los proyectos tienen un swimlane predeterminado.
+- Si hay más de un swimlane, el tablero mostrará todos swimlanes.
+- Usted puede arrastrar y soltar las tareas entre swimlanes.
+
+Para configurar swimlanes ir a la página de **configuración del proyecto ** y elija la sección **Swimlanes**.
+
+
+![Configuración Swimlanes](screenshots/swimlane-configuration.png)
+
+A partir de ahí, se puede añadir un nuevo swimlane o cambiar el nombre por defecto.
+También puede desactivar y cambiar la posición de los diferentes swimlanes.
+
+- El swimlane por defecto es siempre en la parte superior, pero se puede ocultarlo.
+- Swimlanes inactivas no se muestran en el tablero.
+- **Extracción de una swimlane no elimina tareas **, esas tareas se moverán a la swimlane predeterminada.
+
+