Skip to content

Commit 8151c3a

Browse files
feat: add Spanish translation (#2096)
1 parent cda58d2 commit 8151c3a

23 files changed

Lines changed: 3971 additions & 0 deletions

docs/es/CONTRIBUTING.md

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
# Contribuir
2+
3+
## Compilar PHP
4+
5+
### Con Docker (Linux)
6+
7+
Construya la imagen Docker de desarrollo:
8+
9+
```console
10+
docker build -t frankenphp-dev -f dev.Dockerfile .
11+
docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -p 8080:8080 -p 443:443 -p 443:443/udp -v $PWD:/go/src/app -it frankenphp-dev
12+
```
13+
14+
La imagen contiene las herramientas de desarrollo habituales (Go, GDB, Valgrind, Neovim...) y utiliza las siguientes ubicaciones de configuración de PHP:
15+
16+
- php.ini: `/etc/frankenphp/php.ini` Se proporciona un archivo php.ini con ajustes preestablecidos de desarrollo por defecto.
17+
- archivos de configuración adicionales: `/etc/frankenphp/php.d/*.ini`
18+
- extensiones php: `/usr/lib/frankenphp/modules/`
19+
20+
Si su versión de Docker es inferior a 23.0, la construcción fallará debido a un [problema de patrón](https://github.com/moby/moby/pull/42676) en `.dockerignore`. Agregue los directorios a `.dockerignore`:
21+
22+
```patch
23+
!testdata/*.php
24+
!testdata/*.txt
25+
+!caddy
26+
+!internal
27+
```
28+
29+
### Sin Docker (Linux y macOS)
30+
31+
[Siga las instrucciones para compilar desde las fuentes](compile.md) y pase la bandera de configuración `--debug`.
32+
33+
## Ejecutar la suite de pruebas
34+
35+
```console
36+
go test -tags watcher -race -v ./...
37+
```
38+
39+
## Módulo Caddy
40+
41+
Construir Caddy con el módulo FrankenPHP:
42+
43+
```console
44+
cd caddy/frankenphp/
45+
go build -tags watcher,brotli,nobadger,nomysql,nopgx
46+
cd ../../
47+
```
48+
49+
Ejecutar Caddy con el módulo FrankenPHP:
50+
51+
```console
52+
cd testdata/
53+
../caddy/frankenphp/frankenphp run
54+
```
55+
56+
El servidor está configurado para escuchar en la dirección `127.0.0.1:80`:
57+
58+
> [!NOTE]
59+
>
60+
> Si está usando Docker, deberá enlazar el puerto 80 del contenedor o ejecutar desde dentro del contenedor.
61+
62+
```console
63+
curl -vk http://127.0.0.1/phpinfo.php
64+
```
65+
66+
## Servidor de prueba mínimo
67+
68+
Construir el servidor de prueba mínimo:
69+
70+
```console
71+
cd internal/testserver/
72+
go build
73+
cd ../../
74+
```
75+
76+
Iniciar el servidor de prueba:
77+
78+
```console
79+
cd testdata/
80+
../internal/testserver/testserver
81+
```
82+
83+
El servidor está configurado para escuchar en la dirección `127.0.0.1:8080`:
84+
85+
```console
86+
curl -v http://127.0.0.1:8080/phpinfo.php
87+
```
88+
89+
## Construir localmente las imágenes Docker
90+
91+
Mostrar el plan de compilación:
92+
93+
```console
94+
docker buildx bake -f docker-bake.hcl --print
95+
```
96+
97+
Construir localmente las imágenes FrankenPHP para amd64:
98+
99+
```console
100+
docker buildx bake -f docker-bake.hcl --pull --load --set "*.platform=linux/amd64"
101+
```
102+
103+
Construir localmente las imágenes FrankenPHP para arm64:
104+
105+
```console
106+
docker buildx bake -f docker-bake.hcl --pull --load --set "*.platform=linux/arm64"
107+
```
108+
109+
Construir desde cero las imágenes FrankenPHP para arm64 y amd64 y subirlas a Docker Hub:
110+
111+
```console
112+
docker buildx bake -f docker-bake.hcl --pull --no-cache --push
113+
```
114+
115+
## Depurar errores de segmentación con las compilaciones estáticas
116+
117+
1. Descargue la versión de depuración del binario FrankenPHP desde GitHub o cree su propia compilación estática incluyendo símbolos de depuración:
118+
119+
```console
120+
docker buildx bake \
121+
--load \
122+
--set static-builder.args.DEBUG_SYMBOLS=1 \
123+
--set "static-builder.platform=linux/amd64" \
124+
static-builder
125+
docker cp $(docker create --name static-builder-musl dunglas/frankenphp:static-builder-musl):/go/src/app/dist/frankenphp-linux-$(uname -m) frankenphp
126+
```
127+
128+
2. Reemplace su versión actual de `frankenphp` por el ejecutable de depuración de FrankenPHP.
129+
3. Inicie FrankenPHP como de costumbre (alternativamente, puede iniciar FrankenPHP directamente con GDB: `gdb --args frankenphp run`).
130+
4. Adjunte el proceso con GDB:
131+
132+
```console
133+
gdb -p `pidof frankenphp`
134+
```
135+
136+
5. Si es necesario, escriba `continue` en el shell de GDB.
137+
6. Haga que FrankenPHP falle.
138+
7. Escriba `bt` en el shell de GDB.
139+
8. Copie la salida.
140+
141+
## Depurar errores de segmentación en GitHub Actions
142+
143+
1. Abrir `.github/workflows/tests.yml`
144+
2. Activar los símbolos de depuración de la biblioteca PHP:
145+
146+
```patch
147+
- uses: shivammathur/setup-php@v2
148+
# ...
149+
env:
150+
phpts: ts
151+
+ debug: true
152+
```
153+
154+
3. Activar `tmate` para conectarse al contenedor:
155+
156+
```patch
157+
- name: Set CGO flags
158+
run: echo "CGO_CFLAGS=$(php-config --includes)" >> "$GITHUB_ENV"
159+
+ - run: |
160+
+ sudo apt install gdb
161+
+ mkdir -p /home/runner/.config/gdb/
162+
+ printf "set auto-load safe-path /\nhandle SIG34 nostop noprint pass" > /home/runner/.config/gdb/gdbinit
163+
+ - uses: mxschmitt/action-tmate@v3
164+
```
165+
166+
4. Conectarse al contenedor.
167+
5. Abrir `frankenphp.go`.
168+
6. Activar `cgosymbolizer`:
169+
170+
```patch
171+
- //_ "github.com/ianlancetaylor/cgosymbolizer"
172+
+ _ "github.com/ianlancetaylor/cgosymbolizer"
173+
```
174+
175+
7. Descargar el módulo: `go get`.
176+
8. Dentro del contenedor, puede usar GDB y similares:
177+
178+
```console
179+
go test -tags watcher -c -ldflags=-w
180+
gdb --args frankenphp.test -test.run ^MyTest$
181+
```
182+
183+
9. Cuando el error esté corregido, revierta todos los cambios.
184+
185+
## Recursos diversos para el desarrollo
186+
187+
- [Integración de PHP en uWSGI](https://github.com/unbit/uwsgi/blob/master/plugins/php/php_plugin.c)
188+
- [Integración de PHP en NGINX Unit](https://github.com/nginx/unit/blob/master/src/nxt_php_sapi.c)
189+
- [Integración de PHP en Go (go-php)](https://github.com/deuill/go-php)
190+
- [Integración de PHP en Go (GoEmPHP)](https://github.com/mikespook/goemphp)
191+
- [Integración de PHP en C++](https://gist.github.com/paresy/3cbd4c6a469511ac7479aa0e7c42fea7)
192+
- [Extending and Embedding PHP por Sara Golemon](https://books.google.fr/books?id=zMbGvK17_tYC&pg=PA254&lpg=PA254#v=onepage&q&f=false)
193+
- [¿Qué es TSRMLS_CC, exactamente?](http://blog.golemon.com/2006/06/what-heck-is-tsrmlscc-anyway.html)
194+
- [Integración de PHP en Mac](https://gist.github.com/jonnywang/61427ffc0e8dde74fff40f479d147db4)
195+
- [Bindings SDL](https://pkg.go.dev/github.com/veandco/go-sdl2@v0.4.21/sdl#Main)
196+
197+
## Recursos relacionados con Docker
198+
199+
- [Definición del archivo Bake](https://docs.docker.com/build/customize/bake/file-definition/)
200+
- [`docker buildx build`](https://docs.docker.com/engine/reference/commandline/buildx_build/)
201+
202+
## Comando útil
203+
204+
```console
205+
apk add strace util-linux gdb
206+
strace -e 'trace=!futex,epoll_ctl,epoll_pwait,tgkill,rt_sigreturn' -p 1
207+
```
208+
209+
## Traducir la documentación
210+
211+
Para traducir la documentación y el sitio a un nuevo idioma, siga estos pasos:
212+
213+
1. Cree un nuevo directorio con el código ISO de 2 caracteres del idioma en el directorio `docs/` de este repositorio.
214+
2. Copie todos los archivos `.md` de la raíz del directorio `docs/` al nuevo directorio (siempre use la versión en inglés como fuente de traducción, ya que siempre está actualizada).
215+
3. Copie los archivos `README.md` y `CONTRIBUTING.md` del directorio raíz al nuevo directorio.
216+
4. Traduzca el contenido de los archivos, pero no cambie los nombres de los archivos, tampoco traduzca las cadenas que comiencen por `> [!` (es un marcado especial para GitHub).
217+
5. Cree una Pull Request con las traducciones.
218+
6. En el [repositorio del sitio](https://github.com/dunglas/frankenphp-website/tree/main), copie y traduzca los archivos de traducción en los directorios `content/`, `data/` y `i18n/`.
219+
7. Traduzca los valores en el archivo YAML creado.
220+
8. Abra una Pull Request en el repositorio del sitio.

docs/es/README.md

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
# FrankenPHP: el servidor de aplicaciones PHP moderno, escrito en Go
2+
3+
<h1 align="center"><a href="https://frankenphp.dev"><img src="../../frankenphp.png" alt="FrankenPHP" width="600"></a></h1>
4+
5+
FrankenPHP es un servidor de aplicaciones moderno para PHP construido sobre el servidor web [Caddy](https://caddyserver.com/).
6+
7+
FrankenPHP otorga superpoderes a tus aplicaciones PHP gracias a sus características de vanguardia: [_Early Hints_](early-hints.md), [modo worker](worker.md), [funcionalidades en tiempo real](mercure.md), HTTPS automático, soporte para HTTP/2 y HTTP/3...
8+
9+
FrankenPHP funciona con cualquier aplicación PHP y hace que tus proyectos Laravel y Symfony sean más rápidos que nunca gracias a sus integraciones oficiales con el modo worker.
10+
11+
FrankenPHP también puede usarse como una biblioteca Go autónoma que permite integrar PHP en cualquier aplicación usando `net/http`.
12+
13+
Descubre más detalles sobre este servidor de aplicaciones en la grabación de esta conferencia dada en el Forum PHP 2022:
14+
15+
<a href="https://dunglas.dev/2022/10/frankenphp-the-modern-php-app-server-written-in-go/"><img src="https://dunglas.dev/wp-content/uploads/2022/10/frankenphp.png" alt="Diapositivas" width="600"></a>
16+
17+
## Para Comenzar
18+
19+
En Windows, usa [WSL](https://learn.microsoft.com/es-es/windows/wsl/) para ejecutar FrankenPHP.
20+
21+
### Script de instalación
22+
23+
Puedes copiar esta línea en tu terminal para instalar automáticamente
24+
una versión adaptada a tu plataforma:
25+
26+
```console
27+
curl https://frankenphp.dev/install.sh | sh
28+
```
29+
30+
### Binario autónomo
31+
32+
Proporcionamos binarios estáticos de FrankenPHP para desarrollo, para Linux y macOS,
33+
conteniendo [PHP 8.4](https://www.php.net/releases/8.4/es.php) y la mayoría de las extensiones PHP populares.
34+
35+
[Descargar FrankenPHP](https://github.com/php/frankenphp/releases)
36+
37+
**Instalación de extensiones:** Las extensiones más comunes están incluidas. No es posible instalar más.
38+
39+
### Paquetes rpm
40+
41+
Nuestros mantenedores proponen paquetes rpm para todos los sistemas que usan `dnf`. Para instalar, ejecuta:
42+
43+
```console
44+
sudo dnf install https://rpm.henderkes.com/static-php-1-0.noarch.rpm
45+
sudo dnf module enable php-zts:static-8.4 # 8.2-8.5 disponibles
46+
sudo dnf install frankenphp
47+
```
48+
49+
**Instalación de extensiones:** `sudo dnf install php-zts-<extension>`
50+
51+
Para extensiones no disponibles por defecto, usa [PIE](https://github.com/php/pie):
52+
53+
```console
54+
sudo dnf install pie-zts
55+
sudo pie-zts install asgrim/example-pie-extension
56+
```
57+
58+
### Paquetes deb
59+
60+
Nuestros mantenedores proponen paquetes deb para todos los sistemas que usan `apt`. Para instalar, ejecuta:
61+
62+
```console
63+
sudo curl -fsSL https://key.henderkes.com/static-php.gpg -o /usr/share/keyrings/static-php.gpg && \
64+
echo "deb [signed-by=/usr/share/keyrings/static-php.gpg] https://deb.henderkes.com/ stable main" | sudo tee /etc/apt/sources.list.d/static-php.list && \
65+
sudo apt update
66+
sudo apt install frankenphp
67+
```
68+
69+
**Instalación de extensiones:** `sudo apt install php-zts-<extension>`
70+
71+
Para extensiones no disponibles por defecto, usa [PIE](https://github.com/php/pie):
72+
73+
```console
74+
sudo apt install pie-zts
75+
sudo pie-zts install asgrim/example-pie-extension
76+
```
77+
78+
### Docker
79+
80+
Las [imágenes Docker](https://frankenphp.dev/docs/es/docker/) también están disponibles:
81+
82+
```console
83+
docker run -v .:/app/public \
84+
-p 80:80 -p 443:443 -p 443:443/udp \
85+
dunglas/frankenphp
86+
```
87+
88+
Ve a `https://localhost`, ¡listo!
89+
90+
> [!TIP]
91+
>
92+
> No intentes usar `https://127.0.0.1`. Usa `https://localhost` y acepta el certificado auto-firmado.
93+
> Usa [la variable de entorno `SERVER_NAME`](config.md#variables-de-entorno) para cambiar el dominio a usar.
94+
95+
### Homebrew
96+
97+
FrankenPHP también está disponible como paquete [Homebrew](https://brew.sh) para macOS y Linux.
98+
99+
Para instalarlo:
100+
101+
```console
102+
brew install dunglas/frankenphp/frankenphp
103+
```
104+
105+
**Instalación de extensiones:** Usa [PIE](https://github.com/php/pie).
106+
107+
### Uso
108+
109+
Para servir el contenido del directorio actual, ejecuta:
110+
111+
```console
112+
frankenphp php-server
113+
```
114+
115+
También puedes ejecutar scripts en línea de comandos con:
116+
117+
```console
118+
frankenphp php-cli /ruta/a/tu/script.php
119+
```
120+
121+
Para los paquetes deb y rpm, también puedes iniciar el servicio systemd:
122+
123+
```console
124+
sudo systemctl start frankenphp
125+
```
126+
127+
## Documentación
128+
129+
- [El modo clásico](classic.md)
130+
- [El modo worker](worker.md)
131+
- [Soporte para Early Hints (código de estado HTTP 103)](early-hints.md)
132+
- [Tiempo real](mercure.md)
133+
- [Hot reloading](https://frankenphp.dev/docs/hot-reload/)
134+
- [Registro de actividad](https://frankenphp.dev/docs/logging/)
135+
- [Servir eficientemente archivos estáticos grandes](x-sendfile.md)
136+
- [Configuración](config.md)
137+
- [Escribir extensiones PHP en Go](extensions.md)
138+
- [Imágenes Docker](docker.md)
139+
- [Despliegue en producción](production.md)
140+
- [Optimización del rendimiento](performance.md)
141+
- [Crear aplicaciones PHP **autónomas**, auto-ejecutables](embed.md)
142+
- [Crear una compilación estática](static.md)
143+
- [Compilar desde las fuentes](compile.md)
144+
- [Monitoreo de FrankenPHP](metrics.md)
145+
- [Integración con WordPress](https://frankenphp.dev/docs/wordpress/)
146+
- [Integración con Laravel](laravel.md)
147+
- [Problemas conocidos](known-issues.md)
148+
- [Aplicación de demostración (Symfony) y benchmarks](https://github.com/dunglas/frankenphp-demo)
149+
- [Documentación de la biblioteca Go](https://pkg.go.dev/github.com/dunglas/frankenphp)
150+
- [Contribuir y depurar](CONTRIBUTING.md)
151+
152+
## Ejemplos y esqueletos
153+
154+
- [Symfony](https://github.com/dunglas/symfony-docker)
155+
- [API Platform](https://api-platform.com/docs/distribution/)
156+
- [Laravel](laravel.md)
157+
- [Sulu](https://sulu.io/blog/running-sulu-with-frankenphp)
158+
- [WordPress](https://github.com/StephenMiracle/frankenwp)
159+
- [Drupal](https://github.com/dunglas/frankenphp-drupal)
160+
- [Joomla](https://github.com/alexandreelise/frankenphp-joomla)
161+
- [TYPO3](https://github.com/ochorocho/franken-typo3)
162+
- [Magento2](https://github.com/ekino/frankenphp-magento2)

docs/es/classic.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Usando el Modo Clásico
2+
3+
Sin ninguna configuración adicional, FrankenPHP opera en modo clásico. En este modo, FrankenPHP funciona como un servidor PHP tradicional, sirviendo directamente archivos PHP. Esto lo convierte en un reemplazo directo para PHP-FPM o Apache con mod_php.
4+
5+
Al igual que Caddy, FrankenPHP acepta un número ilimitado de conexiones y utiliza un [número fijo de hilos](config.md#caddyfile-config) para atenderlas. La cantidad de conexiones aceptadas y en cola está limitada únicamente por los recursos disponibles del sistema.
6+
El *pool* de hilos de PHP opera con un número fijo de hilos inicializados al inicio, comparable al modo estático de PHP-FPM. También es posible permitir que los hilos [escale automáticamente en tiempo de ejecución](performance.md#max_threads), similar al modo dinámico de PHP-FPM.
7+
8+
Las conexiones en cola esperarán indefinidamente hasta que un hilo de PHP esté disponible para atenderlas. Para evitar esto, puedes usar la configuración `max_wait_time` en la [configuración global de FrankenPHP](config.md#caddyfile-config) para limitar la duración que una petición puede esperar por un hilo de PHP libre antes de ser rechazada.
9+
Adicionalmente, puedes establecer un [tiempo límite de escritura razonable en Caddy](https://caddyserver.com/docs/caddyfile/options#timeouts).
10+
11+
Cada instancia de Caddy iniciará solo un *pool* de hilos de FrankenPHP, el cual será compartido entre todos los bloques `php_server`.

0 commit comments

Comments
 (0)