-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmessages.py
189 lines (161 loc) · 6.5 KB
/
messages.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# coding=utf-8
from tkinter import StringVar
import locale
from guis import settings
import utils
# Affectation de la langue par défaut si non présente
if utils.isWindows():
if locale.getlocale(locale.LC_ALL) == (None, None):
locale.setlocale(locale.LC_ALL, locale.getdefaultlocale()[0][:2])
else:
if locale.getlocale(locale.LC_CTYPE) == (None, None):
locale.setlocale(locale.LC_CTYPE, locale.getdefaultlocale()[0][:2])
# Affectation de la langue d'utilisation en fonction des paramètres ou du système d'exploitation (français ou anglais)
LOCALE = StringVar(value = locale.getlocale()[0][:2])
if LOCALE.get() != "fr" and LOCALE.get() != "en":
LOCALE.set("en")
LOCALE.trace_variable("w", lambda *args : settings.saveSettings())
class MSG(StringVar):
def __init__(self, english_message : str, french_message : str):
"""
Constructeur d'un message localisé
Le premier argument est le message en anglais, le second est en français
"""
super().__init__()
self.en = english_message
self.fr = french_message
# Si un des messages est vide, l'autre est choisi
if len(self.fr) == 0:
self.fr = self.en
if len(self.en) == 0:
self.en = self.fr
# Changement du message d'utilisation lorsque la langue est changée
# noinspection PyUnusedLocal
def callback(*kwargs):
if isFrench():
self.set(self.fr)
else:
self.set(self.en)
# Lorsque la valeur de la variable LOCALE est changée, la fonction callback est invoquée
LOCALE.trace_variable("w", callback)
callback()
def clone(self):
"""
Clonage de l'objet
Chaque modification sur l'une des instances de changera pas l'autre (notamment utile en cas de formattage ou de switch)
"""
return MSG(self.en, self.fr)
def switch(self, msg):
"""
Change les textes à partir d'un autre message
Utile pour changer le texte d'un bouton (notamment pour activer/désactiver les sons)
"""
self.en = msg.en
self.fr = msg.fr
if isFrench():
self.set(self.fr)
else:
self.set(self.en)
def format(self, *args):
"""
Formatte le message à partir d'arguments
"""
obj = self.clone()
obj.en = obj.en.format(*list(args))
obj.fr = obj.fr.format(*list(args))
if isFrench():
obj.set(obj.fr)
else:
obj.set(obj.en)
return obj
def isEnglish():
"""
Renvoie True ssi le jeu est en anglais
"""
return LOCALE.get() == "en"
def isFrench():
"""
Renvoie True ssi le jeu est en français
"""
return not isEnglish()
def setEnglish():
"""
Changement de la langue vers l'anglais
"""
LOCALE.set("en")
def setFrench():
"""
Changement de la langue vers le français
"""
LOCALE.set("fr")
def switchLanguage():
"""
Changement de langue (anglais -> français ou français -> anglais)
"""
if isEnglish():
setFrench()
else:
setEnglish()
#########################################################################
########################### Messages généraux ###########################
#########################################################################
SINGLE_PLAYER = MSG("Singleplayer", "Un joueur")
MAP_CHOICE = MSG("Choose map", "Choisir la carte")
CAR_CHOICE = MSG("Choose car", "Choisir la voiture")
START = MSG("Start!", "Démarrer !")
MULTI_PLAYER = MSG("Multiplayer", "Multijoueur")
SETTINGS = MSG("Settings", "Paramètres")
SCORES = MSG("Scores", "Scores")
QUIT = MSG("Quit", "Quitter")
MAIN_MENU = MSG("Title screen", "Menu principal")
BACK = MSG("Back", "Retour")
CHANGE_LANGUAGE = MSG("Changer en français", "Change to english")
DISABLE_MUSIC = MSG("Disable music", "Désactiver la musique")
ENABLE_MUSIC = MSG("Enable music", "Activer la musique")
DISABLE_SOUNDS = MSG("Disable sounds", "Désactiver les effets sonores")
ENABLE_SOUNDS = MSG("Enable sounds", "Activer les effets sonores")
CHANGE_CONTROLS = MSG("Controls", "Contrôles")
WHAT_KEY_FOR = MSG("What key to {}?", "Quelle touche pour {} ?")
MAX_SPEED = MSG("Max speed : {:.1f} px/s", "Vitesse max : {:.1f} px/s")
ACCELERATION = MSG("Acceleration : {:.1f} px/s²", "Accélération : {:.1f} px/s²")
SIZE = MSG("Size : {}x{} px²", "Taille : {}x{} px²")
MANIABILITY = MSG("Maniability : {:.1f} %", "Maniabilité : {:.1f} %")
CHOOSE = MSG("Choose", "Choisir")
RESUME = MSG("Resume", "Reprendre")
LAP_NUMBER = MSG("Lap {}/{}", "Tour {}/{}")
YOU_WIN = MSG("You win in {}!", "Vous avez gagné en {} !")
HIGH_SCORE = MSG("High score: {}", "Record : {}")
NEW_HIGH_SCORE = MSG("You got the new high score!", "Vous avez battu un nouveau record !")
LAP = MSG("Lap", "Tour")
TIME = MSG("Time", "Temps")
TOTAL_TIME = MSG("Total time", "Temps total")
LAP_TIME = MSG("Time lap #{}", "Temps tour #{}")
CAR = MSG("Car", "Voiture")
#########################################################################
########################### Noms des contrôles ##########################
#########################################################################
FORWARD = MSG("Accelerate", "Accélérer")
TURN_LEFT = MSG("Turn left", "Tourner à gauche")
BACKWARD = MSG("Brake", "Freiner")
TURN_RIGHT = MSG("Turn right", "Tourner à droite")
LOCAL = MSG("Local", "Local")
ONLINE = MSG("Online", "En ligne")
##########################################################################
########################### Boîtes de dialogue ###########################
##########################################################################
SOON = MSG("Soon!", "Bientôt !")
FUTURE_FEATURE = MSG("This feature will (probably) be available later!", "Cette fonctionnalité sera (probablement) accessible plus tard !")
FONT_ERROR = MSG("Font not found", "Police non trouvée")
FONT_NOT_FOUND = MSG("The font \"Plantagenet Cherokee\" used in the game doesn't exist. Please install it manually with the joined file \"font.ttf\" to enjoy fully the game",
"La police « Plantagenet Cherokee » utilisée dans le jeu n'existe pas. Merci de l'installer manuellement à l'aide du fichier joint « font.ttf » afin de profiter pleinement du jeu")
##########################################################################
########################### Noms des voitures ############################
##########################################################################
RED_CAR = MSG("Red Speedo", "La Fulgurante Rouge")
BLUE_CAR = MSG("Beauty Blue", "La Belle Bleue")
GREEN_CAR = MSG("E-Car", "E-Voiture")
##########################################################################
############################ Noms des cartes #############################
##########################################################################
TEST_LOOP = MSG("Test Loop", "Circuit de test")
PHANTOM_LABYRINTH = MSG("Phantom labyrinth", "Labyrinthe fantôme")