[107] | 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("tab_flight", "_Flight")
|
---|
| 127 | self.add("tab_flight_info", "Flight _info")
|
---|
| 128 | self.add("tab_log", "_Log")
|
---|
| 129 | self.add("tab_debug_log", "_Debug log")
|
---|
| 130 | self.add("tab_help", "_Help")
|
---|
| 131 | self.add("tab_gates", "_Gates")
|
---|
| 132 |
|
---|
| 133 | self.add("login", "Login")
|
---|
| 134 | self.add("loginHelp",
|
---|
| 135 | "Enter your MAVA pilot's ID and password to\n" \
|
---|
| 136 | "log in to the MAVA website and download\n" \
|
---|
| 137 | "your booked flights.")
|
---|
| 138 | self.add("label_pilotID", "Pil_ot ID:")
|
---|
| 139 | self.add("login_pilotID_tooltip",
|
---|
| 140 | "Enter your MAVA pilot's ID. This usually starts with a "
|
---|
| 141 | "'P' followed by 3 digits.")
|
---|
| 142 | self.add("label_password", "_Password:")
|
---|
| 143 | self.add("login_password_tooltip",
|
---|
| 144 | "Enter the password for your pilot's ID")
|
---|
| 145 | self.add("remember_password", "_Remember password")
|
---|
| 146 | self.add("login_remember_tooltip",
|
---|
| 147 | "If checked, your password will be stored, so that you should "
|
---|
| 148 | "not have to enter it every time. Note, however, that the password "
|
---|
| 149 | "is stored as text, and anybody who can access your files will "
|
---|
| 150 | "be able to read it.")
|
---|
| 151 | self.add("button_login", "Logi_n")
|
---|
| 152 | self.add("login_button_tooltip", "Click to log in.")
|
---|
| 153 | self.add("login_busy", "Logging in...")
|
---|
| 154 | self.add("login_invalid", "Invalid pilot's ID or password.")
|
---|
| 155 | self.add("login_invalid_sec",
|
---|
| 156 | "Check the ID and try to reenter the password.")
|
---|
| 157 | self.add("login_failconn",
|
---|
| 158 | "Failed to connect to the MAVA website.")
|
---|
| 159 | self.add("login_failconn_sec", "Try again in a few minutes.")
|
---|
| 160 |
|
---|
| 161 | self.add("button_next", "_Next")
|
---|
| 162 | self.add("button_next_tooltip", "Click to go to the next page.")
|
---|
| 163 | self.add("button_previous", "_Previous")
|
---|
| 164 | self.add("button_previous_tooltip", "Click to go to the previous page.")
|
---|
| 165 |
|
---|
| 166 | self.add("flightsel_title", "Flight selection")
|
---|
| 167 | self.add("flightsel_help", "Select the flight you want to perform.")
|
---|
| 168 | self.add("flightsel_chelp", "You have selected the flight highlighted below.")
|
---|
| 169 | self.add("flightsel_no", "Flight no.")
|
---|
| 170 | self.add("flightsel_deptime", "Departure time [UTC]")
|
---|
| 171 | self.add("flightsel_from", "From")
|
---|
| 172 | self.add("flightsel_to", "To")
|
---|
| 173 |
|
---|
| 174 | self.add("fleet_busy", "Retrieving fleet...")
|
---|
| 175 | self.add("fleet_failed",
|
---|
| 176 | "Failed to retrieve the information on the fleet.")
|
---|
| 177 | self.add("fleet_update_busy", "Updating plane status...")
|
---|
| 178 | self.add("fleet_update_failed",
|
---|
| 179 | "Failed to update the status of the airplane.")
|
---|
| 180 |
|
---|
| 181 | self.add("gatesel_title", "LHBP gate selection")
|
---|
| 182 | self.add("gatesel_help",
|
---|
| 183 | "The airplane's gate position is invalid.\n\n" \
|
---|
| 184 | "Select the gate from which you\n" \
|
---|
| 185 | "would like to begin the flight.")
|
---|
| 186 | self.add("gatesel_conflict", "Gate conflict detected again.")
|
---|
| 187 | self.add("gatesel_conflict_sec",
|
---|
| 188 | "Try to select a different gate.")
|
---|
| 189 |
|
---|
| 190 | self.add("connect_title", "Connect to the simulator")
|
---|
| 191 | self.add("connect_help",
|
---|
| 192 | "Load the aircraft below into the simulator and park it\n" \
|
---|
| 193 | "at the given airport, at the gate below, if present.\n\n" \
|
---|
| 194 | "Then press the Connect button to connect to the simulator.")
|
---|
| 195 | self.add("connect_chelp",
|
---|
| 196 | "The basic data of your flight can be read below.")
|
---|
| 197 | self.add("connect_flightno", "Flight number:")
|
---|
| 198 | self.add("connect_acft", "Aircraft:")
|
---|
| 199 | self.add("connect_tailno", "Tail number:")
|
---|
| 200 | self.add("connect_airport", "Airport:")
|
---|
| 201 | self.add("connect_gate", "Gate:")
|
---|
| 202 | self.add("button_connect", "_Connect")
|
---|
| 203 | self.add("button_connect_tooltip", "Click to connect to the simulator.")
|
---|
| 204 | self.add("connect_busy", "Connecting to the simulator...")
|
---|
| 205 |
|
---|
| 206 | self.add("payload_title", "Payload")
|
---|
| 207 | self.add("payload_help",
|
---|
| 208 | "The briefing contains the weights below.\n" \
|
---|
| 209 | "Setup the cargo weight here and the payload weight "
|
---|
| 210 | "in the simulator.\n\n" \
|
---|
| 211 | "You can also check here what the simulator reports as ZFW.")
|
---|
| 212 | self.add("payload_chelp",
|
---|
| 213 | "You can see the weights in the briefing\n" \
|
---|
| 214 | "and the cargo weight you have selected below.\n\n" \
|
---|
| 215 | "You can also query the ZFW reported by the simulator.")
|
---|
| 216 | self.add("payload_crew", "Crew:")
|
---|
| 217 | self.add("payload_pax", "Passengers:")
|
---|
| 218 | self.add("payload_bag", "Baggage:")
|
---|
| 219 | self.add("payload_cargo", "_Cargo:")
|
---|
| 220 | self.add("payload_cargo_tooltip",
|
---|
| 221 | "The weight of the cargo for your flight.")
|
---|
| 222 | self.add("payload_mail", "Mail:")
|
---|
| 223 | self.add("payload_zfw", "Calculated ZFW:")
|
---|
| 224 | self.add("payload_fszfw", "_ZFW from FS:")
|
---|
| 225 | self.add("payload_fszfw_tooltip",
|
---|
| 226 | "Click here to refresh the ZFW value from the simulator.")
|
---|
| 227 | self.add("payload_zfw_busy", "Querying ZFW...")
|
---|
| 228 |
|
---|
| 229 | self.add("time_title", "Time")
|
---|
| 230 | self.add("time_help",
|
---|
| 231 | "The departure and arrival times are displayed below in UTC.\n\n" \
|
---|
| 232 | "You can also query the current UTC time from the simulator.\n" \
|
---|
| 233 | "Ensure that you have enough time to properly prepare for the flight.")
|
---|
| 234 | self.add("time_chelp",
|
---|
| 235 | "The departure and arrival times are displayed below in UTC.\n\n" \
|
---|
| 236 | "You can also query the current UTC time from the simulator.\n")
|
---|
| 237 | self.add("time_departure", "Departure:")
|
---|
| 238 | self.add("time_arrival", "Arrival:")
|
---|
| 239 | self.add("time_fs", "_Time from FS:")
|
---|
| 240 | self.add("time_fs_tooltip",
|
---|
| 241 | "Click here to query the current UTC time from the simulator.")
|
---|
| 242 | self.add("time_busy", "Querying time...")
|
---|
| 243 |
|
---|
| 244 | self.add("route_title", "Route")
|
---|
| 245 | self.add("route_help",
|
---|
| 246 | "Set your cruise flight level below, and\n" \
|
---|
| 247 | "if necessary, edit the flight plan.")
|
---|
| 248 | self.add("route_chelp",
|
---|
| 249 | "If necessary, you can modify the cruise level and\n" \
|
---|
| 250 | "the flight plan below during flight.\n" \
|
---|
| 251 | "If so, please, add a comment on why " \
|
---|
| 252 | "the modification became necessary.")
|
---|
| 253 | self.add("route_level", "_Cruise level:")
|
---|
| 254 | self.add("route_level_tooltip",
|
---|
| 255 | "The cruise flight level. Click on the arrows to increment "
|
---|
| 256 | "or decrement by 10, or enter the number on the keyboard.")
|
---|
| 257 | self.add("route_route", "_Route")
|
---|
| 258 | self.add("route_route_tooltip",
|
---|
| 259 | "The planned flight route in the standard format.")
|
---|
| 260 | self.add("route_down_notams", "Downloading NOTAMs...")
|
---|
| 261 | self.add("route_down_metars", "Downloading METARs...")
|
---|
| 262 |
|
---|
| 263 | self.add("briefing_title", "Briefing (%d/2): %s")
|
---|
| 264 | self.add("briefing_departure", "departure")
|
---|
| 265 | self.add("briefing_arrival", "arrival")
|
---|
| 266 | self.add("briefing_help",
|
---|
| 267 | "Read carefully the NOTAMs and METAR below.\n\n" \
|
---|
| 268 | "You can edit the METAR if your simulator or network\n" \
|
---|
| 269 | "provides different weather.")
|
---|
| 270 | self.add("briefing_chelp",
|
---|
| 271 | "If your simulator or network provides a different\n" \
|
---|
| 272 | "weather, you can edit the METAR below.")
|
---|
| 273 | self.add("briefing_notams_init", "LHBP NOTAMs")
|
---|
| 274 | self.add("briefing_metar_init", "LHBP METAR")
|
---|
| 275 | self.add("briefing_button",
|
---|
| 276 | "I have read the briefing and am _ready to fly!")
|
---|
| 277 | self.add("briefing_notams_template", "%s NOTAMs")
|
---|
| 278 | self.add("briefing_metar_template", "%s _METAR")
|
---|
| 279 | self.add("briefing_notams_failed", "Could not download NOTAMs")
|
---|
| 280 | self.add("briefing_notams_missing",
|
---|
| 281 | "Could not download NOTAM for this airport")
|
---|
| 282 | self.add("briefing_metar_failed", "Could not download METAR")
|
---|
| 283 |
|
---|
| 284 | self.add("takeoff_title", "Takeoff")
|
---|
| 285 | self.add("takeoff_help",
|
---|
| 286 | "Enter the runway and SID used, as well as the speeds.")
|
---|
| 287 | self.add("takeoff_chelp",
|
---|
| 288 | "The runway, SID and takeoff speeds logged can be seen below.")
|
---|
| 289 | self.add("takeoff_runway", "Run_way:")
|
---|
| 290 | self.add("takeoff_runway_tooltip",
|
---|
| 291 | "The runway the takeoff is performed from.")
|
---|
| 292 | self.add("takeoff_sid", "_SID:")
|
---|
| 293 | self.add("takeoff_sid_tooltip",
|
---|
| 294 | "The name of the Standard Instrument Deparature procedure followed.")
|
---|
| 295 | self.add("takeoff_v1", "V<sub>_1</sub>:")
|
---|
| 296 | self.add("takeoff_v1_tooltip", "The takeoff decision speed in knots.")
|
---|
| 297 | self.add("label_knots", "knots")
|
---|
| 298 | self.add("takeoff_vr", "V<sub>_R</sub>:")
|
---|
| 299 | self.add("takeoff_vr_tooltip", "The takeoff rotation speed in knots.")
|
---|
| 300 | self.add("takeoff_v2", "V<sub>_2</sub>:")
|
---|
| 301 | self.add("takeoff_v2_tooltip", "The takeoff safety speed in knots.")
|
---|
| 302 |
|
---|
| 303 | self.add("landing_title", "Landing")
|
---|
| 304 | self.add("landing_help",
|
---|
| 305 | "Enter the STAR and/or transition, runway,\n" \
|
---|
| 306 | "approach type and V<sub>Ref</sub> used.")
|
---|
| 307 | self.add("landing_chelp",
|
---|
| 308 | "The STAR and/or transition, runway, approach\n" \
|
---|
| 309 | "type and V<sub>Ref</sub> logged can be seen below.")
|
---|
| 310 | self.add("landing_star", "_STAR:")
|
---|
| 311 | self.add("landing_star_tooltip",
|
---|
| 312 | "The name of Standard Terminal Arrival Route followed.")
|
---|
| 313 | self.add("landing_transition", "_Transition:")
|
---|
| 314 | self.add("landing_transition_tooltip",
|
---|
| 315 | "The name of transition executed or VECTORS if vectored by ATC.")
|
---|
| 316 | self.add("landing_runway", "Run_way:")
|
---|
| 317 | self.add("landing_runway_tooltip",
|
---|
| 318 | "The runway the landing is performed on.")
|
---|
| 319 | self.add("landing_approach", "_Approach type:")
|
---|
| 320 | self.add("landing_approach_tooltip",
|
---|
| 321 | "The type of the approach, e.g. ILS or VISUAL.")
|
---|
| 322 | self.add("landing_vref", "V<sub>_Ref</sub>:")
|
---|
| 323 | self.add("landing_vref_tooltip",
|
---|
| 324 | "The landing reference speed in knots.")
|
---|
| 325 |
|
---|
| 326 | self.add("flighttype_scheduled", "scheduled")
|
---|
| 327 | self.add("flighttype_ot", "old-timer")
|
---|
| 328 | self.add("flighttype_vip", "VIP")
|
---|
| 329 | self.add("flighttype_charter", "charter")
|
---|
| 330 |
|
---|
| 331 | self.add("finish_title", "Finish")
|
---|
| 332 | self.add("finish_help",
|
---|
| 333 | "There are some statistics about your flight below.\n\n" \
|
---|
| 334 | "Review the data, also on earlier pages, and if you are\n" \
|
---|
| 335 | "satisfied, you can save or send your PIREP.")
|
---|
| 336 | self.add("finish_rating", "Flight rating:")
|
---|
| 337 | self.add("finish_flight_time", "Flight time:")
|
---|
| 338 | self.add("finish_block_time", "Block time:")
|
---|
| 339 | self.add("finish_distance", "Distance flown:")
|
---|
| 340 | self.add("finish_fuel", "Fuel used:")
|
---|
| 341 | self.add("finish_type", "_Type:")
|
---|
| 342 | self.add("finish_type_tooltip", "Select the type of the flight.")
|
---|
| 343 | self.add("finish_online", "_Online flight")
|
---|
| 344 | self.add("finish_online_tooltip",
|
---|
| 345 | "Check if your flight was online, uncheck otherwise.")
|
---|
| 346 | self.add("finish_save", "S_ave PIREP...")
|
---|
| 347 | self.add("finish_save_tooltip",
|
---|
| 348 | "Click to save the PIREP into a file on your computer. " \
|
---|
| 349 | "The PIREP can be loaded and sent later.")
|
---|
| 350 | self.add("finish_send", "_Send PIREP...")
|
---|
| 351 | self.add("finish_send_tooltip",
|
---|
| 352 | "Click to send the PIREP to the MAVA website for further review.")
|
---|
| 353 | self.add("finish_send_busy", "Sending PIREP...")
|
---|
| 354 | self.add("finish_send_success",
|
---|
| 355 | "The PIREP was sent successfully.")
|
---|
| 356 | self.add("finish_send_success_sec",
|
---|
| 357 | "Await the thorough scrutiny by our fearless PIREP reviewers! :)")
|
---|
| 358 | self.add("finish_send_already",
|
---|
| 359 | "The PIREP for this flight has already been sent!")
|
---|
| 360 | self.add("finish_send_already_sec",
|
---|
| 361 | "You may clear the old PIREP on the MAVA website.")
|
---|
| 362 | self.add("finish_send_notavail",
|
---|
| 363 | "This flight is not available anymore!")
|
---|
| 364 | self.add("finish_send_unknown",
|
---|
| 365 | "The MAVA website returned with an unknown error.")
|
---|
| 366 | self.add("finish_send_unknown_sec",
|
---|
| 367 | "See the debug log for more information.")
|
---|
| 368 | self.add("finish_send_failed",
|
---|
| 369 | "Could not send the PIREP to the MAVA website.")
|
---|
| 370 | self.add("finish_send_failed_sec",
|
---|
| 371 | "This can be a network problem, in which case\n" \
|
---|
| 372 | "you may try again later. Or it can be a bug;\n" \
|
---|
| 373 | "see the debug log for more information.")
|
---|
| 374 |
|
---|
| 375 | #------------------------------------------------------------------------------
|
---|
| 376 |
|
---|
| 377 | class _Hungarian(_Strings):
|
---|
| 378 | """The strings for the Hungarian language."""
|
---|
| 379 | def __init__(self):
|
---|
| 380 | """Construct the object."""
|
---|
| 381 | super(_Hungarian, self).__init__(["hu_HU", "hu"])
|
---|
| 382 |
|
---|
| 383 | def initialize(self):
|
---|
| 384 | """Initialize the strings."""
|
---|
| 385 | self.add("tab_flight", "_Járat")
|
---|
| 386 | self.add("tab_flight_info", "Járat _info")
|
---|
| 387 | self.add("tab_log", "_Napló")
|
---|
| 388 | self.add("tab_debug_log", "_Debug napló")
|
---|
| 389 | self.add("tab_help", "_Segítség")
|
---|
| 390 | self.add("tab_gates", "_Kapuk")
|
---|
| 391 |
|
---|
| 392 | self.add("login", "Bejelentkezés")
|
---|
| 393 | self.add("loginHelp",
|
---|
| 394 | "Írd be a MAVA pilóta azonosítódat és a\n" \
|
---|
| 395 | "bejelentkezéshez használt jelszavadat,\n" \
|
---|
| 396 | "hogy választhass a foglalt járataid közül.")
|
---|
| 397 | self.add("label_pilotID", "_Azonosító:")
|
---|
| 398 | self.add("login_pilotID_tooltip",
|
---|
| 399 | "Írd be a MAVA pilóta azonosítódat. Ez általában egy 'P' "
|
---|
| 400 | "betűvel kezdődik, melyet 3 számjegy követ.")
|
---|
| 401 | self.add("label_password", "Je_lszó:")
|
---|
| 402 | self.add("login_password_tooltip",
|
---|
| 403 | "Írd be a pilóta azonosítódhoz tartozó jelszavadat.")
|
---|
| 404 | self.add("remember_password", "_Emlékezz a jelszóra")
|
---|
| 405 | self.add("login_remember_tooltip",
|
---|
| 406 | "Ha ezt kiválasztod, a jelszavadat eltárolja a program, így "
|
---|
| 407 | "nem kell mindig újból beírnod. Vedd azonban figyelembe, "
|
---|
| 408 | "hogy a jelszót szövegként tároljuk, így bárki elolvashatja, "
|
---|
| 409 | "aki hozzáfér a fájljaidhoz.")
|
---|
| 410 | self.add("button_login", "_Bejelentkezés")
|
---|
| 411 | self.add("login_button_tooltip", "Kattints ide a bejelentkezéshez.")
|
---|
| 412 | self.add("login_busy", "Bejelentkezés...")
|
---|
| 413 | self.add("login_invalid", "Érvénytelen azonosító vagy jelszó.")
|
---|
| 414 | self.add("login_invalid_sec",
|
---|
| 415 | "Ellenőrízd az azonosítót, és próbáld meg újra beírni a jelszót.")
|
---|
| 416 | self.add("login_failconn",
|
---|
| 417 | "Nem sikerült kapcsolódni a MAVA honlaphoz.")
|
---|
| 418 | self.add("login_failconn_sec", "Próbáld meg pár perc múlva.")
|
---|
| 419 |
|
---|
| 420 | self.add("button_next", "_Előre")
|
---|
| 421 | self.add("button_next_tooltip",
|
---|
| 422 | "Kattints ide, hogy a következő lapra ugorj.")
|
---|
| 423 | self.add("button_previous", "_Vissza")
|
---|
| 424 | self.add("button_previous_tooltip",
|
---|
| 425 | "Kattints ide, hogy az előző lapra ugorj.")
|
---|
| 426 |
|
---|
| 427 | self.add("flightsel_title", "Járatválasztás")
|
---|
| 428 | self.add("flightsel_help", "Válaszd ki a járatot, amelyet le szeretnél repülni.")
|
---|
| 429 | self.add("flightsel_chelp", "A lent kiemelt járatot választottad.")
|
---|
| 430 | self.add("flightsel_no", "Járatszám")
|
---|
| 431 | self.add("flightsel_deptime", "Indulás ideje [UTC]")
|
---|
| 432 | self.add("flightsel_from", "Honnan")
|
---|
| 433 | self.add("flightsel_to", "Hová")
|
---|
| 434 |
|
---|
| 435 | self.add("fleet_busy", "Flottaadatok letöltése...")
|
---|
| 436 | self.add("fleet_failed",
|
---|
| 437 | "Nem sikerült letöltenem a flotta adatait.")
|
---|
| 438 | self.add("fleet_update_busy", "Repülőgép pozíció frissítése...")
|
---|
| 439 | self.add("fleet_update_failed",
|
---|
| 440 | "Nem sikerült frissítenem a repülőgép pozícióját.")
|
---|
| 441 |
|
---|
| 442 | self.add("gatesel_title", "LHBP kapuválasztás")
|
---|
| 443 | self.add("gatesel_help",
|
---|
| 444 | "A repülőgép kapu pozíciója érvénytelen.\n\n" \
|
---|
| 445 | "Válaszd ki azt a kaput, ahonnan\n" \
|
---|
| 446 | "el szeretnéd kezdeni a járatot.")
|
---|
| 447 | self.add("gatesel_conflict", "Ismét kapuütközés történt.")
|
---|
| 448 | self.add("gatesel_conflict_sec",
|
---|
| 449 | "Próbálj egy másik kaput választani.")
|
---|
| 450 |
|
---|
| 451 | self.add("connect_title", "Kapcsolódás a szimulátorhoz")
|
---|
| 452 | self.add("connect_help",
|
---|
| 453 | "Tölsd be a lent látható repülőgépet a szimulátorba\n" \
|
---|
| 454 | "az alább megadott reptérre és kapuhoz.\n\n" \
|
---|
| 455 | "Ezután nyomd meg a Kapcsolódás gombot a kapcsolódáshoz.")
|
---|
| 456 | self.add("connect_chelp",
|
---|
| 457 | "A járat alapadatai lent olvashatók.")
|
---|
| 458 | self.add("connect_flightno", "Járatszám:")
|
---|
| 459 | self.add("connect_acft", "Típus:")
|
---|
| 460 | self.add("connect_tailno", "Lajstromjel:")
|
---|
| 461 | self.add("connect_airport", "Repülőtér:")
|
---|
| 462 | self.add("connect_gate", "Kapu:")
|
---|
| 463 | self.add("button_connect", "K_apcsolódás")
|
---|
| 464 | self.add("button_connect_tooltip",
|
---|
| 465 | "Kattints ide a szimulátorhoz való kapcsolódáshoz.")
|
---|
| 466 | self.add("connect_busy", "Kapcsolódás a szimulátorhoz...")
|
---|
| 467 |
|
---|
| 468 | self.add("payload_title", "Terhelés")
|
---|
| 469 | self.add("payload_help",
|
---|
| 470 | "Az eligazítás az alábbi tömegeket tartalmazza.\n" \
|
---|
| 471 | "Allítsd be a teherszállítmány tömegét itt, a hasznos "
|
---|
| 472 | "terhet pedig a szimulátorban.\n\n" \
|
---|
| 473 | "Azt is ellenőrízheted, hogy a szimulátor milyen ZFW-t jelent.")
|
---|
| 474 | self.add("payload_chelp",
|
---|
| 475 | "Lent láthatók az eligazításban szereplő tömegek, valamint\n" \
|
---|
| 476 | "a teherszállítmány általad megadott tömege.\n\n" \
|
---|
| 477 | "Azt is ellenőrízheted, hogy a szimulátor milyen ZFW-t jelent.")
|
---|
| 478 | self.add("payload_crew", "Legénység:")
|
---|
| 479 | self.add("payload_pax", "Utasok:")
|
---|
| 480 | self.add("payload_bag", "Poggyász:")
|
---|
| 481 | self.add("payload_cargo", "_Teher:")
|
---|
| 482 | self.add("payload_cargo_tooltip",
|
---|
| 483 | "A teherszállítmány tömege.")
|
---|
| 484 | self.add("payload_mail", "Posta:")
|
---|
| 485 | self.add("payload_zfw", "Kiszámolt ZFW:")
|
---|
| 486 | self.add("payload_fszfw", "_ZFW a szimulátorból:")
|
---|
| 487 | self.add("payload_fszfw_tooltip",
|
---|
| 488 | "Kattints ide, hogy frissítsd a ZFW értékét a szimulátorból.")
|
---|
| 489 | self.add("payload_zfw_busy", "ZFW lekérdezése...")
|
---|
| 490 |
|
---|
| 491 | self.add("time_title", "Menetrend")
|
---|
| 492 | self.add("time_help",
|
---|
| 493 | "Az indulás és az érkezés ideje lent látható UTC szerint.\n\n" \
|
---|
| 494 | "A szimulátor aktuális UTC szerinti idejét is lekérdezheted.\n" \
|
---|
| 495 | "Győzödj meg arról, hogy elég időd van a repülés előkészítéséhez.")
|
---|
| 496 | self.add("time_chelp",
|
---|
| 497 | "Az indulás és az érkezés ideje lent látható UTC szerint.\n\n" \
|
---|
| 498 | "A szimulátor aktuális UTC szerinti idejét is lekérdezheted.")
|
---|
| 499 | self.add("time_departure", "Indulás:")
|
---|
| 500 | self.add("time_arrival", "Érkezés:")
|
---|
| 501 | self.add("time_fs", "Idő a s_zimulátorból:")
|
---|
| 502 | self.add("time_fs_tooltip",
|
---|
| 503 | "Kattings ide, hogy frissítsd a szimulátor aktuális UTC szerint idejét.")
|
---|
| 504 | self.add("time_busy", "Idő lekérdezése...")
|
---|
| 505 |
|
---|
| 506 | self.add("route_title", "Útvonal")
|
---|
| 507 | self.add("route_help",
|
---|
| 508 | "Állítsd be az utazószintet lent, és ha szükséges,\n" \
|
---|
| 509 | "módosítsd az útvonaltervet.")
|
---|
| 510 | self.add("route_chelp",
|
---|
| 511 | "Ha szükséges, lent módosíthatod az utazószintet és\n" \
|
---|
| 512 | "az útvonaltervet repülés közben is.\n" \
|
---|
| 513 | "Ha így teszel, légy szíves a megjegyzés mezőben " \
|
---|
| 514 | "ismertesd ennek okát.")
|
---|
| 515 | self.add("route_level", "_Utazószint:")
|
---|
| 516 | self.add("route_level_tooltip", "Az utazószint.")
|
---|
| 517 | self.add("route_route", "Út_vonal")
|
---|
| 518 | self.add("route_route_tooltip", "Az útvonal a szokásos formátumban.")
|
---|
| 519 | self.add("route_down_notams", "NOTAM-ok letöltése...")
|
---|
| 520 | self.add("route_down_metars", "METAR-ok letöltése...")
|
---|
| 521 |
|
---|
| 522 | self.add("briefing_title", "Eligazítás (%d/2): %s")
|
---|
| 523 | self.add("briefing_departure", "indulás")
|
---|
| 524 | self.add("briefing_arrival", "érkezés")
|
---|
| 525 | self.add("briefing_help",
|
---|
| 526 | "Olvasd el figyelmesen a lenti NOTAM-okat és METAR-t.\n\n" \
|
---|
| 527 | "Ha a szimulátor vagy hálózat más időjárást ad,\n" \
|
---|
| 528 | "a METAR-t módosíthatod.")
|
---|
| 529 | self.add("briefing_chelp",
|
---|
| 530 | "Ha a szimulátor vagy hálózat más időjárást ad,\n" \
|
---|
| 531 | "a METAR-t módosíthatod.")
|
---|
| 532 | self.add("briefing_notams_init", "LHBP NOTAM-ok")
|
---|
| 533 | self.add("briefing_metar_init", "LHBP METAR")
|
---|
| 534 | self.add("briefing_button",
|
---|
| 535 | "Elolvastam az eligazítást, és készen állok a _repülésre!")
|
---|
| 536 | self.add("briefing_notams_template", "%s NOTAM-ok")
|
---|
| 537 | self.add("briefing_metar_template", "%s _METAR")
|
---|
| 538 | self.add("briefing_notams_failed", "Nem tudtam letölteni a NOTAM-okat.")
|
---|
| 539 | self.add("briefing_notams_missing",
|
---|
| 540 | "Ehhez a repülőtérhez nem találtam NOTAM-ot.")
|
---|
| 541 | self.add("briefing_metar_failed", "Nem tudtam letölteni a METAR-t.")
|
---|
| 542 |
|
---|
| 543 | self.add("takeoff_title", "Felszállás")
|
---|
| 544 | self.add("takeoff_help",
|
---|
| 545 | "Írd be a felszállásra használt futópálya és SID nevét, valamint a sebességeket.")
|
---|
| 546 | self.add("takeoff_chelp",
|
---|
| 547 | "A naplózott futópálya, SID és a sebességek lent olvashatók.")
|
---|
| 548 | self.add("takeoff_runway", "_Futópálya:")
|
---|
| 549 | self.add("takeoff_runway_tooltip",
|
---|
| 550 | "A felszállásra használt futópálya.")
|
---|
| 551 | self.add("takeoff_sid", "_SID:")
|
---|
| 552 | self.add("takeoff_sid_tooltip",
|
---|
| 553 | "Az alkalmazott szabványos műszeres indulási eljárás neve.")
|
---|
| 554 | self.add("takeoff_v1", "V<sub>_1</sub>:")
|
---|
| 555 | self.add("takeoff_v1_tooltip", "Az elhatározási sebesség csomóban.")
|
---|
| 556 | self.add("label_knots", "csomó")
|
---|
| 557 | self.add("takeoff_vr", "V<sub>_R</sub>:")
|
---|
| 558 | self.add("takeoff_vr_tooltip", "Az elemelkedési sebesség csomóban.")
|
---|
| 559 | self.add("takeoff_v2", "V<sub>_2</sub>:")
|
---|
| 560 | self.add("takeoff_v2_tooltip", "A biztonságos emelkedési sebesség csomóban.")
|
---|
| 561 |
|
---|
| 562 | self.add("landing_title", "Leszállás")
|
---|
| 563 | self.add("landing_help",
|
---|
| 564 | "Írd be az alkalmazott STAR és/vagy bevezetési eljárás nevét,\n"
|
---|
| 565 | "a használt futópályát, a megközelítés módját, és a V<sub>Ref</sub>-et.")
|
---|
| 566 | self.add("landing_chelp",
|
---|
| 567 | "Az alkalmazott STAR és/vagy bevezetési eljárás neve, a használt\n"
|
---|
| 568 | "futópálya, a megközelítés módja és a V<sub>Ref</sub> lent olvasható.")
|
---|
| 569 | self.add("landing_star", "_STAR:")
|
---|
| 570 | self.add("landing_star_tooltip",
|
---|
| 571 | "A követett szabványos érkezési eljárás neve.")
|
---|
| 572 | self.add("landing_transition", "_Bevezetés:")
|
---|
| 573 | self.add("landing_transition_tooltip",
|
---|
| 574 | "Az alkalmazott bevezetési eljárás neve, vagy VECTORS, "
|
---|
| 575 | "ha az irányítás vezetett be.")
|
---|
| 576 | self.add("landing_runway", "_Futópálya:")
|
---|
| 577 | self.add("landing_runway_tooltip",
|
---|
| 578 | "A leszállásra használt futópálya.")
|
---|
| 579 | self.add("landing_approach", "_Megközelítés típusa:")
|
---|
| 580 | self.add("landing_approach_tooltip",
|
---|
| 581 | "A megközelítgés típusa, pl. ILS vagy VISUAL.")
|
---|
| 582 | self.add("landing_vref", "V<sub>_Ref</sub>:")
|
---|
| 583 | self.add("landing_vref_tooltip",
|
---|
| 584 | "A leszállási sebesség csomóban.")
|
---|
| 585 |
|
---|
| 586 | self.add("flighttype_scheduled", "menetrendszerinti")
|
---|
| 587 | self.add("flighttype_ot", "old-timer")
|
---|
| 588 | self.add("flighttype_vip", "VIP")
|
---|
| 589 | self.add("flighttype_charter", "charter")
|
---|
| 590 |
|
---|
| 591 | self.add("finish_title", "Lezárás")
|
---|
| 592 | self.add("finish_help",
|
---|
| 593 | "Lent olvasható némi statisztika a járat teljesítéséről.\n\n" \
|
---|
| 594 | "Ellenőrízd az adatokat, az előző oldalakon is, és ha\n" \
|
---|
| 595 | "megfelelnek, elmentheted vagy elküldheted a PIREP-et.")
|
---|
| 596 | self.add("finish_rating", "Pontszám:")
|
---|
| 597 | self.add("finish_flight_time", "Repülési idő:")
|
---|
| 598 | self.add("finish_block_time", "Blokk idő:")
|
---|
| 599 | self.add("finish_distance", "Repült táv:")
|
---|
| 600 | self.add("finish_fuel", "Elhasznált üzemanyag:")
|
---|
| 601 | self.add("finish_type", "_Típus:")
|
---|
| 602 | self.add("finish_type_tooltip", "Válaszd ki a repülés típusát.")
|
---|
| 603 | self.add("finish_online", "_Online repülés")
|
---|
| 604 | self.add("finish_online_tooltip",
|
---|
| 605 | "Jelöld be, ha a repülésed a hálózaton történt, egyébként " \
|
---|
| 606 | "szűntesd meg a kijelölést.")
|
---|
| 607 | self.add("finish_save", "PIREP _mentése...")
|
---|
| 608 | self.add("finish_save_tooltip",
|
---|
| 609 | "Kattints ide, hogy elmenthesd a PIREP-et egy fájlba a számítógépeden. " \
|
---|
| 610 | "A PIREP-et később be lehet tölteni és el lehet küldeni.")
|
---|
| 611 | self.add("finish_send", "PIREP _elküldése...")
|
---|
| 612 | self.add("finish_send_tooltip",
|
---|
| 613 | "Kattints ide, hogy elküldd a PIREP-et a MAVA szerverére javításra.")
|
---|
| 614 | self.add("finish_send_busy", "PIREP küldése...")
|
---|
| 615 | self.add("finish_send_success",
|
---|
| 616 | "A PIREP elküldése sikeres volt.")
|
---|
| 617 | self.add("finish_send_success_sec",
|
---|
| 618 | "Várhatod félelmet nem ismerő PIREP javítóink alapos észrevételeit! :)")
|
---|
| 619 | self.add("finish_send_already",
|
---|
| 620 | "Ehhez a járathoz már küldtél be PIREP-et!")
|
---|
| 621 | self.add("finish_send_already_sec",
|
---|
| 622 | "A korábban beküldött PIREP-et törölheted a MAVA honlapján.")
|
---|
| 623 | self.add("finish_send_notavail",
|
---|
| 624 | "Ez a járat már nem elérhető!")
|
---|
| 625 | self.add("finish_send_unknown",
|
---|
| 626 | "A MAVA szervere ismeretlen hibaüzenettel tért vissza.")
|
---|
| 627 | self.add("finish_send_unknown_sec",
|
---|
| 628 | "A debug naplóban részletesebb információt találsz.")
|
---|
| 629 | self.add("finish_send_failed",
|
---|
| 630 | "Nem tudtam elküldeni a PIREP-et a MAVA szerverére.")
|
---|
| 631 | self.add("finish_send_failed_sec",
|
---|
| 632 | "Lehet, hogy hálózati probléma áll fenn, amely esetben később\n" \
|
---|
| 633 | "újra próbálkozhatsz. Lehet azonban hiba is a loggerben:\n" \
|
---|
| 634 | "részletesebb információt találhatsz a debug naplóban.")
|
---|
| 635 |
|
---|
| 636 | #------------------------------------------------------------------------------
|
---|
| 637 |
|
---|
| 638 | # The fallback language is English
|
---|
| 639 | _English()
|
---|
| 640 |
|
---|
| 641 | # We also support Hungarian
|
---|
| 642 | _Hungarian()
|
---|
| 643 |
|
---|
| 644 | #------------------------------------------------------------------------------
|
---|