#!/usr/bin/python3
# -*- coding: utf-8 -*
# Copyright (C) 2017 Tetras Libre <contact@Tetras-Libre.fr>
# Author: Beniamine, David <David.Beniamine@Tetras-Libre.fr>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Translation: technical english to NOT technical french

import re

translations = {
    'offline_fast_hashing_1e10_per_second': 'Essai sur base de donnée volée mal protégée',
    'offline_slow_hashing_1e4_per_second': 'Essai sur base de donnée volée bien protégée',
    'online_no_throttling_10_per_second': 'Essai en ligne sans protection anti brute force',
    'online_throttling_100_per_hour': 'Essai en ligne avec protection anti brute force',
    'passwords': 'mots de passes',
    'surnames': 'nom de famille',
    'user_inputs': "indices données par l'attaquant.e",
    'suggestions': 'conseils',
    'warning': 'problèmes',
    'less than a second': "moins d'une seconde",
    'less than a minute': "moins d'une minute",
}

substitutions = {
    'less than': "moins de",
    'day': 'jour',
    'second(s*)': 'seconde\g<1>',
    'hour(s*)': 'heure\g<1>',
    'months*': 'mois',
    'year(s*)': 'an\g<1>',
    'centuries': 'des siècles',
    'centuries': 'des siècles',
    "Predictable substitutions like (.*) instead of (.*) don't help very much":
        "Les substitutions prévisibles tels que \g<1> au lieu de \g<2> n'aident pas beaucoup",
    'Uncommon words are better': 'Préférer des mots rares',
    'Add another word or two': 'Ajouter un mot ou deux',
    'This is similar to a commonly used password': 'Ce mot de passe ressemble à un mot de passe très utilisé',
    'lower': 'minuscules',
    'upper': 'majuscules',
    'digits': 'chiffres',
    'unicode': 'caractères unicodes',
    'Use a few words, avoid common phrases': 'Utiliser plusieurs mots, évitez les phrases classiques',
    'No need for symbols, digits, or uppercase letters': 'pas besoin de symboles, nombres ou majuscules',
    'are easy to guess': 'sont faciles à deviner',
    'Straight rows of keys': 'Les suites directes de lettres sur le clavier',
    'Short keyboard patterns': 'Des petits déplacement sur le clavier',
    'Use a longer keyboard pattern with more turn': 'Utiliser un plus long schéma sur le clavier avec plus de virages',
    'Repeats like': 'Les répétitions telles que',
    'are only slightly harder to guess than': 'sont a peine plus difficile à deviner que',
    'Sequences like': 'Les sequences telles que',
    '<or>': 'ou',
    'Avoid repeated words and characters': 'Éviter les répétitions de mots ou caractères',
    'Avoid': 'Éviter',
    'recent years': 'les années récentes',
    'years that are associated with you': 'les années qui ont quelque chose à voir avec vous',
    'Dates are often easy to guess': 'Les dates sont souvent faciles à deviner',
    'dates': 'les dates',
    'This is a top-(.*) common password': 'Ce mot de passe est dans le top \g<1> des plus utilisés',
    'This is a very common passowrd': 'Ce mot de passe est très utilisé',
    'A word by itself is easy to guess': 'Un mot seul est facile à deviner',
    'Names and surnames by themselves': 'Les noms et noms de familles seuls',
    'Common names and surnames': 'Les noms et noms de familles courants',
    "Capitalization doesn't help very much": "Mettre en majuscule n'aide pas tant que ça",
    'All-uppercase is almost as easy to guess as all-lowercase':
        'Les mots en majuscules sont aussi simple à deviner que ceux en minuscules',
    "Reversed words aren't much harder to guess": 'Les mots inversés ne sont pas beaucoup plus dur à deviner',
}


def tr(text):
    try:
        text = translations[text]
    except:
        for pattern, sub in substitutions.items():
            text = re.sub(pattern, sub, text)
    finally:
        return text