@@ -66,6 +66,29 @@ class Preprocessors:
6666 anything else needed just be added with context preprocessors.
6767 """
6868
69+ @staticmethod
70+ def process_translations (context : dict ) -> dict :
71+ """
72+ Download the translations from the GitHub repository and extract them.
73+ """
74+ base_folder = os .path .dirname (__file__ )
75+ extract_path = os .path .join (base_folder , context ["translations" ]["source_path" ])
76+ shutil .rmtree (extract_path , ignore_errors = True )
77+ response = requests .get (context ["translations" ]["url" ])
78+ if response .status_code == 200 :
79+ with tarfile .open (None , "r:gz" , io .BytesIO (response .content )) as tar :
80+ tar .extractall (base_folder )
81+ else :
82+ raise Exception (f"Failed to download translations: { response .status_code } " )
83+
84+ for lang in list (context ["translations" ]["languages" ].keys ())[1 :]:
85+ shutil .rmtree (os .path .join (base_folder , "pandas" , lang ), ignore_errors = True )
86+ shutil .move (
87+ os .path .join (extract_path , lang ),
88+ os .path .join (base_folder , "pandas" , lang ),
89+ )
90+ return context
91+
6992 @staticmethod
7093 def current_year (context : dict ) -> dict :
7194 """
@@ -83,12 +106,23 @@ def navbar_add_info(context: dict) -> dict:
83106 ``has_subitems`` that tells which one of them every element is. It
84107 also adds a ``slug`` field to be used as a CSS id.
85108 """
86- for language in context ["translations" ]["languages" ]:
87- for i , item in enumerate (context ["navbar" ][language ]):
109+ context ["navbar" ] = {}
110+ for lang in context ["translations" ]["languages" ]:
111+ prefix = "" if lang == "en" else lang
112+ with open (
113+ os .path .join (
114+ context ["source_path" ], prefix , context ["main" ]["navbar_fname" ]
115+ ),
116+ encoding = "utf-8" ,
117+ ) as f :
118+ navbar_lang = yaml .safe_load (f )
119+
120+ context ["navbar" ][lang ] = navbar_lang ["navbar" ]
121+ for i , item in enumerate (navbar_lang ["navbar" ]):
88122 if not item .get ("translated" , True ):
89123 item ["target" ] = f"../{ item ['target' ]} "
90124
91- context ["navbar" ][language ][i ] = dict (
125+ context ["navbar" ][lang ][i ] = dict (
92126 item ,
93127 has_subitems = isinstance (item ["target" ], list ),
94128 slug = (item ["name" ].replace (" " , "-" ).lower ()),
@@ -392,7 +426,7 @@ def get_callable(obj_as_str: str) -> object:
392426 return obj
393427
394428
395- def get_context (config_fname : str , navbar_fname : str , ** kwargs : dict ) -> dict :
429+ def get_context (config_fname : str , ** kwargs : dict ) -> dict :
396430 """
397431 Load the config yaml as the base context, and enrich it with the
398432 information added by the context preprocessors defined in the file.
@@ -401,24 +435,8 @@ def get_context(config_fname: str, navbar_fname: str, **kwargs: dict) -> dict:
401435 context = yaml .safe_load (f )
402436
403437 context ["source_path" ] = os .path .dirname (config_fname )
404-
405- default_language = context ["translations" ]["default_language" ]
406- default_prefix = context ["translations" ]["default_prefix" ]
407- translated_languages = context ["translations" ]["languages" ].copy ()
408- translated_languages .pop (default_language )
409- context ["translated_languages" ] = translated_languages
410- download_and_extract_translations (context )
411- navbar = {}
412- for language in context ["translations" ]["languages" ]:
413- prefix = default_prefix if language == default_language else language
414- with open (
415- os .path .join (context ["source_path" ], prefix , navbar_fname ), encoding = "utf-8"
416- ) as f :
417- navbar_lang = yaml .safe_load (f )
418- navbar [language ] = navbar_lang ["navbar" ]
419- context ["navbar" ] = navbar
420-
421438 context .update (kwargs )
439+
422440 preprocessors = (
423441 get_callable (context_prep )
424442 for context_prep in context ["main" ]["context_preprocessors" ]
@@ -453,27 +471,6 @@ def extend_base_template(content: str, base_template: str) -> str:
453471 return result
454472
455473
456- def download_and_extract_translations (context : dict ) -> None :
457- """
458- Download the translations from the GitHub repository and extract them.
459- """
460- base_folder = os .path .dirname (__file__ )
461- extract_path = os .path .join (base_folder , context ["translations" ]["folder" ])
462- shutil .rmtree (extract_path , ignore_errors = True )
463- response = requests .get (context ["translations" ]["url" ])
464- if response .status_code == 200 :
465- with tarfile .open (None , "r:gz" , io .BytesIO (response .content )) as tar :
466- tar .extractall (os .path .join (base_folder , context ["translations" ]["folder" ]))
467- else :
468- raise Exception (f"Failed to download translations: { response .status_code } " )
469- for lang in context ["translated_languages" ]:
470- shutil .rmtree (os .path .join (base_folder , "pandas" , lang ), ignore_errors = True )
471- shutil .move (
472- os .path .join (extract_path , context ["translations" ]["source_path" ], lang ),
473- os .path .join (base_folder , "pandas" , lang ),
474- )
475-
476-
477474def main (
478475 source_path : str ,
479476 target_path : str ,
@@ -490,22 +487,14 @@ def main(
490487 sys .stderr .write ("Generating context...\n " )
491488 context = get_context (
492489 os .path .join (source_path , "config.yml" ),
493- navbar_fname = "navbar.yml" ,
494490 target_path = target_path ,
495491 )
496492 sys .stderr .write ("Context generated\n " )
497493
498494 templates_path = os .path .join (source_path , context ["main" ]["templates_path" ])
499495 jinja_env = jinja2 .Environment (loader = jinja2 .FileSystemLoader (templates_path ))
500-
501496 for fname in get_source_files (source_path ):
502- selected_language = context ["translations" ]["default_language" ]
503- for language in context ["translated_languages" ]:
504- if fname .startswith (language + "/" ):
505- selected_language = language
506- break
507-
508- context ["selected_language" ] = selected_language
497+ context ["lang" ] = fname [0 :2 ] if fname [2 ] == "/" else "en"
509498 if os .path .normpath (fname ) in context ["main" ]["ignore" ]:
510499 continue
511500
@@ -526,12 +515,10 @@ def main(
526515 body = body .replace ("<table>" , '<table class="table table-bordered">' )
527516 content = extend_base_template (body , context ["main" ]["base_template" ])
528517
529- context ["base_url" ] = "" .join (["../" ] * os .path .normpath (fname ).count ("/" ))
530- if selected_language != context ["translations" ]["default_language" ]:
531- context ["base_url" ] = "" .join (
532- ["../" ] * (os .path .normpath (fname ).count ("/" ) - 1 )
533- )
534-
518+ count = - 1 if context ["lang" ] != "en" else 0
519+ context ["base_url" ] = "" .join (
520+ ["../" ] * (os .path .normpath (fname ).count ("/" ) + count )
521+ )
535522 content = jinja_env .from_string (content ).render (** context )
536523 fname_html = os .path .splitext (fname )[0 ] + ".html"
537524 with open (
0 commit comments