1 | # Internationalization support
|
---|
2 | # -*- coding: utf-8 -*-
|
---|
3 |
|
---|
4 | #------------------------------------------------------------------------------
|
---|
5 |
|
---|
6 | _strings = None
|
---|
7 | _fallback = None
|
---|
8 |
|
---|
9 | #------------------------------------------------------------------------------
|
---|
10 |
|
---|
11 | def setLanguage(language):
|
---|
12 | """Setup the internationalization support for the given language."""
|
---|
13 | print "i18n.setLanguage", language
|
---|
14 | _Strings.set(language)
|
---|
15 |
|
---|
16 | #------------------------------------------------------------------------------
|
---|
17 |
|
---|
18 | def xstr(key):
|
---|
19 | """Get the string for the given key in the current language.
|
---|
20 |
|
---|
21 | If not found, the fallback language is searched. If that is not found
|
---|
22 | either, the key itself is returned within curly braces."""
|
---|
23 | s = _Strings.current()[key]
|
---|
24 | if s is None:
|
---|
25 | s = _Strings.fallback()[key]
|
---|
26 | return "{" + key + "}" if s is None else s
|
---|
27 |
|
---|
28 | #------------------------------------------------------------------------------
|
---|
29 |
|
---|
30 | class _Strings(object):
|
---|
31 | """A collection of strings belonging to a certain language."""
|
---|
32 | # The registry of the string collections. This is a mapping from
|
---|
33 | # language codes to the actual collection objects
|
---|
34 | _instances = {}
|
---|
35 |
|
---|
36 | # The fallback instance
|
---|
37 | _fallback = None
|
---|
38 |
|
---|
39 | # The currently used instance.
|
---|
40 | _current = None
|
---|
41 |
|
---|
42 | @staticmethod
|
---|
43 | def _find(language):
|
---|
44 | """Find an instance for the given language.
|
---|
45 |
|
---|
46 | First the language is searched for as is. If not found, it is truncated
|
---|
47 | from the end until the last underscore and that is searched for. And so
|
---|
48 | on, until no underscore remains.
|
---|
49 |
|
---|
50 | If nothing is found this way, the
|
---|
51 | """
|
---|
52 | while language:
|
---|
53 | if language in _Strings._instances:
|
---|
54 | return _Strings._instances[language]
|
---|
55 | underscoreIndex = language.rfind("_")
|
---|
56 | language = language[:underscoreIndex] if underscoreIndex>0 else ""
|
---|
57 | return _Strings._fallback
|
---|
58 |
|
---|
59 | @staticmethod
|
---|
60 | def set(language):
|
---|
61 | """Set the string for the given language.
|
---|
62 |
|
---|
63 | A String instance is searched for the given language (see
|
---|
64 | _Strings._find()). Otherwise the fallback language is used."""
|
---|
65 | strings = _Strings._find(language)
|
---|
66 | assert strings is not None
|
---|
67 | if _Strings._current is not None and \
|
---|
68 | _Strings._current is not _Strings._fallback:
|
---|
69 | _Strings._current.finalize()
|
---|
70 | if strings is not _Strings._fallback:
|
---|
71 | strings.initialize()
|
---|
72 | _Strings._current = strings
|
---|
73 |
|
---|
74 | @staticmethod
|
---|
75 | def fallback():
|
---|
76 | """Get the fallback."""
|
---|
77 | return _Strings._fallback
|
---|
78 |
|
---|
79 | @staticmethod
|
---|
80 | def current():
|
---|
81 | """Get the current."""
|
---|
82 | return _Strings._current
|
---|
83 |
|
---|
84 | def __init__(self, languages, fallback = False):
|
---|
85 | """Construct an empty strings object."""
|
---|
86 | self._strings = {}
|
---|
87 | for language in languages:
|
---|
88 | _Strings._instances[language] = self
|
---|
89 | if fallback:
|
---|
90 | _Strings._fallback = self
|
---|
91 | self.initialize()
|
---|
92 |
|
---|
93 | def initialize(self):
|
---|
94 | """Initialize the strings.
|
---|
95 |
|
---|
96 | This should be overridden in children to setup the strings."""
|
---|
97 | pass
|
---|
98 |
|
---|
99 | def finalize(self):
|
---|
100 | """Finalize the object.
|
---|
101 |
|
---|
102 | This releases the string dictionary to free space."""
|
---|
103 | self._strings = {}
|
---|
104 |
|
---|
105 | def add(self, id, s):
|
---|
106 | """Add the given text as the string with the given ID.
|
---|
107 |
|
---|
108 | If the ID is already in the object, that is an assertion failure!"""
|
---|
109 | assert id not in self._strings
|
---|
110 | self._strings[id] = s
|
---|
111 |
|
---|
112 | def __getitem__(self, key):
|
---|
113 | """Get the string with the given key."""
|
---|
114 | return self._strings[key] if key in self._strings else None
|
---|
115 |
|
---|
116 | #------------------------------------------------------------------------------
|
---|
117 |
|
---|
118 | class _English(_Strings):
|
---|
119 | """The strings for the English language."""
|
---|
120 | def __init__(self):
|
---|
121 | """Construct the object."""
|
---|
122 | super(_English, self).__init__(["en_GB", "en"], fallback = True)
|
---|
123 |
|
---|
124 | def initialize(self):
|
---|
125 | """Initialize the strings."""
|
---|
126 | self.add("menu_file", "File")
|
---|
127 | self.add("menu_file_quit", "_Quit")
|
---|
128 | self.add("menu_file_quit_key", "q")
|
---|
129 | self.add("quit_question", "Are you sure to quit the logger?")
|
---|
130 |
|
---|
131 | self.add("menu_view", "View")
|
---|
132 | self.add("menu_view_monitor", "Show _monitor window")
|
---|
133 | self.add("menu_view_monitor_key", "m")
|
---|
134 | self.add("menu_view_debug", "Show _debug log")
|
---|
135 | self.add("menu_view_debug_key", "d")
|
---|
136 |
|
---|
137 | self.add("tab_flight", "_Flight")
|
---|
138 | self.add("tab_flight_tooltip", "Flight wizard")
|
---|
139 | self.add("tab_flight_info", "Flight _info")
|
---|
140 | self.add("tab_flight_info_tooltip", "Further information regarding the flight")
|
---|
141 | self.add("tab_log", "_Log")
|
---|
142 | self.add("tab_log_tooltip",
|
---|
143 | "The log of your flight that will be sent to the MAVA website")
|
---|
144 | self.add("tab_debug_log", "_Debug log")
|
---|
145 | self.add("tab_debug_log_tooltip", "Log with debugging information.")
|
---|
146 | self.add("tab_help", "_Help")
|
---|
147 | self.add("tab_gates", "_Gates")
|
---|
148 |
|
---|
149 | self.add("conn_failed", "Cannot connect to the simulator.")
|
---|
150 | self.add("conn_failed_sec",
|
---|
151 | "Rectify the situation, and press <b>Try again</b> "
|
---|
152 | "to try the connection again, "
|
---|
153 | "or <b>Cancel</b> to cancel the flight.")
|
---|
154 | self.add("conn_broken",
|
---|
155 | "The connection to the simulator failed unexpectedly.")
|
---|
156 | self.add("conn_broken_sec",
|
---|
157 | "If the simulator has crashed, restart it "
|
---|
158 | "and restore your flight as much as possible "
|
---|
159 | "to the state it was in before the crash. "
|
---|
160 | "Then press <b>Reconnect</b> to reconnect.\n\n"
|
---|
161 | "If you want to cancel the flight, press <b>Cancel</b>.")
|
---|
162 | self.add("button_cancel", "_Cancel")
|
---|
163 | self.add("button_tryagain", "_Try again")
|
---|
164 | self.add("button_reconnect", "_Reconnect")
|
---|
165 |
|
---|
166 | self.add("login", "Login")
|
---|
167 | self.add("loginHelp",
|
---|
168 | "Enter your MAVA pilot's ID and password to\n" \
|
---|
169 | "log in to the MAVA website and download\n" \
|
---|
170 | "your booked flights.")
|
---|
171 | self.add("label_pilotID", "Pil_ot ID:")
|
---|
172 | self.add("login_pilotID_tooltip",
|
---|
173 | "Enter your MAVA pilot's ID. This usually starts with a "
|
---|
174 | "'P' followed by 3 digits.")
|
---|
175 | self.add("label_password", "_Password:")
|
---|
176 | self.add("login_password_tooltip",
|
---|
177 | "Enter the password for your pilot's ID")
|
---|
178 | self.add("remember_password", "_Remember password")
|
---|
179 | self.add("login_remember_tooltip",
|
---|
180 | "If checked, your password will be stored, so that you should "
|
---|
181 | "not have to enter it every time. Note, however, that the password "
|
---|
182 | "is stored as text, and anybody who can access your files will "
|
---|
183 | "be able to read it.")
|
---|
184 | self.add("button_login", "Logi_n")
|
---|
185 | self.add("login_button_tooltip", "Click to log in.")
|
---|
186 | self.add("login_busy", "Logging in...")
|
---|
187 | self.add("login_invalid", "Invalid pilot's ID or password.")
|
---|
188 | self.add("login_invalid_sec",
|
---|
189 | "Check the ID and try to reenter the password.")
|
---|
190 | self.add("login_failconn",
|
---|
191 | "Failed to connect to the MAVA website.")
|
---|
192 | self.add("login_failconn_sec", "Try again in a few minutes.")
|
---|
193 |
|
---|
194 | self.add("button_next", "_Next")
|
---|
195 | self.add("button_next_tooltip", "Click to go to the next page.")
|
---|
196 | self.add("button_previous", "_Previous")
|
---|
197 | self.add("button_previous_tooltip", "Click to go to the previous page.")
|
---|
198 |
|
---|
199 | self.add("flightsel_title", "Flight selection")
|
---|
200 | self.add("flightsel_help", "Select the flight you want to perform.")
|
---|
201 | self.add("flightsel_chelp", "You have selected the flight highlighted below.")
|
---|
202 | self.add("flightsel_no", "Flight no.")
|
---|
203 | self.add("flightsel_deptime", "Departure time [UTC]")
|
---|
204 | self.add("flightsel_from", "From")
|
---|
205 | self.add("flightsel_to", "To")
|
---|
206 |
|
---|
207 | self.add("fleet_busy", "Retrieving fleet...")
|
---|
208 | self.add("fleet_failed",
|
---|
209 | "Failed to retrieve the information on the fleet.")
|
---|
210 | self.add("fleet_update_busy", "Updating plane status...")
|
---|
211 | self.add("fleet_update_failed",
|
---|
212 | "Failed to update the status of the airplane.")
|
---|
213 |
|
---|
214 | self.add("gatesel_title", "LHBP gate selection")
|
---|
215 | self.add("gatesel_help",
|
---|
216 | "The airplane's gate position is invalid.\n\n" \
|
---|
217 | "Select the gate from which you\n" \
|
---|
218 | "would like to begin the flight.")
|
---|
219 | self.add("gatesel_conflict", "Gate conflict detected again.")
|
---|
220 | self.add("gatesel_conflict_sec",
|
---|
221 | "Try to select a different gate.")
|
---|
222 |
|
---|
223 | self.add("connect_title", "Connect to the simulator")
|
---|
224 | self.add("connect_help",
|
---|
225 | "Load the aircraft below into the simulator and park it\n" \
|
---|
226 | "at the given airport, at the gate below, if present.\n\n" \
|
---|
227 | "Then press the Connect button to connect to the simulator.")
|
---|
228 | self.add("connect_chelp",
|
---|
229 | "The basic data of your flight can be read below.")
|
---|
230 | self.add("connect_flightno", "Flight number:")
|
---|
231 | self.add("connect_acft", "Aircraft:")
|
---|
232 | self.add("connect_tailno", "Tail number:")
|
---|
233 | self.add("connect_airport", "Airport:")
|
---|
234 | self.add("connect_gate", "Gate:")
|
---|
235 | self.add("button_connect", "_Connect")
|
---|
236 | self.add("button_connect_tooltip", "Click to connect to the simulator.")
|
---|
237 | self.add("connect_busy", "Connecting to the simulator...")
|
---|
238 |
|
---|
239 | self.add("payload_title", "Payload")
|
---|
240 | self.add("payload_help",
|
---|
241 | "The briefing contains the weights below.\n" \
|
---|
242 | "Setup the cargo weight here and the payload weight "
|
---|
243 | "in the simulator.\n\n" \
|
---|
244 | "You can also check here what the simulator reports as ZFW.")
|
---|
245 | self.add("payload_chelp",
|
---|
246 | "You can see the weights in the briefing\n" \
|
---|
247 | "and the cargo weight you have selected below.\n\n" \
|
---|
248 | "You can also query the ZFW reported by the simulator.")
|
---|
249 | self.add("payload_crew", "Crew:")
|
---|
250 | self.add("payload_pax", "Passengers:")
|
---|
251 | self.add("payload_bag", "Baggage:")
|
---|
252 | self.add("payload_cargo", "_Cargo:")
|
---|
253 | self.add("payload_cargo_tooltip",
|
---|
254 | "The weight of the cargo for your flight.")
|
---|
255 | self.add("payload_mail", "Mail:")
|
---|
256 | self.add("payload_zfw", "Calculated ZFW:")
|
---|
257 | self.add("payload_fszfw", "_ZFW from FS:")
|
---|
258 | self.add("payload_fszfw_tooltip",
|
---|
259 | "Click here to refresh the ZFW value from the simulator.")
|
---|
260 | self.add("payload_zfw_busy", "Querying ZFW...")
|
---|
261 |
|
---|
262 | self.add("time_title", "Time")
|
---|
263 | self.add("time_help",
|
---|
264 | "The departure and arrival times are displayed below in UTC.\n\n" \
|
---|
265 | "You can also query the current UTC time from the simulator.\n" \
|
---|
266 | "Ensure that you have enough time to properly prepare for the flight.")
|
---|
267 | self.add("time_chelp",
|
---|
268 | "The departure and arrival times are displayed below in UTC.\n\n" \
|
---|
269 | "You can also query the current UTC time from the simulator.\n")
|
---|
270 | self.add("time_departure", "Departure:")
|
---|
271 | self.add("time_arrival", "Arrival:")
|
---|
272 | self.add("time_fs", "_Time from FS:")
|
---|
273 | self.add("time_fs_tooltip",
|
---|
274 | "Click here to query the current UTC time from the simulator.")
|
---|
275 | self.add("time_busy", "Querying time...")
|
---|
276 |
|
---|
277 | self.add("route_title", "Route")
|
---|
278 | self.add("route_help",
|
---|
279 | "Set your cruise flight level below, and\n" \
|
---|
280 | "if necessary, edit the flight plan.")
|
---|
281 | self.add("route_chelp",
|
---|
282 | "If necessary, you can modify the cruise level and\n" \
|
---|
283 | "the flight plan below during flight.\n" \
|
---|
284 | "If so, please, add a comment on why " \
|
---|
285 | "the modification became necessary.")
|
---|
286 | self.add("route_level", "_Cruise level:")
|
---|
287 | self.add("route_level_tooltip",
|
---|
288 | "The cruise flight level. Click on the arrows to increment "
|
---|
289 | "or decrement by 10, or enter the number on the keyboard.")
|
---|
290 | self.add("route_route", "_Route")
|
---|
291 | self.add("route_route_tooltip",
|
---|
292 | "The planned flight route in the standard format.")
|
---|
293 | self.add("route_down_notams", "Downloading NOTAMs...")
|
---|
294 | self.add("route_down_metars", "Downloading METARs...")
|
---|
295 |
|
---|
296 | self.add("briefing_title", "Briefing (%d/2): %s")
|
---|
297 | self.add("briefing_departure", "departure")
|
---|
298 | self.add("briefing_arrival", "arrival")
|
---|
299 | self.add("briefing_help",
|
---|
300 | "Read carefully the NOTAMs and METAR below.\n\n" \
|
---|
301 | "You can edit the METAR if your simulator or network\n" \
|
---|
302 | "provides different weather.")
|
---|
303 | self.add("briefing_chelp",
|
---|
304 | "If your simulator or network provides a different\n" \
|
---|
305 | "weather, you can edit the METAR below.")
|
---|
306 | self.add("briefing_notams_init", "LHBP NOTAMs")
|
---|
307 | self.add("briefing_metar_init", "LHBP METAR")
|
---|
308 | self.add("briefing_button",
|
---|
309 | "I have read the briefing and am _ready to fly!")
|
---|
310 | self.add("briefing_notams_template", "%s NOTAMs")
|
---|
311 | self.add("briefing_metar_template", "%s _METAR")
|
---|
312 | self.add("briefing_notams_failed", "Could not download NOTAMs")
|
---|
313 | self.add("briefing_notams_missing",
|
---|
314 | "Could not download NOTAM for this airport")
|
---|
315 | self.add("briefing_metar_failed", "Could not download METAR")
|
---|
316 |
|
---|
317 | self.add("takeoff_title", "Takeoff")
|
---|
318 | self.add("takeoff_help",
|
---|
319 | "Enter the runway and SID used, as well as the speeds.")
|
---|
320 | self.add("takeoff_chelp",
|
---|
321 | "The runway, SID and takeoff speeds logged can be seen below.")
|
---|
322 | self.add("takeoff_runway", "Run_way:")
|
---|
323 | self.add("takeoff_runway_tooltip",
|
---|
324 | "The runway the takeoff is performed from.")
|
---|
325 | self.add("takeoff_sid", "_SID:")
|
---|
326 | self.add("takeoff_sid_tooltip",
|
---|
327 | "The name of the Standard Instrument Deparature procedure followed.")
|
---|
328 | self.add("takeoff_v1", "V<sub>_1</sub>:")
|
---|
329 | self.add("takeoff_v1_tooltip", "The takeoff decision speed in knots.")
|
---|
330 | self.add("label_knots", "knots")
|
---|
331 | self.add("takeoff_vr", "V<sub>_R</sub>:")
|
---|
332 | self.add("takeoff_vr_tooltip", "The takeoff rotation speed in knots.")
|
---|
333 | self.add("takeoff_v2", "V<sub>_2</sub>:")
|
---|
334 | self.add("takeoff_v2_tooltip", "The takeoff safety speed in knots.")
|
---|
335 |
|
---|
336 | self.add("landing_title", "Landing")
|
---|
337 | self.add("landing_help",
|
---|
338 | "Enter the STAR and/or transition, runway,\n" \
|
---|
339 | "approach type and V<sub>Ref</sub> used.")
|
---|
340 | self.add("landing_chelp",
|
---|
341 | "The STAR and/or transition, runway, approach\n" \
|
---|
342 | "type and V<sub>Ref</sub> logged can be seen below.")
|
---|
343 | self.add("landing_star", "_STAR:")
|
---|
344 | self.add("landing_star_tooltip",
|
---|
345 | "The name of Standard Terminal Arrival Route followed.")
|
---|
346 | self.add("landing_transition", "_Transition:")
|
---|
347 | self.add("landing_transition_tooltip",
|
---|
348 | "The name of transition executed or VECTORS if vectored by ATC.")
|
---|
349 | self.add("landing_runway", "Run_way:")
|
---|
350 | self.add("landing_runway_tooltip",
|
---|
351 | "The runway the landing is performed on.")
|
---|
352 | self.add("landing_approach", "_Approach type:")
|
---|
353 | self.add("landing_approach_tooltip",
|
---|
354 | "The type of the approach, e.g. ILS or VISUAL.")
|
---|
355 | self.add("landing_vref", "V<sub>_Ref</sub>:")
|
---|
356 | self.add("landing_vref_tooltip",
|
---|
357 | "The landing reference speed in knots.")
|
---|
358 |
|
---|
359 | self.add("flighttype_scheduled", "scheduled")
|
---|
360 | self.add("flighttype_ot", "old-timer")
|
---|
361 | self.add("flighttype_vip", "VIP")
|
---|
362 | self.add("flighttype_charter", "charter")
|
---|
363 |
|
---|
364 | self.add("finish_title", "Finish")
|
---|
365 | self.add("finish_help",
|
---|
366 | "There are some statistics about your flight below.\n\n" \
|
---|
367 | "Review the data, also on earlier pages, and if you are\n" \
|
---|
368 | "satisfied, you can save or send your PIREP.")
|
---|
369 | self.add("finish_rating", "Flight rating:")
|
---|
370 | self.add("finish_flight_time", "Flight time:")
|
---|
371 | self.add("finish_block_time", "Block time:")
|
---|
372 | self.add("finish_distance", "Distance flown:")
|
---|
373 | self.add("finish_fuel", "Fuel used:")
|
---|
374 | self.add("finish_type", "_Type:")
|
---|
375 | self.add("finish_type_tooltip", "Select the type of the flight.")
|
---|
376 | self.add("finish_online", "_Online flight")
|
---|
377 | self.add("finish_online_tooltip",
|
---|
378 | "Check if your flight was online, uncheck otherwise.")
|
---|
379 | self.add("finish_save", "S_ave PIREP...")
|
---|
380 | self.add("finish_save_tooltip",
|
---|
381 | "Click to save the PIREP into a file on your computer. " \
|
---|
382 | "The PIREP can be loaded and sent later.")
|
---|
383 | self.add("finish_send", "_Send PIREP...")
|
---|
384 | self.add("finish_send_tooltip",
|
---|
385 | "Click to send the PIREP to the MAVA website for further review.")
|
---|
386 | self.add("finish_send_busy", "Sending PIREP...")
|
---|
387 | self.add("finish_send_success",
|
---|
388 | "The PIREP was sent successfully.")
|
---|
389 | self.add("finish_send_success_sec",
|
---|
390 | "Await the thorough scrutiny by our fearless PIREP reviewers! :)")
|
---|
391 | self.add("finish_send_already",
|
---|
392 | "The PIREP for this flight has already been sent!")
|
---|
393 | self.add("finish_send_already_sec",
|
---|
394 | "You may clear the old PIREP on the MAVA website.")
|
---|
395 | self.add("finish_send_notavail",
|
---|
396 | "This flight is not available anymore!")
|
---|
397 | self.add("finish_send_unknown",
|
---|
398 | "The MAVA website returned with an unknown error.")
|
---|
399 | self.add("finish_send_unknown_sec",
|
---|
400 | "See the debug log for more information.")
|
---|
401 | self.add("finish_send_failed",
|
---|
402 | "Could not send the PIREP to the MAVA website.")
|
---|
403 | self.add("finish_send_failed_sec",
|
---|
404 | "This can be a network problem, in which case\n" \
|
---|
405 | "you may try again later. Or it can be a bug;\n" \
|
---|
406 | "see the debug log for more information.")
|
---|
407 |
|
---|
408 | #------------------------------------------------------------------------------
|
---|
409 |
|
---|
410 | class _Hungarian(_Strings):
|
---|
411 | """The strings for the Hungarian language."""
|
---|
412 | def __init__(self):
|
---|
413 | """Construct the object."""
|
---|
414 | super(_Hungarian, self).__init__(["hu_HU", "hu"])
|
---|
415 |
|
---|
416 | def initialize(self):
|
---|
417 | """Initialize the strings."""
|
---|
418 | self.add("menu_file", "Fájl")
|
---|
419 | self.add("menu_file_quit", "_Kilépés")
|
---|
420 | self.add("menu_file_quit_key", "k")
|
---|
421 | self.add("quit_question", "Biztosan ki akarsz lépni?")
|
---|
422 |
|
---|
423 | self.add("menu_view", "Nézet")
|
---|
424 | self.add("menu_view_monitor", "Mutasd a _monitor ablakot")
|
---|
425 | self.add("menu_view_monitor_key", "m")
|
---|
426 | self.add("menu_view_debug", "Mutasd a _debug naplót")
|
---|
427 | self.add("menu_view_debug_key", "d")
|
---|
428 |
|
---|
429 | self.add("tab_flight", "_Járat")
|
---|
430 | self.add("tab_flight_tooltip", "Járat varázsló")
|
---|
431 | self.add("tab_flight_info", "Járat _info")
|
---|
432 | self.add("tab_flight_info_tooltip", "Egyéb információk a járat teljesítésével kapcsolatban")
|
---|
433 | self.add("tab_log", "_Napló")
|
---|
434 | self.add("tab_log_tooltip",
|
---|
435 | "A járat naplója, amit majd el lehet küldeni a MAVA szerverére")
|
---|
436 | self.add("tab_debug_log", "_Debug napló")
|
---|
437 | self.add("tab_debug_log_tooltip",
|
---|
438 | "Hibakereséshez használható információkat tartalmazó napló.")
|
---|
439 | self.add("tab_help", "_Segítség")
|
---|
440 | self.add("tab_gates", "_Kapuk")
|
---|
441 |
|
---|
442 | self.add("conn_failed", "Nem tudtam kapcsolódni a szimulátorhoz.")
|
---|
443 | self.add("conn_failed_sec",
|
---|
444 | "Korrigáld a problémát, majd nyomd meg az "
|
---|
445 | "<b>Próbáld újra</b> gombot a újrakapcsolódáshoz, "
|
---|
446 | "vagy a <b>Mégse</b> gombot a járat megszakításához.")
|
---|
447 | self.add("conn_broken",
|
---|
448 | "A szimulátorral való kapcsolat váratlanul megszakadt.")
|
---|
449 | self.add("conn_broken_sec",
|
---|
450 | "Ha a szimulátor elszállt, indítsd újra "
|
---|
451 | "és állítsd vissza a repülésed elszállás előtti "
|
---|
452 | "állapotát amennyire csak lehet. "
|
---|
453 | "Ezután nyomd meg az <b>Újrakapcsolódás</b> gombot "
|
---|
454 | "a kapcsolat ismételt felvételéhez.\n\n"
|
---|
455 | "Ha meg akarod szakítani a repülést, nyomd meg a "
|
---|
456 | "<b>Mégse</b> gombot.")
|
---|
457 | self.add("button_cancel", "_Mégse")
|
---|
458 | self.add("button_tryagain", "_Próbáld újra")
|
---|
459 | self.add("button_reconnect", "Újra_kapcsolódás")
|
---|
460 |
|
---|
461 | self.add("login", "Bejelentkezés")
|
---|
462 | self.add("loginHelp",
|
---|
463 | "Írd be a MAVA pilóta azonosítódat és a\n" \
|
---|
464 | "bejelentkezéshez használt jelszavadat,\n" \
|
---|
465 | "hogy választhass a foglalt járataid közül.")
|
---|
466 | self.add("label_pilotID", "_Azonosító:")
|
---|
467 | self.add("login_pilotID_tooltip",
|
---|
468 | "Írd be a MAVA pilóta azonosítódat. Ez általában egy 'P' "
|
---|
469 | "betűvel kezdődik, melyet 3 számjegy követ.")
|
---|
470 | self.add("label_password", "Je_lszó:")
|
---|
471 | self.add("login_password_tooltip",
|
---|
472 | "Írd be a pilóta azonosítódhoz tartozó jelszavadat.")
|
---|
473 | self.add("remember_password", "_Emlékezz a jelszóra")
|
---|
474 | self.add("login_remember_tooltip",
|
---|
475 | "Ha ezt kiválasztod, a jelszavadat eltárolja a program, így "
|
---|
476 | "nem kell mindig újból beírnod. Vedd azonban figyelembe, "
|
---|
477 | "hogy a jelszót szövegként tároljuk, így bárki elolvashatja, "
|
---|
478 | "aki hozzáfér a fájljaidhoz.")
|
---|
479 | self.add("button_login", "_Bejelentkezés")
|
---|
480 | self.add("login_button_tooltip", "Kattints ide a bejelentkezéshez.")
|
---|
481 | self.add("login_busy", "Bejelentkezés...")
|
---|
482 | self.add("login_invalid", "Érvénytelen azonosító vagy jelszó.")
|
---|
483 | self.add("login_invalid_sec",
|
---|
484 | "Ellenőrízd az azonosítót, és próbáld meg újra beírni a jelszót.")
|
---|
485 | self.add("login_failconn",
|
---|
486 | "Nem sikerült kapcsolódni a MAVA honlaphoz.")
|
---|
487 | self.add("login_failconn_sec", "Próbáld meg pár perc múlva.")
|
---|
488 |
|
---|
489 | self.add("button_next", "_Előre")
|
---|
490 | self.add("button_next_tooltip",
|
---|
491 | "Kattints ide, hogy a következő lapra ugorj.")
|
---|
492 | self.add("button_previous", "_Vissza")
|
---|
493 | self.add("button_previous_tooltip",
|
---|
494 | "Kattints ide, hogy az előző lapra ugorj.")
|
---|
495 |
|
---|
496 | self.add("flightsel_title", "Járatválasztás")
|
---|
497 | self.add("flightsel_help", "Válaszd ki a járatot, amelyet le szeretnél repülni.")
|
---|
498 | self.add("flightsel_chelp", "A lent kiemelt járatot választottad.")
|
---|
499 | self.add("flightsel_no", "Járatszám")
|
---|
500 | self.add("flightsel_deptime", "Indulás ideje [UTC]")
|
---|
501 | self.add("flightsel_from", "Honnan")
|
---|
502 | self.add("flightsel_to", "Hová")
|
---|
503 |
|
---|
504 | self.add("fleet_busy", "Flottaadatok letöltése...")
|
---|
505 | self.add("fleet_failed",
|
---|
506 | "Nem sikerült letöltenem a flotta adatait.")
|
---|
507 | self.add("fleet_update_busy", "Repülőgép pozíció frissítése...")
|
---|
508 | self.add("fleet_update_failed",
|
---|
509 | "Nem sikerült frissítenem a repülőgép pozícióját.")
|
---|
510 |
|
---|
511 | self.add("gatesel_title", "LHBP kapuválasztás")
|
---|
512 | self.add("gatesel_help",
|
---|
513 | "A repülőgép kapu pozíciója érvénytelen.\n\n" \
|
---|
514 | "Válaszd ki azt a kaput, ahonnan\n" \
|
---|
515 | "el szeretnéd kezdeni a járatot.")
|
---|
516 | self.add("gatesel_conflict", "Ismét kapuütközés történt.")
|
---|
517 | self.add("gatesel_conflict_sec",
|
---|
518 | "Próbálj egy másik kaput választani.")
|
---|
519 |
|
---|
520 | self.add("connect_title", "Kapcsolódás a szimulátorhoz")
|
---|
521 | self.add("connect_help",
|
---|
522 | "Tölsd be a lent látható repülőgépet a szimulátorba\n" \
|
---|
523 | "az alább megadott reptérre és kapuhoz.\n\n" \
|
---|
524 | "Ezután nyomd meg a Kapcsolódás gombot a kapcsolódáshoz.")
|
---|
525 | self.add("connect_chelp",
|
---|
526 | "A járat alapadatai lent olvashatók.")
|
---|
527 | self.add("connect_flightno", "Járatszám:")
|
---|
528 | self.add("connect_acft", "Típus:")
|
---|
529 | self.add("connect_tailno", "Lajstromjel:")
|
---|
530 | self.add("connect_airport", "Repülőtér:")
|
---|
531 | self.add("connect_gate", "Kapu:")
|
---|
532 | self.add("button_connect", "K_apcsolódás")
|
---|
533 | self.add("button_connect_tooltip",
|
---|
534 | "Kattints ide a szimulátorhoz való kapcsolódáshoz.")
|
---|
535 | self.add("connect_busy", "Kapcsolódás a szimulátorhoz...")
|
---|
536 |
|
---|
537 | self.add("payload_title", "Terhelés")
|
---|
538 | self.add("payload_help",
|
---|
539 | "Az eligazítás az alábbi tömegeket tartalmazza.\n" \
|
---|
540 | "Allítsd be a teherszállítmány tömegét itt, a hasznos "
|
---|
541 | "terhet pedig a szimulátorban.\n\n" \
|
---|
542 | "Azt is ellenőrízheted, hogy a szimulátor milyen ZFW-t jelent.")
|
---|
543 | self.add("payload_chelp",
|
---|
544 | "Lent láthatók az eligazításban szereplő tömegek, valamint\n" \
|
---|
545 | "a teherszállítmány általad megadott tömege.\n\n" \
|
---|
546 | "Azt is ellenőrízheted, hogy a szimulátor milyen ZFW-t jelent.")
|
---|
547 | self.add("payload_crew", "Legénység:")
|
---|
548 | self.add("payload_pax", "Utasok:")
|
---|
549 | self.add("payload_bag", "Poggyász:")
|
---|
550 | self.add("payload_cargo", "_Teher:")
|
---|
551 | self.add("payload_cargo_tooltip",
|
---|
552 | "A teherszállítmány tömege.")
|
---|
553 | self.add("payload_mail", "Posta:")
|
---|
554 | self.add("payload_zfw", "Kiszámolt ZFW:")
|
---|
555 | self.add("payload_fszfw", "_ZFW a szimulátorból:")
|
---|
556 | self.add("payload_fszfw_tooltip",
|
---|
557 | "Kattints ide, hogy frissítsd a ZFW értékét a szimulátorból.")
|
---|
558 | self.add("payload_zfw_busy", "ZFW lekérdezése...")
|
---|
559 |
|
---|
560 | self.add("time_title", "Menetrend")
|
---|
561 | self.add("time_help",
|
---|
562 | "Az indulás és az érkezés ideje lent látható UTC szerint.\n\n" \
|
---|
563 | "A szimulátor aktuális UTC szerinti idejét is lekérdezheted.\n" \
|
---|
564 | "Győzödj meg arról, hogy elég időd van a repülés előkészítéséhez.")
|
---|
565 | self.add("time_chelp",
|
---|
566 | "Az indulás és az érkezés ideje lent látható UTC szerint.\n\n" \
|
---|
567 | "A szimulátor aktuális UTC szerinti idejét is lekérdezheted.")
|
---|
568 | self.add("time_departure", "Indulás:")
|
---|
569 | self.add("time_arrival", "Érkezés:")
|
---|
570 | self.add("time_fs", "Idő a s_zimulátorból:")
|
---|
571 | self.add("time_fs_tooltip",
|
---|
572 | "Kattings ide, hogy frissítsd a szimulátor aktuális UTC szerint idejét.")
|
---|
573 | self.add("time_busy", "Idő lekérdezése...")
|
---|
574 |
|
---|
575 | self.add("route_title", "Útvonal")
|
---|
576 | self.add("route_help",
|
---|
577 | "Állítsd be az utazószintet lent, és ha szükséges,\n" \
|
---|
578 | "módosítsd az útvonaltervet.")
|
---|
579 | self.add("route_chelp",
|
---|
580 | "Ha szükséges, lent módosíthatod az utazószintet és\n" \
|
---|
581 | "az útvonaltervet repülés közben is.\n" \
|
---|
582 | "Ha így teszel, légy szíves a megjegyzés mezőben " \
|
---|
583 | "ismertesd ennek okát.")
|
---|
584 | self.add("route_level", "_Utazószint:")
|
---|
585 | self.add("route_level_tooltip", "Az utazószint.")
|
---|
586 | self.add("route_route", "Út_vonal")
|
---|
587 | self.add("route_route_tooltip", "Az útvonal a szokásos formátumban.")
|
---|
588 | self.add("route_down_notams", "NOTAM-ok letöltése...")
|
---|
589 | self.add("route_down_metars", "METAR-ok letöltése...")
|
---|
590 |
|
---|
591 | self.add("briefing_title", "Eligazítás (%d/2): %s")
|
---|
592 | self.add("briefing_departure", "indulás")
|
---|
593 | self.add("briefing_arrival", "érkezés")
|
---|
594 | self.add("briefing_help",
|
---|
595 | "Olvasd el figyelmesen a lenti NOTAM-okat és METAR-t.\n\n" \
|
---|
596 | "Ha a szimulátor vagy hálózat más időjárást ad,\n" \
|
---|
597 | "a METAR-t módosíthatod.")
|
---|
598 | self.add("briefing_chelp",
|
---|
599 | "Ha a szimulátor vagy hálózat más időjárást ad,\n" \
|
---|
600 | "a METAR-t módosíthatod.")
|
---|
601 | self.add("briefing_notams_init", "LHBP NOTAM-ok")
|
---|
602 | self.add("briefing_metar_init", "LHBP METAR")
|
---|
603 | self.add("briefing_button",
|
---|
604 | "Elolvastam az eligazítást, és készen állok a _repülésre!")
|
---|
605 | self.add("briefing_notams_template", "%s NOTAM-ok")
|
---|
606 | self.add("briefing_metar_template", "%s _METAR")
|
---|
607 | self.add("briefing_notams_failed", "Nem tudtam letölteni a NOTAM-okat.")
|
---|
608 | self.add("briefing_notams_missing",
|
---|
609 | "Ehhez a repülőtérhez nem találtam NOTAM-ot.")
|
---|
610 | self.add("briefing_metar_failed", "Nem tudtam letölteni a METAR-t.")
|
---|
611 |
|
---|
612 | self.add("takeoff_title", "Felszállás")
|
---|
613 | self.add("takeoff_help",
|
---|
614 | "Írd be a felszállásra használt futópálya és SID nevét, valamint a sebességeket.")
|
---|
615 | self.add("takeoff_chelp",
|
---|
616 | "A naplózott futópálya, SID és a sebességek lent olvashatók.")
|
---|
617 | self.add("takeoff_runway", "_Futópálya:")
|
---|
618 | self.add("takeoff_runway_tooltip",
|
---|
619 | "A felszállásra használt futópálya.")
|
---|
620 | self.add("takeoff_sid", "_SID:")
|
---|
621 | self.add("takeoff_sid_tooltip",
|
---|
622 | "Az alkalmazott szabványos műszeres indulási eljárás neve.")
|
---|
623 | self.add("takeoff_v1", "V<sub>_1</sub>:")
|
---|
624 | self.add("takeoff_v1_tooltip", "Az elhatározási sebesség csomóban.")
|
---|
625 | self.add("label_knots", "csomó")
|
---|
626 | self.add("takeoff_vr", "V<sub>_R</sub>:")
|
---|
627 | self.add("takeoff_vr_tooltip", "Az elemelkedési sebesség csomóban.")
|
---|
628 | self.add("takeoff_v2", "V<sub>_2</sub>:")
|
---|
629 | self.add("takeoff_v2_tooltip", "A biztonságos emelkedési sebesség csomóban.")
|
---|
630 |
|
---|
631 | self.add("landing_title", "Leszállás")
|
---|
632 | self.add("landing_help",
|
---|
633 | "Írd be az alkalmazott STAR és/vagy bevezetési eljárás nevét,\n"
|
---|
634 | "a használt futópályát, a megközelítés módját, és a V<sub>Ref</sub>-et.")
|
---|
635 | self.add("landing_chelp",
|
---|
636 | "Az alkalmazott STAR és/vagy bevezetési eljárás neve, a használt\n"
|
---|
637 | "futópálya, a megközelítés módja és a V<sub>Ref</sub> lent olvasható.")
|
---|
638 | self.add("landing_star", "_STAR:")
|
---|
639 | self.add("landing_star_tooltip",
|
---|
640 | "A követett szabványos érkezési eljárás neve.")
|
---|
641 | self.add("landing_transition", "_Bevezetés:")
|
---|
642 | self.add("landing_transition_tooltip",
|
---|
643 | "Az alkalmazott bevezetési eljárás neve, vagy VECTORS, "
|
---|
644 | "ha az irányítás vezetett be.")
|
---|
645 | self.add("landing_runway", "_Futópálya:")
|
---|
646 | self.add("landing_runway_tooltip",
|
---|
647 | "A leszállásra használt futópálya.")
|
---|
648 | self.add("landing_approach", "_Megközelítés típusa:")
|
---|
649 | self.add("landing_approach_tooltip",
|
---|
650 | "A megközelítgés típusa, pl. ILS vagy VISUAL.")
|
---|
651 | self.add("landing_vref", "V<sub>_Ref</sub>:")
|
---|
652 | self.add("landing_vref_tooltip",
|
---|
653 | "A leszállási sebesség csomóban.")
|
---|
654 |
|
---|
655 | self.add("flighttype_scheduled", "menetrendszerinti")
|
---|
656 | self.add("flighttype_ot", "old-timer")
|
---|
657 | self.add("flighttype_vip", "VIP")
|
---|
658 | self.add("flighttype_charter", "charter")
|
---|
659 |
|
---|
660 | self.add("finish_title", "Lezárás")
|
---|
661 | self.add("finish_help",
|
---|
662 | "Lent olvasható némi statisztika a járat teljesítéséről.\n\n" \
|
---|
663 | "Ellenőrízd az adatokat, az előző oldalakon is, és ha\n" \
|
---|
664 | "megfelelnek, elmentheted vagy elküldheted a PIREP-et.")
|
---|
665 | self.add("finish_rating", "Pontszám:")
|
---|
666 | self.add("finish_flight_time", "Repülési idő:")
|
---|
667 | self.add("finish_block_time", "Blokk idő:")
|
---|
668 | self.add("finish_distance", "Repült táv:")
|
---|
669 | self.add("finish_fuel", "Elhasznált üzemanyag:")
|
---|
670 | self.add("finish_type", "_Típus:")
|
---|
671 | self.add("finish_type_tooltip", "Válaszd ki a repülés típusát.")
|
---|
672 | self.add("finish_online", "_Online repülés")
|
---|
673 | self.add("finish_online_tooltip",
|
---|
674 | "Jelöld be, ha a repülésed a hálózaton történt, egyébként " \
|
---|
675 | "szűntesd meg a kijelölést.")
|
---|
676 | self.add("finish_save", "PIREP _mentése...")
|
---|
677 | self.add("finish_save_tooltip",
|
---|
678 | "Kattints ide, hogy elmenthesd a PIREP-et egy fájlba a számítógépeden. " \
|
---|
679 | "A PIREP-et később be lehet tölteni és el lehet küldeni.")
|
---|
680 | self.add("finish_send", "PIREP _elküldése...")
|
---|
681 | self.add("finish_send_tooltip",
|
---|
682 | "Kattints ide, hogy elküldd a PIREP-et a MAVA szerverére javításra.")
|
---|
683 | self.add("finish_send_busy", "PIREP küldése...")
|
---|
684 | self.add("finish_send_success",
|
---|
685 | "A PIREP elküldése sikeres volt.")
|
---|
686 | self.add("finish_send_success_sec",
|
---|
687 | "Várhatod félelmet nem ismerő PIREP javítóink alapos észrevételeit! :)")
|
---|
688 | self.add("finish_send_already",
|
---|
689 | "Ehhez a járathoz már küldtél be PIREP-et!")
|
---|
690 | self.add("finish_send_already_sec",
|
---|
691 | "A korábban beküldött PIREP-et törölheted a MAVA honlapján.")
|
---|
692 | self.add("finish_send_notavail",
|
---|
693 | "Ez a járat már nem elérhető!")
|
---|
694 | self.add("finish_send_unknown",
|
---|
695 | "A MAVA szervere ismeretlen hibaüzenettel tért vissza.")
|
---|
696 | self.add("finish_send_unknown_sec",
|
---|
697 | "A debug naplóban részletesebb információt találsz.")
|
---|
698 | self.add("finish_send_failed",
|
---|
699 | "Nem tudtam elküldeni a PIREP-et a MAVA szerverére.")
|
---|
700 | self.add("finish_send_failed_sec",
|
---|
701 | "Lehet, hogy hálózati probléma áll fenn, amely esetben később\n" \
|
---|
702 | "újra próbálkozhatsz. Lehet azonban hiba is a loggerben:\n" \
|
---|
703 | "részletesebb információt találhatsz a debug naplóban.")
|
---|
704 |
|
---|
705 | #------------------------------------------------------------------------------
|
---|
706 |
|
---|
707 | # The fallback language is English
|
---|
708 | _English()
|
---|
709 |
|
---|
710 | # We also support Hungarian
|
---|
711 | _Hungarian()
|
---|
712 |
|
---|
713 | #------------------------------------------------------------------------------
|
---|