diff options
author | Frederic Guillot <fred@kanboard.net> | 2016-09-24 16:13:55 -0400 |
---|---|---|
committer | Frederic Guillot <fred@kanboard.net> | 2016-09-24 16:13:55 -0400 |
commit | 88549330fa16e6e500e536b54d6c1d8316a05291 (patch) | |
tree | 83f8eb9a951a89b26eefc20bdcaddeb30b0e46b6 | |
parent | 15dbf5c7fd5440b24e2b8e7a1505755f842031b8 (diff) |
Merge manually #2694
-rw-r--r-- | doc/es_ES/api-category-procedures.markdown | 172 | ||||
-rw-r--r-- | doc/es_ES/api-column-procedures.markdown | 229 | ||||
-rwxr-xr-x | doc/es_ES/api-group-procedures.markdown | 174 | ||||
-rw-r--r-- | doc/es_ES/api-internal-task-link-procedures.markdown | 187 | ||||
-rw-r--r-- | doc/es_ES/api-link-procedures.markdown | 285 | ||||
-rwxr-xr-x | doc/es_ES/creating-projects.markdown | 40 | ||||
-rwxr-xr-x | doc/es_ES/creating-tasks.markdown | 31 | ||||
-rw-r--r-- | doc/es_ES/heroku.markdown | 38 | ||||
-rwxr-xr-x | doc/es_ES/requirements.markdown | 111 | ||||
-rwxr-xr-x | doc/es_ES/reverse-proxy-authentication.markdown | 64 | ||||
-rwxr-xr-x | doc/es_ES/swimlanes.markdown | 34 |
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. + + |