translate
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
#!.trans/bin/python
|
||||
'''
|
||||
Created on 11 mai 2025
|
||||
## pip install argostranslate polib
|
||||
@author: denis
|
||||
'''
|
||||
import argparse
|
||||
import os
|
||||
import polib
|
||||
import argostranslate.package
|
||||
import argostranslate.translate
|
||||
|
||||
DJANGO_PROJECT = "test_tube_scanner"
|
||||
|
||||
def install_translation_model(from_lang="en", to_lang="fr"):
|
||||
print("Cheching translation model...")
|
||||
argostranslate.package.update_package_index()
|
||||
available_packages = argostranslate.package.get_available_packages()
|
||||
|
||||
try:
|
||||
package_to_install = next(
|
||||
p for p in available_packages if p.from_code == from_lang and p.to_code == to_lang
|
||||
)
|
||||
print(f"Loading model {from_lang} >> {to_lang}...")
|
||||
argostranslate.package.install_from_path(package_to_install.download())
|
||||
print("Installation model ")
|
||||
except StopIteration:
|
||||
print("No models found for this language pair.")
|
||||
exit(1)
|
||||
|
||||
|
||||
def translate_po_file(input_path, output_path, from_lang="en", to_lang="fr"):
|
||||
print(f"Loading file {input_path}...")
|
||||
po = polib.pofile(input_path)
|
||||
|
||||
print("Start traduction...")
|
||||
for entry in po:
|
||||
if entry.msgstr.strip() == "" and entry.msgid.strip():
|
||||
try:
|
||||
translation = argostranslate.translate.translate(entry.msgid, from_lang, to_lang)
|
||||
entry.msgstr = translation
|
||||
except Exception as e:
|
||||
print(f"Translation error: {entry.msgid}\n{e}")
|
||||
continue
|
||||
|
||||
po.save(output_path)
|
||||
print(f"End of translation. Output file in: {output_path}")
|
||||
|
||||
|
||||
def main(app, from_lang, to_lang):
|
||||
INPUT_FILE = f'{app}/locale/{from_lang}/LC_MESSAGES/django.po'
|
||||
OUTPUT_FILE = f'{app}/locale/{to_lang}/LC_MESSAGES/django.po'
|
||||
install_translation_model(from_lang, to_lang)
|
||||
translate_po_file(INPUT_FILE, OUTPUT_FILE, from_lang, to_lang)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description="Translation for Django")
|
||||
parser.add_argument("--app", type=str, default='home', help="Django application name")
|
||||
parser.add_argument("--from_lang", type=str, default="fr", help="From language")
|
||||
parser.add_argument("--to_lang", type=str, default='en', help="To language", required=True)
|
||||
args = parser.parse_args()
|
||||
|
||||
main(f'{DJANGO_PROJECT}/{args.app}', args.from_lang, args.to_lang)
|
||||
exit(0)
|
||||
Reference in New Issue
Block a user