Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make pull_l10n more lenient to localizer problems #6124

Merged
merged 4 commits into from
Jul 21, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,4 @@ venv/
*.exe
.storybook-out
test_get_pkgs
*_override_*.xtb
2 changes: 1 addition & 1 deletion app/resources/generated_resources_am.xtb
Original file line number Diff line number Diff line change
Expand Up @@ -6470,7 +6470,7 @@ nil</translation>
<translation id="5053701565089446556">የግል ማራዘሚያ <ph name="EXTENSION_NAME"/></translation>
<translation id="611296870688433505">ማንነትን የማያሳውቅ መተግበሪያ፦ <ph name="APP_NAME"/></translation>
<translation id="9048137919253433011">ማንነት የማያሳውቅ ትር፦ <ph name="TAB_NAME"/></translation>
<translation id="1799432502220762862">የግል ንዑስ ክፈፍ <ph name = "SUBFRAME_SITE"/></translation>
<translation id="1799432502220762862">የግል ንዑስ ክፈፍ <ph name="SUBFRAME_SITE"/></translation>
<translation id="3193187622878830588">ማንነት የማያሳውቁ ሁነታ፦ <ph name="SUBFRAME_SITE"/></translation>
<translation id="8808478386290700967">የBrave የድር ገበያ</translation>
<translation id="8261378640211443080">ይህ ቅጥያ በ<ph name="IDS_EXTENSION_WEB_STORE_TITLE"/> ውስጥ ያልተጠቀሰ ሲሆን እርስዎ ሳያውቁት የታከለ ሊሆን ይችላል።</translation>
Expand Down
42 changes: 21 additions & 21 deletions app/resources/generated_resources_es.xtb
Original file line number Diff line number Diff line change
Expand Up @@ -6466,7 +6466,7 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear
<translation id="7376221878517288144">¿Quieres salir del modo privado de todas formas?</translation>
<translation id="871606814707918245">La mayoría de los usuarios bloquean las notificaciones de este sitio web</translation>
<translation id="5053701565089446556">Extensión privada: <ph name="EXTENSION_NAME"/></translation>
<translation id="611296870688433505">Aplicación de incógnito: <ph name="APP_NAME"/></translation>
<translation id="611296870688433505">Aplicación Privada: <ph name="APP_NAME"/></translation>
<translation id="9048137919253433011">Pestaña privada: <ph name="TAB_NAME"/></translation>
<translation id="1799432502220762862">Subframe privado: <ph name="SUBFRAME_SITE"/></translation>
<translation id="3193187622878830588">Portal privado: <ph name="SUBFRAME_SITE"/></translation>
Expand All @@ -6489,17 +6489,17 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear
<translation id="3098826269712097986">Los datos de inicio de sesión se almacenarán en Brave cuando salgas del modo de incógnito. Así podrás usar Touch ID con este sitio web más adelante.</translation>
<translation id="5186185447130319458">Privado</translation>
<translation id="2579188629646253712">Salir del modo privado</translation>
<translation id="6744651634043798597">{COUNT,plural, =0{Abrir todas en una &amp;ventana de incógnito}=1{Abrir en una &amp;ventana de incógnito}other{Abrir (#) en una &amp;ventana de incógnito}}</translation>
<translation id="2431625704210501303">Abrir en una ventana de &amp;incógnito</translation>
<translation id="6744651634043798597">{COUNT,plural, =0{Abrir todas en una &amp;ventana privada}=1{Abrir en una &amp;ventana privada}other{Abrir (#) en una &amp;ventana privada}}</translation>
<translation id="2431625704210501303">Abrir en una ventana privada</translation>
<translation id="4620367155626060530">&amp;Mostrar barra de marcadores</translation>
<translation id="2633634757060186848">{COUNT,plural, =0{Abrir todas en una &amp;ventana de incógnito}=1{Abrir en una &amp;ventana de incógnito}other{Abrir (#) en una &amp;ventana de incógnito}}</translation>
<translation id="1985165269306590797">Abrir en una ventana de &amp;incógnito</translation>
<translation id="2633634757060186848">{COUNT,plural, =0{Abrir todas en una &amp;ventana privada}=1{Abrir en una &amp;ventana privada}other{Abrir (#) en una &amp;ventana privada}}</translation>
<translation id="1985165269306590797">Abrir en una ventana privada</translation>
<translation id="4680518314108745448">&amp;Mostrar barra de marcadores</translation>
<translation id="642436385689435488">Abre todos los marcadores en una ventana de incógnito</translation>
<translation id="5463021359602611602">Abrir en una ventana de incógnito</translation>
<translation id="1850357845349976573">{0,plural, =1{Incógnito}other{# ventanas de incógnito abiertas}}</translation>
<translation id="37784332082579802">{0,plural, =1{Incógnito}other{Incógnito (#)}}</translation>
<translation id="5070556616376997776">Estás en modo de incógnito</translation>
<translation id="642436385689435488">Abre todos los marcadores en una ventana privada</translation>
<translation id="5463021359602611602">Abrir en una ventana privada</translation>
<translation id="1850357845349976573">{0,plural, =1{Privada}other{# ventanas privadas abiertas}}</translation>
<translation id="37784332082579802">{0,plural, =1{Privada}other{Privada (#)}}</translation>
<translation id="5070556616376997776">Esta es una ventana privada</translation>
<translation id="5832813618714645810">Usuarios</translation>
<translation id="7171000599584840888">Añadir perfil...</translation>
<translation id="2005199804247617997">Otras personas</translation>
Expand All @@ -6525,21 +6525,21 @@ Guarda tu archivo de clave en un lugar seguro, ya que lo necesitarás para crear
<translation id="5840822070878669614">Abrir Brave Web Store</translation>
<translation id="383007806262310953">Mostrar barra de marcadores</translation>
<translation id="2890280714162339872">Sesión de incógnito actual: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START"/></translation>
<translation id="4207277598811881727">Sesión de incógnito actual: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START"/>, <ph name="RECENT_PERMISSIONS_CHANGE_1"/></translation>
<translation id="4470052247371020791">Sesión de incógnito actual: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START"/>, <ph name="RECENT_PERMISSIONS_CHANGE_1"/>, <ph name="RECENT_PERMISSIONS_CHANGE_2"/></translation>
<translation id="4332019753717105077">Sesión de incógnito actual: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START"/>, <ph name="RECENT_PERMISSIONS_CHANGE_1"/>, <ph name="RECENT_PERMISSIONS_CHANGE_2"/> y otros permisos</translation>
<translation id="8648684608605749476">Bloquear cookies de terceros en el modo de incógnito</translation>
<translation id="2199515977216775204">Mientras estás en modo de incógnito, los sitios web no pueden usar tus cookies para ver tu actividad de navegación en otros sitios web con el objetivo de, por ejemplo, personalizar tus anuncios. Es posible que las funciones de algunos sitios web no funcionen correctamente.</translation>
<translation id="6105125042109106861">Las cookies de terceros están bloqueadas en el modo de incógnito</translation>
<translation id="1281501490173223206">Solo a la sesión de incógnito actual</translation>
<translation id="4207277598811881727">Sesión privada actual: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START"/>, <ph name="RECENT_PERMISSIONS_CHANGE_1"/></translation>
<translation id="4470052247371020791">Sesión privada actual: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START"/>, <ph name="RECENT_PERMISSIONS_CHANGE_1"/>, <ph name="RECENT_PERMISSIONS_CHANGE_2"/></translation>
<translation id="4332019753717105077">Sesión privada actual: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START"/>, <ph name="RECENT_PERMISSIONS_CHANGE_1"/>, <ph name="RECENT_PERMISSIONS_CHANGE_2"/>, y otros permisos</translation>
<translation id="8648684608605749476">Bloquear cookies de terceros en el modo Privado</translation>
<translation id="2199515977216775204">Mientras estás en modo privado, los sitios web no pueden usar tus cookies para ver tu actividad de navegación en otros sitios web con el objetivo de, por ejemplo, personalizar tus anuncios. Es posible que las funciones de algunos sitios web no funcionen correctamente.</translation>
<translation id="6105125042109106861">Las cookies de terceros están bloqueadas en el modo privado</translation>
<translation id="1281501490173223206">Solo a la sesión privada actual</translation>
<translation id="5566692924079383101">Esta excepción se quitará automáticamente cuando salgas de la sesión de incógnito actual.</translation>
<translation id="6906406176003824042">Cambiar persona</translation>
<translation id="9063160602596686558">Envía automáticamente estadísticas de uso e informes sobre fallos a Brave</translation>
<translation id="3860292630623580294">(Incógnito)</translation>
<translation id="4854477725773269949">Permitir en modo de incógnito</translation>
<translation id="3860292630623580294">(Privado)</translation>
<translation id="4854477725773269949">Permitir en modo privado</translation>
<translation id="6436164536244065364">Ver en Brave Web Store</translation>
<translation id="38046578254905003">Busca extensiones y temas en <ph name="BEGIN_LINK"/>Brave Web Store<ph name="END_LINK"/></translation>
<translation id="6336451774241870485">Nueva pestaña de incógnito</translation>
<translation id="6610147964972079463">Cerrar pestañas de incógnito</translation>
<translation id="6336451774241870485">Nueva pestaña privada</translation>
<translation id="6610147964972079463">Cerrar pestañas privadas</translation>
<translation id="4933782374919065856">¿Tienes alguna pregunta? Ponte en contacto con la persona que supervisa tu perfil.</translation>
</translationbundle>
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ mjeseca...</translation>
<translation id="5463954686005964104">Daj mjesečnu napojnicu ovom mrežnom mjestu</translation>
<translation id="7530570094705720669">Izrada novčanika</translation>
<translation id="937392350501765664"><ph name="MONTH"/> <ph name="YEAR"/></translation>
<translation id="4751553692764711651">Doprinijeli ste u vrijednosti od <ph name="BAT_VALUE"/> <ph name="BAT_TEXT"/>.</translation>
<translation id="4751553692764711651">Doprinijeli ste u vrijednosti od <ph name="BAT_VALUE"/> <ph name="BAT_TEXT"/>.</translation>
<translation id="7997676409547731821">Nije moguće provesti zakazano mjesečno plaćanje automatskog doprinosa ili mjesečne napojnice zbog nedovoljnih sredstava. Pokušat ćemo ponovno za 30 dana.</translation>
<translation id="5306913077198665897">Ispričavamo se, ali nastao je problem tijekom obrađivanja vaše napojnice. Pokušajte ponovo.</translation>
<translation id="2429828319207652823">Pojavio se problem s obradom vašeg doprinosa.</translation>
Expand All @@ -172,7 +172,7 @@ mjeseca...</translation>
<translation id="4292832015778676417">zarađeno od oglasa</translation>
<translation id="683765328936486920">na usluzi YouTube</translation>
<translation id="8969049974285901797">na usluzi Twitch</translation>
<translation id="4376933248999950592">Odredili ste <ph name="BAT_VALUE"/> <ph name="BAT_TEXT"/> za stvaratelje koji se još nisu
<translation id="4376933248999950592">Odredili ste <ph name="BAT_VALUE"/> <ph name="BAT_TEXT"/> za stvaratelje koji se još nisu
registrirali za primanje doprinosa. Vašim se preglednikom pokušavaju ustupiti doprinosi dok se ne provjere ili do isteka 90 dana.</translation>
<translation id="3101693828171454453">nema dovoljno <ph name="TOKEN"/>s</translation>
<translation id="6940273954212603510">molimo</translation>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,8 @@
<translation id="1847863811689960237">Recompensa a los creadores por el contenido que te gusta.</translation>
<translation id="4129489167302464118">Tu pago mensual se repartirá entre los sitios web que visites.</translation>
<translation id="4898632353264854950">Sitios web que aparecerán mientras navegas</translation>
<translation id="3024485967181749006">Total de propinas este mes</translation>
<translation id="5055577484189948413">Contribuciones totales de este mes</translation>
<translation id="3024485967181749006">Total de propinas en el mes actual</translation>
<translation id="5055577484189948413">Contribuciones totales en el mes actual</translation>
<translation id="4153752809523809915">¿Has dado hoy propina a tu creador de contenido favorito?</translation>
<translation id="1165667598801520610">Añadir fondos</translation>
<translation id="6239274080752256452">Retirar fondos</translation>
Expand Down Expand Up @@ -534,9 +534,9 @@
<translation id="6915065518766963119">* Requiere la verificación de Uphold.</translation>
<translation id="4360054110030715117"><ph name="LINK_BEGIN"/>Más información<ph name="LINK_END"/> sobre Brave Rewards</translation>
<translation id="5826706758731195747">Al activar Brave Rewards, aceptas los <ph name="LINK_BEGIN"/>Términos del Servicio<ph name="LINK_END"/>.</translation>
<translation id="8344084848798035850">Ganancias estimadas en lo que va de mes</translation>
<translation id="8344084848798035850">Ganancias estimadas en el mes actual</translation>
<translation id="6778392839723468409">Recibe tokens visualizando anuncios respetuosos con la privacidad.</translation>
<translation id="5235444069025581717">Propinas y contribuciones este mes</translation>
<translation id="5235444069025581717">Propinas y contribuciones en el mes actual</translation>
<translation id="1210965535849006928">Reclamar mis recompensas</translation>
<translation id="8315514906653279104">Activando...</translation>
<translation id="7307847920988946894">Activar Rewards</translation>
Expand Down
8 changes: 4 additions & 4 deletions components/strings/components_strings_es.xtb
Original file line number Diff line number Diff line change
Expand Up @@ -1905,16 +1905,16 @@ Más información:
<translation id="6771143571626203666">De Brave Pay</translation>
<translation id="8820817407110198400">Barra de marcadores</translation>
<translation id="8362995731815961365">La persona que ha configurado este ordenador ha elegido bloquear este sitio web.</translation>
<translation id="4075123085690634698">Abre una página en una nueva ventana de incógnito (⇧ + ⌘ + N)</translation>
<translation id="4075123085690634698">Abre una página en una nueva ventana privada (⇧⌘N)</translation>
<translation id="2388886110302389394">Abre una página en una nueva ventana de incógnito (Ctrl + Mayús + N).</translation>
<translation id="6957624206566198865">Abre una página en una nueva pestaña de incógnito</translation>
<translation id="6957624206566198865">Abre una página en una nueva pestaña privada</translation>
<translation id="2378238891085281592">Has iniciado una sesión de incógnito</translation>
<translation id="3774752171665127360">Las páginas que aparezcan en las pestañas de incógnito no se guardarán en el historial del navegador, en el almacén de cookies ni en el historial de búsquedas una vez que hayas cerrado todas tus pestañas de incógnito. Se mantendrán los archivos que descargues o los marcadores que crees.</translation>
<translation id="9177896974490719854">Ten en cuenta que tus acciones no serán totalmente invisibles. El uso del modo de incógnito no te permite ocultar tu actividad de navegación a tu empresa, a tu proveedor de servicios de Internet o a los sitios web que visites.</translation>
<translation id="2227116904818538760">Estás en modo de navegación de incógnito</translation>
<translation id="2007417459975034427">Ahora puedes navegar de forma privada. Nadie más que use este dispositivo verá tu actividad, pero sí se guardarán tus descargas y marcadores.</translation>
<translation id="2586968635953373425">Abrir una ventana de incógnito</translation>
<translation id="3489858312836205593">Abre una nueva ventana de incógnito en Brave</translation>
<translation id="2586968635953373425">Abrir una ventana privada</translation>
<translation id="3489858312836205593">Abre una nueva ventana privada en Brave</translation>
<translation id="6984479912851154518">Saldrás del modo de incógnito para realizar un pago en una aplicación externa. ¿Quieres continuar?</translation>
<translation id="1426112902089905810">&lt;h4&gt;Paso 1: Inicia sesión en el portal&lt;/h4&gt;
&lt;p&gt;Para acceder a las redes Wi‑Fi de sitios como cafeterías o aeropuertos, tienes que iniciar sesión. Para ver la página de inicio de sesión, accede a una página que utilice &lt;code&gt;http://&lt;/code&gt;.&lt;/p&gt;
Expand Down
4 changes: 3 additions & 1 deletion script/lib/grd_string_replacements.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,9 @@

# Replacements for text nodes and neither for inside descriptions nor comments
main_text_only_replacements = [
(r'Copyright', u'Copyright \xa9'),
# By converting it back first, it makes this idempotent
(u'Copyright \xa9', u'Copyright'),
(u'Copyright', u'Copyright \xa9'),
]


Expand Down
49 changes: 45 additions & 4 deletions script/lib/transifex.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,41 @@ def get_transifex_translation_file_content(source_file_path, filename,
return content


def process_bad_ph_tags_for_one_string(val):
val = (val.replace('\r\n', '\n')
.replace('\r', '\n'))
if val.find('&lt;ph') == -1:
return val
val = (val.replace('&lt;', '<')
.replace('&gt;', '>')
.replace('> ', '> ')
.replace(' <', ' <'))
return val


def fixup_bad_ph_tags_from_raw_transifex_string(xml_content):
begin_index = 0
while begin_index < len(xml_content) and begin_index != -1:
string_index = xml_content.find('<string', begin_index)
if string_index == -1:
return xml_content
string_index = xml_content.find('>', string_index)
if string_index == -1:
return xml_content
string_index += 1
string_end_index = xml_content.find('</string>', string_index)
if string_end_index == -1:
return xml_content
before_part = xml_content[:string_index]
ending_part = xml_content[string_end_index:]
val = process_bad_ph_tags_for_one_string(xml_content[string_index:string_end_index])
xml_content = before_part + val + ending_part
begin_index = xml_content.find('</string>', begin_index)
if begin_index != -1:
begin_index += 9
return xml_content


def trim_ph_tags_in_xtb_file_content(xml_content):
"""Removes all children of <ph> tags including $X and %X text inside ph tag"""
xml = lxml.etree.fromstring(xml_content)
Expand Down Expand Up @@ -224,16 +259,21 @@ def textify(t):
return val


def textify_from_transifex(t):
def replace_string_from_transifex(val):
"""Returns the text of a node from Transifex which also fixes up common problems that localizers do"""
val = textify(t)
if val is None:
return val
val = (val.replace('&amp;lt;', '&lt;')
.replace('&amp;gt;', '&gt;')
.replace('&amp;&amp;', '&amp;'))
# TODO(bbondy) we should also do fixups for ph tags here that localizers often mess up
.replace('&amp;amp;', '&amp;'))
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

calling out this is a separate fix from the rest.

return val


def textify_from_transifex(t):
"""Returns the text of a node from Transifex which also fixes up common problems that localizers do"""
return replace_string_from_transifex(textify(t))


def get_grd_message_string_tags(grd_file_path):
"""Obtains all message tags of the specified GRD file"""
output_elements = []
Expand Down Expand Up @@ -620,6 +660,7 @@ def pull_source_files_from_transifex(source_file_path, filename):
print 'Updating: ', xtb_file_path, lang_code
xml_content = get_transifex_translation_file_content(
source_file_path, filename, lang_code)
xml_content = fixup_bad_ph_tags_from_raw_transifex_string(xml_content)
xml_content = trim_ph_tags_in_xtb_file_content(xml_content)
translations = get_strings_dict_from_xml_content(xml_content)
xtb_content = generate_xtb_content(lang_code, grd_strings,
Expand Down