view translate_pycountry.py @ 248:83bf42767d85 default tip

Update version in sao.js after release issue11852
author Cédric Krier <ced@b2ck.com>
date Tue, 01 Nov 2022 16:39:45 +0100
parents 3451d9a811f2
children
line wrap: on
line source

#!/usr/bin/env python3

from optparse import OptionParser
from proteus import config, Model, Wizard
import pycountry
import gettext


def main(options):
    config.set_trytond(database=options.database, user=options.user)
    Language = Model.get('ir.lang')

    if options.lang:
        codes = [options.lang]
    else:
        languages = Language.find([('translatable', '=', True)])
        codes = [l.code for l in languages]

    translation_set = Wizard('ir.translation.set')
    translation_set.execute('set_')

    translation_clean = Wizard('ir.translation.clean')
    translation_clean.execute('clean')

    for lang in Language.find([('code', 'in', codes)]):
        translation_update = Wizard('ir.translation.update')
        translation_update.form.language = lang
        translation_update.execute('update')

    for lang in codes:
        for model, module, iso in [
                ('country.country', 'country', 'iso3166'),
                ('country.subdivision', 'country', 'iso3166_2'),
                ('currency.currency', 'currency', 'iso4217'),
                ]:
            translate(model, module, iso, lang)


def translate(model, module, iso, lang):
    Translation = Model.get('ir.translation')
    Country = Model.get(model)
    id2country = dict((c.id, c) for c in Country.find())
    try:
        gnutranslation = gettext.translation(iso, pycountry.LOCALES_DIR,
            languages=[lang])
    except IOError:
        return
    for translation in Translation.find([
                ('lang', '=', lang),
                ('module', '=', module),
                ('res_id', '>', 0),
                ('name', '=', '%s,name' % model),
                ]):
        country = id2country[translation.res_id]
        name = gnutranslation.gettext(country.name)
        translation.value = name
        translation.fuzzy = False
        translation.save()


if __name__ == '__main__':
    parser = OptionParser()
    parser.add_option('-d', '--database', dest='database')
    parser.add_option('-u', '--user', dest='user')
    parser.add_option('-l', '--language', dest='lang')
    parser.set_defaults(user='admin', database=None, lang=None)

    options, args = parser.parse_args()
    if args:
        parser.error('Wrong arguments')
    if not options.database:
        parser.error('You must define a database')

    main(options)

Repository Layout

/ Tryton top level repositories
modules Modules
public Public repositories
tpf Tryton Foundation repositories
sandbox Sandbox