#!/usr/bin/env python3
from itertools import chain
import os
from openpilot . common . basedir import BASEDIR
from openpilot . system . ui . lib . multilang import SYSTEM_UI_DIR , UI_DIR , TRANSLATIONS_DIR , multilang
POT_FILE = os . path . join ( str ( TRANSLATIONS_DIR ) , " app.pot " )
def update_translations ( ) :
files = [ ]
for root , _ , filenames in chain ( os . walk ( SYSTEM_UI_DIR ) ,
os . walk ( os . path . join ( UI_DIR , " widgets " ) ) ,
os . walk ( os . path . join ( UI_DIR , " layouts " ) ) ,
os . walk ( os . path . join ( UI_DIR , " onroad " ) ) ) :
for filename in filenames :
if filename . endswith ( " .py " ) :
files . append ( os . path . relpath ( os . path . join ( root , filename ) , BASEDIR ) )
# Create main translation file
cmd = ( " xgettext -L Python --keyword=tr --keyword=trn:1,2 --keyword=tr_noop --from-code=UTF-8 " +
" --flag=tr:1:python-brace-format --flag=trn:1:python-brace-format --flag=trn:2:python-brace-format " +
f " -D { BASEDIR } -o { POT_FILE } { ' ' . join ( files ) } " )
ret = os . system ( cmd )
assert ret == 0
# Generate/update translation files for each language
for name in multilang . languages . values ( ) :
if os . path . exists ( os . path . join ( TRANSLATIONS_DIR , f " app_ { name } .po " ) ) :
cmd = f " msgmerge --update --no-fuzzy-matching --backup=none --sort-output { TRANSLATIONS_DIR } /app_ { name } .po { POT_FILE } "
ret = os . system ( cmd )
assert ret == 0
else :
cmd = f " msginit -l { name } --no-translator --input { POT_FILE } --output-file { TRANSLATIONS_DIR } /app_ { name } .po "
ret = os . system ( cmd )
assert ret == 0
if __name__ == " __main__ " :
update_translations ( )