Skip to content

Commit a65f03e

Browse files
authored
Arregla y wrapea library/re.po (#2873)
En `library/re.po` había una entrada que no estaba delineada correctamente con comillas dobles (si ven el diff entero es la última entrada en el diff, o pueden ver simplemente el primer commit de este PR). Esto hacía que `powrap --check` se saltara el archivo y no lo validara. Esto, a su vez, ocurría porque la utilidad `msgcat` de `gettext` identificaba el error de sintaxis, y fallaba al ser ejecutada. `powrap` no consideraba esos errores al momento de calcular el exit code del proceso, y por lo tanto el archivo no sólo seguía siendo inválido, sino que tampoco era verificado. De igual forma, el archivo no podía ser wrapeado correctamente usando `powrap library/re.po`. Ya abrí un PR contra `powrap` para cambiar este comportamiento en https://git.afpy.org/AFPy/powrap/pulls/4 (actualización: el PR ya fue mergeado, y una nuevs versión de powrap fue publicada, pornlo que también actualicé en este PR nuestra dependencia de powrap, además del pre-commit hook de powrap). Por otro lado, el resto de nuestras herramientas *no* consideraban este archivo como inválido, Esto es porque `polib` no hacía la validación correspondiente, e incorrectamente parseaba la entrada. También abrí un PR contra polib para esto en izimobil/polib#161. Actualización: en el intertanto también me di cuenta de que el paquete `babel` sufre del mismo problema, yo incorrectamente había asumido que babel dependía de polib; PR creada contra babel: python-babel/babel#1151. Después de corregir el error de sintaxis, ejecuté powrap de tal manera que ahora `library/re.po` está bien formateado. --------- Signed-off-by: Rodrigo Tobar <[email protected]>
1 parent 875e5df commit a65f03e

File tree

4 files changed

+87
-80
lines changed

4 files changed

+87
-80
lines changed

.github/workflows/main.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ jobs:
7777
diff -Naur TRANSLATORS <(LANG=es python scripts/sort.py < TRANSLATORS)
7878
- name: Powrap
7979
if: steps.po-files-to-check.outputs.any_po_files_to_check == 'true'
80-
run: powrap --check --quiet ${{ steps.po-files-to-check.outputs.po_files_to_check }}
80+
run: powrap --diff --check --quiet ${{ steps.po-files-to-check.outputs.po_files_to_check }}
8181
- name: Sphinx lint
8282
if: steps.po-files-to-check.outputs.any_po_files_to_check == 'true'
8383
run: sphinx-lint ${{ steps.po-files-to-check.outputs.po_files_to_check }}

.pre-commit-config.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
repos:
2-
- repo: https://github.com/JulienPalard/powrap
3-
rev: v0.4.0
2+
- repo: https://git.afpy.org/AFPy/powrap
3+
rev: v1.0.2
44
hooks:
55
- id: powrap
66
- repo: local

library/re.po

+83-76
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,10 @@ msgid ""
208208
"For example, the expression ``(?:a{6})*`` matches any multiple of six "
209209
"``'a'`` characters."
210210
msgstr ""
211-
"Los operadores de repetición o cuantificadores (``*``, ``+``, ``?``, ``{m,n}``, etc.) "
212-
"no pueden ser anidados directamente. Esto evita la ambigüedad con el sufijo "
213-
"modificador no codicioso ``?``, y con otros modificadores en "
214-
"otras implementaciones. Para aplicar una segunda repetición a una repetición "
211+
"Los operadores de repetición o cuantificadores (``*``, ``+``, ``?``, ``{m,n}"
212+
"``, etc.) no pueden ser anidados directamente. Esto evita la ambigüedad con "
213+
"el sufijo modificador no codicioso ``?``, y con otros modificadores en otras "
214+
"implementaciones. Para aplicar una segunda repetición a una repetición "
215215
"interna, se pueden usar paréntesis. Por ejemplo, la expresión ``(?:a{6})*`` "
216216
"coincide con cualquier múltiplo de seis caracteres ``'a'``."
217217

@@ -358,14 +358,14 @@ msgstr ""
358358
"permiten retroceder cuando la expresión que le sigue no coincide. Estos se "
359359
"conocen como cuantificadores :dfn:`possessive`. Por ejemplo, ``a*a`` "
360360
"coincidirá con ``'aaaa'`` porque la ``a*`` coincidirá con los 4 ``'a'``\\ s, "
361-
"pero, cuando se encuentra la ``'a'`` final, la expresión retrocede de "
362-
"modo que al final la ``a*`` termina coincidiendo con 3 ``'a'``\\ s total, y "
363-
"la cuarta ``'a'`` coincide con la final ``'a'``. Sin embargo, cuando "
364-
"``a*+a`` se usa para que coincida con ``'aaaa'``, el ``a*+`` coincidirá con "
365-
"los 4 ``'a'``, pero cuando el ``'a'`` final no encuentra más caracteres para "
366-
"coincidir, la expresión no puede retroceder y, por lo tanto, no "
367-
"coincidirá. ``x*+``, ``x++`` and ``x?+`` son equivalentes a ``(?>x*)``, ``(?"
368-
">x+)`` and ``(?>x?)`` correspondientemente."
361+
"pero, cuando se encuentra la ``'a'`` final, la expresión retrocede de modo "
362+
"que al final la ``a*`` termina coincidiendo con 3 ``'a'``\\ s total, y la "
363+
"cuarta ``'a'`` coincide con la final ``'a'``. Sin embargo, cuando ``a*+a`` "
364+
"se usa para que coincida con ``'aaaa'``, el ``a*+`` coincidirá con los 4 "
365+
"``'a'``, pero cuando el ``'a'`` final no encuentra más caracteres para "
366+
"coincidir, la expresión no puede retroceder y, por lo tanto, no coincidirá. "
367+
"``x*+``, ``x++`` and ``x?+`` son equivalentes a ``(?>x*)``, ``(?>x+)`` and "
368+
"``(?>x?)`` correspondientemente."
369369

370370
#: ../Doc/library/re.rst:187
371371
msgid "``{m}``"
@@ -782,12 +782,12 @@ msgstr ""
782782
"separada, y si tiene éxito, continúa coincidiendo con el resto del patrón "
783783
"que la sigue. Si el patrón posterior no coincide, la pila solo se puede "
784784
"desenrollar a un punto *antes* del ``(?>...)`` Porque una vez que salió, la "
785-
"expresión, conocida como :dfn:`grupo atomico <atomic group>`, ha desechado todos los puntos de pila "
786-
"dentro de sí misma. Por lo tanto, ``(?>.*).`` nunca coincidiría con nada "
787-
"porque primero el ``.*`` coincidiría con todos los caracteres posibles, "
788-
"luego, al no tener nada que igualar, el ``.`` final no coincidiría. Dado que "
789-
"no hay puntos de pila guardados en el Grupo Atómico, y no hay ningún punto "
790-
"de pila antes de él, toda la expresión no coincidiría."
785+
"expresión, conocida como :dfn:`grupo atomico <atomic group>`, ha desechado "
786+
"todos los puntos de pila dentro de sí misma. Por lo tanto, ``(?>.*).`` nunca "
787+
"coincidiría con nada porque primero el ``.*`` coincidiría con todos los "
788+
"caracteres posibles, luego, al no tener nada que igualar, el ``.`` final no "
789+
"coincidiría. Dado que no hay puntos de pila guardados en el Grupo Atómico, y "
790+
"no hay ningún punto de pila antes de él, toda la expresión no coincidiría."
791791

792792
#: ../Doc/library/re.rst:424
793793
msgid "``(?P<name>...)``"
@@ -869,8 +869,8 @@ msgid ""
869869
"In :class:`bytes` patterns, group *name* can only contain bytes in the ASCII "
870870
"range (``b'\\x00'``-``b'\\x7f'``)."
871871
msgstr ""
872-
"En patrones de tipo :class:`bytes`, el nombre del grupo *name* solo puede contener "
873-
"bytes en el rango ASCII (``b'\\x00'``-``b'\\x7f'``)."
872+
"En patrones de tipo :class:`bytes`, el nombre del grupo *name* solo puede "
873+
"contener bytes en el rango ASCII (``b'\\x00'``-``b'\\x7f'``)."
874874

875875
#: ../Doc/library/re.rst:430
876876
msgid "``(?P=name)``"
@@ -1006,9 +1006,9 @@ msgid ""
10061006
"Group *id* can only contain ASCII digits. In :class:`bytes` patterns, group "
10071007
"*name* can only contain bytes in the ASCII range (``b'\\x00'``-``b'\\x7f'``)."
10081008
msgstr ""
1009-
"El *id* del grupo solo puede contener dígitos ASCII. En patrones de "
1010-
"tipo :class:`bytes`, el *name* del grupo solo puede contener bytes "
1011-
"en el rango ASCII (``b'\\x00'``-``b'\\x7f'``)."
1009+
"El *id* del grupo solo puede contener dígitos ASCII. En patrones de tipo :"
1010+
"class:`bytes`, el *name* del grupo solo puede contener bytes en el rango "
1011+
"ASCII (``b'\\x00'``-``b'\\x7f'``)."
10121012

10131013
#: ../Doc/library/re.rst:506
10141014
msgid ""
@@ -1208,8 +1208,9 @@ msgid ""
12081208
"const:`ASCII` flag is used, only ``[a-zA-Z0-9_]`` is matched."
12091209
msgstr ""
12101210
"Coincide con los caracteres de palabras Unicode; esto incluye los caracteres "
1211-
"alfanuméricos (como se define por :meth:`str.isalnum`) así como el guión bajo "
1212-
"(``_``). Si se utiliza la bandera :const:`ASCII`, sólo coincide con ``[a-zA-Z0-9_]``."
1211+
"alfanuméricos (como se define por :meth:`str.isalnum`) así como el guión "
1212+
"bajo (``_``). Si se utiliza la bandera :const:`ASCII`, sólo coincide con "
1213+
"``[a-zA-Z0-9_]``."
12131214

12141215
#: ../Doc/library/re.rst:604
12151216
msgid ""
@@ -1254,8 +1255,8 @@ msgid ""
12541255
"string literals are also accepted by the regular expression parser::"
12551256
msgstr ""
12561257
"La mayoría de las :ref:`secuencias de escape <escape-sequences>` soportadas "
1257-
"por los literales de cadena de Python también son aceptadas por el analizador "
1258-
"de expresiones regulares::"
1258+
"por los literales de cadena de Python también son aceptadas por el "
1259+
"analizador de expresiones regulares::"
12591260

12601261
#: ../Doc/library/re.rst:644
12611262
msgid ""
@@ -1482,9 +1483,9 @@ msgid ""
14821483
msgstr ""
14831484
"Indica que no se aplica ninguna bandera, el valor es ``0``. Esta bandera "
14841485
"puede ser utilizada como valor predeterminado para un argumento de palabra "
1485-
"clave de función o como un valor que será condicionalmente combinado "
1486-
"con otras banderas usando el operador binario OR. Ejemplo de uso como "
1487-
"valor predeterminado::"
1486+
"clave de función o como un valor que será condicionalmente combinado con "
1487+
"otras banderas usando el operador binario OR. Ejemplo de uso como valor "
1488+
"predeterminado::"
14881489

14891490
#: ../Doc/library/re.rst:779
14901491
msgid ""
@@ -1503,13 +1504,15 @@ msgid ""
15031504
"include Unicode characters in matches. Since Python 3, Unicode characters "
15041505
"are matched by default."
15051506
msgstr ""
1506-
"En Python 2, esta bandera hacía que :ref:`secuencias especiales <re-special-sequences>` "
1507-
"incluyeran caracteres Unicode en las coincidencias. Desde Python 3, los caracteres "
1508-
"Unicode se coinciden por defecto."
1507+
"En Python 2, esta bandera hacía que :ref:`secuencias especiales <re-special-"
1508+
"sequences>` incluyeran caracteres Unicode en las coincidencias. Desde Python "
1509+
"3, los caracteres Unicode se coinciden por defecto."
15091510

15101511
#: ../Doc/library/re.rst:791
15111512
msgid "See :const:`A` for restricting matching on ASCII characters instead."
1512-
msgstr "Ver :const:`A` para restringir la coincidencia a caracteres ASCII en su lugar."
1513+
msgstr ""
1514+
"Ver :const:`A` para restringir la coincidencia a caracteres ASCII en su "
1515+
"lugar."
15131516

15141517
#: ../Doc/library/re.rst:793
15151518
msgid "This flag is only kept for backward compatibility."
@@ -1613,9 +1616,9 @@ msgid ""
16131616
"pattern; note that this is different from finding a zero-length match at "
16141617
"some point in the string."
16151618
msgstr ""
1616-
"Explora la cadena de caracteres *string* en busca de la primera ubicación donde el "
1617-
"patrón *pattern* de la expresión regular produce una coincidencia, y "
1618-
"retorna un :class:`~re.Match` correspondiente. Retorna ``None`` si ninguna "
1619+
"Explora la cadena de caracteres *string* en busca de la primera ubicación "
1620+
"donde el patrón *pattern* de la expresión regular produce una coincidencia, "
1621+
"y retorna un :class:`~re.Match` correspondiente. Retorna ``None`` si ninguna "
16191622
"posición en la cadena coincide con el patrón; nota que esto es diferente a "
16201623
"encontrar una coincidencia de longitud cero en algún punto de la cadena."
16211624

@@ -1626,8 +1629,8 @@ msgid ""
16261629
"``None`` if the string does not match the pattern; note that this is "
16271630
"different from a zero-length match."
16281631
msgstr ""
1629-
"Si cero o más caracteres al principio de la cadena *string* coinciden con "
1630-
"el patrón *pattern* de la expresión regular, retorna un :class:`~re.Match` "
1632+
"Si cero o más caracteres al principio de la cadena *string* coinciden con el "
1633+
"patrón *pattern* de la expresión regular, retorna un :class:`~re.Match` "
16311634
"correspondiente. Retorna ``None`` si la cadena no coincide con el patrón; "
16321635
"notar que esto es diferente de una coincidencia de longitud cero."
16331636

@@ -1654,10 +1657,10 @@ msgid ""
16541657
"corresponding :class:`~re.Match`. Return ``None`` if the string does not "
16551658
"match the pattern; note that this is different from a zero-length match."
16561659
msgstr ""
1657-
"Si toda la cadena *string* coincide con el patrón *pattern* de la "
1658-
"expresión regular, retorna un :class:`~re.Match` correspondiente. Retorna "
1659-
"``None`` si la cadena no coincide con el patrón; notar que esto es diferente "
1660-
"de una coincidencia de longitud cero."
1660+
"Si toda la cadena *string* coincide con el patrón *pattern* de la expresión "
1661+
"regular, retorna un :class:`~re.Match` correspondiente. Retorna ``None`` si "
1662+
"la cadena no coincide con el patrón; notar que esto es diferente de una "
1663+
"coincidencia de longitud cero."
16611664

16621665
#: ../Doc/library/re.rst:889
16631666
msgid ""
@@ -1752,10 +1755,10 @@ msgid ""
17521755
"scanned left-to-right, and matches are returned in the order found. Empty "
17531756
"matches are included in the result."
17541757
msgstr ""
1755-
"Retorna un :term:`iterador <iterator>` que produce objetos :class:`~re.Match` sobre "
1756-
"todas las coincidencias no superpuestas para el patrón de RE *pattern* en la "
1757-
"*string*. La *string* es examinada de izquierda a derecha, y las "
1758-
"coincidencias son retornadas en el orden en que se encuentran. Las "
1758+
"Retorna un :term:`iterador <iterator>` que produce objetos :class:`~re."
1759+
"Match` sobre todas las coincidencias no superpuestas para el patrón de RE "
1760+
"*pattern* en la *string*. La *string* es examinada de izquierda a derecha, y "
1761+
"las coincidencias son retornadas en el orden en que se encuentran. Las "
17591762
"coincidencias vacías se incluyen en el resultado."
17601763

17611764
#: ../Doc/library/re.rst:966
@@ -1869,9 +1872,9 @@ msgid ""
18691872
"strings, group *name* can only contain bytes in the ASCII range "
18701873
"(``b'\\x00'``-``b'\\x7f'``)."
18711874
msgstr ""
1872-
"El *id* del grupo solo puede contener dígitos ASCII. En las cadenas de reemplazo "
1873-
":class:`bytes`, el nombre del grupo *name* solo puede contener bytes en el rango ASCII "
1874-
"(``b'\\x00'``-``b'\\x7f'``)."
1875+
"El *id* del grupo solo puede contener dígitos ASCII. En las cadenas de "
1876+
"reemplazo :class:`bytes`, el nombre del grupo *name* solo puede contener "
1877+
"bytes en el rango ASCII (``b'\\x00'``-``b'\\x7f'``)."
18751878

18761879
#: ../Doc/library/re.rst:1041
18771880
msgid ""
@@ -1977,8 +1980,8 @@ msgid ""
19771980
":py:class:`re.Pattern` supports ``[]`` to indicate a Unicode (str) or bytes "
19781981
"pattern. See :ref:`types-genericalias`."
19791982
msgstr ""
1980-
":py:class:`re.Pattern` soporta ``[]`` para indicar un patrón Unicode (str) o de bytes. "
1981-
"Ver :ref:`types-genericalias`."
1983+
":py:class:`re.Pattern` soporta ``[]`` para indicar un patrón Unicode (str) o "
1984+
"de bytes. Ver :ref:`types-genericalias`."
19821985

19831986
#: ../Doc/library/re.rst:1140
19841987
msgid ""
@@ -1988,10 +1991,10 @@ msgid ""
19881991
"this is different from finding a zero-length match at some point in the "
19891992
"string."
19901993
msgstr ""
1991-
"Escanea a través de la cadena *string* buscando la primera ubicación "
1992-
"donde esta expresión regular produce una coincidencia, y retorna un :class:"
1993-
"`~re.Match` correspondiente. Retorna ``None`` si ninguna posición en la "
1994-
"cadena coincide con el patrón; notar que esto es diferente a encontrar una "
1994+
"Escanea a través de la cadena *string* buscando la primera ubicación donde "
1995+
"esta expresión regular produce una coincidencia, y retorna un :class:`~re."
1996+
"Match` correspondiente. Retorna ``None`` si ninguna posición en la cadena "
1997+
"coincide con el patrón; notar que esto es diferente a encontrar una "
19951998
"coincidencia de longitud cero en algún punto de la cadena."
19961999

19972000
#: ../Doc/library/re.rst:1145
@@ -2031,10 +2034,10 @@ msgid ""
20312034
"the string does not match the pattern; note that this is different from a "
20322035
"zero-length match."
20332036
msgstr ""
2034-
"Si cero o más caracteres en el comienzo *beginning* de la cadena "
2035-
"*string* coinciden con esta expresión regular, retorna un :class:`~re.Match` "
2036-
"correspondiente. Retorna ``None`` si la cadena no coincide con el patrón; notar "
2037-
"que esto es diferente de una coincidencia de longitud cero."
2037+
"Si cero o más caracteres en el comienzo *beginning* de la cadena *string* "
2038+
"coinciden con esta expresión regular, retorna un :class:`~re.Match` "
2039+
"correspondiente. Retorna ``None`` si la cadena no coincide con el patrón; "
2040+
"notar que esto es diferente de una coincidencia de longitud cero."
20382041

20392042
#: ../Doc/library/re.rst:1171 ../Doc/library/re.rst:1189
20402043
msgid ""
@@ -2059,10 +2062,10 @@ msgid ""
20592062
"corresponding :class:`~re.Match`. Return ``None`` if the string does not "
20602063
"match the pattern; note that this is different from a zero-length match."
20612064
msgstr ""
2062-
"Si toda la cadena *string* coincide con esta expresión regular, "
2063-
"retorna un :class:`~re.Match` correspondiente. Retorna ``None`` si la "
2064-
"cadena no coincide con el patrón; notar que esto es diferente de una "
2065-
"coincidencia de longitud cero."
2065+
"Si toda la cadena *string* coincide con esta expresión regular, retorna un :"
2066+
"class:`~re.Match` correspondiente. Retorna ``None`` si la cadena no "
2067+
"coincide con el patrón; notar que esto es diferente de una coincidencia de "
2068+
"longitud cero."
20662069

20672070
#: ../Doc/library/re.rst:1203
20682071
msgid "Identical to the :func:`split` function, using the compiled pattern."
@@ -2158,8 +2161,8 @@ msgid ""
21582161
":py:class:`re.Match` supports ``[]`` to indicate a Unicode (str) or bytes "
21592162
"match. See :ref:`types-genericalias`."
21602163
msgstr ""
2161-
":py:class:`re.Match` soporta ``[]`` para indicar una coincidencia Unicode (str) o de bytes. "
2162-
"Ver :ref:`types-genericalias`."
2164+
":py:class:`re.Match` soporta ``[]`` para indicar una coincidencia Unicode "
2165+
"(str) o de bytes. Ver :ref:`types-genericalias`."
21632166

21642167
#: ../Doc/library/re.rst:1283
21652168
msgid ""
@@ -2559,11 +2562,14 @@ msgstr "search() vs. match()"
25592562
#: ../Doc/library/re.rst:1591
25602563
msgid ""
25612564
"Python offers different primitive operations based on regular expressions:"
2562-
msgstr "Python ofrece diferentes operaciones primitivas basadas en expresiones regulares:"
2565+
msgstr ""
2566+
"Python ofrece diferentes operaciones primitivas basadas en expresiones "
2567+
"regulares:"
25632568

25642569
#: ../Doc/library/re.rst:1593
25652570
msgid ":func:`re.match` checks for a match only at the beginning of the string"
2566-
msgstr ":func:`re.match` verifica una coincidencia solo al principio de la cadena"
2571+
msgstr ""
2572+
":func:`re.match` verifica una coincidencia solo al principio de la cadena"
25672573

25682574
#: ../Doc/library/re.rst:1594
25692575
msgid ""
@@ -2575,7 +2581,8 @@ msgstr ""
25752581

25762582
#: ../Doc/library/re.rst:1596
25772583
msgid ":func:`re.fullmatch` checks for entire string to be a match"
2578-
msgstr ":func:`re.fullmatch` verifica si la cadena completa es una coincidencia"
2584+
msgstr ""
2585+
":func:`re.fullmatch` verifica si la cadena completa es una coincidencia"
25792586

25802587
#: ../Doc/library/re.rst:1608
25812588
msgid ""
@@ -2697,12 +2704,12 @@ msgid ""
26972704
"writer wanted to find all of the adverbs *and their positions* in some text, "
26982705
"they would use :func:`finditer` in the following manner::"
26992706
msgstr ""
2700-
"Si se desea obtener más información sobre todas las coincidencias de un patrón en "
2701-
"lugar del texto coincidente, :func:`finditer` es útil ya que proporciona :"
2702-
"class:`~re.Match` objetos en lugar de cadenas. "
2703-
"Continuando con el ejemplo anterior, si un escritor quisiera encontrar todos "
2704-
"los adverbios *y sus posiciones* en algún texto, usaría :func:`finditer` de "
2705-
"la siguiente manera::"
2707+
"Si se desea obtener más información sobre todas las coincidencias de un "
2708+
"patrón en lugar del texto coincidente, :func:`finditer` es útil ya que "
2709+
"proporciona :class:`~re.Match` objetos en lugar de cadenas. Continuando con "
2710+
"el ejemplo anterior, si un escritor quisiera encontrar todos los adverbios "
2711+
"*y sus posiciones* en algún texto, usaría :func:`finditer` de la siguiente "
2712+
"manera::"
27062713

27072714
#: ../Doc/library/re.rst:1736
27082715
msgid "Raw String Notation"
@@ -2810,7 +2817,7 @@ msgstr "$ (dólar)"
28102817

28112818
#: ../Doc/library/re.rst:123
28122819
msgid "* (asterisk)"
2813-
msgstr * (asterisco)"
2820+
msgstr "* (asterisco)"
28142821

28152822
#: ../Doc/library/re.rst:130
28162823
msgid "+ (plus)"

requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ PyICU
77
polib
88
pospell>=1.1
99
potodo
10-
powrap
10+
powrap>=1.0.2
1111
python-docs-theme>=2022.1
1212
setuptools
1313
sphinx-intl>=2.3.0

0 commit comments

Comments
 (0)