mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-23 18:18:21 +08:00
@@ -1,7 +1,7 @@
|
|||||||
Respuestas
|
Respuestas
|
||||||
==========
|
==========
|
||||||
|
|
||||||
Cuando una aplicación finaliza la gestión de una [petición(request)](runtime-requests.md), genera un objeto [[yii\web\Response|response]] y lo envía al usuario final. El objeto response contiene información como el código de estado(status code) HTTP y cabeceras(headers) HTTP y body. El objetivo final del desarrollo de una aplicación Web es esencialmente construir objetos de response para varias peticiones.
|
Cuando una aplicación finaliza la gestión de una [petición (request)](runtime-requests.md), genera un objeto [[yii\web\Response|response]] y lo envía al usuario final. El objeto response contiene información tal como el código de estado (status code) HTTP, las cabeceras (headers) HTTP y el cuerpo (body). El objetivo final del desarrollo de una aplicación Web es esencialmente construir objetos response para varias peticiones.
|
||||||
|
|
||||||
En la mayoría de casos principalmente se debe tratar con [componentes de aplicación](structure-application-components.md) de tipo `response` que, por defecto, son una instancia de [[yii\web\Response]]. Sin embargo, Yii permite crear sus propios objetos `response` y enviarlos al usuario final tal y como se explica a continuación.
|
En la mayoría de casos principalmente se debe tratar con [componentes de aplicación](structure-application-components.md) de tipo `response` que, por defecto, son una instancia de [[yii\web\Response]]. Sin embargo, Yii permite crear sus propios objetos `response` y enviarlos al usuario final tal y como se explica a continuación.
|
||||||
|
|
||||||
@@ -9,19 +9,19 @@ En esta sección, se describirá como generar y enviar respuestas a usuarios fin
|
|||||||
|
|
||||||
## Códigos de Estado <a name="status-code"></a>
|
## Códigos de Estado <a name="status-code"></a>
|
||||||
|
|
||||||
Una de las primeras cosas que debería hacerse cuando se genera una respuesta es indicar si la petición se ha gestionado correctamente. Esto se indica asignando la propiedad [[yii\web\Response::statusCode]] a la que se le puede asignar cualquier valor valido dentro de los [códigos de estado HTTP](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html). Por ejemplo, para indicar que la petición se ha gestionado correctamente, se puede asignar el código de estado a 200, como en el siguiente ejemplo:
|
Una de las primeras cosas que debería hacerse cuando se genera una respuesta es indicar si la petición se ha gestionado correctamente. Esto se indica asignando la propiedad [[yii\web\Response::statusCode]] a la que se le puede asignar cualquier valor válido dentro de los [códigos de estado HTTP](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html). Por ejemplo, para indicar que la petición se ha gestionado correctamente, se puede asignar el código de estado a 200, como en el siguiente ejemplo:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
Yii::$app->response->statusCode = 200;
|
Yii::$app->response->statusCode = 200;
|
||||||
```
|
```
|
||||||
|
|
||||||
Sin embargo, en la mayoría de casos nos es necesario asignar explícitamente el codigo de estado. Esto se debe a que el valor por defecto de [[yii\web\Response::statusCode]] es 200. Y si se quiere indicar que la petición ha fallado, se puede lanzar una excepción HTTP apropiada como en el siguiente ejemplo:
|
Sin embargo, en la mayoría de casos nos es necesario asignar explícitamente el código de estado. Esto se debe a que el valor por defecto de [[yii\web\Response::statusCode]] es 200. Y si se quiere indicar que la petición ha fallado, se puede lanzar una excepción HTTP apropiada como en el siguiente ejemplo:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
throw new \yii\web\NotFoundHttpException;
|
throw new \yii\web\NotFoundHttpException;
|
||||||
```
|
```
|
||||||
|
|
||||||
Cuando el [error handler](runtime-handling-errors.md) captura una excepción, obtendrá el código de estado de la excepción y lo asignará a la respuesta. En el caso anterior, la excepción [[yii\web\NotFoundHttpException]] esta asociada al estado HTTP 404. En Yii existen las siguientes excepciones predefinidas.
|
Cuando el [error handler](runtime-handling-errors.md) captura una excepción, obtendrá el código de estado de la excepción y lo asignará a la respuesta. En el caso anterior, la excepción [[yii\web\NotFoundHttpException]] está asociada al estado HTTP 404. En Yii existen las siguientes excepciones predefinidas.
|
||||||
|
|
||||||
* [[yii\web\BadRequestHttpException]]: código de estado 400.
|
* [[yii\web\BadRequestHttpException]]: código de estado 400.
|
||||||
* [[yii\web\ConflictHttpException]]: código de estado 409.
|
* [[yii\web\ConflictHttpException]]: código de estado 409.
|
||||||
@@ -51,20 +51,20 @@ $headers = Yii::$app->response->headers;
|
|||||||
// añade una cabecera Pragma. Las cabeceras Pragma existentes NO se sobrescribirán.
|
// añade una cabecera Pragma. Las cabeceras Pragma existentes NO se sobrescribirán.
|
||||||
$headers->add('Pragma', 'no-cache');
|
$headers->add('Pragma', 'no-cache');
|
||||||
|
|
||||||
// asigna una cabecera Pragma. Cualquer cabecera Pragma existente sera descartada.
|
// asigna una cabecera Pragma. Cualquier cabecera Pragma existente será descartada.
|
||||||
$headers->add('Pragma', 'no-cache');
|
$headers->add('Pragma', 'no-cache');
|
||||||
|
|
||||||
// Elimina las cabeceras Pragma y devuelve los valores de las eliminadas en un array
|
// Elimina las cabeceras Pragma y devuelve los valores de las eliminadas en un array
|
||||||
$values = $headers->remove('Pragma');
|
$values = $headers->remove('Pragma');
|
||||||
```
|
```
|
||||||
|
|
||||||
>Info: Los nombres de las cabeceras case insensitive, es decir, no discriminan entre mayúsculas y minúsculas. Además, las nuevas cabeceras registradas no se enviaran al usuario hasta que se llame al método [[yii\web\Response::send()]].
|
>Información: Los nombres de las cabeceras case insensitive, es decir, no discriminan entre mayúsculas y minúsculas. Además, las nuevas cabeceras registradas no se enviarán al usuario hasta que se llame al método [[yii\web\Response::send()]].
|
||||||
|
|
||||||
## Body de la Respuesta<a name="response-body"></a>
|
## Cuerpo de la Respuesta<a name="response-body"></a>
|
||||||
|
|
||||||
La mayoría de las respuestas deben tener un body que contenga el contenido que se quiere mostrar a los usuarios finales.
|
La mayoría de las respuestas deben tener un cuerpo que contenga el contenido que se quiere mostrar a los usuarios finales.
|
||||||
|
|
||||||
Si ya se tiene un texto de body con formato, se puede asignar a la propiedad [[yii\web\Response::content]] de la respuesta. Por ejemplo:
|
Si ya se tiene un texto de cuerpo con formato, se puede asignar a la propiedad [[yii\web\Response::content]] del response. Por ejemplo:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
Yii::$app->response->content = 'hello world!';
|
Yii::$app->response->content = 'hello world!';
|
||||||
@@ -78,14 +78,14 @@ $response->format = \yii\web\Response::FORMAT_JSON;
|
|||||||
$response->data = ['message' => 'hello world'];
|
$response->data = ['message' => 'hello world'];
|
||||||
```
|
```
|
||||||
|
|
||||||
Yii soporta a los siguientes formatos de forma predeterminada, cada uno de ellos implementado por una classe [[yii\web\ResponseFormatterInterface|formatter]]. Se pueden personalizar los formatters o añadir nuevos sobrescribiendo la propiedad [[yii\web\Response::formatters]].
|
Yii soporta a los siguientes formatos de forma predeterminada, cada uno de ellos implementado por una clase [[yii\web\ResponseFormatterInterface|formatter]]. Se pueden personalizar los formatos o añadir nuevos sobrescribiendo la propiedad [[yii\web\Response::formatters]].
|
||||||
|
|
||||||
* [[yii\web\Response::FORMAT_HTML|HTML]]: implementado por [[yii\web\HtmlResponseFormatter]].
|
* [[yii\web\Response::FORMAT_HTML|HTML]]: implementado por [[yii\web\HtmlResponseFormatter]].
|
||||||
* [[yii\web\Response::FORMAT_XML|XML]]: implementado por [[yii\web\XmlResponseFormatter]].
|
* [[yii\web\Response::FORMAT_XML|XML]]: implementado por [[yii\web\XmlResponseFormatter]].
|
||||||
* [[yii\web\Response::FORMAT_JSON|JSON]]: implementado por [[yii\web\JsonResponseFormatter]].
|
* [[yii\web\Response::FORMAT_JSON|JSON]]: implementado por [[yii\web\JsonResponseFormatter]].
|
||||||
* [[yii\web\Response::FORMAT_JSONP|JSONP]]: implementado por [[yii\web\JsonResponseFormatter]].
|
* [[yii\web\Response::FORMAT_JSONP|JSONP]]: implementado por [[yii\web\JsonResponseFormatter]].
|
||||||
|
|
||||||
Mientras el body de la respuesta puede ser mostrado de forma explicita como se muestra a en el anterior ejemplo, en la mayoría de casos se puede asignar implícitamente por el valor retorno de los métodos de [acción](structure-controllers.md). El siguiente, es un ejemplo de uso común:
|
Mientras el cuerpo de la respuesta puede ser mostrado de forma explicita como se muestra a en el anterior ejemplo, en la mayoría de casos se puede asignar implícitamente por el valor de retorno de los métodos de [acción](structure-controllers.md). El siguiente, es un ejemplo de uso común:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
public function actionIndex()
|
public function actionIndex()
|
||||||
@@ -94,9 +94,9 @@ public function actionIndex()
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
La acción `index` anterior, devuelve el resultado renderizado de la vista `index`. el valor devuelto sera recogido por el componente `respuesta`, se le aplicará formato y se enviará al usuario final.
|
La acción `index` anterior, devuelve el resultado renderizado de la vista `index`. el valor devuelto será recogido por el componente `response`, se le aplicará formato y se enviará al usuario final.
|
||||||
|
|
||||||
Por defecto, el formato de respuesta es [[yii\web\Response::FORMAT_HTML|HTML]], solo se debe devolver un string en un método de acción. Si se quiere usar un formato de respuesta diferente, se debe asignar antes de devolver los datos. por ejemplo:
|
Por defecto, el formato de respuesta es [[yii\web\Response::FORMAT_HTML|HTML]], sólo se debe devolver un string en un método de acción. Si se quiere usar un formato de respuesta diferente, se debe asignar antes de devolver los datos. por ejemplo:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
public function actionInfo()
|
public function actionInfo()
|
||||||
@@ -109,7 +109,7 @@ public function actionInfo()
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Como se ha mencionado, además de usar el componente de aplicación `response` predeterminado, también se pueden crear objetos de respuesta propios y enviarlos a los usuarios finales. Se puede hacer retornando un objeto en el método de acción, como en el siguiente ejemplo:
|
Como se ha mencionado, además de usar el componente de aplicación `response` predeterminado, también se pueden crear objetos response propios y enviarlos a los usuarios finales. Se puede hacer retornando un objeto en el método de acción, como en el siguiente ejemplo:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
public function actionInfo()
|
public function actionInfo()
|
||||||
@@ -125,13 +125,13 @@ public function actionInfo()
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
>Nota: Si se crea un objeto de respuesta propio, no se podrán aprovechar las configuraciones asignadas para el componente `response` en la configuración de la aplicación. Sin embargo, se puede usar la [inyección de dependencias](concept-di-container.md) para aplicar la configuración común al nuevo objeto de respuesta.
|
>Nota: Si se crea un objeto response propio, no se podrán aprovechar las configuraciones asignadas para el componente `response` en la configuración de la aplicación. Sin embargo, se puede usar la [inyección de dependencias](concept-di-container.md) para aplicar la configuración común al nuevo objeto response.
|
||||||
|
|
||||||
## Redirección de Navegador <a name="browser-redirection"></a>
|
## Redirección del Navegador <a name="browser-redirection"></a>
|
||||||
|
|
||||||
La redirección de navegador se basa en el envío de la cabecera HTTP `Location`. Debido a que esta característica se usa comúnmente, Yii proporciona soporte especial para ello.
|
La redirección del navegador se basa en el envío de la cabecera HTTP `Location`. Debido a que esta característica se usa comúnmente, Yii proporciona soporte especial para ello.
|
||||||
|
|
||||||
Se puede redirigir el navegador a una URL llamando al método [[yii\web\Response::redirect()]]. El método asigna la cabecera de `Location` apropiada con la URL proporcionada y devuelve el objeto de respuesta él mismo. En un método de acción, se puede acceder a el mediante el acceso directo [[yii\web\Controller::redirect()]] como en siguiente ejemplo:
|
Se puede redirigir el navegador a una URL llamando al método [[yii\web\Response::redirect()]]. El método asigna la cabecera de `Location` apropiada con la URL proporcionada y devuelve el objeto response él mismo. En un método de acción, se puede acceder a él mediante el acceso directo [[yii\web\Controller::redirect()]] como en el siguiente ejemplo:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
public function actionOld()
|
public function actionOld()
|
||||||
@@ -140,7 +140,7 @@ public function actionOld()
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
En el ejemplo anterior, el método de acción devuelve el resultado del método `redirect()`. Como se ha explicado antes, el objeto de respuesta devuelto por el método de acción se usara como respuesta enviándola al usuario final.
|
En el ejemplo anterior, el método de acción devuelve el resultado del método `redirect()`. Como se ha explicado antes, el objeto response devuelto por el método de acción se usará como respuesta enviándola al usuario final.
|
||||||
|
|
||||||
En otros sitios que no sean los métodos de acción, se puede llamar a [[yii\web\Response::redirect()]] directamente seguido por una llamada al método [[yii\web\Response::send()]] para asegurar que no habrá contenido extra en la respuesta.
|
En otros sitios que no sean los métodos de acción, se puede llamar a [[yii\web\Response::redirect()]] directamente seguido por una llamada al método [[yii\web\Response::send()]] para asegurar que no habrá contenido extra en la respuesta.
|
||||||
|
|
||||||
@@ -148,11 +148,11 @@ En otros sitios que no sean los métodos de acción, se puede llamar a [[yii\web
|
|||||||
\Yii::$app->response->redirect('http://example.com/new', 301)->send();
|
\Yii::$app->response->redirect('http://example.com/new', 301)->send();
|
||||||
```
|
```
|
||||||
|
|
||||||
> Información: De forma predeterminada, el método [[yii\web\Response::redirect()]] asigna el estado de respuesta al código de estado 302 que indica al navegador que recurso solicitado esta *temporalmente* alojado en una URI diferente. Se puede enviar un código de estado 301 para expresar que el recurso se ha movido de forma *permanente*.
|
> Información: De forma predeterminada, el método [[yii\web\Response::redirect()]] asigna el estado de respuesta al código de estado 302 que indica al navegador que recurso solicitado está *temporalmente* alojado en una URI diferente. Se puede enviar un código de estado 301 para expresar que el recurso se ha movido de forma *permanente*.
|
||||||
|
|
||||||
Cuando la petición actual es de una petición AJAX, el hecho de enviar una cabecera `Location` no causara una redirección del navegador automática. Para resolver este problema, el método [[yii\web\Response::redirect()]] asigna una cabecera `X-Redirect` con el valor de la URL de redirección. En el lado del cliente se puede escribir código JavaScript para leer la esta cabecera y redireccionar el navegador como corresponda.
|
Cuando la petición actual es de una petición AJAX, el hecho de enviar una cabecera `Location` no causará una redirección del navegador automática. Para resolver este problema, el método [[yii\web\Response::redirect()]] asigna una cabecera `X-Redirect` con el valor de la URL de redirección. En el lado del cliente se puede escribir código JavaScript para leer la esta cabecera y redireccionar el navegador como corresponda.
|
||||||
|
|
||||||
> Información: Yii contiene el archivo JavaScript `yii.js` que proporciona un conjunto de utilidades comunes de JavaScript, incluyendo la redirección de navegador basada en la cabecera `X-Redirect`. Por tanto, si se usa este fichero JavaScript (registrandolo *asset bundle* [[yii\web\YiiAsset]]), no se necesitará escribir nada más para tener soporte en redirecciones AJAX.
|
> Información: Yii contiene el archivo JavaScript `yii.js` que proporciona un conjunto de utilidades comunes de JavaScript, incluyendo la redirección de navegador basada en la cabecera `X-Redirect`. Por tanto, si se usa este fichero JavaScript (registrándolo *asset bundle* [[yii\web\YiiAsset]]), no se necesitará escribir nada más para tener soporte en redirecciones AJAX.
|
||||||
|
|
||||||
## Enviar Archivos <a name="sending-files"></a>
|
## Enviar Archivos <a name="sending-files"></a>
|
||||||
|
|
||||||
@@ -162,7 +162,7 @@ Igual que con la redirección, el envío de archivos es otra característica que
|
|||||||
* [[yii\web\Response::sendContentAsFile()]]: envía un string al cliente como si fuera un archivo .
|
* [[yii\web\Response::sendContentAsFile()]]: envía un string al cliente como si fuera un archivo .
|
||||||
* [[yii\web\Response::sendStreamAsFile()]]: envía un *file stream* existente al cliente como si fuera un archivo.
|
* [[yii\web\Response::sendStreamAsFile()]]: envía un *file stream* existente al cliente como si fuera un archivo.
|
||||||
|
|
||||||
Estos métodos tienen la misma firma de método con el objeto de respuesta como valor de retorno. Si el archivo que se envía es muy grande, se debe considerar usar [[yii\web\Response::sendStreamAsFile()]] porque es más efectivo en términos de memoria. El siguiente ejemplo muestra como enviar un archivos en una acción de controlador.
|
Estos métodos tienen la misma firma de método con el objeto response como valor de retorno. Si el archivo que se envía es muy grande, se debe considerar usar [[yii\web\Response::sendStreamAsFile()]] porque es más efectivo en términos de memoria. El siguiente ejemplo muestra como enviar un archivos en una acción de controlador.
|
||||||
|
|
||||||
```php
|
```php
|
||||||
public function actionDownload()
|
public function actionDownload()
|
||||||
@@ -171,13 +171,13 @@ public function actionDownload()
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Si se llama al meto de envío de ficheros fuera de un método de acción, también se debe llamar al método [[yii\web\Response::send()]] después para asegurar que no se añada contenido extra a la respuesta.
|
Si se llama al método de envío de ficheros fuera de un método de acción, también se debe llamar al método [[yii\web\Response::send()]] después para asegurar que no se añada contenido extra a la respuesta.
|
||||||
|
|
||||||
```php
|
```php
|
||||||
\Yii::$app->response->sendFile('ruta/del/fichero.txt')->send();
|
\Yii::$app->response->sendFile('ruta/del/fichero.txt')->send();
|
||||||
```
|
```
|
||||||
|
|
||||||
Algunos servidores Web tienen un soporte especial para enviar ficheros llamado *X-Sendfile*. La idea es redireccionar la petición(request) para un fichero a un servidor Web que servirá el fichero directamente. Como resultado, la aplicación Web puede terminar antes mientras el servidor Web envía el fichero. Para usar esta funcionalidad, se puede llamar a [[yii\web\Response::xSendFile()]]. La siguiente lista resume como habilitar la característica `X-Sendfile` para algunos servidores Web populares.
|
Algunos servidores Web tienen un soporte especial para enviar ficheros llamado *X-Sendfile*. La idea es redireccionar la petición para un fichero a un servidor Web que servirá el fichero directamente. Como resultado, la aplicación Web puede terminar antes mientras el servidor Web envía el fichero. Para usar esta funcionalidad, se puede llamar a [[yii\web\Response::xSendFile()]]. La siguiente lista resume como habilitar la característica `X-Sendfile` para algunos servidores Web populares.
|
||||||
|
|
||||||
- Apache: [X-Sendfile](http://tn123.org/mod_xsendfile)
|
- Apache: [X-Sendfile](http://tn123.org/mod_xsendfile)
|
||||||
- Lighttpd v1.4: [X-LIGHTTPD-send-file](http://redmine.lighttpd.net/projects/lighttpd/wiki/X-LIGHTTPD-send-file)
|
- Lighttpd v1.4: [X-LIGHTTPD-send-file](http://redmine.lighttpd.net/projects/lighttpd/wiki/X-LIGHTTPD-send-file)
|
||||||
@@ -195,9 +195,9 @@ El método [[yii\web\Response::send()]] sigue los siguientes pasos para enviar u
|
|||||||
2. Llama a [[yii\web\Response::prepare()]] para convertir el [[yii\web\Response::data|response data]] en [[yii\web\Response::content|response content]].
|
2. Llama a [[yii\web\Response::prepare()]] para convertir el [[yii\web\Response::data|response data]] en [[yii\web\Response::content|response content]].
|
||||||
3. Lanza el evento [[yii\web\Response::EVENT_AFTER_PREPARE]].
|
3. Lanza el evento [[yii\web\Response::EVENT_AFTER_PREPARE]].
|
||||||
4. Llama a [[yii\web\Response::sendHeaders()]] para enviar las cabeceras HTTP registradas.
|
4. Llama a [[yii\web\Response::sendHeaders()]] para enviar las cabeceras HTTP registradas.
|
||||||
5. Llama a [[yii\web\Response::sendContent()]] para enviar el contenido del body de la respuesta.
|
5. Llama a [[yii\web\Response::sendContent()]] para enviar el contenido del cuerpo de la respuesta.
|
||||||
6. Lanza el evento [[yii\web\Response::EVENT_AFTER_SEND]].
|
6. Lanza el evento [[yii\web\Response::EVENT_AFTER_SEND]].
|
||||||
|
|
||||||
Después de llamar a [[yii\web\Response::send()]] por primera vez, cualquier llamada a este método sera ignorada. Esto significa que una vez se envíe una respuesta, no se le podrá añadir más contenido.
|
Después de llamar a [[yii\web\Response::send()]] por primera vez, cualquier llamada a este método será ignorada. Esto significa que una vez se envíe una respuesta, no se le podrá añadir más contenido.
|
||||||
|
|
||||||
Como se puede observar, el método [[yii\web\Response::send()]] lanza varios eventos útiles. Al responder a estos eventos, es posible ajustar o decorar al respuesta.
|
Como se puede observar, el método [[yii\web\Response::send()]] lanza varios eventos útiles. Al responder a estos eventos, es posible ajustar o decorar la respuesta.
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Convenios para la traducción
|
|||||||
|
|
||||||
Las palabras en inglés que son propias del framework o de PHP se pueden dejar en el idioma original. Ejemplos: `namespace`, `assets`, `helper`, `widget`, etc.
|
Las palabras en inglés que son propias del framework o de PHP se pueden dejar en el idioma original. Ejemplos: `namespace`, `assets`, `helper`, `widget`, etc.
|
||||||
|
|
||||||
Para las palabras que están muy ligadas a conceptos extendidos se deben traducir y poner entre paréntesis su equivalente en el idioma original. Ejemplos : `petición` (request), `respuesta`, (response), `comportamiento` (behavior), etc.
|
Para las palabras que están muy ligadas a conceptos extendidos se deben traducir y poner entre paréntesis su equivalente en el idioma original. Ejemplos : `petición` (request), `respuesta` (response), `comportamiento` (behavior), etc.
|
||||||
|
|
||||||
Los bloques han de ser traducidos, las traducciones se muestran a continuación :
|
Los bloques han de ser traducidos, las traducciones se muestran a continuación :
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ Spanish
|
|||||||
|
|
||||||
- Luciano Baraglia, [@lucianobaraglia](https://github.com/lucianobaraglia)
|
- Luciano Baraglia, [@lucianobaraglia](https://github.com/lucianobaraglia)
|
||||||
- Marco Da Silva, [@markmarco16](https://github.com/markmarco16), markmarco16@gmail.com
|
- Marco Da Silva, [@markmarco16](https://github.com/markmarco16), markmarco16@gmail.com
|
||||||
|
- Daniel Gómez Pan [@pana1990](https://github.com/pana1990), pana_1990@hotmail.com
|
||||||
|
|
||||||
Ukrainian
|
Ukrainian
|
||||||
---------
|
---------
|
||||||
|
|||||||
Reference in New Issue
Block a user