mirror of
https://github.com/EDCD/EDMarketConnector.git
synced 2025-06-05 18:03:17 +03:00
Merge branch 'develop'
This commit is contained in:
commit
bf3cd86e26
2
.github/workflows/windows-build.yml
vendored
2
.github/workflows/windows-build.yml
vendored
@ -19,7 +19,7 @@ jobs:
|
||||
- uses: actions/checkout@v2.3.4
|
||||
- uses: actions/setup-python@v2.2.2
|
||||
with:
|
||||
python-version: "3.9.5"
|
||||
python-version: "3.9.6"
|
||||
architecture: "x86"
|
||||
|
||||
- name: Install python tools
|
||||
|
@ -1 +1 @@
|
||||
3.9.5
|
||||
3.9.6
|
||||
|
41
ChangeLog.md
41
ChangeLog.md
@ -1,7 +1,7 @@
|
||||
This is the master changelog for Elite Dangerous Market Connector. Entries are in reverse chronological order (latest first).
|
||||
---
|
||||
|
||||
* We now test against, and package with, Python 3.9.5.
|
||||
* We now test against, and package with, Python 3.9.6.
|
||||
|
||||
**As a consequence of this we no longer support Windows 7.
|
||||
This is due to
|
||||
@ -17,6 +17,45 @@ This is the master changelog for Elite Dangerous Market Connector. Entries are
|
||||
in the source (it's not distributed with the Windows installer) for the
|
||||
currently used version in a given branch.
|
||||
|
||||
Release 5.1.2
|
||||
===
|
||||
|
||||
* A Journal event change in EDO Update 6 will have caused some translated
|
||||
suit names to not be properly mapped to their sane versions. This change
|
||||
has now been addressed and suit names should always come out as intended in
|
||||
the EDMarketConnector.exe UI.
|
||||
|
||||
* There is a new command-line argument to cause all Frontier Authorisation to
|
||||
be forgotten: `EDMarketConnector.exe --forget-frontier-auth`.
|
||||
|
||||
* Situations where Frontier CAPI data doesn't agree on the location we have
|
||||
tracked from Journal events will now log more useful information.
|
||||
|
||||
Bug Fixes
|
||||
---
|
||||
|
||||
* The code should now be robust against the case of any Journal event name
|
||||
changing.
|
||||
|
||||
Plugin Developers
|
||||
---
|
||||
|
||||
* We now store `GameLanguage`, `GameVersion` and `GameBuild` in the `state`
|
||||
passed to `journal_entry()` from the `LoadGame` event.
|
||||
|
||||
* Various suit data, i.e. class and mods, is now stored from relevant
|
||||
Journal events, rather than only being available from CAPI data. In
|
||||
general we now consider the Journal to be the canonical source of suit
|
||||
data, with CAPI only as a backup.
|
||||
|
||||
* Backpack contents should now track correctly if using the 'Resupply' option
|
||||
available on the ship boarding menu.
|
||||
|
||||
* We now cache the main application version when first determined, so
|
||||
that subsequent references to `config.appversion()` won't cause extra log
|
||||
spam (which was possible when, e.g. having a git command but using non-git
|
||||
source).
|
||||
|
||||
Release 5.1.1
|
||||
===
|
||||
|
||||
|
4
EDMC.py
4
EDMC.py
@ -388,10 +388,6 @@ sys.path: {sys.path}'''
|
||||
logger.error('Frontier CAPI Server returned an error')
|
||||
sys.exit(EXIT_SERVER)
|
||||
|
||||
except companion.SKUError:
|
||||
logger.error('Frontier CAPI Server SKU problem')
|
||||
sys.exit(EXIT_SERVER)
|
||||
|
||||
except companion.CredentialsError:
|
||||
logger.error('Frontier CAPI Server: Invalid Credentials')
|
||||
sys.exit(EXIT_CREDENTIALS)
|
||||
|
@ -82,11 +82,23 @@ if __name__ == '__main__': # noqa: C901
|
||||
action='store_true'
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
'--forget-frontier-auth',
|
||||
help='resets all authentication tokens',
|
||||
action='store_true'
|
||||
)
|
||||
|
||||
parser.add_argument('--suppress-dupe-process-popup',
|
||||
help='Suppress the popup from when the application detects another instance already running',
|
||||
action='store_true'
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
'--debug-sender',
|
||||
help='Mark the selected sender as in debug mode. This generally results in data being written to disk',
|
||||
action='append',
|
||||
)
|
||||
|
||||
auth_options = parser.add_mutually_exclusive_group(required=False)
|
||||
auth_options.add_argument('--force-localserver-for-auth',
|
||||
help='Force EDMC to use a localhost webserver for Frontier Auth callback',
|
||||
@ -123,6 +135,17 @@ if __name__ == '__main__': # noqa: C901
|
||||
parser.print_help()
|
||||
exit(1)
|
||||
|
||||
if args.debug_sender and len(args.debug_sender) > 0:
|
||||
import config as conf_module
|
||||
import debug_webserver
|
||||
from edmc_data import DEBUG_WEBSERVER_HOST, DEBUG_WEBSERVER_PORT
|
||||
|
||||
conf_module.debug_senders = [x.casefold() for x in args.debug_sender] # duplicate the list just in case
|
||||
for d in conf_module.debug_senders:
|
||||
logger.info(f'marked {d} for debug')
|
||||
|
||||
debug_webserver.run_listener(DEBUG_WEBSERVER_HOST, DEBUG_WEBSERVER_PORT)
|
||||
|
||||
def handle_edmc_callback_or_foregrounding() -> None: # noqa: CCR001
|
||||
"""Handle any edmc:// auth callback, else foreground existing window."""
|
||||
logger.trace('Begin...')
|
||||
@ -497,6 +520,7 @@ class AppWindow(object):
|
||||
self.always_ontop = tk.BooleanVar(value=bool(config.get_int('always_ontop')))
|
||||
self.system_menu = tk.Menu(self.menubar, name='system', tearoff=tk.FALSE)
|
||||
self.system_menu.add_separator()
|
||||
# LANG: Appearance - Label for checkbox to select if application always on top
|
||||
self.system_menu.add_checkbutton(label=_('Always on top'),
|
||||
variable=self.always_ontop,
|
||||
command=self.ontop_changed) # Appearance setting
|
||||
@ -715,9 +739,11 @@ class AppWindow(object):
|
||||
self.menubar.entryconfigure(3, label=_('View')) # LANG: 'View' menu title on OSX
|
||||
self.menubar.entryconfigure(4, label=_('Window')) # LANG: 'Window' menu title on OSX
|
||||
self.menubar.entryconfigure(5, label=_('Help')) # LANG: Help' menu title on OSX
|
||||
self.system_menu.entryconfigure(0, label=_("About {APP}").format(
|
||||
APP=applongname)) # LANG: App menu entry on OSX
|
||||
self.system_menu.entryconfigure(1, label=_("Check for Updates...")) # LANG: Help > Check for Updates
|
||||
self.system_menu.entryconfigure(
|
||||
0,
|
||||
label=_("About {APP}").format(APP=applongname) # LANG: App menu entry on OSX
|
||||
)
|
||||
self.system_menu.entryconfigure(1, label=_("Check for Updates...")) # LANG: Help > Check for Updates...
|
||||
self.file_menu.entryconfigure(0, label=_('Save Raw Data...')) # LANG: File > Save Raw Data...
|
||||
self.view_menu.entryconfigure(0, label=_('Status')) # LANG: File > Status
|
||||
self.help_menu.entryconfigure(1, label=_('Privacy Policy')) # LANG: Help > Privacy Policy
|
||||
@ -733,7 +759,7 @@ class AppWindow(object):
|
||||
# File menu
|
||||
self.file_menu.entryconfigure(0, label=_('Status')) # LANG: File > Status
|
||||
self.file_menu.entryconfigure(1, label=_('Save Raw Data...')) # LANG: File > Save Raw Data...
|
||||
self.file_menu.entryconfigure(2, label=_('Settings')) # LANG: File > Settings (Windows)
|
||||
self.file_menu.entryconfigure(2, label=_('Settings')) # LANG: File > Settings
|
||||
self.file_menu.entryconfigure(4, label=_('Exit')) # LANG: File > Exit
|
||||
|
||||
# Help menu
|
||||
@ -744,11 +770,12 @@ class AppWindow(object):
|
||||
self.help_menu.entryconfigure(4, label=_("About {APP}").format(APP=applongname)) # LANG: Help > About App
|
||||
|
||||
# Edit menu
|
||||
self.edit_menu.entryconfigure(0, label=_('Copy')) # LANG: As in Copy and Paste
|
||||
self.edit_menu.entryconfigure(0, label=_('Copy')) # LANG: Label for 'Copy' as in 'Copy and Paste'
|
||||
|
||||
def login(self):
|
||||
"""Initiate CAPI/Frontier login and set other necessary state."""
|
||||
if not self.status['text']:
|
||||
# LANG: Status - Attempting to get a Frontier Auth Access Token
|
||||
self.status['text'] = _('Logging in...')
|
||||
|
||||
self.button['state'] = self.theme_button['state'] = tk.DISABLED
|
||||
@ -803,10 +830,12 @@ class AppWindow(object):
|
||||
elif (config.get_int('output') & config.OUT_MKT_EDDN) \
|
||||
and not (data['lastStarport'].get('commodities') or data['lastStarport'].get('modules')):
|
||||
if not self.status['text']:
|
||||
# LANG: Status - Either no market or no modules data for station from Frontier CAPI
|
||||
self.status['text'] = _("Station doesn't have anything!")
|
||||
|
||||
elif not data['lastStarport'].get('commodities'):
|
||||
if not self.status['text']:
|
||||
# LANG: Status - No station market data from Frontier CAPI
|
||||
self.status['text'] = _("Station doesn't have a market!")
|
||||
|
||||
elif config.get_int('output') & (config.OUT_MKT_CSV | config.OUT_MKT_TD):
|
||||
@ -851,6 +880,7 @@ class AppWindow(object):
|
||||
elif play_sound:
|
||||
hotkeymgr.play_good()
|
||||
|
||||
# LANG: Status - Attempting to retrieve data from Frontier CAPI
|
||||
self.status['text'] = _('Fetching data...')
|
||||
self.button['state'] = self.theme_button['state'] = tk.DISABLED
|
||||
self.w.update_idletasks()
|
||||
@ -886,14 +916,19 @@ class AppWindow(object):
|
||||
|
||||
elif auto_update and not monitor.state['OnFoot'] and not data['commander'].get('docked'):
|
||||
# auto update is only when just docked
|
||||
logger.warning(f"{auto_update!r} and not {monitor.state['OnFoot']!r} and "
|
||||
f"not {data['commander'].get('docked')!r}")
|
||||
raise companion.ServerLagging()
|
||||
|
||||
elif data['lastSystem']['name'] != monitor.system:
|
||||
# CAPI system must match last journal one
|
||||
logger.warning(f"{data['lastSystem']['name']!r} != {monitor.system!r}")
|
||||
raise companion.ServerLagging()
|
||||
|
||||
elif data['lastStarport']['name'] != monitor.station:
|
||||
if monitor.state['OnFoot'] and monitor.station:
|
||||
logger.warning(f"({data['lastStarport']['name']!r} != {monitor.station!r}) AND "
|
||||
f"{monitor.state['OnFoot']!r} and {monitor.station!r}")
|
||||
raise companion.ServerLagging()
|
||||
|
||||
else:
|
||||
@ -901,18 +936,32 @@ class AppWindow(object):
|
||||
if data['commander']['docked']:
|
||||
last_station = data['lastStarport']['name']
|
||||
|
||||
if monitor.station is None:
|
||||
# Likely (re-)Embarked on ship docked at an EDO settlement.
|
||||
# Both Disembark and Embark have `"Onstation": false` in Journal.
|
||||
# So there's nothing to tell us which settlement we're (still,
|
||||
# or now, if we came here in Apex and then recalled ship) docked at.
|
||||
logger.debug("monitor.station is None - so EDO settlement?")
|
||||
raise companion.NoMonitorStation()
|
||||
|
||||
if last_station != monitor.station:
|
||||
# CAPI lastStarport must match
|
||||
logger.warning(f"({data['lastStarport']['name']!r} != {monitor.station!r}) AND "
|
||||
f"{last_station!r} != {monitor.station!r}")
|
||||
raise companion.ServerLagging()
|
||||
|
||||
self.holdofftime = querytime + companion.holdoff
|
||||
|
||||
elif not monitor.state['OnFoot'] and data['ship']['id'] != monitor.state['ShipID']:
|
||||
# CAPI ship must match
|
||||
logger.warning(f"not {monitor.state['OnFoot']!r} and "
|
||||
f"{data['ship']['id']!r} != {monitor.state['ShipID']!r}")
|
||||
raise companion.ServerLagging()
|
||||
|
||||
elif not monitor.state['OnFoot'] and data['ship']['name'].lower() != monitor.state['ShipType']:
|
||||
# CAPI ship type must match
|
||||
logger.warning(f"not {monitor.state['OnFoot']!r} and "
|
||||
f"{data['ship']['name'].lower()!r} != {monitor.state['ShipType']!r}")
|
||||
raise companion.ServerLagging()
|
||||
|
||||
else:
|
||||
@ -1263,7 +1312,7 @@ class AppWindow(object):
|
||||
if time() < self.holdofftime:
|
||||
# Update button in main window
|
||||
self.button['text'] = self.theme_button['text'] \
|
||||
= _('cooldown {SS}s').format(SS=int(self.holdofftime - time()))
|
||||
= _('cooldown {SS}s').format(SS=int(self.holdofftime - time())) # LANG: Cooldown on 'Update' button
|
||||
self.w.after(1000, self.cooldown)
|
||||
|
||||
else:
|
||||
@ -1311,6 +1360,7 @@ class AppWindow(object):
|
||||
tk.Toplevel.__init__(self, parent)
|
||||
|
||||
self.parent = parent
|
||||
# LANG: Help > About App
|
||||
self.title(_('About {APP}').format(APP=applongname))
|
||||
|
||||
if parent.winfo_viewable():
|
||||
@ -1344,6 +1394,7 @@ class AppWindow(object):
|
||||
row += 1
|
||||
self.appversion_label = tk.Label(frame, text=appversion())
|
||||
self.appversion_label.grid(row=row, column=0, sticky=tk.E)
|
||||
# LANG: Help > Release Notes
|
||||
self.appversion = HyperlinkLabel(frame, compound=tk.RIGHT, text=_('Release Notes'),
|
||||
url='https://github.com/EDCD/EDMarketConnector/releases/tag/Release/'
|
||||
f'{appversion_nobuild()}',
|
||||
@ -1369,6 +1420,7 @@ class AppWindow(object):
|
||||
# OK button to close the window
|
||||
ttk.Label(frame).grid(row=row, column=0) # spacer
|
||||
row += 1
|
||||
# LANG: Generic 'OK' button label
|
||||
button = ttk.Button(frame, text=_('OK'), command=self.apply)
|
||||
button.grid(row=row, column=2, sticky=tk.E)
|
||||
button.bind("<Return>", lambda event: self.apply())
|
||||
@ -1389,6 +1441,7 @@ class AppWindow(object):
|
||||
|
||||
def save_raw(self) -> None: # noqa: CCR001 # Not easily broken up.
|
||||
"""Save newly acquired CAPI data in the configured file."""
|
||||
# LANG: Status - Attempting to retrieve data from Frontier CAPI to save to file
|
||||
self.status['text'] = _('Fetching data...')
|
||||
self.w.update_idletasks()
|
||||
|
||||
@ -1675,6 +1728,11 @@ sys.path: {sys.path}'''
|
||||
else:
|
||||
log_locale('After switching to UTF-8 encoding (same language)')
|
||||
|
||||
# Do this after locale silliness, just in case
|
||||
if args.forget_frontier_auth:
|
||||
logger.info("Dropping all fdev tokens as --forget-frontier-auth was passed")
|
||||
companion.Auth.invalidate(None)
|
||||
|
||||
# TODO: unittests in place of these
|
||||
# logger.debug('Test from __main__')
|
||||
# test_logging()
|
||||
@ -1735,6 +1793,7 @@ sys.path: {sys.path}'''
|
||||
"""Display message about plugins not updated for Python 3.x."""
|
||||
plugins_not_py3_last = config.get_int('plugins_not_py3_last', default=0)
|
||||
if (plugins_not_py3_last + 86400) < int(time()) and len(plug.PLUGINS_not_py3):
|
||||
# LANG: Popup-text about 'active' plugins without Python 3.x support
|
||||
popup_text = _(
|
||||
"One or more of your enabled plugins do not yet have support for Python 3.x. Please see the "
|
||||
"list on the '{PLUGINS}' tab of '{FILE}' > '{SETTINGS}'. You should check if there is an "
|
||||
@ -1744,14 +1803,18 @@ sys.path: {sys.path}'''
|
||||
)
|
||||
|
||||
# Substitute in the other words.
|
||||
# LANG: 'Plugins' tab / 'File' menu / 'File' > 'Settings'
|
||||
popup_text = popup_text.format(PLUGINS=_('Plugins'), FILE=_('File'), SETTINGS=_('Settings'),
|
||||
DISABLED='.disabled')
|
||||
popup_text = popup_text.format(
|
||||
PLUGINS=_('Plugins'), # LANG: Settings > Plugins tab
|
||||
FILE=_('File'), # LANG: 'File' menu
|
||||
SETTINGS=_('Settings'), # LANG: File > Settings
|
||||
DISABLED='.disabled'
|
||||
)
|
||||
# And now we do need these to be actual \r\n
|
||||
popup_text = popup_text.replace('\\n', '\n')
|
||||
popup_text = popup_text.replace('\\r', '\r')
|
||||
|
||||
tk.messagebox.showinfo(
|
||||
# LANG: Popup window title for list of 'enabled' plugins that don't work with Python 3.x
|
||||
_('EDMC: Plugins Without Python 3.x Support'),
|
||||
popup_text
|
||||
)
|
||||
|
1154
L10n/cs.strings
1154
L10n/cs.strings
File diff suppressed because it is too large
Load Diff
1171
L10n/de.strings
1171
L10n/de.strings
File diff suppressed because it is too large
Load Diff
286
L10n/en.template
286
L10n/en.template
@ -1,397 +1,406 @@
|
||||
/* Language name */
|
||||
"!Language" = "English";
|
||||
|
||||
/* In files: companion.py:170; */
|
||||
/* companion.py: Frontier CAPI didn't respond; In files: companion.py:171; */
|
||||
"Error: Frontier CAPI didn't respond" = "Error: Frontier CAPI didn't respond";
|
||||
|
||||
/* In files: companion.py:183; */
|
||||
/* companion.py: Frontier CAPI data doesn't agree with latest Journal game location; In files: companion.py:190; */
|
||||
"Error: Frontier server is lagging" = "Error: Frontier server is lagging";
|
||||
|
||||
/* In files: companion.py:196; */
|
||||
"Error: Frontier server SKU problem" = "Error: Frontier server SKU problem";
|
||||
/* companion.py: Commander is docked at an EDO settlement, got out and back in, we forgot the station; In files: companion.py:205; */
|
||||
"Docked but unknown station: EDO Settlement?" = "Docked but unknown station: EDO Settlement?";
|
||||
|
||||
/* In files: companion.py:205; */
|
||||
/* companion.py: Generic "something went wrong with Frontier Auth" error; In files: companion.py:214; */
|
||||
"Error: Invalid Credentials" = "Error: Invalid Credentials";
|
||||
|
||||
/* In files: companion.py:220; */
|
||||
/* companion.py: Frontier CAPI authorisation not for currently game-active commander; In files: companion.py:230; */
|
||||
"Error: Wrong Cmdr" = "Error: Wrong Cmdr";
|
||||
|
||||
/* In files: companion.py:330; companion.py:406; */
|
||||
/* companion.py: Generic error prefix - following text is from Frontier auth service; In files: companion.py:341; companion.py:422; */
|
||||
"Error" = "Error";
|
||||
|
||||
/* In files: companion.py:368; companion.py:372; */
|
||||
/* companion.py: Frontier auth, no 'usr' section in returned data; companion.py: Frontier auth, no 'customer_id' in 'usr' section in returned data; In files: companion.py:380; companion.py:385; */
|
||||
"Error: Couldn't check token customer_id" = "Error: Couldn't check token customer_id";
|
||||
|
||||
/* In files: companion.py:377; */
|
||||
/* companion.py: Frontier auth customer_id doesn't match game session FID; In files: companion.py:391; */
|
||||
"Error: customer_id doesn't match!" = "Error: customer_id doesn't match!";
|
||||
|
||||
/* In files: companion.py:398; */
|
||||
/* companion.py: Failed to get Access Token from Frontier Auth service; In files: companion.py:413; */
|
||||
"Error: unable to get token" = "Error: unable to get token";
|
||||
|
||||
/* In files: companion.py:542; */
|
||||
/* companion.py: Frontier CAPI data retrieval failed; In files: companion.py:575; */
|
||||
"Frontier CAPI query failure" = "Frontier CAPI query failure";
|
||||
|
||||
/* In files: companion.py:557; */
|
||||
/* companion.py: Frontier CAPI data retrieval failed with 5XX code; In files: companion.py:591; */
|
||||
"Frontier CAPI server error" = "Frontier CAPI server error";
|
||||
|
||||
/* EDMarketConnector.py: Update button in main window; In files: EDMarketConnector.py:418; EDMarketConnector.py:711; EDMarketConnector.py:1259; */
|
||||
/* EDMarketConnector.py: Update button in main window; In files: EDMarketConnector.py:424; EDMarketConnector.py:718; EDMarketConnector.py:1302; */
|
||||
"Update" = "Update";
|
||||
|
||||
/* In files: EDMarketConnector.py:500; prefs.py:788; */
|
||||
/* EDMarketConnector.py: Appearance - Label for checkbox to select if application always on top; prefs.py: Appearance - Label for checkbox to select if application always on top; In files: EDMarketConnector.py:507; prefs.py:843; */
|
||||
"Always on top" = "Always on top";
|
||||
|
||||
/* EDMarketConnector.py: Unknown suit; In files: EDMarketConnector.py:629; */
|
||||
/* EDMarketConnector.py: Unknown suit; In files: EDMarketConnector.py:636; */
|
||||
"Unknown" = "Unknown";
|
||||
|
||||
/* EDMarketConnector.py: ED Journal file location appears to be in error; In files: EDMarketConnector.py:698; */
|
||||
/* EDMarketConnector.py: ED Journal file location appears to be in error; In files: EDMarketConnector.py:705; */
|
||||
"Error: Check E:D journal file location" = "Error: Check E:D journal file location";
|
||||
|
||||
/* EDMarketConnector.py: Main window; stats.py: Cmdr stats; In files: EDMarketConnector.py:705; edsm.py:216; stats.py:50; theme.py:226; */
|
||||
/* EDMarketConnector.py: Label for commander name in main window; edsm.py: Game Commander name label in EDSM settings; stats.py: Cmdr stats; theme.py: Label for commander name in main window; In files: EDMarketConnector.py:712; edsm.py:219; stats.py:50; theme.py:227; */
|
||||
"Cmdr" = "Cmdr";
|
||||
|
||||
/* EDMarketConnector.py: Multicrew role label in main window; In files: EDMarketConnector.py:707; EDMarketConnector.py:1029; */
|
||||
/* EDMarketConnector.py: 'Ship' or multi-crew role label in main window, as applicable; EDMarketConnector.py: Multicrew role label in main window; In files: EDMarketConnector.py:714; EDMarketConnector.py:1072; */
|
||||
"Role" = "Role";
|
||||
|
||||
/* EDMarketConnector.py: Main window; stats.py: Status dialog subtitle; In files: EDMarketConnector.py:707; EDMarketConnector.py:1039; EDMarketConnector.py:1062; stats.py:362; */
|
||||
/* EDMarketConnector.py: 'Ship' or multi-crew role label in main window, as applicable; EDMarketConnector.py: 'Ship' label in main UI; stats.py: Status dialog subtitle; In files: EDMarketConnector.py:714; EDMarketConnector.py:1082; EDMarketConnector.py:1105; stats.py:363; */
|
||||
"Ship" = "Ship";
|
||||
|
||||
/* EDMarketConnector.py: Main window; In files: EDMarketConnector.py:708; */
|
||||
/* EDMarketConnector.py: Label for 'Suit' line in main UI; In files: EDMarketConnector.py:715; */
|
||||
"Suit" = "Suit";
|
||||
|
||||
/* EDMarketConnector.py: Main window; stats.py: Main window; In files: EDMarketConnector.py:709; prefs.py:567; stats.py:364; */
|
||||
/* EDMarketConnector.py: Label for 'System' line in main UI; prefs.py: Configuration - Label for selection of 'System' provider website; stats.py: Main window; In files: EDMarketConnector.py:716; prefs.py:605; stats.py:365; */
|
||||
"System" = "System";
|
||||
|
||||
/* EDMarketConnector.py: Main window; stats.py: Status dialog subtitle; In files: EDMarketConnector.py:710; prefs.py:584; prefs.py:688; stats.py:365; */
|
||||
/* EDMarketConnector.py: Label for 'Station' line in main UI; prefs.py: Configuration - Label for selection of 'Station' provider website; prefs.py: Appearance - Example 'Normal' text; stats.py: Status dialog subtitle; In files: EDMarketConnector.py:717; prefs.py:623; prefs.py:738; stats.py:366; */
|
||||
"Station" = "Station";
|
||||
|
||||
/* EDMarketConnector.py: Menu title on OSX; EDMarketConnector.py: Menu title; EDMarketConnector.py: words for use in python 2 plugin error; In files: EDMarketConnector.py:713; EDMarketConnector.py:726; EDMarketConnector.py:729; EDMarketConnector.py:1736; */
|
||||
/* EDMarketConnector.py: 'File' menu title on OSX; EDMarketConnector.py: 'File' menu title; EDMarketConnector.py: 'File' menu; In files: EDMarketConnector.py:720; EDMarketConnector.py:735; EDMarketConnector.py:738; EDMarketConnector.py:1791; */
|
||||
"File" = "File";
|
||||
|
||||
/* EDMarketConnector.py: Menu title on OSX; EDMarketConnector.py: Menu title; In files: EDMarketConnector.py:714; EDMarketConnector.py:727; EDMarketConnector.py:730; */
|
||||
/* EDMarketConnector.py: 'Edit' menu title on OSX; EDMarketConnector.py: 'Edit' menu title; In files: EDMarketConnector.py:721; EDMarketConnector.py:736; EDMarketConnector.py:739; */
|
||||
"Edit" = "Edit";
|
||||
|
||||
/* EDMarketConnector.py: Menu title on OSX; In files: EDMarketConnector.py:715; */
|
||||
/* EDMarketConnector.py: 'View' menu title on OSX; In files: EDMarketConnector.py:722; */
|
||||
"View" = "View";
|
||||
|
||||
/* EDMarketConnector.py: Menu title on OSX; In files: EDMarketConnector.py:716; */
|
||||
/* EDMarketConnector.py: 'Window' menu title on OSX; In files: EDMarketConnector.py:723; */
|
||||
"Window" = "Window";
|
||||
|
||||
/* EDMarketConnector.py: Menu title on OSX; EDMarketConnector.py: Menu title; In files: EDMarketConnector.py:717; EDMarketConnector.py:728; EDMarketConnector.py:731; */
|
||||
/* EDMarketConnector.py: Help' menu title on OSX; EDMarketConnector.py: 'Help' menu title; In files: EDMarketConnector.py:724; EDMarketConnector.py:737; EDMarketConnector.py:740; */
|
||||
"Help" = "Help";
|
||||
|
||||
/* EDMarketConnector.py: Menu title on OSX; EDMarketConnector.py: App menu entry; In files: EDMarketConnector.py:718; EDMarketConnector.py:744; EDMarketConnector.py:1303; */
|
||||
/* EDMarketConnector.py: App menu entry on OSX; EDMarketConnector.py: Help > About App; In files: EDMarketConnector.py:727; EDMarketConnector.py:753; EDMarketConnector.py:1347; */
|
||||
"About {APP}" = "About {APP}";
|
||||
|
||||
/* EDMarketConnector.py: Menu item; In files: EDMarketConnector.py:720; EDMarketConnector.py:743; */
|
||||
/* EDMarketConnector.py: Help > Check for Updates...; In files: EDMarketConnector.py:729; EDMarketConnector.py:752; */
|
||||
"Check for Updates..." = "Check for Updates...";
|
||||
|
||||
/* EDMarketConnector.py: Menu item; In files: EDMarketConnector.py:721; EDMarketConnector.py:735; */
|
||||
/* EDMarketConnector.py: File > Save Raw Data...; In files: EDMarketConnector.py:730; EDMarketConnector.py:744; */
|
||||
"Save Raw Data..." = "Save Raw Data...";
|
||||
|
||||
/* EDMarketConnector.py: Menu item; stats.py: Status dialog title; In files: EDMarketConnector.py:722; EDMarketConnector.py:734; stats.py:359; */
|
||||
/* EDMarketConnector.py: File > Status; stats.py: Status dialog title; In files: EDMarketConnector.py:731; EDMarketConnector.py:743; stats.py:360; */
|
||||
"Status" = "Status";
|
||||
|
||||
/* EDMarketConnector.py: Help menu item; In files: EDMarketConnector.py:723; EDMarketConnector.py:741; */
|
||||
/* EDMarketConnector.py: Help > Privacy Policy; In files: EDMarketConnector.py:732; EDMarketConnector.py:750; */
|
||||
"Privacy Policy" = "Privacy Policy";
|
||||
|
||||
/* EDMarketConnector.py: Help menu item; In files: EDMarketConnector.py:724; EDMarketConnector.py:742; EDMarketConnector.py:1336; */
|
||||
/* EDMarketConnector.py: Help > Release Notes; In files: EDMarketConnector.py:733; EDMarketConnector.py:751; EDMarketConnector.py:1381; */
|
||||
"Release Notes" = "Release Notes";
|
||||
|
||||
/* EDMarketConnector.py: Item in the File menu on Windows; EDMarketConnector.py: words for use in python 2 plugin error; In files: EDMarketConnector.py:736; EDMarketConnector.py:1736; prefs.py:248; */
|
||||
/* EDMarketConnector.py: File > Settings; prefs.py: File > Settings (macOS); In files: EDMarketConnector.py:745; EDMarketConnector.py:1792; prefs.py:254; */
|
||||
"Settings" = "Settings";
|
||||
|
||||
/* EDMarketConnector.py: Item in the File menu on Windows; In files: EDMarketConnector.py:737; */
|
||||
/* EDMarketConnector.py: File > Exit; In files: EDMarketConnector.py:746; */
|
||||
"Exit" = "Exit";
|
||||
|
||||
/* EDMarketConnector.py: Help menu item; In files: EDMarketConnector.py:740; */
|
||||
/* EDMarketConnector.py: Help > Documentation; In files: EDMarketConnector.py:749; */
|
||||
"Documentation" = "Documentation";
|
||||
|
||||
/* EDMarketConnector.py: As in Copy and Paste; In files: EDMarketConnector.py:747; ttkHyperlinkLabel.py:41; */
|
||||
/* EDMarketConnector.py: Label for 'Copy' as in 'Copy and Paste'; ttkHyperlinkLabel.py: Label for 'Copy' as in 'Copy and Paste'; In files: EDMarketConnector.py:756; ttkHyperlinkLabel.py:42; */
|
||||
"Copy" = "Copy";
|
||||
|
||||
/* In files: EDMarketConnector.py:752; */
|
||||
/* EDMarketConnector.py: Status - Attempting to get a Frontier Auth Access Token; In files: EDMarketConnector.py:762; */
|
||||
"Logging in..." = "Logging in...";
|
||||
|
||||
/* EDMarketConnector.py: Successfully authenticated with the Frontier website; In files: EDMarketConnector.py:768; EDMarketConnector.py:1172; */
|
||||
/* EDMarketConnector.py: Successfully authenticated with the Frontier website; In files: EDMarketConnector.py:778; EDMarketConnector.py:1215; */
|
||||
"Authentication successful" = "Authentication successful";
|
||||
|
||||
/* In files: EDMarketConnector.py:798; */
|
||||
/* EDMarketConnector.py: Player is not docked at a station, when we expect them to be; In files: EDMarketConnector.py:809; */
|
||||
"You're not docked at a station!" = "You're not docked at a station!";
|
||||
|
||||
/* In files: EDMarketConnector.py:805; */
|
||||
/* EDMarketConnector.py: Status - Either no market or no modules data for station from Frontier CAPI; In files: EDMarketConnector.py:817; */
|
||||
"Station doesn't have anything!" = "Station doesn't have anything!";
|
||||
|
||||
/* In files: EDMarketConnector.py:809; */
|
||||
/* EDMarketConnector.py: Status - No station market data from Frontier CAPI; In files: EDMarketConnector.py:822; */
|
||||
"Station doesn't have a market!" = "Station doesn't have a market!";
|
||||
|
||||
/* In files: EDMarketConnector.py:853; EDMarketConnector.py:1381; stats.py:278; */
|
||||
/* EDMarketConnector.py: Status - Attempting to retrieve data from Frontier CAPI; EDMarketConnector.py: Status - Attempting to retrieve data from Frontier CAPI to save to file; stats.py: Fetching data from Frontier CAPI in order to display on File > Status; In files: EDMarketConnector.py:867; EDMarketConnector.py:1428; stats.py:279; */
|
||||
"Fetching data..." = "Fetching data...";
|
||||
|
||||
/* In files: EDMarketConnector.py:865; */
|
||||
/* EDMarketConnector.py: No data was returned for the commander from the Frontier CAPI; In files: EDMarketConnector.py:880; */
|
||||
"CAPI: No commander data returned" = "CAPI: No commander data returned";
|
||||
|
||||
/* stats.py: Unknown commander; In files: EDMarketConnector.py:868; stats.py:296; */
|
||||
/* EDMarketConnector.py: We didn't have the commander name when we should have; stats.py: Unknown commander; In files: EDMarketConnector.py:884; stats.py:297; */
|
||||
"Who are you?!" = "Who are you?!";
|
||||
|
||||
/* stats.py: Unknown location; In files: EDMarketConnector.py:873; stats.py:306; */
|
||||
/* EDMarketConnector.py: We don't know where the commander is, when we should; stats.py: Unknown location; In files: EDMarketConnector.py:890; stats.py:307; */
|
||||
"Where are you?!" = "Where are you?!";
|
||||
|
||||
/* stats.py: Unknown ship; In files: EDMarketConnector.py:876; stats.py:311; */
|
||||
/* EDMarketConnector.py: We don't know what ship the commander is in, when we should; stats.py: Unknown ship; In files: EDMarketConnector.py:894; stats.py:312; */
|
||||
"What are you flying?!" = "What are you flying?!";
|
||||
|
||||
/* In files: EDMarketConnector.py:983; */
|
||||
/* EDMarketConnector.py: Time when we last obtained Frontier CAPI data; In files: EDMarketConnector.py:1026; */
|
||||
"Last updated at %H:%M:%S" = "Last updated at %H:%M:%S";
|
||||
|
||||
/* EDMarketConnector.py: Multicrew role; In files: EDMarketConnector.py:1009; */
|
||||
/* EDMarketConnector.py: Multicrew role; In files: EDMarketConnector.py:1052; */
|
||||
"Fighter" = "Fighter";
|
||||
|
||||
/* EDMarketConnector.py: Multicrew role; In files: EDMarketConnector.py:1010; */
|
||||
/* EDMarketConnector.py: Multicrew role; In files: EDMarketConnector.py:1053; */
|
||||
"Gunner" = "Gunner";
|
||||
|
||||
/* EDMarketConnector.py: Multicrew role; In files: EDMarketConnector.py:1011; */
|
||||
/* EDMarketConnector.py: Multicrew role; In files: EDMarketConnector.py:1054; */
|
||||
"Helm" = "Helm";
|
||||
|
||||
/* In files: EDMarketConnector.py:1255; */
|
||||
/* EDMarketConnector.py: Cooldown on 'Update' button; In files: EDMarketConnector.py:1298; */
|
||||
"cooldown {SS}s" = "cooldown {SS}s";
|
||||
|
||||
/* In files: EDMarketConnector.py:1361; prefs.py:297; */
|
||||
/* EDMarketConnector.py: Generic 'OK' button label; prefs.py: 'OK' button on Settings/Preferences window; In files: EDMarketConnector.py:1407; prefs.py:304; */
|
||||
"OK" = "OK";
|
||||
|
||||
/* In files: EDMarketConnector.py:1441; */
|
||||
/* EDMarketConnector.py: The application is shutting down; In files: EDMarketConnector.py:1489; */
|
||||
"Shutting down..." = "Shutting down...";
|
||||
|
||||
/* In files: EDMarketConnector.py:1726:1732; */
|
||||
/* EDMarketConnector.py: Popup-text about 'active' plugins without Python 3.x support; In files: EDMarketConnector.py:1780:1786; */
|
||||
"One or more of your enabled plugins do not yet have support for Python 3.x. Please see the list on the '{PLUGINS}' tab of '{FILE}' > '{SETTINGS}'. You should check if there is an updated version available, else alert the developer that they need to update the code for Python 3.x.\r\n\r\nYou can disable a plugin by renaming its folder to have '{DISABLED}' on the end of the name." = "One or more of your enabled plugins do not yet have support for Python 3.x. Please see the list on the '{PLUGINS}' tab of '{FILE}' > '{SETTINGS}'. You should check if there is an updated version available, else alert the developer that they need to update the code for Python 3.x.\r\n\r\nYou can disable a plugin by renaming its folder to have '{DISABLED}' on the end of the name.";
|
||||
|
||||
/* EDMarketConnector.py: words for use in python 2 plugin error; In files: EDMarketConnector.py:1736; prefs.py:888; */
|
||||
/* EDMarketConnector.py: Settings > Plugins tab; prefs.py: Label on Settings > Plugins tab; In files: EDMarketConnector.py:1790; prefs.py:953; */
|
||||
"Plugins" = "Plugins";
|
||||
|
||||
/* In files: EDMarketConnector.py:1743; */
|
||||
/* EDMarketConnector.py: Popup window title for list of 'enabled' plugins that don't work with Python 3.x; In files: EDMarketConnector.py:1801; */
|
||||
"EDMC: Plugins Without Python 3.x Support" = "EDMC: Plugins Without Python 3.x Support";
|
||||
|
||||
/* In files: journal_lock.py:205; */
|
||||
/* journal_lock.py: Title text on popup when Journal directory already locked; In files: journal_lock.py:206; */
|
||||
"Journal directory already locked" = "Journal directory already locked";
|
||||
|
||||
/* In files: journal_lock.py:221:222; */
|
||||
/* journal_lock.py: Text for when newly selected Journal directory is already locked; In files: journal_lock.py:223:224; */
|
||||
"The new Journal Directory location is already locked.{CR}You can either attempt to resolve this and then Retry, or choose to Ignore this." = "The new Journal Directory location is already locked.{CR}You can either attempt to resolve this and then Retry, or choose to Ignore this.";
|
||||
|
||||
/* In files: journal_lock.py:225; */
|
||||
/* journal_lock.py: Generic 'Retry' button label; In files: journal_lock.py:228; */
|
||||
"Retry" = "Retry";
|
||||
|
||||
/* In files: journal_lock.py:228; */
|
||||
/* journal_lock.py: Generic 'Ignore' button label; In files: journal_lock.py:232; */
|
||||
"Ignore" = "Ignore";
|
||||
|
||||
/* In files: l10n.py:193; prefs.py:438; prefs.py:636; prefs.py:664; */
|
||||
/* l10n.py: The system default language choice in Settings > Appearance; prefs.py: Settings > Configuration - Label on 'reset journal files location to default' button; prefs.py: The system default language choice in Settings > Appearance; prefs.py: Label for 'Default' theme radio button; In files: l10n.py:194; prefs.py:466; prefs.py:678; prefs.py:711; */
|
||||
"Default" = "Default";
|
||||
|
||||
/* In files: coriolis.py:51; coriolis.py:51; coriolis.py:88; coriolis.py:104; coriolis.py:110; */
|
||||
/* coriolis.py: 'Auto' label for Coriolis site override selection; coriolis.py: Coriolis normal/beta selection - auto; In files: coriolis.py:52; coriolis.py:55; coriolis.py:101; coriolis.py:117; coriolis.py:123; */
|
||||
"Auto" = "Auto";
|
||||
|
||||
/* In files: coriolis.py:51; coriolis.py:88; coriolis.py:102; */
|
||||
/* coriolis.py: 'Normal' label for Coriolis site override selection; coriolis.py: Coriolis normal/beta selection - normal; In files: coriolis.py:53; coriolis.py:99; coriolis.py:115; */
|
||||
"Normal" = "Normal";
|
||||
|
||||
/* In files: coriolis.py:51; coriolis.py:88; coriolis.py:103; */
|
||||
/* coriolis.py: 'Beta' label for Coriolis site override selection; coriolis.py: Coriolis normal/beta selection - beta; In files: coriolis.py:54; coriolis.py:100; coriolis.py:116; */
|
||||
"Beta" = "Beta";
|
||||
|
||||
/* In files: coriolis.py:64:66; */
|
||||
/* coriolis.py: Settings>Coriolis: Help/hint for changing coriolis URLs; In files: coriolis.py:69:71; */
|
||||
"Set the URL to use with coriolis.io ship loadouts. Note that this MUST end with '/import?data='" = "Set the URL to use with coriolis.io ship loadouts. Note that this MUST end with '/import?data='";
|
||||
|
||||
/* In files: coriolis.py:69; */
|
||||
/* coriolis.py: Settings>Coriolis: Label for 'NOT alpha/beta game version' URL; In files: coriolis.py:75; */
|
||||
"Normal URL" = "Normal URL";
|
||||
|
||||
/* In files: coriolis.py:71; coriolis.py:78; */
|
||||
/* coriolis.py: Generic 'Reset' button label; In files: coriolis.py:78; coriolis.py:87; */
|
||||
"Reset" = "Reset";
|
||||
|
||||
/* In files: coriolis.py:76; */
|
||||
/* coriolis.py: Settings>Coriolis: Label for 'alpha/beta game version' URL; In files: coriolis.py:84; */
|
||||
"Beta URL" = "Beta URL";
|
||||
|
||||
/* In files: coriolis.py:83; */
|
||||
/* coriolis.py: Settings>Coriolis: Label for selection of using Normal, Beta or 'auto' Coriolis URL; In files: coriolis.py:94; */
|
||||
"Override Beta/Normal Selection" = "Override Beta/Normal Selection";
|
||||
|
||||
/* In files: coriolis.py:120; */
|
||||
/* coriolis.py: Settings>Coriolis - invalid override mode found; In files: coriolis.py:134; */
|
||||
"Invalid Coriolis override mode!" = "Invalid Coriolis override mode!";
|
||||
|
||||
/* In files: eddb.py:99; */
|
||||
/* eddb.py: Journal Processing disabled due to an active killswitch; In files: eddb.py:100; */
|
||||
"EDDB Journal processing disabled. See Log." = "EDDB Journal processing disabled. See Log.";
|
||||
|
||||
/* In files: eddn.py:215; eddn.py:593; eddn.py:940; */
|
||||
/* eddn.py: Status text shown while attempting to send data; In files: eddn.py:215; eddn.py:619; eddn.py:969; */
|
||||
"Sending data to EDDN..." = "Sending data to EDDN...";
|
||||
|
||||
/* In files: eddn.py:260; eddn.py:878; eddn.py:913; eddn.py:952; */
|
||||
/* eddn.py: Error while trying to send data to EDDN; In files: eddn.py:264; eddn.py:907; eddn.py:942; eddn.py:981; */
|
||||
"Error: Can't connect to EDDN" = "Error: Can't connect to EDDN";
|
||||
|
||||
/* In files: eddn.py:672; */
|
||||
/* eddn.py: EDDN has banned this version of our client; In files: eddn.py:282; */
|
||||
"EDDN Error: EDMC is too old for EDDN. Please update." = "EDDN Error: EDMC is too old for EDDN. Please update.";
|
||||
|
||||
/* eddn.py: EDDN returned an error that indicates something about what we sent it was wrong; In files: eddn.py:288; */
|
||||
"EDDN Error: Validation Failed (EDMC Too Old?). See Log" = "EDDN Error: Validation Failed (EDMC Too Old?). See Log";
|
||||
|
||||
/* eddn.py: EDDN returned some sort of HTTP error, one we didn't expect. {STATUS} contains a number; In files: eddn.py:293; */
|
||||
"EDDN Error: Returned {STATUS} status code" = "EDDN Error: Returned {STATUS} status code";
|
||||
|
||||
/* eddn.py: Enable EDDN support for station data checkbox label; In files: eddn.py:699; */
|
||||
"Send station data to the Elite Dangerous Data Network" = "Send station data to the Elite Dangerous Data Network";
|
||||
|
||||
/* In files: eddn.py:682; */
|
||||
/* eddn.py: Enable EDDN support for system and other scan data checkbox label; In files: eddn.py:710; */
|
||||
"Send system and scan data to the Elite Dangerous Data Network" = "Send system and scan data to the Elite Dangerous Data Network";
|
||||
|
||||
/* In files: eddn.py:692; */
|
||||
/* eddn.py: EDDN delay sending until docked option is on, this message notes that a send was skipped due to this; In files: eddn.py:721; */
|
||||
"Delay sending until docked" = "Delay sending until docked";
|
||||
|
||||
/* In files: eddn.py:756; */
|
||||
/* eddn.py: Killswitch disabled EDDN; In files: eddn.py:785; */
|
||||
"EDDN journal handler disabled. See Log." = "EDDN journal handler disabled. See Log.";
|
||||
|
||||
/* In files: edsm.py:197; */
|
||||
/* edsm.py: Settings>EDSM - Label on checkbox for 'send data'; In files: edsm.py:198; */
|
||||
"Send flight log and Cmdr status to EDSM" = "Send flight log and Cmdr status to EDSM";
|
||||
|
||||
/* In files: edsm.py:206; */
|
||||
/* edsm.py: Settings>EDSM - Label on header/URL to EDSM API key page; In files: edsm.py:208; */
|
||||
"Elite Dangerous Star Map credentials" = "Elite Dangerous Star Map credentials";
|
||||
|
||||
/* In files: edsm.py:223; */
|
||||
/* edsm.py: EDSM Commander name label in EDSM settings; In files: edsm.py:227; */
|
||||
"Commander Name" = "Commander Name";
|
||||
|
||||
/* In files: edsm.py:230; inara.py:233; */
|
||||
/* edsm.py: EDSM API key label; inara.py: Inara API key label; In files: edsm.py:235; inara.py:237; */
|
||||
"API Key" = "API Key";
|
||||
|
||||
/* stats.py: No rank; In files: edsm.py:256; prefs.py:487; prefs.py:1091; prefs.py:1123; stats.py:117; stats.py:136; stats.py:155; stats.py:172; */
|
||||
/* edsm.py: We have no data on the current commander; prefs.py: No hotkey/shortcut set; stats.py: No rank; In files: edsm.py:262; prefs.py:518; prefs.py:1156; prefs.py:1189; stats.py:117; stats.py:136; stats.py:155; stats.py:172; */
|
||||
"None" = "None";
|
||||
|
||||
/* In files: edsm.py:351; */
|
||||
/* edsm.py: EDSM plugin - Journal handling disabled by killswitch; In files: edsm.py:358; */
|
||||
"EDSM Handler disabled. See Log." = "EDSM Handler disabled. See Log.";
|
||||
|
||||
/* In files: edsm.py:632; edsm.py:734; */
|
||||
/* edsm.py: EDSM Plugin - Error message from EDSM API; In files: edsm.py:640; edsm.py:745; */
|
||||
"Error: EDSM {MSG}" = "Error: EDSM {MSG}";
|
||||
|
||||
/* In files: edsm.py:668; edsm.py:730; */
|
||||
/* edsm.py: EDSM Plugin - Error connecting to EDSM API; In files: edsm.py:677; edsm.py:740; */
|
||||
"Error: Can't connect to EDSM" = "Error: Can't connect to EDSM";
|
||||
|
||||
/* In files: inara.py:215; */
|
||||
/* inara.py: Checkbox to enable INARA API Usage; In files: inara.py:216; */
|
||||
"Send flight log and Cmdr status to Inara" = "Send flight log and Cmdr status to Inara";
|
||||
|
||||
/* In files: inara.py:225; */
|
||||
/* inara.py: Text for INARA API keys link ( goes to https://inara.cz/settings-api ); In files: inara.py:228; */
|
||||
"Inara credentials" = "Inara credentials";
|
||||
|
||||
/* In files: inara.py:331; */
|
||||
/* inara.py: INARA support disabled via killswitch; In files: inara.py:335; */
|
||||
"Inara disabled. See Log." = "Inara disabled. See Log.";
|
||||
|
||||
/* In files: inara.py:1537; inara.py:1549; */
|
||||
/* inara.py: INARA API returned some kind of error (error message will be contained in {MSG}); In files: inara.py:1549; inara.py:1562; */
|
||||
"Error: Inara {MSG}" = "Error: Inara {MSG}";
|
||||
|
||||
/* In files: prefs.py:248; */
|
||||
/* prefs.py: File > Preferences menu entry for macOS; In files: prefs.py:250; */
|
||||
"Preferences" = "Preferences";
|
||||
|
||||
/* In files: prefs.py:338; */
|
||||
/* prefs.py: Settings > Output - choosing what data to save to files; In files: prefs.py:346; */
|
||||
"Please choose what data to save" = "Please choose what data to save";
|
||||
|
||||
/* In files: prefs.py:344; */
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:352; */
|
||||
"Market data in CSV format file" = "Market data in CSV format file";
|
||||
|
||||
/* In files: prefs.py:353; */
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:361; */
|
||||
"Market data in Trade Dangerous format file" = "Market data in Trade Dangerous format file";
|
||||
|
||||
/* In files: prefs.py:363; */
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:371; */
|
||||
"Ship loadout" = "Ship loadout";
|
||||
|
||||
/* In files: prefs.py:373; */
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:381; */
|
||||
"Automatically update on docking" = "Automatically update on docking";
|
||||
|
||||
/* In files: prefs.py:381; prefs.py:391; */
|
||||
/* prefs.py: Settings > Output - Label for "where files are located"; In files: prefs.py:390; prefs.py:409; */
|
||||
"File location" = "File location";
|
||||
|
||||
/* In files: prefs.py:390; prefs.py:429; */
|
||||
/* prefs.py: macOS Preferences - files location selection button; In files: prefs.py:398; prefs.py:448; */
|
||||
"Change..." = "Change...";
|
||||
|
||||
/* In files: prefs.py:390; prefs.py:429; */
|
||||
/* prefs.py: NOT-macOS Settings - files location selection button; prefs.py: NOT-macOS Setting - files location selection button; In files: prefs.py:401; prefs.py:451; */
|
||||
"Browse..." = "Browse...";
|
||||
|
||||
/* In files: prefs.py:397; */
|
||||
/* prefs.py: Label for 'Output' Settings/Preferences tab; In files: prefs.py:416; */
|
||||
"Output" = "Output";
|
||||
|
||||
/* In files: prefs.py:422; prefs.py:430; */
|
||||
/* prefs.py: Settings > Configuration - Label for Journal files location; In files: prefs.py:442; prefs.py:457; */
|
||||
"E:D journal file location" = "E:D journal file location";
|
||||
|
||||
/* In files: prefs.py:454; */
|
||||
/* prefs.py: Hotkey/Shortcut settings prompt on OSX; In files: prefs.py:482; */
|
||||
"Keyboard shortcut" = "Keyboard shortcut";
|
||||
|
||||
/* In files: prefs.py:456; */
|
||||
/* prefs.py: Hotkey/Shortcut settings prompt on Windows; In files: prefs.py:484; */
|
||||
"Hotkey" = "Hotkey";
|
||||
|
||||
/* In files: prefs.py:464; */
|
||||
/* prefs.py: macOS Preferences > Configuration - restart the app message; In files: prefs.py:493; */
|
||||
"Re-start {APP} to use shortcuts" = "Re-start {APP} to use shortcuts";
|
||||
|
||||
/* In files: prefs.py:472; */
|
||||
/* prefs.py: macOS - Configuration - need to grant the app permission for keyboard shortcuts; In files: prefs.py:502; */
|
||||
"{APP} needs permission to use shortcuts" = "{APP} needs permission to use shortcuts";
|
||||
|
||||
/* In files: prefs.py:477; */
|
||||
/* prefs.py: Shortcut settings button on OSX; In files: prefs.py:507; */
|
||||
"Open System Preferences" = "Open System Preferences";
|
||||
|
||||
/* In files: prefs.py:497; */
|
||||
/* prefs.py: Configuration - Act on hotkey only when ED is in foreground; In files: prefs.py:529; */
|
||||
"Only when Elite: Dangerous is the active app" = "Only when Elite: Dangerous is the active app";
|
||||
|
||||
/* In files: prefs.py:507; */
|
||||
/* prefs.py: Configuration - play sound when hotkey used; In files: prefs.py:540; */
|
||||
"Play sound" = "Play sound";
|
||||
|
||||
/* In files: prefs.py:521; */
|
||||
/* prefs.py: Configuration - disable checks for app updates when in-game; In files: prefs.py:555; */
|
||||
"Disable Automatic Application Updates Check when in-game" = "Disable Automatic Application Updates Check when in-game";
|
||||
|
||||
/* In files: prefs.py:533; */
|
||||
/* prefs.py: Label for preferred shipyard, system and station 'providers'; In files: prefs.py:568; */
|
||||
"Preferred websites" = "Preferred websites";
|
||||
|
||||
/* In files: prefs.py:543; */
|
||||
/* prefs.py: Label for Shipyard provider selection; In files: prefs.py:579; */
|
||||
"Shipyard" = "Shipyard";
|
||||
|
||||
/* In files: prefs.py:554; */
|
||||
/* prefs.py: Label for checkbox to utilise alternative Coriolis URL method; In files: prefs.py:591; */
|
||||
"Use alternate URL method" = "Use alternate URL method";
|
||||
|
||||
/* In files: prefs.py:604; */
|
||||
/* prefs.py: Configuration - Label for selection of Log Level; In files: prefs.py:644; */
|
||||
"Log Level" = "Log Level";
|
||||
|
||||
/* In files: prefs.py:631; */
|
||||
/* prefs.py: Label for 'Configuration' tab in Settings; In files: prefs.py:672; */
|
||||
"Configuration" = "Configuration";
|
||||
|
||||
/* In files: prefs.py:642; */
|
||||
/* prefs.py: Label for Settings > Appeareance > selection of 'normal' text colour; In files: prefs.py:685; */
|
||||
"Normal text" = "Normal text";
|
||||
|
||||
/* In files: prefs.py:643; */
|
||||
/* prefs.py: Label for Settings > Appeareance > selection of 'highlightes' text colour; In files: prefs.py:687; */
|
||||
"Highlighted text" = "Highlighted text";
|
||||
|
||||
/* In files: prefs.py:651; */
|
||||
/* prefs.py: Appearance - Label for selection of application display language; In files: prefs.py:696; */
|
||||
"Language" = "Language";
|
||||
|
||||
/* In files: prefs.py:660; */
|
||||
/* prefs.py: Label for Settings > Appearance > Theme selection; In files: prefs.py:706; */
|
||||
"Theme" = "Theme";
|
||||
|
||||
/* In files: prefs.py:669; */
|
||||
/* prefs.py: Label for 'Dark' theme radio button; In files: prefs.py:717; */
|
||||
"Dark" = "Dark";
|
||||
|
||||
/* In files: prefs.py:675; */
|
||||
/* prefs.py: Label for 'Transparent' theme radio button; In files: prefs.py:724; */
|
||||
"Transparent" = "Transparent";
|
||||
|
||||
/* In files: prefs.py:719; */
|
||||
/* prefs.py: Appearance - Label for selection of UI scaling; In files: prefs.py:770; */
|
||||
"UI Scale Percentage" = "UI Scale Percentage";
|
||||
|
||||
/* In files: prefs.py:739; */
|
||||
/* prefs.py: Appearance - Help/hint text for UI scaling selection; In files: prefs.py:791; */
|
||||
"100 means Default{CR}Restart Required for{CR}changes to take effect!" = "100 means Default{CR}Restart Required for{CR}changes to take effect!";
|
||||
|
||||
/* In files: prefs.py:748; */
|
||||
/* prefs.py: Appearance - Label for selection of main window transparency; In files: prefs.py:801; */
|
||||
"Main window transparency" = "Main window transparency";
|
||||
|
||||
/* In files: prefs.py:767:770; */
|
||||
/* prefs.py: Appearance - Help/hint text for Main window transparency selection; In files: prefs.py:821:824; */
|
||||
"100 means fully opaque.{CR}Window is updated in real time" = "100 means fully opaque.{CR}Window is updated in real time";
|
||||
|
||||
/* In files: prefs.py:804; */
|
||||
/* prefs.py: Label for Settings > Appearance tab; In files: prefs.py:860; */
|
||||
"Appearance" = "Appearance";
|
||||
|
||||
/* In files: prefs.py:815; */
|
||||
/* prefs.py: Label for location of third-party plugins folder; In files: prefs.py:875; */
|
||||
"Plugins folder" = "Plugins folder";
|
||||
|
||||
/* In files: prefs.py:823; */
|
||||
/* prefs.py: Label on button used to open a filesystem folder; In files: prefs.py:882; */
|
||||
"Open" = "Open";
|
||||
|
||||
/* In files: prefs.py:830; */
|
||||
/* prefs.py: Tip/label about how to disable plugins; In files: prefs.py:890; */
|
||||
"Tip: You can disable a plugin by{CR}adding '{EXT}' to its folder name" = "Tip: You can disable a plugin by{CR}adding '{EXT}' to its folder name";
|
||||
|
||||
/* In files: prefs.py:840; */
|
||||
/* prefs.py: Label on list of enabled plugins; In files: prefs.py:901; */
|
||||
"Enabled Plugins" = "Enabled Plugins";
|
||||
|
||||
/* In files: prefs.py:859; */
|
||||
/* prefs.py: Plugins - Label for list of 'enabled' plugins that don't work with Python 3.x; In files: prefs.py:921; */
|
||||
"Plugins Without Python 3.x Support:" = "Plugins Without Python 3.x Support:";
|
||||
|
||||
/* In files: prefs.py:866; */
|
||||
/* prefs.py: Plugins - Label on URL to documentation about migrating plugins from Python 2.7; In files: prefs.py:929; */
|
||||
"Information on migrating plugins" = "Information on migrating plugins";
|
||||
|
||||
/* In files: prefs.py:880; */
|
||||
/* prefs.py: Lable on list of user-disabled plugins; In files: prefs.py:944; */
|
||||
"Disabled Plugins" = "Disabled Plugins";
|
||||
|
||||
/* stats.py: Cmdr stats; In files: stats.py:51; */
|
||||
@ -616,17 +625,8 @@
|
||||
/* stats.py: Power rank; In files: stats.py:160; */
|
||||
"Rating 5" = "Rating 5";
|
||||
|
||||
/* stats.py: Status dialog subtitle - CR value of ship; In files: stats.py:366; */
|
||||
/* stats.py: Status dialog subtitle - CR value of ship; In files: stats.py:367; */
|
||||
"Value" = "Value";
|
||||
|
||||
/* stats.py: Status dialog title; In files: stats.py:375; */
|
||||
/* stats.py: Status dialog title; In files: stats.py:376; */
|
||||
"Ships" = "Ships";
|
||||
|
||||
/* EDDN returned schema too old warning [plugins/eddn.py] */
|
||||
"EDDN Error: EDMC is too old for EDDN. Please update." = "EDDN Error: EDMC is too old for EDDN. Please update.";
|
||||
|
||||
/* EDDN returned 400 status code [plugins/eddn.py] */
|
||||
"EDDN Error: Validation Failed (EDMC Too Old?). See Log" = "EDDN Error: Validation Failed (EDMC Too Old?). See Log";
|
||||
|
||||
/* EDDN returned unknown HTTP status code [plugins/eddn.py] */
|
||||
"EDDN Error: Returned {STATUS} status code" = "EDDN Error: Returned {STATUS} status code";
|
||||
|
1171
L10n/es.strings
1171
L10n/es.strings
File diff suppressed because it is too large
Load Diff
1101
L10n/fi.strings
1101
L10n/fi.strings
File diff suppressed because it is too large
Load Diff
959
L10n/fr.strings
959
L10n/fr.strings
File diff suppressed because it is too large
Load Diff
929
L10n/hu.strings
929
L10n/hu.strings
@ -1,510 +1,509 @@
|
||||
/* Language name */
|
||||
"!Language" = "Magyar";
|
||||
|
||||
/* App menu entry on OSX. [EDMarketConnector.py] */
|
||||
"About {APP}" = "Az {APP} névjegye";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Admiral" = "Admirális";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Aimless" = "Céltalan";
|
||||
|
||||
/* Appearance setting. [EDMarketConnector.py] */
|
||||
"Always on top" = "Mindig felül";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Amateur" = "Amatőr";
|
||||
|
||||
/* EDSM setting. [edsm.py] */
|
||||
"API Key" = "API kulcs";
|
||||
|
||||
/* Tab heading in settings. [prefs.py] */
|
||||
"Appearance" = "Megjelenés";
|
||||
|
||||
/* Successfully authenticated with the Frontier website. [EDMarketConnector.py] */
|
||||
"Authentication successful" = "A hitelesítés sikerült";
|
||||
|
||||
/* Output setting. [prefs.py] */
|
||||
"Automatically update on docking" = "Automatikusan frissit dokkolásnál";
|
||||
|
||||
/* Cmdr stats. [stats.py] */
|
||||
"Balance" = "Egyenleg";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Baron" = "Báró";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Broker" = "Bróker";
|
||||
|
||||
/* Folder selection button on Windows. [prefs.py] */
|
||||
"Browse..." = "Böngész";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Cadet" = "Kadét";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Champion" = "Bajnok";
|
||||
|
||||
/* Folder selection button on OSX. [prefs.py] */
|
||||
"Change..." = "Módosítás...";
|
||||
|
||||
/* Menu item. [EDMarketConnector.py] */
|
||||
"Check for Updates..." = "Frissítések keresése";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Chief Petty Officer" = "Törzs zászlós";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"Cmdr" = "Parancsnok";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Combat" = "Harc";
|
||||
|
||||
/* EDSM setting. [edsm.py] */
|
||||
"Commander Name" = "Parancsnok név";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Competent" = "Képesített";
|
||||
|
||||
/* Tab heading in settings. [prefs.py] */
|
||||
"Configuration" = "Konfiguráció";
|
||||
|
||||
/* Update button in main window. [EDMarketConnector.py] */
|
||||
"cooldown {SS}s" = "Lehűl {SS} másodperc";
|
||||
|
||||
/* As in Copy and Paste. [EDMarketConnector.py] */
|
||||
"Copy" = "Másol";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Count" = "Számol";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"CQC" = "CQC";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Dangerous" = "Veszélyes";
|
||||
|
||||
/* Appearance theme setting. [prefs.py] */
|
||||
"Dark" = "Sötét";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Deadly" = "Halálos";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Dealer" = "Kereskedő";
|
||||
|
||||
/* Appearance theme and language setting. [l10n.py] */
|
||||
"Default" = "Alap";
|
||||
|
||||
/* Output setting under 'Send system and scan data to the Elite Dangerous Data Network' new in E:D 2.2. [eddn.py] */
|
||||
"Delay sending until docked" = "Küldés késletetése amig dokkolsz";
|
||||
|
||||
/* List of plugins in settings. [prefs.py] */
|
||||
"Disabled Plugins" = "Plugin kikapcsolása";
|
||||
|
||||
/* Help menu item. [EDMarketConnector.py] */
|
||||
"Documentation" = "Dokumentáció";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Duke" = "Herceg";
|
||||
|
||||
/* Location of the new Journal file in E:D 2.2. [EDMarketConnector.py] */
|
||||
"E:D journal file location" = "E:D journal fájl helye";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Earl" = "Gróf";
|
||||
|
||||
/* Menu title. [EDMarketConnector.py] */
|
||||
"Edit" = "Szerkeszt";
|
||||
|
||||
/* Top rank. [stats.py] */
|
||||
"Elite" = "Elit";
|
||||
|
||||
/* Section heading in settings. [edsm.py] */
|
||||
"Elite Dangerous Star Map credentials" = "Elite Dangerous Csillag térkép hitelesítése";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Empire" = "Birodalom";
|
||||
|
||||
/* List of plugins in settings. [prefs.py] */
|
||||
"Enabled Plugins" = "Pluginok engedélyezése";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Ensign" = "Zászlós";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Entrepreneur" = "Vállalkozó";
|
||||
|
||||
/* [eddn.py] */
|
||||
"Error: Can't connect to EDDN" = "Hiba:Nem lehet kapcsolódni az EDDN-hez";
|
||||
|
||||
/* [edsm.py] */
|
||||
"Error: Can't connect to EDSM" = "Hiba:nem lehet kapcsólodni az EDSM-hez";
|
||||
|
||||
/* [inara.py] */
|
||||
"Error: Can't connect to Inara" = "Hiba:Nem lehet kapcsolódni az Inarához";
|
||||
|
||||
/* [edsm.py] */
|
||||
"Error: EDSM {MSG}" = "Hiba:EDSM {MSG}";
|
||||
|
||||
|
||||
/* OLD: Raised when cannot contact the Companion API server. [companion.py] */
|
||||
"Error: Frontier server is down" = "Hiba:Frontier szerver nem elérhető";
|
||||
|
||||
/* Raised when Companion API server is returning old data, e.g. when the servers are too busy. [companion.py] */
|
||||
/* companion.py: Frontier CAPI data doesn't agree with latest Journal game location; In files: companion.py:190; */
|
||||
"Error: Frontier server is lagging" = "Hiba:Frontier szerver laggol";
|
||||
|
||||
/* companion.py: Generic "something went wrong with Frontier Auth" error; In files: companion.py:214; */
|
||||
"Error: Invalid Credentials" = "Hiba:Érvénytelen hitelesítő adatok";
|
||||
|
||||
/* companion.py: Frontier CAPI authorisation not for currently game-active commander; In files: companion.py:230; */
|
||||
"Error: Wrong Cmdr" = "Hiba:Rossz parancsnok";
|
||||
|
||||
|
||||
/* [inara.py] */
|
||||
"Error: Can't connect to Inara" = "Hiba:Nem lehet kapcsolódni az Inarához";
|
||||
/* EDMarketConnector.py: Update button in main window; In files: EDMarketConnector.py:424; EDMarketConnector.py:718; EDMarketConnector.py:1302; */
|
||||
"Update" = "Frissítés";
|
||||
|
||||
/* EDMarketConnector.py: Appearance - Label for checkbox to select if application always on top; prefs.py: Appearance - Label for checkbox to select if application always on top; In files: EDMarketConnector.py:507; prefs.py:843; */
|
||||
"Always on top" = "Mindig felül";
|
||||
|
||||
/* EDMarketConnector.py: Label for commander name in main window; edsm.py: Game Commander name label in EDSM settings; stats.py: Cmdr stats; theme.py: Label for commander name in main window; In files: EDMarketConnector.py:712; edsm.py:219; stats.py:50; theme.py:227; */
|
||||
"Cmdr" = "Parancsnok";
|
||||
|
||||
/* EDMarketConnector.py: 'Ship' or multi-crew role label in main window, as applicable; EDMarketConnector.py: Multicrew role label in main window; In files: EDMarketConnector.py:714; EDMarketConnector.py:1072; */
|
||||
"Role" = "Szerep";
|
||||
|
||||
/* EDMarketConnector.py: 'Ship' or multi-crew role label in main window, as applicable; EDMarketConnector.py: 'Ship' label in main UI; stats.py: Status dialog subtitle; In files: EDMarketConnector.py:714; EDMarketConnector.py:1082; EDMarketConnector.py:1105; stats.py:363; */
|
||||
"Ship" = "Hajó";
|
||||
|
||||
/* EDMarketConnector.py: Label for 'System' line in main UI; prefs.py: Configuration - Label for selection of 'System' provider website; stats.py: Main window; In files: EDMarketConnector.py:716; prefs.py:605; stats.py:365; */
|
||||
"System" = "Rendszer";
|
||||
|
||||
/* EDMarketConnector.py: Label for 'Station' line in main UI; prefs.py: Configuration - Label for selection of 'Station' provider website; prefs.py: Appearance - Example 'Normal' text; stats.py: Status dialog subtitle; In files: EDMarketConnector.py:717; prefs.py:623; prefs.py:738; stats.py:366; */
|
||||
"Station" = "Állomás";
|
||||
|
||||
/* EDMarketConnector.py: 'File' menu title on OSX; EDMarketConnector.py: 'File' menu title; EDMarketConnector.py: 'File' menu; In files: EDMarketConnector.py:720; EDMarketConnector.py:735; EDMarketConnector.py:738; EDMarketConnector.py:1791; */
|
||||
"File" = "Fájl";
|
||||
|
||||
/* EDMarketConnector.py: 'Edit' menu title on OSX; EDMarketConnector.py: 'Edit' menu title; In files: EDMarketConnector.py:721; EDMarketConnector.py:736; EDMarketConnector.py:739; */
|
||||
"Edit" = "Szerkeszt";
|
||||
|
||||
/* EDMarketConnector.py: 'View' menu title on OSX; In files: EDMarketConnector.py:722; */
|
||||
"View" = "Nézet";
|
||||
|
||||
/* EDMarketConnector.py: 'Window' menu title on OSX; In files: EDMarketConnector.py:723; */
|
||||
"Window" = "Ablak";
|
||||
|
||||
/* EDMarketConnector.py: Help' menu title on OSX; EDMarketConnector.py: 'Help' menu title; In files: EDMarketConnector.py:724; EDMarketConnector.py:737; EDMarketConnector.py:740; */
|
||||
"Help" = "Segítség";
|
||||
|
||||
/* EDMarketConnector.py: App menu entry on OSX; EDMarketConnector.py: Help > About App; In files: EDMarketConnector.py:727; EDMarketConnector.py:753; EDMarketConnector.py:1347; */
|
||||
"About {APP}" = "Az {APP} névjegye";
|
||||
|
||||
/* EDMarketConnector.py: Help > Check for Updates...; In files: EDMarketConnector.py:729; EDMarketConnector.py:752; */
|
||||
"Check for Updates..." = "Frissítések keresése";
|
||||
|
||||
/* EDMarketConnector.py: File > Save Raw Data...; In files: EDMarketConnector.py:730; EDMarketConnector.py:744; */
|
||||
"Save Raw Data..." = "Nyers adat elmentése";
|
||||
|
||||
/* EDMarketConnector.py: File > Status; stats.py: Status dialog title; In files: EDMarketConnector.py:731; EDMarketConnector.py:743; stats.py:360; */
|
||||
"Status" = "Státusz";
|
||||
|
||||
/* EDMarketConnector.py: Help > Privacy Policy; In files: EDMarketConnector.py:732; EDMarketConnector.py:750; */
|
||||
"Privacy Policy" = "Adatvédelmi irányelvek";
|
||||
|
||||
/* EDMarketConnector.py: Help > Release Notes; In files: EDMarketConnector.py:733; EDMarketConnector.py:751; EDMarketConnector.py:1381; */
|
||||
"Release Notes" = "Kiadási megjegyzések";
|
||||
|
||||
/* EDMarketConnector.py: File > Settings; prefs.py: File > Settings (macOS); In files: EDMarketConnector.py:745; EDMarketConnector.py:1792; prefs.py:254; */
|
||||
"Settings" = "Beállítások";
|
||||
|
||||
/* EDMarketConnector.py: File > Exit; In files: EDMarketConnector.py:746; */
|
||||
"Exit" = "Kilépés";
|
||||
|
||||
/* EDMarketConnector.py: Help > Documentation; In files: EDMarketConnector.py:749; */
|
||||
"Documentation" = "Dokumentáció";
|
||||
|
||||
/* EDMarketConnector.py: Label for 'Copy' as in 'Copy and Paste'; ttkHyperlinkLabel.py: Label for 'Copy' as in 'Copy and Paste'; In files: EDMarketConnector.py:756; ttkHyperlinkLabel.py:42; */
|
||||
"Copy" = "Másol";
|
||||
|
||||
/* EDMarketConnector.py: Status - Attempting to get a Frontier Auth Access Token; In files: EDMarketConnector.py:762; */
|
||||
"Logging in..." = "Bejelentkezés";
|
||||
|
||||
/* EDMarketConnector.py: Successfully authenticated with the Frontier website; In files: EDMarketConnector.py:778; EDMarketConnector.py:1215; */
|
||||
"Authentication successful" = "A hitelesítés sikerült";
|
||||
|
||||
/* EDMarketConnector.py: Player is not docked at a station, when we expect them to be; In files: EDMarketConnector.py:809; */
|
||||
"You're not docked at a station!" = " Nem dokkoltál az állomáson";
|
||||
|
||||
/* EDMarketConnector.py: Status - Either no market or no modules data for station from Frontier CAPI; In files: EDMarketConnector.py:817; */
|
||||
"Station doesn't have anything!" = "Az állomáson nincs semmi!";
|
||||
|
||||
/* EDMarketConnector.py: Status - No station market data from Frontier CAPI; In files: EDMarketConnector.py:822; */
|
||||
"Station doesn't have a market!" = "Nincs piac az állomáson!";
|
||||
|
||||
/* EDMarketConnector.py: Status - Attempting to retrieve data from Frontier CAPI; EDMarketConnector.py: Status - Attempting to retrieve data from Frontier CAPI to save to file; stats.py: Fetching data from Frontier CAPI in order to display on File > Status; In files: EDMarketConnector.py:867; EDMarketConnector.py:1428; stats.py:279; */
|
||||
"Fetching data..." = "Adatok lekérése";
|
||||
|
||||
/* EDMarketConnector.py: We didn't have the commander name when we should have; stats.py: Unknown commander; In files: EDMarketConnector.py:884; stats.py:297; */
|
||||
"Who are you?!" = "Ki vagy?";
|
||||
|
||||
/* EDMarketConnector.py: We don't know where the commander is, when we should; stats.py: Unknown location; In files: EDMarketConnector.py:890; stats.py:307; */
|
||||
"Where are you?!" = "Hol vagy?";
|
||||
|
||||
/* EDMarketConnector.py: We don't know what ship the commander is in, when we should; stats.py: Unknown ship; In files: EDMarketConnector.py:894; stats.py:312; */
|
||||
"What are you flying?!" = "Mivel repülsz?";
|
||||
|
||||
/* EDMarketConnector.py: Time when we last obtained Frontier CAPI data; In files: EDMarketConnector.py:1026; */
|
||||
"Last updated at %H:%M:%S" = "Utoljára frissítve %H:%M:%S";
|
||||
|
||||
/* EDMarketConnector.py: Multicrew role; In files: EDMarketConnector.py:1052; */
|
||||
"Fighter" = "Vadászgép";
|
||||
|
||||
/* EDMarketConnector.py: Multicrew role; In files: EDMarketConnector.py:1053; */
|
||||
"Gunner" = "Lövész";
|
||||
|
||||
/* EDMarketConnector.py: Multicrew role; In files: EDMarketConnector.py:1054; */
|
||||
"Helm" = "Kormányos";
|
||||
|
||||
/* EDMarketConnector.py: Cooldown on 'Update' button; In files: EDMarketConnector.py:1298; */
|
||||
"cooldown {SS}s" = "Lehűl {SS} másodperc";
|
||||
|
||||
/* EDMarketConnector.py: Generic 'OK' button label; prefs.py: 'OK' button on Settings/Preferences window; In files: EDMarketConnector.py:1407; prefs.py:304; */
|
||||
"OK" = "Ok";
|
||||
|
||||
/* EDMarketConnector.py: Settings > Plugins tab; prefs.py: Label on Settings > Plugins tab; In files: EDMarketConnector.py:1790; prefs.py:953; */
|
||||
"Plugins" = "Pluginok";
|
||||
|
||||
/* l10n.py: The system default language choice in Settings > Appearance; prefs.py: Settings > Configuration - Label on 'reset journal files location to default' button; prefs.py: The system default language choice in Settings > Appearance; prefs.py: Label for 'Default' theme radio button; In files: l10n.py:194; prefs.py:466; prefs.py:678; prefs.py:711; */
|
||||
"Default" = "Alap";
|
||||
|
||||
/* eddn.py: Status text shown while attempting to send data; In files: eddn.py:215; eddn.py:619; eddn.py:969; */
|
||||
"Sending data to EDDN..." = "Adatok küldése az EDDN-nek...";
|
||||
|
||||
/* eddn.py: Error while trying to send data to EDDN; In files: eddn.py:264; eddn.py:907; eddn.py:942; eddn.py:981; */
|
||||
"Error: Can't connect to EDDN" = "Hiba:Nem lehet kapcsolódni az EDDN-hez";
|
||||
|
||||
/* eddn.py: Enable EDDN support for station data checkbox label; In files: eddn.py:699; */
|
||||
"Send station data to the Elite Dangerous Data Network" = "Állomás adatok küldése az EDDN-nek";
|
||||
|
||||
/* eddn.py: Enable EDDN support for system and other scan data checkbox label; In files: eddn.py:710; */
|
||||
"Send system and scan data to the Elite Dangerous Data Network" = "Rendszer és szken adatok küldése az EDDN-nek";
|
||||
|
||||
/* eddn.py: EDDN delay sending until docked option is on, this message notes that a send was skipped due to this; In files: eddn.py:721; */
|
||||
"Delay sending until docked" = "Küldés késletetése amig dokkolsz";
|
||||
|
||||
/* edsm.py: Settings>EDSM - Label on checkbox for 'send data'; In files: edsm.py:198; */
|
||||
"Send flight log and Cmdr status to EDSM" = "Repülési napló és Parancsnok státusz küldése az EDSM-nek";
|
||||
|
||||
/* edsm.py: Settings>EDSM - Label on header/URL to EDSM API key page; In files: edsm.py:208; */
|
||||
"Elite Dangerous Star Map credentials" = "Elite Dangerous Csillag térkép hitelesítése";
|
||||
|
||||
/* edsm.py: EDSM Commander name label in EDSM settings; In files: edsm.py:227; */
|
||||
"Commander Name" = "Parancsnok név";
|
||||
|
||||
/* edsm.py: EDSM API key label; inara.py: Inara API key label; In files: edsm.py:235; inara.py:237; */
|
||||
"API Key" = "API kulcs";
|
||||
|
||||
/* edsm.py: We have no data on the current commander; prefs.py: No hotkey/shortcut set; stats.py: No rank; In files: edsm.py:262; prefs.py:518; prefs.py:1156; prefs.py:1189; stats.py:117; stats.py:136; stats.py:155; stats.py:172; */
|
||||
"None" = "Egyik sem";
|
||||
|
||||
/* edsm.py: EDSM Plugin - Error message from EDSM API; In files: edsm.py:640; edsm.py:745; */
|
||||
"Error: EDSM {MSG}" = "Hiba:EDSM {MSG}";
|
||||
|
||||
/* edsm.py: EDSM Plugin - Error connecting to EDSM API; In files: edsm.py:677; edsm.py:740; */
|
||||
"Error: Can't connect to EDSM" = "Hiba:nem lehet kapcsólodni az EDSM-hez";
|
||||
|
||||
/* inara.py: Checkbox to enable INARA API Usage; In files: inara.py:216; */
|
||||
"Send flight log and Cmdr status to Inara" = "Repülési napló és Parancsnok státusz küldése az Inarának";
|
||||
|
||||
/* inara.py: Text for INARA API keys link ( goes to https://inara.cz/settings-api ); In files: inara.py:228; */
|
||||
"Inara credentials" = "Inara hitelesitő adatok";
|
||||
|
||||
|
||||
/* Raised when the Companion API server thinks that the user has not purchased E:D. i.e. doesn't have the correct 'SKU'. [companion.py] */
|
||||
"Error: Frontier server SKU problem" = "Hiba:Frontier szerver SKU probléma";
|
||||
|
||||
/* [inara.py] */
|
||||
/* inara.py: INARA API returned some kind of error (error message will be contained in {MSG}); In files: inara.py:1549; inara.py:1562; */
|
||||
"Error: Inara {MSG}" = "Hiba:Inara {MSG}";
|
||||
|
||||
/* [companion.py] */
|
||||
"Error: Invalid Credentials" = "Hiba:Érvénytelen hitelesítő adatok";
|
||||
|
||||
/* Raised when the user has multiple accounts and the username/password setting is not for the account they're currently playing OR the user has reset their Cmdr and the Companion API server is still returning data for the old Cmdr. [companion.py] */
|
||||
"Error: Wrong Cmdr" = "Hiba:Rossz parancsnok";
|
||||
|
||||
/* Item in the File menu on Windows. [EDMarketConnector.py] */
|
||||
"Exit" = "Kilépés";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Expert" = "Szakértő";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Explorer" = "Felfedező";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Federation" = "Föderáció";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Fetching data..." = "Adatok lekérése";
|
||||
|
||||
/* Multicrew role. [EDMarketConnector.py] */
|
||||
"Fighter" = "Vadászgép";
|
||||
|
||||
/* Menu title. [EDMarketConnector.py] */
|
||||
"File" = "Fájl";
|
||||
|
||||
/* Section heading in settings. [prefs.py] */
|
||||
"File location" = "Fálj helye";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Gladiator" = "Gladiátor";
|
||||
|
||||
/* Multicrew role. [EDMarketConnector.py] */
|
||||
"Gunner" = "Lövész";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Harmless" = "ártalmatlan";
|
||||
|
||||
/* Multicrew role. [EDMarketConnector.py] */
|
||||
"Helm" = "Kormányos";
|
||||
|
||||
/* Menu title. [EDMarketConnector.py] */
|
||||
"Help" = "Segítség";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Helpless" = "tehetetlen";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Hero" = "Hős";
|
||||
|
||||
/* Dark theme color setting. [prefs.py] */
|
||||
"Highlighted text" = "Kiemelt szöveg";
|
||||
|
||||
/* Hotkey/Shortcut settings prompt on Windows. [prefs.py] */
|
||||
"Hotkey" = "Gyorsgomb";
|
||||
|
||||
/* Section heading in settings. [inara.py] */
|
||||
"Inara credentials" = "Inara hitelesitő adatok";
|
||||
|
||||
/* Hotkey/Shortcut settings prompt on OSX. [prefs.py] */
|
||||
"Keyboard shortcut" = "Billentyűparancsok";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"King" = "Király";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Knight" = "Lovag";
|
||||
|
||||
/* Appearance setting prompt. [prefs.py] */
|
||||
"Language" = "Nyelv";
|
||||
|
||||
/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */
|
||||
"Last updated at %H:%M:%S" = "Utoljára frissítve %H:%M:%S";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Lieutenant" = "Hadnagy";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Lieutenant Commander" = "Főhadnagy";
|
||||
|
||||
/* Cmdr stats. [stats.py] */
|
||||
"Loan" = "Kölcsön";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Logging in..." = "Bejelentkezés";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Lord" = "Lord";
|
||||
|
||||
/* [prefs.py] */
|
||||
"Market data in CSV format file" = "Piaci adat CSV fájlban";
|
||||
|
||||
/* [prefs.py] */
|
||||
"Market data in Trade Dangerous format file" = "Piaci adat Trade Dangerous fájlban";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Marquis" = "Őrgróf";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Master" = "Mester";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Merchant" = "Kereskedő";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Midshipman" = "Tengerészkadét";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Mostly Aimless" = "Tøbnyire céltalan";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Mostly Harmless" = "Többnyire ártalmatlan";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Mostly Helpless" = "Többnyire tehetetlen";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Mostly Penniless" = "Többnyire nincstelen";
|
||||
|
||||
/* No hotkey/shortcut currently defined. [prefs.py] */
|
||||
"None" = "Egyik sem";
|
||||
|
||||
/* Dark theme color setting. [prefs.py] */
|
||||
"Normal text" = "Normál txt";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Novice" = "Kezdő";
|
||||
|
||||
/* [prefs.py] */
|
||||
"OK" = "Ok";
|
||||
|
||||
/* Hotkey/Shortcut setting. [prefs.py] */
|
||||
"Only when Elite: Dangerous is the active app" = "Csak ha az Elite Dangerous fut";
|
||||
|
||||
/* Button that opens a folder in Explorer/Finder. [prefs.py] */
|
||||
"Open" = "Nyisd ki";
|
||||
|
||||
/* Shortcut settings button on OSX. [prefs.py] */
|
||||
"Open System Preferences" = "Rendszerbeállítások megnyitáss";
|
||||
|
||||
/* Tab heading in settings. [prefs.py] */
|
||||
"Output" = "Kimenet";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Outsider" = "Kivűlálló";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Pathfinder" = "Útkereső";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Peddler" = "Házaló ügynők";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Penniless" = "Nincstelen";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Petty Officer" = "Tizedes";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Pioneer" = "Utász";
|
||||
|
||||
/* Hotkey/Shortcut setting. [prefs.py] */
|
||||
"Play sound" = "Zene be";
|
||||
|
||||
/* [prefs.py] */
|
||||
"Please choose what data to save" = "Kérem válassza ki a menteni kivánt adatokat.";
|
||||
|
||||
/* Tab heading in settings. [prefs.py] */
|
||||
"Plugins" = "Pluginok";
|
||||
|
||||
/* Section heading in settings. [prefs.py] */
|
||||
"Plugins folder" = "Plugin mappa";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Post Captain" = "Ellentengernagy";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Post Commander" = "Ezredes";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Powerplay" = "Powerplay";
|
||||
|
||||
/* [prefs.py] */
|
||||
/* prefs.py: File > Preferences menu entry for macOS; In files: prefs.py:250; */
|
||||
"Preferences" = "Beállítások";
|
||||
|
||||
/* Settings prompt for preferred ship loadout, system and station info websites. [prefs.py] */
|
||||
"Preferred websites" = "Preferált weboldalak";
|
||||
/* prefs.py: Settings > Output - choosing what data to save to files; In files: prefs.py:346; */
|
||||
"Please choose what data to save" = "Kérem válassza ki a menteni kivánt adatokat.";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Prince" = "Herceg";
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:352; */
|
||||
"Market data in CSV format file" = "Piaci adat CSV fájlban";
|
||||
|
||||
/* Help menu item. [EDMarketConnector.py] */
|
||||
"Privacy Policy" = "Adatvédelmi irányelvek";
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:361; */
|
||||
"Market data in Trade Dangerous format file" = "Piaci adat Trade Dangerous fájlban";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Professional" = "Szakember";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Ranger" = "Vándor";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 1" = "Osztákgozás 1";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 2" = "Osztályozás 2";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 3" = "Osztályozás 3";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 4" = "Osztályozás 4";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 5" = "Osztályozás 5";
|
||||
|
||||
/* Shortcut settings prompt on OSX. [prefs.py] */
|
||||
"Re-start {APP} to use shortcuts" = "Újranidítás {APP} parancsikonok használatával";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Rear Admiral" = "FőEllentengernagy";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Recruit" = "Újonc";
|
||||
|
||||
/* Help menu item. [EDMarketConnector.py] */
|
||||
"Release Notes" = "Kiadási megjegyzések";
|
||||
|
||||
/* Multicrew role label in main window. [EDMarketConnector.py] */
|
||||
"Role" = "Szerep";
|
||||
|
||||
/* Menu item. [EDMarketConnector.py] */
|
||||
"Save Raw Data..." = "Nyers adat elmentése";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Scout" = "Felderítő";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Semi Professional" = "Fél profi";
|
||||
|
||||
/* [edsm.py] */
|
||||
"Send flight log and Cmdr status to EDSM" = "Repülési napló és Parancsnok státusz küldése az EDSM-nek";
|
||||
|
||||
/* [inara.py] */
|
||||
"Send flight log and Cmdr status to Inara" = "Repülési napló és Parancsnok státusz küldése az Inarának";
|
||||
|
||||
/* Output setting. [eddn.py] */
|
||||
"Send station data to the Elite Dangerous Data Network" = "Állomás adatok küldése az EDDN-nek";
|
||||
|
||||
/* Output setting new in E:D 2.2. [eddn.py] */
|
||||
"Send system and scan data to the Elite Dangerous Data Network" = "Rendszer és szken adatok küldése az EDDN-nek";
|
||||
|
||||
/* [eddn.py] */
|
||||
"Sending data to EDDN..." = "Adatok küldése az EDDN-nek...";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Serf" = "Jobbágy";
|
||||
|
||||
/* Item in the File menu on Windows. [EDMarketConnector.py] */
|
||||
"Settings" = "Beállítások";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"Ship" = "Hajó";
|
||||
|
||||
/* Output setting. [prefs.py] */
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:371; */
|
||||
"Ship loadout" = "Hajó felszerelése";
|
||||
|
||||
/* Status dialog title. [stats.py] */
|
||||
"Ships" = "Hajók";
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:381; */
|
||||
"Automatically update on docking" = "Automatikusan frissit dokkolásnál";
|
||||
|
||||
/* Setting to decide which ship outfitting website to link to - either E:D Shipyard or Coriolis. [prefs.py] */
|
||||
/* prefs.py: Settings > Output - Label for "where files are located"; In files: prefs.py:390; prefs.py:409; */
|
||||
"File location" = "Fálj helye";
|
||||
|
||||
/* prefs.py: macOS Preferences - files location selection button; In files: prefs.py:398; prefs.py:448; */
|
||||
"Change..." = "Módosítás...";
|
||||
|
||||
/* prefs.py: NOT-macOS Settings - files location selection button; prefs.py: NOT-macOS Setting - files location selection button; In files: prefs.py:401; prefs.py:451; */
|
||||
"Browse..." = "Böngész";
|
||||
|
||||
/* prefs.py: Label for 'Output' Settings/Preferences tab; In files: prefs.py:416; */
|
||||
"Output" = "Kimenet";
|
||||
|
||||
/* prefs.py: Settings > Configuration - Label for Journal files location; In files: prefs.py:442; prefs.py:457; */
|
||||
"E:D journal file location" = "E:D journal fájl helye";
|
||||
|
||||
/* prefs.py: Hotkey/Shortcut settings prompt on OSX; In files: prefs.py:482; */
|
||||
"Keyboard shortcut" = "Billentyűparancsok";
|
||||
|
||||
/* prefs.py: Hotkey/Shortcut settings prompt on Windows; In files: prefs.py:484; */
|
||||
"Hotkey" = "Gyorsgomb";
|
||||
|
||||
/* prefs.py: macOS Preferences > Configuration - restart the app message; In files: prefs.py:493; */
|
||||
"Re-start {APP} to use shortcuts" = "Újranidítás {APP} parancsikonok használatával";
|
||||
|
||||
/* prefs.py: macOS - Configuration - need to grant the app permission for keyboard shortcuts; In files: prefs.py:502; */
|
||||
"{APP} needs permission to use shortcuts" = "{APP} engedély szükséges a parancsikon használatához";
|
||||
|
||||
/* prefs.py: Shortcut settings button on OSX; In files: prefs.py:507; */
|
||||
"Open System Preferences" = "Rendszerbeállítások megnyitáss";
|
||||
|
||||
/* prefs.py: Configuration - Act on hotkey only when ED is in foreground; In files: prefs.py:529; */
|
||||
"Only when Elite: Dangerous is the active app" = "Csak ha az Elite Dangerous fut";
|
||||
|
||||
/* prefs.py: Configuration - play sound when hotkey used; In files: prefs.py:540; */
|
||||
"Play sound" = "Zene be";
|
||||
|
||||
/* prefs.py: Label for preferred shipyard, system and station 'providers'; In files: prefs.py:568; */
|
||||
"Preferred websites" = "Preferált weboldalak";
|
||||
|
||||
/* prefs.py: Label for Shipyard provider selection; In files: prefs.py:579; */
|
||||
"Shipyard" = "Hajógyár";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Squire" = "Földesúr";
|
||||
/* prefs.py: Label for 'Configuration' tab in Settings; In files: prefs.py:672; */
|
||||
"Configuration" = "Konfiguráció";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"Station" = "Állomás";
|
||||
/* prefs.py: Label for Settings > Appeareance > selection of 'normal' text colour; In files: prefs.py:685; */
|
||||
"Normal text" = "Normál txt";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Station doesn't have a market!" = "Nincs piac az állomáson!";
|
||||
/* prefs.py: Label for Settings > Appeareance > selection of 'highlightes' text colour; In files: prefs.py:687; */
|
||||
"Highlighted text" = "Kiemelt szöveg";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Station doesn't have anything!" = "Az állomáson nincs semmi!";
|
||||
/* prefs.py: Appearance - Label for selection of application display language; In files: prefs.py:696; */
|
||||
"Language" = "Nyelv";
|
||||
|
||||
/* Menu item. [EDMarketConnector.py] */
|
||||
"Status" = "Státusz";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Surveyor" = "Megfigyelő";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"System" = "Rendszer";
|
||||
|
||||
/* Appearance setting. [prefs.py] */
|
||||
/* prefs.py: Label for Settings > Appearance > Theme selection; In files: prefs.py:706; */
|
||||
"Theme" = "Téma";
|
||||
|
||||
/* Help text in settings. [prefs.py] */
|
||||
"Tip: You can disable a plugin by{CR}adding '{EXT}' to its folder name" = "Tipp:a pluginokat kikapcsolhatod hozzà{CR}adsz a mappa nevében egy '{EXT}'";
|
||||
/* prefs.py: Label for 'Dark' theme radio button; In files: prefs.py:717; */
|
||||
"Dark" = "Sötét";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Trade" = "Kereskedés";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Trailblazer" = "Útkereső";
|
||||
|
||||
/* Appearance theme setting. [prefs.py] */
|
||||
/* prefs.py: Label for 'Transparent' theme radio button; In files: prefs.py:724; */
|
||||
"Transparent" = "Átlárható";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
/* prefs.py: Label for Settings > Appearance tab; In files: prefs.py:860; */
|
||||
"Appearance" = "Megjelenés";
|
||||
|
||||
/* prefs.py: Label for location of third-party plugins folder; In files: prefs.py:875; */
|
||||
"Plugins folder" = "Plugin mappa";
|
||||
|
||||
/* prefs.py: Label on button used to open a filesystem folder; In files: prefs.py:882; */
|
||||
"Open" = "Nyisd ki";
|
||||
|
||||
/* prefs.py: Tip/label about how to disable plugins; In files: prefs.py:890; */
|
||||
"Tip: You can disable a plugin by{CR}adding '{EXT}' to its folder name" = "Tipp:a pluginokat kikapcsolhatod hozzà{CR}adsz a mappa nevében egy '{EXT}'";
|
||||
|
||||
/* prefs.py: Label on list of enabled plugins; In files: prefs.py:901; */
|
||||
"Enabled Plugins" = "Pluginok engedélyezése";
|
||||
|
||||
/* prefs.py: Lable on list of user-disabled plugins; In files: prefs.py:944; */
|
||||
"Disabled Plugins" = "Plugin kikapcsolása";
|
||||
|
||||
/* stats.py: Cmdr stats; In files: stats.py:51; */
|
||||
"Balance" = "Egyenleg";
|
||||
|
||||
/* stats.py: Cmdr stats; In files: stats.py:52; */
|
||||
"Loan" = "Kölcsön";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:57; */
|
||||
"Combat" = "Harc";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:58; */
|
||||
"Trade" = "Kereskedés";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:59; */
|
||||
"Explorer" = "Felfedező";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:60; */
|
||||
"CQC" = "CQC";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:61; */
|
||||
"Federation" = "Föderáció";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:62; */
|
||||
"Empire" = "Birodalom";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:63; */
|
||||
"Powerplay" = "Powerplay";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:71; */
|
||||
"Harmless" = "ártalmatlan";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:72; */
|
||||
"Mostly Harmless" = "Többnyire ártalmatlan";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:73; */
|
||||
"Novice" = "Kezdő";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:74; */
|
||||
"Competent" = "Képesített";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:75; */
|
||||
"Expert" = "Szakértő";
|
||||
|
||||
/* stats.py: Combat rank; stats.py: Empire rank; In files: stats.py:76; stats.py:139; */
|
||||
"Master" = "Mester";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:77; */
|
||||
"Dangerous" = "Veszélyes";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:78; */
|
||||
"Deadly" = "Halálos";
|
||||
|
||||
/* stats.py: Top rank; In files: stats.py:79; stats.py:90; stats.py:101; stats.py:112; */
|
||||
"Elite" = "Elit";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:82; */
|
||||
"Penniless" = "Nincstelen";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:83; */
|
||||
"Mostly Penniless" = "Többnyire nincstelen";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:84; */
|
||||
"Peddler" = "Házaló ügynők";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:85; */
|
||||
"Dealer" = "Kereskedő";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:86; */
|
||||
"Merchant" = "Kereskedő";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:87; */
|
||||
"Broker" = "Bróker";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:88; */
|
||||
"Entrepreneur" = "Vállalkozó";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:89; */
|
||||
"Tycoon" = "Iparmágnás";
|
||||
|
||||
/* Update button in main window. [EDMarketConnector.py] */
|
||||
"Update" = "Frissítés";
|
||||
/* stats.py: Explorer rank; In files: stats.py:93; */
|
||||
"Aimless" = "Céltalan";
|
||||
|
||||
/* Status dialog subtitle - CR value of ship. [stats.py] */
|
||||
"Value" = "Érték";
|
||||
/* stats.py: Explorer rank; In files: stats.py:94; */
|
||||
"Mostly Aimless" = "Tøbnyire céltalan";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Vice Admiral" = "Altengernagy";
|
||||
/* stats.py: Explorer rank; In files: stats.py:95; */
|
||||
"Scout" = "Felderítő";
|
||||
|
||||
/* Menu title on OSX. [EDMarketConnector.py] */
|
||||
"View" = "Nézet";
|
||||
/* stats.py: Explorer rank; In files: stats.py:96; */
|
||||
"Surveyor" = "Megfigyelő";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Viscount" = "Vicomte";
|
||||
/* stats.py: Explorer rank; In files: stats.py:97; */
|
||||
"Trailblazer" = "Útkereső";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
/* stats.py: Explorer rank; In files: stats.py:98; */
|
||||
"Pathfinder" = "Útkereső";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:99; */
|
||||
"Ranger" = "Vándor";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:100; */
|
||||
"Pioneer" = "Utász";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:104; */
|
||||
"Helpless" = "tehetetlen";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:105; */
|
||||
"Mostly Helpless" = "Többnyire tehetetlen";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:106; */
|
||||
"Amateur" = "Amatőr";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:107; */
|
||||
"Semi Professional" = "Fél profi";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:108; */
|
||||
"Professional" = "Szakember";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:109; */
|
||||
"Champion" = "Bajnok";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:110; */
|
||||
"Hero" = "Hős";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:111; */
|
||||
"Gladiator" = "Gladiátor";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:118; */
|
||||
"Recruit" = "Újonc";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:119; */
|
||||
"Cadet" = "Kadét";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:120; */
|
||||
"Midshipman" = "Tengerészkadét";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:121; */
|
||||
"Petty Officer" = "Tizedes";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:122; */
|
||||
"Chief Petty Officer" = "Törzs zászlós";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:123; */
|
||||
"Warrant Officer" = "Tiszthelyettes";
|
||||
|
||||
/* Shouldn't happen. [EDMarketConnector.py] */
|
||||
"What are you flying?!" = "Mivel repülsz?";
|
||||
/* stats.py: Federation rank; In files: stats.py:124; */
|
||||
"Ensign" = "Zászlós";
|
||||
|
||||
/* Shouldn't happen. [EDMarketConnector.py] */
|
||||
"Where are you?!" = "Hol vagy?";
|
||||
/* stats.py: Federation rank; In files: stats.py:125; */
|
||||
"Lieutenant" = "Hadnagy";
|
||||
|
||||
/* Shouldn't happen. [EDMarketConnector.py] */
|
||||
"Who are you?!" = "Ki vagy?";
|
||||
/* stats.py: Federation rank; In files: stats.py:126; */
|
||||
"Lieutenant Commander" = "Főhadnagy";
|
||||
|
||||
/* Menu title on OSX. [EDMarketConnector.py] */
|
||||
"Window" = "Ablak";
|
||||
/* stats.py: Federation rank; In files: stats.py:127; */
|
||||
"Post Commander" = "Ezredes";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"You're not docked at a station!" = " Nem dokkoltál az állomáson";
|
||||
/* stats.py: Federation rank; In files: stats.py:128; */
|
||||
"Post Captain" = "Ellentengernagy";
|
||||
|
||||
/* Shortcut settings prompt on OSX. [prefs.py] */
|
||||
"{APP} needs permission to use shortcuts" = "{APP} engedély szükséges a parancsikon használatához";
|
||||
/* stats.py: Federation rank; In files: stats.py:129; */
|
||||
"Rear Admiral" = "FőEllentengernagy";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:130; */
|
||||
"Vice Admiral" = "Altengernagy";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:131; */
|
||||
"Admiral" = "Admirális";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:137; */
|
||||
"Outsider" = "Kivűlálló";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:138; */
|
||||
"Serf" = "Jobbágy";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:140; */
|
||||
"Squire" = "Földesúr";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:141; */
|
||||
"Knight" = "Lovag";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:142; */
|
||||
"Lord" = "Lord";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:143; */
|
||||
"Baron" = "Báró";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:144; */
|
||||
"Viscount" = "Vicomte";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:145; */
|
||||
"Count" = "Számol";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:146; */
|
||||
"Earl" = "Gróf";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:147; */
|
||||
"Marquis" = "Őrgróf";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:148; */
|
||||
"Duke" = "Herceg";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:149; */
|
||||
"Prince" = "Herceg";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:150; */
|
||||
"King" = "Király";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:156; */
|
||||
"Rating 1" = "Osztákgozás 1";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:157; */
|
||||
"Rating 2" = "Osztályozás 2";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:158; */
|
||||
"Rating 3" = "Osztályozás 3";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:159; */
|
||||
"Rating 4" = "Osztályozás 4";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:160; */
|
||||
"Rating 5" = "Osztályozás 5";
|
||||
|
||||
/* stats.py: Status dialog subtitle - CR value of ship; In files: stats.py:367; */
|
||||
"Value" = "Érték";
|
||||
|
||||
/* stats.py: Status dialog title; In files: stats.py:376; */
|
||||
"Ships" = "Hajók";
|
||||
|
1086
L10n/it.strings
1086
L10n/it.strings
File diff suppressed because it is too large
Load Diff
1171
L10n/ja.strings
1171
L10n/ja.strings
File diff suppressed because it is too large
Load Diff
1171
L10n/ko.strings
1171
L10n/ko.strings
File diff suppressed because it is too large
Load Diff
923
L10n/lv.strings
923
L10n/lv.strings
@ -1,483 +1,482 @@
|
||||
/* Language name */
|
||||
"!Language" = "Latviešu";
|
||||
|
||||
/* App menu entry on OSX. [EDMarketConnector.py] */
|
||||
"About {APP}" = "Par {APP}";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Admiral" = "Admiral";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Aimless" = "Aimless";
|
||||
|
||||
/* Appearance setting. [EDMarketConnector.py] */
|
||||
"Always on top" = "Vienmēr virspusē";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Amateur" = "Amateur";
|
||||
|
||||
/* EDSM setting. [edsm.py] */
|
||||
"API Key" = "API atslēga";
|
||||
|
||||
/* Tab heading in settings. [prefs.py] */
|
||||
"Appearance" = "Izskats";
|
||||
|
||||
/* Successfully authenticated with the Frontier website. [EDMarketConnector.py] */
|
||||
"Authentication successful" = "Autentifikācija sekmīga";
|
||||
|
||||
/* Output setting. [prefs.py] */
|
||||
"Automatically update on docking" = "Automtiski atjaunoties nosēžoties.";
|
||||
|
||||
/* Cmdr stats. [stats.py] */
|
||||
"Balance" = "Bilance";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Baron" = "Baron";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Broker" = "Broker";
|
||||
|
||||
/* Folder selection button on Windows. [prefs.py] */
|
||||
"Browse..." = "Pārlūkot...";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Cadet" = "Cadet";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Champion" = "Champion";
|
||||
|
||||
/* Folder selection button on OSX. [prefs.py] */
|
||||
"Change..." = "Mainīt...";
|
||||
|
||||
/* Menu item. [EDMarketConnector.py] */
|
||||
"Check for Updates..." = "Pārbaudīt atjauninājumus...";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Chief Petty Officer" = "Chief Petty Officer";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"Cmdr" = "Cmdr";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Combat" = "Combat";
|
||||
|
||||
/* EDSM setting. [edsm.py] */
|
||||
"Commander Name" = "Komandiera vārds";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Competent" = "Competent";
|
||||
|
||||
/* Tab heading in settings. [prefs.py] */
|
||||
"Configuration" = "Konfigurācija";
|
||||
|
||||
/* Update button in main window. [EDMarketConnector.py] */
|
||||
"cooldown {SS}s" = "Atskaite {SS}";
|
||||
|
||||
/* As in Copy and Paste. [EDMarketConnector.py] */
|
||||
"Copy" = "Kopēt";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Count" = "Count";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"CQC" = "CQC";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Dangerous" = "Dangerous";
|
||||
|
||||
/* Appearance theme setting. [prefs.py] */
|
||||
"Dark" = "Tumša";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Deadly" = "Deadly";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Dealer" = "Dealer";
|
||||
|
||||
/* Appearance theme and language setting. [l10n.py] */
|
||||
"Default" = "Noklusējuma";
|
||||
|
||||
/* Output setting under 'Send system and scan data to the Elite Dangerous Data Network' new in E:D 2.2. [eddn.py] */
|
||||
"Delay sending until docked" = "Aizkavēt sūtīšanu līdz nosēšanai";
|
||||
|
||||
/* List of plugins in settings. [prefs.py] */
|
||||
"Disabled Plugins" = "Atspējoti Spraudņi";
|
||||
|
||||
/* Help menu item. [EDMarketConnector.py] */
|
||||
"Documentation" = "Dokumentācija";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Duke" = "Duke";
|
||||
|
||||
/* Location of the new Journal file in E:D 2.2. [EDMarketConnector.py] */
|
||||
"E:D journal file location" = "E:D žurnāla faila atrašanās vieta";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Earl" = "Earl";
|
||||
|
||||
/* Menu title. [EDMarketConnector.py] */
|
||||
"Edit" = "Labot";
|
||||
|
||||
/* Top rank. [stats.py] */
|
||||
"Elite" = "Elite";
|
||||
|
||||
/* Section heading in settings. [edsm.py] */
|
||||
"Elite Dangerous Star Map credentials" = "Elite Dangerous zvaigžņu kartes informācija";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Empire" = "Empire";
|
||||
|
||||
/* List of plugins in settings. [prefs.py] */
|
||||
"Enabled Plugins" = "Iespējoti Spraudņi";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Ensign" = "Ensign";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Entrepreneur" = "Entrepreneur";
|
||||
|
||||
/* [eddn.py] */
|
||||
"Error: Can't connect to EDDN" = "Kļūda: Nevar savienoties ar EDDN";
|
||||
|
||||
/* [edsm.py] */
|
||||
"Error: Can't connect to EDSM" = "Kļūda: Nevar savienoties ar EDSM";
|
||||
|
||||
/* [edsm.py] */
|
||||
"Error: EDSM {MSG}" = "Kļūda: EDSM {MSG}";
|
||||
|
||||
|
||||
/* OLD: Raised when cannot contact the Companion API server. [companion.py] */
|
||||
"Error: Frontier server is down" = "Kļūda: Frontier serveris nav aktīvs";
|
||||
|
||||
/* Raised when Companion API server is returning old data, e.g. when the servers are too busy. [companion.py] */
|
||||
/* companion.py: Frontier CAPI data doesn't agree with latest Journal game location; In files: companion.py:190; */
|
||||
"Error: Frontier server is lagging" = "Kļūda: Frontier serveris aizkavējas";
|
||||
|
||||
/* [companion.py] */
|
||||
/* companion.py: Generic "something went wrong with Frontier Auth" error; In files: companion.py:214; */
|
||||
"Error: Invalid Credentials" = "Kļūda: Nederīga lietotāja informācija";
|
||||
|
||||
/* Item in the File menu on Windows. [EDMarketConnector.py] */
|
||||
"Exit" = "Iziet";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Expert" = "Expert";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Explorer" = "Explorer";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Federation" = "Federation";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Fetching data..." = "Iegūst datus...";
|
||||
|
||||
/* Multicrew role. [EDMarketConnector.py] */
|
||||
"Fighter" = "Cīnītājs";
|
||||
|
||||
/* Menu title. [EDMarketConnector.py] */
|
||||
"File" = "Fails";
|
||||
|
||||
/* Section heading in settings. [prefs.py] */
|
||||
"File location" = "Faila atrašanās vieta";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Gladiator" = "Gladiators";
|
||||
|
||||
/* Multicrew role. [EDMarketConnector.py] */
|
||||
"Gunner" = "Ložmetējnieks";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Harmless" = "Nekaitīgs";
|
||||
|
||||
/* Multicrew role. [EDMarketConnector.py] */
|
||||
"Helm" = "Stūre";
|
||||
|
||||
/* Menu title. [EDMarketConnector.py] */
|
||||
"Help" = "Palīdzība";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Helpless" = "Bezpalīdzīgs";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Hero" = "Varonis";
|
||||
|
||||
/* Dark theme color setting. [prefs.py] */
|
||||
"Highlighted text" = "Izceltais teksts";
|
||||
|
||||
/* Hotkey/Shortcut settings prompt on Windows. [prefs.py] */
|
||||
"Hotkey" = "Ātrais taustiņš";
|
||||
|
||||
/* Hotkey/Shortcut settings prompt on OSX. [prefs.py] */
|
||||
"Keyboard shortcut" = "Ātrais taustiņš";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"King" = "Karalis";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Knight" = "Bruņinieks";
|
||||
|
||||
/* Appearance setting prompt. [prefs.py] */
|
||||
"Language" = "Valoda";
|
||||
|
||||
/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */
|
||||
"Last updated at %H:%M:%S" = "Pēdējo reizi atjaunināts %H:%M:%S";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Lieutenant" = "Leitnants";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Lieutenant Commander" = "Lieutenant Commander";
|
||||
|
||||
/* Cmdr stats. [stats.py] */
|
||||
"Loan" = "Aizdevums";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Logging in..." = "Autorizējas...";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Lord" = "Lord";
|
||||
|
||||
/* [prefs.py] */
|
||||
"Market data in CSV format file" = "Tirgus dati CSV formātā";
|
||||
|
||||
/* [prefs.py] */
|
||||
"Market data in Trade Dangerous format file" = "Tirgus dati Trade Dangerous formātā";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Marquis" = "Marquis";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Master" = "Master";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Merchant" = "Merchant";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Midshipman" = "Midshipman";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Mostly Aimless" = "Mostly Aimless";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Mostly Harmless" = "Mostly Harmless";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Mostly Helpless" = "Mostly Helpless";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Mostly Penniless" = "Mostly Penniless";
|
||||
|
||||
/* No hotkey/shortcut currently defined. [prefs.py] */
|
||||
"None" = "Neviens";
|
||||
|
||||
/* Dark theme color setting. [prefs.py] */
|
||||
"Normal text" = "Normālais teksts";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Novice" = "Novice";
|
||||
|
||||
/* [prefs.py] */
|
||||
"OK" = "Labi";
|
||||
|
||||
/* Hotkey/Shortcut setting. [prefs.py] */
|
||||
"Only when Elite: Dangerous is the active app" = "Tikai kad Elite: Dangerous ir aktīvā aplikācija";
|
||||
|
||||
/* Button that opens a folder in Explorer/Finder. [prefs.py] */
|
||||
"Open" = "Atvērt";
|
||||
|
||||
/* Shortcut settings button on OSX. [prefs.py] */
|
||||
"Open System Preferences" = "Atvērt sistēmas iestatījumus";
|
||||
|
||||
/* Tab heading in settings. [prefs.py] */
|
||||
"Output" = "Izvade";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Outsider" = "Outsider";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Pathfinder" = "Pathfinder";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Peddler" = "Peddler";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Penniless" = "Penniless";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Petty Officer" = "Petty Officer";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Pioneer" = "Pioneer";
|
||||
|
||||
/* Hotkey/Shortcut setting. [prefs.py] */
|
||||
"Play sound" = "Atskaņot skaņu";
|
||||
|
||||
/* [prefs.py] */
|
||||
"Please choose what data to save" = "Lūdzu izvēlaties kādus datus saglabāt";
|
||||
|
||||
/* Tab heading in settings. [prefs.py] */
|
||||
"Plugins" = "Spraudņi";
|
||||
|
||||
/* Section heading in settings. [prefs.py] */
|
||||
"Plugins folder" = "Spraudņu mape";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Post Captain" = "Post Captain";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Post Commander" = "Post Commander";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Powerplay" = "Powerplay";
|
||||
|
||||
/* [prefs.py] */
|
||||
"Preferences" = "Iestatījumi";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Prince" = "Prince";
|
||||
|
||||
/* Help menu item. [EDMarketConnector.py] */
|
||||
"Privacy Policy" = "Privātuma politika";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Professional" = "Professional";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Ranger" = "Ranger";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 1" = "Rating 1";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 2" = "Rating 2";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 3" = "Rating 3";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 4" = "Rating 4";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 5" = "Rating 5";
|
||||
|
||||
/* Shortcut settings prompt on OSX. [prefs.py] */
|
||||
"Re-start {APP} to use shortcuts" = "Restartējiet {APP} lai izmantotu īssceļus";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Rear Admiral" = "Rear Admiral";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Recruit" = "Recruit";
|
||||
|
||||
/* Help menu item. [EDMarketConnector.py] */
|
||||
"Release Notes" = "Informācija par laidienu";
|
||||
|
||||
/* Multicrew role label in main window. [EDMarketConnector.py] */
|
||||
"Role" = "Loma";
|
||||
|
||||
/* Menu item. [EDMarketConnector.py] */
|
||||
"Save Raw Data..." = "Saglabāt sākotnējos datus...";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Scout" = "Scout";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Semi Professional" = "Semi Professional";
|
||||
|
||||
/* Output setting. [eddn.py] */
|
||||
"Send station data to the Elite Dangerous Data Network" = "Sūtīt stacijas datus uz Elite Dangerous Data Network";
|
||||
|
||||
/* Output setting new in E:D 2.2. [eddn.py] */
|
||||
"Send system and scan data to the Elite Dangerous Data Network" = "Sūtīt stacijas datus uz Elite Dangerous Data Network";
|
||||
|
||||
/* [eddn.py] */
|
||||
"Sending data to EDDN..." = "Sūta datus uz EDDN...";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Serf" = "Serf";
|
||||
|
||||
/* Item in the File menu on Windows. [EDMarketConnector.py] */
|
||||
"Settings" = "Iestatījumi";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"Ship" = "Kuģis";
|
||||
|
||||
/* Output setting. [prefs.py] */
|
||||
"Ship loadout" = "Kuģa loadout";
|
||||
|
||||
/* Status dialog title. [stats.py] */
|
||||
"Ships" = "Kuģi";
|
||||
|
||||
/* Setting to decide which ship outfitting website to link to - either E:D Shipyard or Coriolis. [prefs.py] */
|
||||
"Shipyard" = "Kuģu būvētava";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Squire" = "Squire";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"Station" = "Stacija";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Station doesn't have a market!" = "Stacijā nav tirgus!";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Station doesn't have anything!" = "Stacijā nekā nav!";
|
||||
|
||||
/* Menu item. [EDMarketConnector.py] */
|
||||
"Status" = "Statuss";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Surveyor" = "Surveyor";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"System" = "Sistēma";
|
||||
|
||||
/* Appearance setting. [prefs.py] */
|
||||
"Theme" = "Dizains";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Trade" = "Trade";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Trailblazer" = "Trailblazer";
|
||||
|
||||
/* Appearance theme setting. [prefs.py] */
|
||||
"Transparent" = "Caurspīdīga";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Tycoon" = "Tycoon";
|
||||
|
||||
/* Update button in main window. [EDMarketConnector.py] */
|
||||
/* EDMarketConnector.py: Update button in main window; In files: EDMarketConnector.py:424; EDMarketConnector.py:718; EDMarketConnector.py:1302; */
|
||||
"Update" = "Atjaunināt";
|
||||
|
||||
/* Status dialog subtitle - CR value of ship. [stats.py] */
|
||||
"Value" = "Vērtība";
|
||||
/* EDMarketConnector.py: Appearance - Label for checkbox to select if application always on top; prefs.py: Appearance - Label for checkbox to select if application always on top; In files: EDMarketConnector.py:507; prefs.py:843; */
|
||||
"Always on top" = "Vienmēr virspusē";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Vice Admiral" = "Vice Admiral";
|
||||
/* EDMarketConnector.py: Label for commander name in main window; edsm.py: Game Commander name label in EDSM settings; stats.py: Cmdr stats; theme.py: Label for commander name in main window; In files: EDMarketConnector.py:712; edsm.py:219; stats.py:50; theme.py:227; */
|
||||
"Cmdr" = "Cmdr";
|
||||
|
||||
/* Menu title on OSX. [EDMarketConnector.py] */
|
||||
/* EDMarketConnector.py: 'Ship' or multi-crew role label in main window, as applicable; EDMarketConnector.py: Multicrew role label in main window; In files: EDMarketConnector.py:714; EDMarketConnector.py:1072; */
|
||||
"Role" = "Loma";
|
||||
|
||||
/* EDMarketConnector.py: 'Ship' or multi-crew role label in main window, as applicable; EDMarketConnector.py: 'Ship' label in main UI; stats.py: Status dialog subtitle; In files: EDMarketConnector.py:714; EDMarketConnector.py:1082; EDMarketConnector.py:1105; stats.py:363; */
|
||||
"Ship" = "Kuģis";
|
||||
|
||||
/* EDMarketConnector.py: Label for 'System' line in main UI; prefs.py: Configuration - Label for selection of 'System' provider website; stats.py: Main window; In files: EDMarketConnector.py:716; prefs.py:605; stats.py:365; */
|
||||
"System" = "Sistēma";
|
||||
|
||||
/* EDMarketConnector.py: Label for 'Station' line in main UI; prefs.py: Configuration - Label for selection of 'Station' provider website; prefs.py: Appearance - Example 'Normal' text; stats.py: Status dialog subtitle; In files: EDMarketConnector.py:717; prefs.py:623; prefs.py:738; stats.py:366; */
|
||||
"Station" = "Stacija";
|
||||
|
||||
/* EDMarketConnector.py: 'File' menu title on OSX; EDMarketConnector.py: 'File' menu title; EDMarketConnector.py: 'File' menu; In files: EDMarketConnector.py:720; EDMarketConnector.py:735; EDMarketConnector.py:738; EDMarketConnector.py:1791; */
|
||||
"File" = "Fails";
|
||||
|
||||
/* EDMarketConnector.py: 'Edit' menu title on OSX; EDMarketConnector.py: 'Edit' menu title; In files: EDMarketConnector.py:721; EDMarketConnector.py:736; EDMarketConnector.py:739; */
|
||||
"Edit" = "Labot";
|
||||
|
||||
/* EDMarketConnector.py: 'View' menu title on OSX; In files: EDMarketConnector.py:722; */
|
||||
"View" = "Skats";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Viscount" = "Viscount";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Warrant Officer" = "Warrant Officer";
|
||||
|
||||
/* Shouldn't happen. [EDMarketConnector.py] */
|
||||
"What are you flying?!" = "Ar ko tu lido?";
|
||||
|
||||
/* Shouldn't happen. [EDMarketConnector.py] */
|
||||
"Where are you?!" = "Kur tu esi?";
|
||||
|
||||
/* Shouldn't happen. [EDMarketConnector.py] */
|
||||
"Who are you?!" = "Kas tu esi?";
|
||||
|
||||
/* Menu title on OSX. [EDMarketConnector.py] */
|
||||
/* EDMarketConnector.py: 'Window' menu title on OSX; In files: EDMarketConnector.py:723; */
|
||||
"Window" = "Logs";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
/* EDMarketConnector.py: Help' menu title on OSX; EDMarketConnector.py: 'Help' menu title; In files: EDMarketConnector.py:724; EDMarketConnector.py:737; EDMarketConnector.py:740; */
|
||||
"Help" = "Palīdzība";
|
||||
|
||||
/* EDMarketConnector.py: App menu entry on OSX; EDMarketConnector.py: Help > About App; In files: EDMarketConnector.py:727; EDMarketConnector.py:753; EDMarketConnector.py:1347; */
|
||||
"About {APP}" = "Par {APP}";
|
||||
|
||||
/* EDMarketConnector.py: Help > Check for Updates...; In files: EDMarketConnector.py:729; EDMarketConnector.py:752; */
|
||||
"Check for Updates..." = "Pārbaudīt atjauninājumus...";
|
||||
|
||||
/* EDMarketConnector.py: File > Save Raw Data...; In files: EDMarketConnector.py:730; EDMarketConnector.py:744; */
|
||||
"Save Raw Data..." = "Saglabāt sākotnējos datus...";
|
||||
|
||||
/* EDMarketConnector.py: File > Status; stats.py: Status dialog title; In files: EDMarketConnector.py:731; EDMarketConnector.py:743; stats.py:360; */
|
||||
"Status" = "Statuss";
|
||||
|
||||
/* EDMarketConnector.py: Help > Privacy Policy; In files: EDMarketConnector.py:732; EDMarketConnector.py:750; */
|
||||
"Privacy Policy" = "Privātuma politika";
|
||||
|
||||
/* EDMarketConnector.py: Help > Release Notes; In files: EDMarketConnector.py:733; EDMarketConnector.py:751; EDMarketConnector.py:1381; */
|
||||
"Release Notes" = "Informācija par laidienu";
|
||||
|
||||
/* EDMarketConnector.py: File > Settings; prefs.py: File > Settings (macOS); In files: EDMarketConnector.py:745; EDMarketConnector.py:1792; prefs.py:254; */
|
||||
"Settings" = "Iestatījumi";
|
||||
|
||||
/* EDMarketConnector.py: File > Exit; In files: EDMarketConnector.py:746; */
|
||||
"Exit" = "Iziet";
|
||||
|
||||
/* EDMarketConnector.py: Help > Documentation; In files: EDMarketConnector.py:749; */
|
||||
"Documentation" = "Dokumentācija";
|
||||
|
||||
/* EDMarketConnector.py: Label for 'Copy' as in 'Copy and Paste'; ttkHyperlinkLabel.py: Label for 'Copy' as in 'Copy and Paste'; In files: EDMarketConnector.py:756; ttkHyperlinkLabel.py:42; */
|
||||
"Copy" = "Kopēt";
|
||||
|
||||
/* EDMarketConnector.py: Status - Attempting to get a Frontier Auth Access Token; In files: EDMarketConnector.py:762; */
|
||||
"Logging in..." = "Autorizējas...";
|
||||
|
||||
/* EDMarketConnector.py: Successfully authenticated with the Frontier website; In files: EDMarketConnector.py:778; EDMarketConnector.py:1215; */
|
||||
"Authentication successful" = "Autentifikācija sekmīga";
|
||||
|
||||
/* EDMarketConnector.py: Player is not docked at a station, when we expect them to be; In files: EDMarketConnector.py:809; */
|
||||
"You're not docked at a station!" = "Jūs neesat stacijā!";
|
||||
|
||||
/* Shortcut settings prompt on OSX. [prefs.py] */
|
||||
/* EDMarketConnector.py: Status - Either no market or no modules data for station from Frontier CAPI; In files: EDMarketConnector.py:817; */
|
||||
"Station doesn't have anything!" = "Stacijā nekā nav!";
|
||||
|
||||
/* EDMarketConnector.py: Status - No station market data from Frontier CAPI; In files: EDMarketConnector.py:822; */
|
||||
"Station doesn't have a market!" = "Stacijā nav tirgus!";
|
||||
|
||||
/* EDMarketConnector.py: Status - Attempting to retrieve data from Frontier CAPI; EDMarketConnector.py: Status - Attempting to retrieve data from Frontier CAPI to save to file; stats.py: Fetching data from Frontier CAPI in order to display on File > Status; In files: EDMarketConnector.py:867; EDMarketConnector.py:1428; stats.py:279; */
|
||||
"Fetching data..." = "Iegūst datus...";
|
||||
|
||||
/* EDMarketConnector.py: We didn't have the commander name when we should have; stats.py: Unknown commander; In files: EDMarketConnector.py:884; stats.py:297; */
|
||||
"Who are you?!" = "Kas tu esi?";
|
||||
|
||||
/* EDMarketConnector.py: We don't know where the commander is, when we should; stats.py: Unknown location; In files: EDMarketConnector.py:890; stats.py:307; */
|
||||
"Where are you?!" = "Kur tu esi?";
|
||||
|
||||
/* EDMarketConnector.py: We don't know what ship the commander is in, when we should; stats.py: Unknown ship; In files: EDMarketConnector.py:894; stats.py:312; */
|
||||
"What are you flying?!" = "Ar ko tu lido?";
|
||||
|
||||
/* EDMarketConnector.py: Time when we last obtained Frontier CAPI data; In files: EDMarketConnector.py:1026; */
|
||||
"Last updated at %H:%M:%S" = "Pēdējo reizi atjaunināts %H:%M:%S";
|
||||
|
||||
/* EDMarketConnector.py: Multicrew role; In files: EDMarketConnector.py:1052; */
|
||||
"Fighter" = "Cīnītājs";
|
||||
|
||||
/* EDMarketConnector.py: Multicrew role; In files: EDMarketConnector.py:1053; */
|
||||
"Gunner" = "Ložmetējnieks";
|
||||
|
||||
/* EDMarketConnector.py: Multicrew role; In files: EDMarketConnector.py:1054; */
|
||||
"Helm" = "Stūre";
|
||||
|
||||
/* EDMarketConnector.py: Cooldown on 'Update' button; In files: EDMarketConnector.py:1298; */
|
||||
"cooldown {SS}s" = "Atskaite {SS}";
|
||||
|
||||
/* EDMarketConnector.py: Generic 'OK' button label; prefs.py: 'OK' button on Settings/Preferences window; In files: EDMarketConnector.py:1407; prefs.py:304; */
|
||||
"OK" = "Labi";
|
||||
|
||||
/* EDMarketConnector.py: Settings > Plugins tab; prefs.py: Label on Settings > Plugins tab; In files: EDMarketConnector.py:1790; prefs.py:953; */
|
||||
"Plugins" = "Spraudņi";
|
||||
|
||||
/* l10n.py: The system default language choice in Settings > Appearance; prefs.py: Settings > Configuration - Label on 'reset journal files location to default' button; prefs.py: The system default language choice in Settings > Appearance; prefs.py: Label for 'Default' theme radio button; In files: l10n.py:194; prefs.py:466; prefs.py:678; prefs.py:711; */
|
||||
"Default" = "Noklusējuma";
|
||||
|
||||
/* eddn.py: Status text shown while attempting to send data; In files: eddn.py:215; eddn.py:619; eddn.py:969; */
|
||||
"Sending data to EDDN..." = "Sūta datus uz EDDN...";
|
||||
|
||||
/* eddn.py: Error while trying to send data to EDDN; In files: eddn.py:264; eddn.py:907; eddn.py:942; eddn.py:981; */
|
||||
"Error: Can't connect to EDDN" = "Kļūda: Nevar savienoties ar EDDN";
|
||||
|
||||
/* eddn.py: Enable EDDN support for station data checkbox label; In files: eddn.py:699; */
|
||||
"Send station data to the Elite Dangerous Data Network" = "Sūtīt stacijas datus uz Elite Dangerous Data Network";
|
||||
|
||||
/* eddn.py: Enable EDDN support for system and other scan data checkbox label; In files: eddn.py:710; */
|
||||
"Send system and scan data to the Elite Dangerous Data Network" = "Sūtīt stacijas datus uz Elite Dangerous Data Network";
|
||||
|
||||
/* eddn.py: EDDN delay sending until docked option is on, this message notes that a send was skipped due to this; In files: eddn.py:721; */
|
||||
"Delay sending until docked" = "Aizkavēt sūtīšanu līdz nosēšanai";
|
||||
|
||||
/* edsm.py: Settings>EDSM - Label on header/URL to EDSM API key page; In files: edsm.py:208; */
|
||||
"Elite Dangerous Star Map credentials" = "Elite Dangerous zvaigžņu kartes informācija";
|
||||
|
||||
/* edsm.py: EDSM Commander name label in EDSM settings; In files: edsm.py:227; */
|
||||
"Commander Name" = "Komandiera vārds";
|
||||
|
||||
/* edsm.py: EDSM API key label; inara.py: Inara API key label; In files: edsm.py:235; inara.py:237; */
|
||||
"API Key" = "API atslēga";
|
||||
|
||||
/* edsm.py: We have no data on the current commander; prefs.py: No hotkey/shortcut set; stats.py: No rank; In files: edsm.py:262; prefs.py:518; prefs.py:1156; prefs.py:1189; stats.py:117; stats.py:136; stats.py:155; stats.py:172; */
|
||||
"None" = "Neviens";
|
||||
|
||||
/* edsm.py: EDSM Plugin - Error message from EDSM API; In files: edsm.py:640; edsm.py:745; */
|
||||
"Error: EDSM {MSG}" = "Kļūda: EDSM {MSG}";
|
||||
|
||||
/* edsm.py: EDSM Plugin - Error connecting to EDSM API; In files: edsm.py:677; edsm.py:740; */
|
||||
"Error: Can't connect to EDSM" = "Kļūda: Nevar savienoties ar EDSM";
|
||||
|
||||
/* prefs.py: File > Preferences menu entry for macOS; In files: prefs.py:250; */
|
||||
"Preferences" = "Iestatījumi";
|
||||
|
||||
/* prefs.py: Settings > Output - choosing what data to save to files; In files: prefs.py:346; */
|
||||
"Please choose what data to save" = "Lūdzu izvēlaties kādus datus saglabāt";
|
||||
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:352; */
|
||||
"Market data in CSV format file" = "Tirgus dati CSV formātā";
|
||||
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:361; */
|
||||
"Market data in Trade Dangerous format file" = "Tirgus dati Trade Dangerous formātā";
|
||||
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:371; */
|
||||
"Ship loadout" = "Kuģa loadout";
|
||||
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:381; */
|
||||
"Automatically update on docking" = "Automtiski atjaunoties nosēžoties.";
|
||||
|
||||
/* prefs.py: Settings > Output - Label for "where files are located"; In files: prefs.py:390; prefs.py:409; */
|
||||
"File location" = "Faila atrašanās vieta";
|
||||
|
||||
/* prefs.py: macOS Preferences - files location selection button; In files: prefs.py:398; prefs.py:448; */
|
||||
"Change..." = "Mainīt...";
|
||||
|
||||
/* prefs.py: NOT-macOS Settings - files location selection button; prefs.py: NOT-macOS Setting - files location selection button; In files: prefs.py:401; prefs.py:451; */
|
||||
"Browse..." = "Pārlūkot...";
|
||||
|
||||
/* prefs.py: Label for 'Output' Settings/Preferences tab; In files: prefs.py:416; */
|
||||
"Output" = "Izvade";
|
||||
|
||||
/* prefs.py: Settings > Configuration - Label for Journal files location; In files: prefs.py:442; prefs.py:457; */
|
||||
"E:D journal file location" = "E:D žurnāla faila atrašanās vieta";
|
||||
|
||||
/* prefs.py: Hotkey/Shortcut settings prompt on OSX; In files: prefs.py:482; */
|
||||
"Keyboard shortcut" = "Ātrais taustiņš";
|
||||
|
||||
/* prefs.py: Hotkey/Shortcut settings prompt on Windows; In files: prefs.py:484; */
|
||||
"Hotkey" = "Ātrais taustiņš";
|
||||
|
||||
/* prefs.py: macOS Preferences > Configuration - restart the app message; In files: prefs.py:493; */
|
||||
"Re-start {APP} to use shortcuts" = "Restartējiet {APP} lai izmantotu īssceļus";
|
||||
|
||||
/* prefs.py: macOS - Configuration - need to grant the app permission for keyboard shortcuts; In files: prefs.py:502; */
|
||||
"{APP} needs permission to use shortcuts" = "{APP} vajag atļaujas lai izmantotu īssceļus";
|
||||
|
||||
/* prefs.py: Shortcut settings button on OSX; In files: prefs.py:507; */
|
||||
"Open System Preferences" = "Atvērt sistēmas iestatījumus";
|
||||
|
||||
/* prefs.py: Configuration - Act on hotkey only when ED is in foreground; In files: prefs.py:529; */
|
||||
"Only when Elite: Dangerous is the active app" = "Tikai kad Elite: Dangerous ir aktīvā aplikācija";
|
||||
|
||||
/* prefs.py: Configuration - play sound when hotkey used; In files: prefs.py:540; */
|
||||
"Play sound" = "Atskaņot skaņu";
|
||||
|
||||
/* prefs.py: Label for Shipyard provider selection; In files: prefs.py:579; */
|
||||
"Shipyard" = "Kuģu būvētava";
|
||||
|
||||
/* prefs.py: Label for 'Configuration' tab in Settings; In files: prefs.py:672; */
|
||||
"Configuration" = "Konfigurācija";
|
||||
|
||||
/* prefs.py: Label for Settings > Appeareance > selection of 'normal' text colour; In files: prefs.py:685; */
|
||||
"Normal text" = "Normālais teksts";
|
||||
|
||||
/* prefs.py: Label for Settings > Appeareance > selection of 'highlightes' text colour; In files: prefs.py:687; */
|
||||
"Highlighted text" = "Izceltais teksts";
|
||||
|
||||
/* prefs.py: Appearance - Label for selection of application display language; In files: prefs.py:696; */
|
||||
"Language" = "Valoda";
|
||||
|
||||
/* prefs.py: Label for Settings > Appearance > Theme selection; In files: prefs.py:706; */
|
||||
"Theme" = "Dizains";
|
||||
|
||||
/* prefs.py: Label for 'Dark' theme radio button; In files: prefs.py:717; */
|
||||
"Dark" = "Tumša";
|
||||
|
||||
/* prefs.py: Label for 'Transparent' theme radio button; In files: prefs.py:724; */
|
||||
"Transparent" = "Caurspīdīga";
|
||||
|
||||
/* prefs.py: Label for Settings > Appearance tab; In files: prefs.py:860; */
|
||||
"Appearance" = "Izskats";
|
||||
|
||||
/* prefs.py: Label for location of third-party plugins folder; In files: prefs.py:875; */
|
||||
"Plugins folder" = "Spraudņu mape";
|
||||
|
||||
/* prefs.py: Label on button used to open a filesystem folder; In files: prefs.py:882; */
|
||||
"Open" = "Atvērt";
|
||||
|
||||
/* prefs.py: Label on list of enabled plugins; In files: prefs.py:901; */
|
||||
"Enabled Plugins" = "Iespējoti Spraudņi";
|
||||
|
||||
/* prefs.py: Lable on list of user-disabled plugins; In files: prefs.py:944; */
|
||||
"Disabled Plugins" = "Atspējoti Spraudņi";
|
||||
|
||||
/* stats.py: Cmdr stats; In files: stats.py:51; */
|
||||
"Balance" = "Bilance";
|
||||
|
||||
/* stats.py: Cmdr stats; In files: stats.py:52; */
|
||||
"Loan" = "Aizdevums";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:57; */
|
||||
"Combat" = "Combat";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:58; */
|
||||
"Trade" = "Trade";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:59; */
|
||||
"Explorer" = "Explorer";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:60; */
|
||||
"CQC" = "CQC";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:61; */
|
||||
"Federation" = "Federation";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:62; */
|
||||
"Empire" = "Empire";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:63; */
|
||||
"Powerplay" = "Powerplay";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:71; */
|
||||
"Harmless" = "Nekaitīgs";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:72; */
|
||||
"Mostly Harmless" = "Mostly Harmless";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:73; */
|
||||
"Novice" = "Novice";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:74; */
|
||||
"Competent" = "Competent";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:75; */
|
||||
"Expert" = "Expert";
|
||||
|
||||
/* stats.py: Combat rank; stats.py: Empire rank; In files: stats.py:76; stats.py:139; */
|
||||
"Master" = "Master";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:77; */
|
||||
"Dangerous" = "Dangerous";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:78; */
|
||||
"Deadly" = "Deadly";
|
||||
|
||||
/* stats.py: Top rank; In files: stats.py:79; stats.py:90; stats.py:101; stats.py:112; */
|
||||
"Elite" = "Elite";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:82; */
|
||||
"Penniless" = "Penniless";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:83; */
|
||||
"Mostly Penniless" = "Mostly Penniless";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:84; */
|
||||
"Peddler" = "Peddler";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:85; */
|
||||
"Dealer" = "Dealer";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:86; */
|
||||
"Merchant" = "Merchant";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:87; */
|
||||
"Broker" = "Broker";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:88; */
|
||||
"Entrepreneur" = "Entrepreneur";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:89; */
|
||||
"Tycoon" = "Tycoon";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:93; */
|
||||
"Aimless" = "Aimless";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:94; */
|
||||
"Mostly Aimless" = "Mostly Aimless";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:95; */
|
||||
"Scout" = "Scout";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:96; */
|
||||
"Surveyor" = "Surveyor";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:97; */
|
||||
"Trailblazer" = "Trailblazer";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:98; */
|
||||
"Pathfinder" = "Pathfinder";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:99; */
|
||||
"Ranger" = "Ranger";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:100; */
|
||||
"Pioneer" = "Pioneer";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:104; */
|
||||
"Helpless" = "Bezpalīdzīgs";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:105; */
|
||||
"Mostly Helpless" = "Mostly Helpless";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:106; */
|
||||
"Amateur" = "Amateur";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:107; */
|
||||
"Semi Professional" = "Semi Professional";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:108; */
|
||||
"Professional" = "Professional";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:109; */
|
||||
"Champion" = "Champion";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:110; */
|
||||
"Hero" = "Varonis";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:111; */
|
||||
"Gladiator" = "Gladiators";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:118; */
|
||||
"Recruit" = "Recruit";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:119; */
|
||||
"Cadet" = "Cadet";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:120; */
|
||||
"Midshipman" = "Midshipman";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:121; */
|
||||
"Petty Officer" = "Petty Officer";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:122; */
|
||||
"Chief Petty Officer" = "Chief Petty Officer";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:123; */
|
||||
"Warrant Officer" = "Warrant Officer";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:124; */
|
||||
"Ensign" = "Ensign";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:125; */
|
||||
"Lieutenant" = "Leitnants";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:126; */
|
||||
"Lieutenant Commander" = "Lieutenant Commander";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:127; */
|
||||
"Post Commander" = "Post Commander";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:128; */
|
||||
"Post Captain" = "Post Captain";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:129; */
|
||||
"Rear Admiral" = "Rear Admiral";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:130; */
|
||||
"Vice Admiral" = "Vice Admiral";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:131; */
|
||||
"Admiral" = "Admiral";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:137; */
|
||||
"Outsider" = "Outsider";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:138; */
|
||||
"Serf" = "Serf";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:140; */
|
||||
"Squire" = "Squire";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:141; */
|
||||
"Knight" = "Bruņinieks";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:142; */
|
||||
"Lord" = "Lord";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:143; */
|
||||
"Baron" = "Baron";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:144; */
|
||||
"Viscount" = "Viscount";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:145; */
|
||||
"Count" = "Count";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:146; */
|
||||
"Earl" = "Earl";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:147; */
|
||||
"Marquis" = "Marquis";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:148; */
|
||||
"Duke" = "Duke";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:149; */
|
||||
"Prince" = "Prince";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:150; */
|
||||
"King" = "Karalis";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:156; */
|
||||
"Rating 1" = "Rating 1";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:157; */
|
||||
"Rating 2" = "Rating 2";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:158; */
|
||||
"Rating 3" = "Rating 3";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:159; */
|
||||
"Rating 4" = "Rating 4";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:160; */
|
||||
"Rating 5" = "Rating 5";
|
||||
|
||||
/* stats.py: Status dialog subtitle - CR value of ship; In files: stats.py:367; */
|
||||
"Value" = "Vērtība";
|
||||
|
||||
/* stats.py: Status dialog title; In files: stats.py:376; */
|
||||
"Ships" = "Kuģi";
|
||||
|
979
L10n/nl.strings
979
L10n/nl.strings
File diff suppressed because it is too large
Load Diff
1145
L10n/pl.strings
1145
L10n/pl.strings
File diff suppressed because it is too large
Load Diff
1171
L10n/pt-BR.strings
1171
L10n/pt-BR.strings
File diff suppressed because it is too large
Load Diff
1171
L10n/pt-PT.strings
1171
L10n/pt-PT.strings
File diff suppressed because it is too large
Load Diff
1171
L10n/ru.strings
1171
L10n/ru.strings
File diff suppressed because it is too large
Load Diff
831
L10n/sl.strings
831
L10n/sl.strings
@ -1,432 +1,431 @@
|
||||
/* Language name */
|
||||
"!Language" = "Slovenščina";
|
||||
|
||||
/* App menu entry on OSX. [EDMarketConnector.py] */
|
||||
"About {APP}" = "O {APP}";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Admiral" = "Admiral";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Aimless" = "Aimless";
|
||||
|
||||
/* Appearance setting. [EDMarketConnector.py] */
|
||||
"Always on top" = "Vedno na vrhu";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Amateur" = "Amateur";
|
||||
|
||||
/* EDSM setting. [edsm.py] */
|
||||
"API Key" = "API ključ";
|
||||
|
||||
/* Tab heading in settings. [prefs.py] */
|
||||
"Appearance" = "Videz";
|
||||
|
||||
/* Successfully authenticated with the Frontier website. [EDMarketConnector.py] */
|
||||
"Authentication successful" = "Preverjanje pristnosti je bilo uspešno";
|
||||
|
||||
/* Cmdr stats. [stats.py] */
|
||||
"Balance" = "Ravnotežje";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Baron" = "Baron";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Broker" = "Broker";
|
||||
|
||||
/* Folder selection button on Windows. [prefs.py] */
|
||||
"Browse..." = "Prebrskaj...";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Cadet" = "Cadet";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Champion" = "Champion";
|
||||
|
||||
/* Folder selection button on OSX. [prefs.py] */
|
||||
"Change..." = "Spremeni...";
|
||||
|
||||
/* Menu item. [EDMarketConnector.py] */
|
||||
"Check for Updates..." = "Preveri posodobitve...";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Chief Petty Officer" = "Chief Petty Officer";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"Cmdr" = "Cmdr";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Combat" = "Combat";
|
||||
|
||||
/* EDSM setting. [edsm.py] */
|
||||
"Commander Name" = "Commander ime";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Competent" = "Competent";
|
||||
|
||||
/* Tab heading in settings. [prefs.py] */
|
||||
"Configuration" = "Konfiguracija";
|
||||
|
||||
/* Update button in main window. [EDMarketConnector.py] */
|
||||
"cooldown {SS}s" = "Posodobitev v {SS}s";
|
||||
|
||||
/* As in Copy and Paste. [EDMarketConnector.py] */
|
||||
"Copy" = "Kopiraj";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Count" = "Count";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"CQC" = "CQC";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Dangerous" = "Dangerous";
|
||||
|
||||
/* Appearance theme setting. [prefs.py] */
|
||||
"Dark" = "Temno";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Deadly" = "Deadly";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Dealer" = "Dealer";
|
||||
|
||||
/* Appearance theme and language setting. [l10n.py] */
|
||||
"Default" = "Privzeta";
|
||||
|
||||
/* Help menu item. [EDMarketConnector.py] */
|
||||
"Documentation" = "Dokumentacija";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Duke" = "Duke";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Earl" = "Earl";
|
||||
|
||||
/* Menu title. [EDMarketConnector.py] */
|
||||
"Edit" = "Uredi";
|
||||
|
||||
/* Top rank. [stats.py] */
|
||||
"Elite" = "Elite";
|
||||
|
||||
/* Section heading in settings. [edsm.py] */
|
||||
"Elite Dangerous Star Map credentials" = "EDStarMap uporabniški podatki";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Empire" = "Cesarstvo";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Ensign" = "Ensign";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Entrepreneur" = "Enterpreneur";
|
||||
|
||||
/* [eddn.py] */
|
||||
"Error: Can't connect to EDDN" = "Napaka: povezava z EDDN ni mogoča";
|
||||
|
||||
/* [edsm.py] */
|
||||
"Error: Can't connect to EDSM" = "Napaka: Povezava z EDSM ni mogoča";
|
||||
|
||||
/* [edsm.py] */
|
||||
"Error: EDSM {MSG}" = "Napaka: EDSM {MSG}";
|
||||
|
||||
|
||||
/* [companion.py] */
|
||||
/* companion.py: Generic "something went wrong with Frontier Auth" error; In files: companion.py:214; */
|
||||
"Error: Invalid Credentials" = "Napaka: napačno uporabniški ime ali geslo";
|
||||
|
||||
/* Item in the File menu on Windows. [EDMarketConnector.py] */
|
||||
"Exit" = "Izhod";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Expert" = "Expert";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Explorer" = "Explorer";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Federation" = "Federacija";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Fetching data..." = "Nalagam podatke...";
|
||||
|
||||
/* Menu title. [EDMarketConnector.py] */
|
||||
"File" = "Datoteka";
|
||||
|
||||
/* Section heading in settings. [prefs.py] */
|
||||
"File location" = "Lokacija datoteke";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Gladiator" = "Gladiator";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Harmless" = "Harmless";
|
||||
|
||||
/* Menu title. [EDMarketConnector.py] */
|
||||
"Help" = "Pomoč";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Helpless" = "Helpless";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Hero" = "Hero";
|
||||
|
||||
/* Hotkey/Shortcut settings prompt on Windows. [prefs.py] */
|
||||
"Hotkey" = "Bližnjica";
|
||||
|
||||
/* Hotkey/Shortcut settings prompt on OSX. [prefs.py] */
|
||||
"Keyboard shortcut" = "Bližnjica";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"King" = "King";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Knight" = "Knight";
|
||||
|
||||
/* Appearance setting prompt. [prefs.py] */
|
||||
"Language" = "Jezik";
|
||||
|
||||
/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */
|
||||
"Last updated at %H:%M:%S" = "Zadnja osvežitev podatkov %H:%M:%S ";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Lieutenant" = "LIeutenant";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Lieutenant Commander" = "Lieutenant Commander";
|
||||
|
||||
/* Cmdr stats. [stats.py] */
|
||||
"Loan" = "Posojilo";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Logging in..." = "Prijava v teku... ";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Lord" = "Lord";
|
||||
|
||||
/* [prefs.py] */
|
||||
"Market data in CSV format file" = "Podatki trga v CSV formatu";
|
||||
|
||||
/* [prefs.py] */
|
||||
"Market data in Trade Dangerous format file" = "Podatki trga v Trade Dangerous formatu";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Marquis" = "Marquis";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Master" = "Master";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Merchant" = "Merchant";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Midshipman" = "Midshipman";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Mostly Aimless" = "Mostly Aimless";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Mostly Harmless" = "Mostly Harmless";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Mostly Helpless" = "Mostly Helpless";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Mostly Penniless" = "Mostly peniless";
|
||||
|
||||
/* No hotkey/shortcut currently defined. [prefs.py] */
|
||||
"None" = "Brez";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Novice" = "Novice";
|
||||
|
||||
/* [prefs.py] */
|
||||
"OK" = "Potrdi";
|
||||
|
||||
/* Hotkey/Shortcut setting. [prefs.py] */
|
||||
"Only when Elite: Dangerous is the active app" = "Samo ko je Elite:Dangerous aktivna aplikacija ";
|
||||
|
||||
/* Shortcut settings button on OSX. [prefs.py] */
|
||||
"Open System Preferences" = "Odpri sistemske nastavitve";
|
||||
|
||||
/* Tab heading in settings. [prefs.py] */
|
||||
"Output" = "Izpis";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Outsider" = "Outsider";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Pathfinder" = "Pathfinder";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Peddler" = "Peddler";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Penniless" = "Peniless";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Petty Officer" = "Petty Officer";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Pioneer" = "Pioneer";
|
||||
|
||||
/* Hotkey/Shortcut setting. [prefs.py] */
|
||||
"Play sound" = "Sproži zvok";
|
||||
|
||||
/* [prefs.py] */
|
||||
"Please choose what data to save" = "Izberite podatke, ki jih želite shraniti";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Post Captain" = "Post Captain";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Post Commander" = "Post Commander";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Powerplay" = "Igra moči";
|
||||
|
||||
/* [prefs.py] */
|
||||
"Preferences" = "Nastavitve";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Prince" = "Prince";
|
||||
|
||||
/* Help menu item. [EDMarketConnector.py] */
|
||||
"Privacy Policy" = "Pravilnik o zasebnosti";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Professional" = "Professional";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Ranger" = "Ranger";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 1" = "Ocena 1";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 2" = "Ocena 2";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 3" = "Ocena 3";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 4" = "Ocena 4";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 5" = "Ocena 5";
|
||||
|
||||
/* Shortcut settings prompt on OSX. [prefs.py] */
|
||||
"Re-start {APP} to use shortcuts" = "Ponovno poženi {APP} za uporabo bližnjic";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Rear Admiral" = "Read Admiral";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Recruit" = "Recruit";
|
||||
|
||||
/* Help menu item. [EDMarketConnector.py] */
|
||||
"Release Notes" = "Opombe ob izdaji";
|
||||
|
||||
/* Multicrew role label in main window. [EDMarketConnector.py] */
|
||||
"Role" = "Vloga";
|
||||
|
||||
/* Menu item. [EDMarketConnector.py] */
|
||||
"Save Raw Data..." = "Shrani Izvirne Podatke...";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Scout" = "Scout";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Semi Professional" = "Semi Professional";
|
||||
|
||||
/* Output setting. [eddn.py] */
|
||||
"Send station data to the Elite Dangerous Data Network" = "Pošlji podatke postaje na EDDN";
|
||||
|
||||
/* [eddn.py] */
|
||||
"Sending data to EDDN..." = "Pošiljam podatke na EDDN";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Serf" = "Serif";
|
||||
|
||||
/* Item in the File menu on Windows. [EDMarketConnector.py] */
|
||||
"Settings" = "Nastavitve";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"Ship" = "Ladja";
|
||||
|
||||
/* Output setting. [prefs.py] */
|
||||
"Ship loadout" = "Oprema ladje";
|
||||
|
||||
/* Status dialog title. [stats.py] */
|
||||
"Ships" = "Ladje";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Squire" = "Squire";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"Station" = "Postaja";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Station doesn't have a market!" = "Postaja nima trga";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Station doesn't have anything!" = "Postaja nima ničesar";
|
||||
|
||||
/* Menu item. [EDMarketConnector.py] */
|
||||
"Status" = "Status";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Surveyor" = "Surveyor";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"System" = "Sistem";
|
||||
|
||||
/* Appearance setting. [prefs.py] */
|
||||
"Theme" = "Tema";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Trade" = "Trgovanje";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Trailblazer" = "Trailblazer";
|
||||
|
||||
/* Appearance theme setting. [prefs.py] */
|
||||
"Transparent" = "Prosojno";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Tycoon" = "Tycoon";
|
||||
|
||||
/* Update button in main window. [EDMarketConnector.py] */
|
||||
/* EDMarketConnector.py: Update button in main window; In files: EDMarketConnector.py:424; EDMarketConnector.py:718; EDMarketConnector.py:1302; */
|
||||
"Update" = "Osveži";
|
||||
|
||||
/* Status dialog subtitle - CR value of ship. [stats.py] */
|
||||
"Value" = "Vrednost";
|
||||
/* EDMarketConnector.py: Appearance - Label for checkbox to select if application always on top; prefs.py: Appearance - Label for checkbox to select if application always on top; In files: EDMarketConnector.py:507; prefs.py:843; */
|
||||
"Always on top" = "Vedno na vrhu";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Vice Admiral" = "Vice Admiral";
|
||||
/* EDMarketConnector.py: Label for commander name in main window; edsm.py: Game Commander name label in EDSM settings; stats.py: Cmdr stats; theme.py: Label for commander name in main window; In files: EDMarketConnector.py:712; edsm.py:219; stats.py:50; theme.py:227; */
|
||||
"Cmdr" = "Cmdr";
|
||||
|
||||
/* Menu title on OSX. [EDMarketConnector.py] */
|
||||
/* EDMarketConnector.py: 'Ship' or multi-crew role label in main window, as applicable; EDMarketConnector.py: Multicrew role label in main window; In files: EDMarketConnector.py:714; EDMarketConnector.py:1072; */
|
||||
"Role" = "Vloga";
|
||||
|
||||
/* EDMarketConnector.py: 'Ship' or multi-crew role label in main window, as applicable; EDMarketConnector.py: 'Ship' label in main UI; stats.py: Status dialog subtitle; In files: EDMarketConnector.py:714; EDMarketConnector.py:1082; EDMarketConnector.py:1105; stats.py:363; */
|
||||
"Ship" = "Ladja";
|
||||
|
||||
/* EDMarketConnector.py: Label for 'System' line in main UI; prefs.py: Configuration - Label for selection of 'System' provider website; stats.py: Main window; In files: EDMarketConnector.py:716; prefs.py:605; stats.py:365; */
|
||||
"System" = "Sistem";
|
||||
|
||||
/* EDMarketConnector.py: Label for 'Station' line in main UI; prefs.py: Configuration - Label for selection of 'Station' provider website; prefs.py: Appearance - Example 'Normal' text; stats.py: Status dialog subtitle; In files: EDMarketConnector.py:717; prefs.py:623; prefs.py:738; stats.py:366; */
|
||||
"Station" = "Postaja";
|
||||
|
||||
/* EDMarketConnector.py: 'File' menu title on OSX; EDMarketConnector.py: 'File' menu title; EDMarketConnector.py: 'File' menu; In files: EDMarketConnector.py:720; EDMarketConnector.py:735; EDMarketConnector.py:738; EDMarketConnector.py:1791; */
|
||||
"File" = "Datoteka";
|
||||
|
||||
/* EDMarketConnector.py: 'Edit' menu title on OSX; EDMarketConnector.py: 'Edit' menu title; In files: EDMarketConnector.py:721; EDMarketConnector.py:736; EDMarketConnector.py:739; */
|
||||
"Edit" = "Uredi";
|
||||
|
||||
/* EDMarketConnector.py: 'View' menu title on OSX; In files: EDMarketConnector.py:722; */
|
||||
"View" = "Pogled";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Viscount" = "Viscount";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Warrant Officer" = "Warrant Officer";
|
||||
|
||||
/* Shouldn't happen. [EDMarketConnector.py] */
|
||||
"What are you flying?!" = "S čim letiš";
|
||||
|
||||
/* Shouldn't happen. [EDMarketConnector.py] */
|
||||
"Where are you?!" = "Kje se nahajaš";
|
||||
|
||||
/* Shouldn't happen. [EDMarketConnector.py] */
|
||||
"Who are you?!" = "Kdo si";
|
||||
|
||||
/* Menu title on OSX. [EDMarketConnector.py] */
|
||||
/* EDMarketConnector.py: 'Window' menu title on OSX; In files: EDMarketConnector.py:723; */
|
||||
"Window" = "Okno";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
/* EDMarketConnector.py: Help' menu title on OSX; EDMarketConnector.py: 'Help' menu title; In files: EDMarketConnector.py:724; EDMarketConnector.py:737; EDMarketConnector.py:740; */
|
||||
"Help" = "Pomoč";
|
||||
|
||||
/* EDMarketConnector.py: App menu entry on OSX; EDMarketConnector.py: Help > About App; In files: EDMarketConnector.py:727; EDMarketConnector.py:753; EDMarketConnector.py:1347; */
|
||||
"About {APP}" = "O {APP}";
|
||||
|
||||
/* EDMarketConnector.py: Help > Check for Updates...; In files: EDMarketConnector.py:729; EDMarketConnector.py:752; */
|
||||
"Check for Updates..." = "Preveri posodobitve...";
|
||||
|
||||
/* EDMarketConnector.py: File > Save Raw Data...; In files: EDMarketConnector.py:730; EDMarketConnector.py:744; */
|
||||
"Save Raw Data..." = "Shrani Izvirne Podatke...";
|
||||
|
||||
/* EDMarketConnector.py: File > Status; stats.py: Status dialog title; In files: EDMarketConnector.py:731; EDMarketConnector.py:743; stats.py:360; */
|
||||
"Status" = "Status";
|
||||
|
||||
/* EDMarketConnector.py: Help > Privacy Policy; In files: EDMarketConnector.py:732; EDMarketConnector.py:750; */
|
||||
"Privacy Policy" = "Pravilnik o zasebnosti";
|
||||
|
||||
/* EDMarketConnector.py: Help > Release Notes; In files: EDMarketConnector.py:733; EDMarketConnector.py:751; EDMarketConnector.py:1381; */
|
||||
"Release Notes" = "Opombe ob izdaji";
|
||||
|
||||
/* EDMarketConnector.py: File > Settings; prefs.py: File > Settings (macOS); In files: EDMarketConnector.py:745; EDMarketConnector.py:1792; prefs.py:254; */
|
||||
"Settings" = "Nastavitve";
|
||||
|
||||
/* EDMarketConnector.py: File > Exit; In files: EDMarketConnector.py:746; */
|
||||
"Exit" = "Izhod";
|
||||
|
||||
/* EDMarketConnector.py: Help > Documentation; In files: EDMarketConnector.py:749; */
|
||||
"Documentation" = "Dokumentacija";
|
||||
|
||||
/* EDMarketConnector.py: Label for 'Copy' as in 'Copy and Paste'; ttkHyperlinkLabel.py: Label for 'Copy' as in 'Copy and Paste'; In files: EDMarketConnector.py:756; ttkHyperlinkLabel.py:42; */
|
||||
"Copy" = "Kopiraj";
|
||||
|
||||
/* EDMarketConnector.py: Status - Attempting to get a Frontier Auth Access Token; In files: EDMarketConnector.py:762; */
|
||||
"Logging in..." = "Prijava v teku... ";
|
||||
|
||||
/* EDMarketConnector.py: Successfully authenticated with the Frontier website; In files: EDMarketConnector.py:778; EDMarketConnector.py:1215; */
|
||||
"Authentication successful" = "Preverjanje pristnosti je bilo uspešno";
|
||||
|
||||
/* EDMarketConnector.py: Player is not docked at a station, when we expect them to be; In files: EDMarketConnector.py:809; */
|
||||
"You're not docked at a station!" = "Nahajš se v postaji!";
|
||||
|
||||
/* Shortcut settings prompt on OSX. [prefs.py] */
|
||||
/* EDMarketConnector.py: Status - Either no market or no modules data for station from Frontier CAPI; In files: EDMarketConnector.py:817; */
|
||||
"Station doesn't have anything!" = "Postaja nima ničesar";
|
||||
|
||||
/* EDMarketConnector.py: Status - No station market data from Frontier CAPI; In files: EDMarketConnector.py:822; */
|
||||
"Station doesn't have a market!" = "Postaja nima trga";
|
||||
|
||||
/* EDMarketConnector.py: Status - Attempting to retrieve data from Frontier CAPI; EDMarketConnector.py: Status - Attempting to retrieve data from Frontier CAPI to save to file; stats.py: Fetching data from Frontier CAPI in order to display on File > Status; In files: EDMarketConnector.py:867; EDMarketConnector.py:1428; stats.py:279; */
|
||||
"Fetching data..." = "Nalagam podatke...";
|
||||
|
||||
/* EDMarketConnector.py: We didn't have the commander name when we should have; stats.py: Unknown commander; In files: EDMarketConnector.py:884; stats.py:297; */
|
||||
"Who are you?!" = "Kdo si";
|
||||
|
||||
/* EDMarketConnector.py: We don't know where the commander is, when we should; stats.py: Unknown location; In files: EDMarketConnector.py:890; stats.py:307; */
|
||||
"Where are you?!" = "Kje se nahajaš";
|
||||
|
||||
/* EDMarketConnector.py: We don't know what ship the commander is in, when we should; stats.py: Unknown ship; In files: EDMarketConnector.py:894; stats.py:312; */
|
||||
"What are you flying?!" = "S čim letiš";
|
||||
|
||||
/* EDMarketConnector.py: Time when we last obtained Frontier CAPI data; In files: EDMarketConnector.py:1026; */
|
||||
"Last updated at %H:%M:%S" = "Zadnja osvežitev podatkov %H:%M:%S ";
|
||||
|
||||
/* EDMarketConnector.py: Cooldown on 'Update' button; In files: EDMarketConnector.py:1298; */
|
||||
"cooldown {SS}s" = "Posodobitev v {SS}s";
|
||||
|
||||
/* EDMarketConnector.py: Generic 'OK' button label; prefs.py: 'OK' button on Settings/Preferences window; In files: EDMarketConnector.py:1407; prefs.py:304; */
|
||||
"OK" = "Potrdi";
|
||||
|
||||
/* l10n.py: The system default language choice in Settings > Appearance; prefs.py: Settings > Configuration - Label on 'reset journal files location to default' button; prefs.py: The system default language choice in Settings > Appearance; prefs.py: Label for 'Default' theme radio button; In files: l10n.py:194; prefs.py:466; prefs.py:678; prefs.py:711; */
|
||||
"Default" = "Privzeta";
|
||||
|
||||
/* eddn.py: Status text shown while attempting to send data; In files: eddn.py:215; eddn.py:619; eddn.py:969; */
|
||||
"Sending data to EDDN..." = "Pošiljam podatke na EDDN";
|
||||
|
||||
/* eddn.py: Error while trying to send data to EDDN; In files: eddn.py:264; eddn.py:907; eddn.py:942; eddn.py:981; */
|
||||
"Error: Can't connect to EDDN" = "Napaka: povezava z EDDN ni mogoča";
|
||||
|
||||
/* eddn.py: Enable EDDN support for station data checkbox label; In files: eddn.py:699; */
|
||||
"Send station data to the Elite Dangerous Data Network" = "Pošlji podatke postaje na EDDN";
|
||||
|
||||
/* edsm.py: Settings>EDSM - Label on header/URL to EDSM API key page; In files: edsm.py:208; */
|
||||
"Elite Dangerous Star Map credentials" = "EDStarMap uporabniški podatki";
|
||||
|
||||
/* edsm.py: EDSM Commander name label in EDSM settings; In files: edsm.py:227; */
|
||||
"Commander Name" = "Commander ime";
|
||||
|
||||
/* edsm.py: EDSM API key label; inara.py: Inara API key label; In files: edsm.py:235; inara.py:237; */
|
||||
"API Key" = "API ključ";
|
||||
|
||||
/* edsm.py: We have no data on the current commander; prefs.py: No hotkey/shortcut set; stats.py: No rank; In files: edsm.py:262; prefs.py:518; prefs.py:1156; prefs.py:1189; stats.py:117; stats.py:136; stats.py:155; stats.py:172; */
|
||||
"None" = "Brez";
|
||||
|
||||
/* edsm.py: EDSM Plugin - Error message from EDSM API; In files: edsm.py:640; edsm.py:745; */
|
||||
"Error: EDSM {MSG}" = "Napaka: EDSM {MSG}";
|
||||
|
||||
/* edsm.py: EDSM Plugin - Error connecting to EDSM API; In files: edsm.py:677; edsm.py:740; */
|
||||
"Error: Can't connect to EDSM" = "Napaka: Povezava z EDSM ni mogoča";
|
||||
|
||||
/* prefs.py: File > Preferences menu entry for macOS; In files: prefs.py:250; */
|
||||
"Preferences" = "Nastavitve";
|
||||
|
||||
/* prefs.py: Settings > Output - choosing what data to save to files; In files: prefs.py:346; */
|
||||
"Please choose what data to save" = "Izberite podatke, ki jih želite shraniti";
|
||||
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:352; */
|
||||
"Market data in CSV format file" = "Podatki trga v CSV formatu";
|
||||
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:361; */
|
||||
"Market data in Trade Dangerous format file" = "Podatki trga v Trade Dangerous formatu";
|
||||
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:371; */
|
||||
"Ship loadout" = "Oprema ladje";
|
||||
|
||||
/* prefs.py: Settings > Output - Label for "where files are located"; In files: prefs.py:390; prefs.py:409; */
|
||||
"File location" = "Lokacija datoteke";
|
||||
|
||||
/* prefs.py: macOS Preferences - files location selection button; In files: prefs.py:398; prefs.py:448; */
|
||||
"Change..." = "Spremeni...";
|
||||
|
||||
/* prefs.py: NOT-macOS Settings - files location selection button; prefs.py: NOT-macOS Setting - files location selection button; In files: prefs.py:401; prefs.py:451; */
|
||||
"Browse..." = "Prebrskaj...";
|
||||
|
||||
/* prefs.py: Label for 'Output' Settings/Preferences tab; In files: prefs.py:416; */
|
||||
"Output" = "Izpis";
|
||||
|
||||
/* prefs.py: Hotkey/Shortcut settings prompt on OSX; In files: prefs.py:482; */
|
||||
"Keyboard shortcut" = "Bližnjica";
|
||||
|
||||
/* prefs.py: Hotkey/Shortcut settings prompt on Windows; In files: prefs.py:484; */
|
||||
"Hotkey" = "Bližnjica";
|
||||
|
||||
/* prefs.py: macOS Preferences > Configuration - restart the app message; In files: prefs.py:493; */
|
||||
"Re-start {APP} to use shortcuts" = "Ponovno poženi {APP} za uporabo bližnjic";
|
||||
|
||||
/* prefs.py: macOS - Configuration - need to grant the app permission for keyboard shortcuts; In files: prefs.py:502; */
|
||||
"{APP} needs permission to use shortcuts" = "{APP} potrebuje dovoljenja za uporabo bližnjic";
|
||||
|
||||
/* prefs.py: Shortcut settings button on OSX; In files: prefs.py:507; */
|
||||
"Open System Preferences" = "Odpri sistemske nastavitve";
|
||||
|
||||
/* prefs.py: Configuration - Act on hotkey only when ED is in foreground; In files: prefs.py:529; */
|
||||
"Only when Elite: Dangerous is the active app" = "Samo ko je Elite:Dangerous aktivna aplikacija ";
|
||||
|
||||
/* prefs.py: Configuration - play sound when hotkey used; In files: prefs.py:540; */
|
||||
"Play sound" = "Sproži zvok";
|
||||
|
||||
/* prefs.py: Label for 'Configuration' tab in Settings; In files: prefs.py:672; */
|
||||
"Configuration" = "Konfiguracija";
|
||||
|
||||
/* prefs.py: Appearance - Label for selection of application display language; In files: prefs.py:696; */
|
||||
"Language" = "Jezik";
|
||||
|
||||
/* prefs.py: Label for Settings > Appearance > Theme selection; In files: prefs.py:706; */
|
||||
"Theme" = "Tema";
|
||||
|
||||
/* prefs.py: Label for 'Dark' theme radio button; In files: prefs.py:717; */
|
||||
"Dark" = "Temno";
|
||||
|
||||
/* prefs.py: Label for 'Transparent' theme radio button; In files: prefs.py:724; */
|
||||
"Transparent" = "Prosojno";
|
||||
|
||||
/* prefs.py: Label for Settings > Appearance tab; In files: prefs.py:860; */
|
||||
"Appearance" = "Videz";
|
||||
|
||||
/* stats.py: Cmdr stats; In files: stats.py:51; */
|
||||
"Balance" = "Ravnotežje";
|
||||
|
||||
/* stats.py: Cmdr stats; In files: stats.py:52; */
|
||||
"Loan" = "Posojilo";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:57; */
|
||||
"Combat" = "Combat";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:58; */
|
||||
"Trade" = "Trgovanje";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:59; */
|
||||
"Explorer" = "Explorer";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:60; */
|
||||
"CQC" = "CQC";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:61; */
|
||||
"Federation" = "Federacija";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:62; */
|
||||
"Empire" = "Cesarstvo";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:63; */
|
||||
"Powerplay" = "Igra moči";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:71; */
|
||||
"Harmless" = "Harmless";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:72; */
|
||||
"Mostly Harmless" = "Mostly Harmless";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:73; */
|
||||
"Novice" = "Novice";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:74; */
|
||||
"Competent" = "Competent";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:75; */
|
||||
"Expert" = "Expert";
|
||||
|
||||
/* stats.py: Combat rank; stats.py: Empire rank; In files: stats.py:76; stats.py:139; */
|
||||
"Master" = "Master";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:77; */
|
||||
"Dangerous" = "Dangerous";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:78; */
|
||||
"Deadly" = "Deadly";
|
||||
|
||||
/* stats.py: Top rank; In files: stats.py:79; stats.py:90; stats.py:101; stats.py:112; */
|
||||
"Elite" = "Elite";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:82; */
|
||||
"Penniless" = "Peniless";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:83; */
|
||||
"Mostly Penniless" = "Mostly peniless";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:84; */
|
||||
"Peddler" = "Peddler";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:85; */
|
||||
"Dealer" = "Dealer";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:86; */
|
||||
"Merchant" = "Merchant";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:87; */
|
||||
"Broker" = "Broker";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:88; */
|
||||
"Entrepreneur" = "Enterpreneur";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:89; */
|
||||
"Tycoon" = "Tycoon";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:93; */
|
||||
"Aimless" = "Aimless";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:94; */
|
||||
"Mostly Aimless" = "Mostly Aimless";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:95; */
|
||||
"Scout" = "Scout";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:96; */
|
||||
"Surveyor" = "Surveyor";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:97; */
|
||||
"Trailblazer" = "Trailblazer";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:98; */
|
||||
"Pathfinder" = "Pathfinder";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:99; */
|
||||
"Ranger" = "Ranger";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:100; */
|
||||
"Pioneer" = "Pioneer";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:104; */
|
||||
"Helpless" = "Helpless";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:105; */
|
||||
"Mostly Helpless" = "Mostly Helpless";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:106; */
|
||||
"Amateur" = "Amateur";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:107; */
|
||||
"Semi Professional" = "Semi Professional";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:108; */
|
||||
"Professional" = "Professional";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:109; */
|
||||
"Champion" = "Champion";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:110; */
|
||||
"Hero" = "Hero";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:111; */
|
||||
"Gladiator" = "Gladiator";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:118; */
|
||||
"Recruit" = "Recruit";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:119; */
|
||||
"Cadet" = "Cadet";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:120; */
|
||||
"Midshipman" = "Midshipman";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:121; */
|
||||
"Petty Officer" = "Petty Officer";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:122; */
|
||||
"Chief Petty Officer" = "Chief Petty Officer";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:123; */
|
||||
"Warrant Officer" = "Warrant Officer";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:124; */
|
||||
"Ensign" = "Ensign";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:125; */
|
||||
"Lieutenant" = "LIeutenant";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:126; */
|
||||
"Lieutenant Commander" = "Lieutenant Commander";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:127; */
|
||||
"Post Commander" = "Post Commander";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:128; */
|
||||
"Post Captain" = "Post Captain";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:129; */
|
||||
"Rear Admiral" = "Read Admiral";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:130; */
|
||||
"Vice Admiral" = "Vice Admiral";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:131; */
|
||||
"Admiral" = "Admiral";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:137; */
|
||||
"Outsider" = "Outsider";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:138; */
|
||||
"Serf" = "Serif";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:140; */
|
||||
"Squire" = "Squire";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:141; */
|
||||
"Knight" = "Knight";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:142; */
|
||||
"Lord" = "Lord";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:143; */
|
||||
"Baron" = "Baron";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:144; */
|
||||
"Viscount" = "Viscount";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:145; */
|
||||
"Count" = "Count";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:146; */
|
||||
"Earl" = "Earl";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:147; */
|
||||
"Marquis" = "Marquis";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:148; */
|
||||
"Duke" = "Duke";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:149; */
|
||||
"Prince" = "Prince";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:150; */
|
||||
"King" = "King";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:156; */
|
||||
"Rating 1" = "Ocena 1";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:157; */
|
||||
"Rating 2" = "Ocena 2";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:158; */
|
||||
"Rating 3" = "Ocena 3";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:159; */
|
||||
"Rating 4" = "Ocena 4";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:160; */
|
||||
"Rating 5" = "Ocena 5";
|
||||
|
||||
/* stats.py: Status dialog subtitle - CR value of ship; In files: stats.py:367; */
|
||||
"Value" = "Vrednost";
|
||||
|
||||
/* stats.py: Status dialog title; In files: stats.py:376; */
|
||||
"Ships" = "Ladje";
|
||||
|
File diff suppressed because it is too large
Load Diff
1171
L10n/sr-Latn.strings
1171
L10n/sr-Latn.strings
File diff suppressed because it is too large
Load Diff
@ -1,522 +1,521 @@
|
||||
/* Language name */
|
||||
"!Language" = "Svenska";
|
||||
|
||||
/* App menu entry on OSX. [EDMarketConnector.py] */
|
||||
"About {APP}" = "Om {APP}";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Admiral" = "Admiral";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Aimless" = "Aimless";
|
||||
|
||||
/* Appearance setting. [EDMarketConnector.py] */
|
||||
"Always on top" = "Alltid överst";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Amateur" = "Amatör";
|
||||
|
||||
/* EDSM setting. [edsm.py] */
|
||||
"API Key" = "API Nyckel";
|
||||
|
||||
/* Tab heading in settings. [prefs.py] */
|
||||
"Appearance" = "Utseende";
|
||||
|
||||
/* Successfully authenticated with the Frontier website. [EDMarketConnector.py] */
|
||||
"Authentication successful" = "Autentisering lyckad";
|
||||
|
||||
/* Output setting. [prefs.py] */
|
||||
"Automatically update on docking" = "Automatisk uppdatering vid dockning";
|
||||
|
||||
/* Cmdr stats. [stats.py] */
|
||||
"Balance" = "Balance";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Baron" = "Baron";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Broker" = "Broker";
|
||||
|
||||
/* Folder selection button on Windows. [prefs.py] */
|
||||
"Browse..." = "Bläddra...";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Cadet" = "Cadet";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Champion" = "Champion";
|
||||
|
||||
/* Folder selection button on OSX. [prefs.py] */
|
||||
"Change..." = "Ändra...";
|
||||
|
||||
/* Menu item. [EDMarketConnector.py] */
|
||||
"Check for Updates..." = "Sök efter uppdateringar...";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Chief Petty Officer" = "Chief Petty Officer";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"Cmdr" = "Cmdr";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Combat" = "Combat";
|
||||
|
||||
/* EDSM setting. [edsm.py] */
|
||||
"Commander Name" = "CMDR namn";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Competent" = "Competent";
|
||||
|
||||
/* Tab heading in settings. [prefs.py] */
|
||||
"Configuration" = "Konfiguration";
|
||||
|
||||
/* Update button in main window. [EDMarketConnector.py] */
|
||||
"cooldown {SS}s" = "Vänta {SS}s";
|
||||
|
||||
/* As in Copy and Paste. [EDMarketConnector.py] */
|
||||
"Copy" = "Kopiera";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Count" = "Count";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"CQC" = "CQC";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Dangerous" = "Dangerous";
|
||||
|
||||
/* Appearance theme setting. [prefs.py] */
|
||||
"Dark" = "Mörk";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Deadly" = "Deadly";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Dealer" = "Dealer";
|
||||
|
||||
/* Appearance theme and language setting. [l10n.py] */
|
||||
"Default" = "Standard";
|
||||
|
||||
/* Output setting under 'Send system and scan data to the Elite Dangerous Data Network' new in E:D 2.2. [eddn.py] */
|
||||
"Delay sending until docked" = "Skicka bara uppdateringar till EDDN när du är dockad";
|
||||
|
||||
/* Option to disabled Automatic Check For Updates whilst in-game [prefs.py] */
|
||||
"Disable Automatic Application Updates Check when in-game" = "Leta inte efter programuppdateringar när spelet körs";
|
||||
|
||||
/* List of plugins in settings. [prefs.py] */
|
||||
"Disabled Plugins" = "Avaktiverade plugins";
|
||||
|
||||
/* Help menu item. [EDMarketConnector.py] */
|
||||
"Documentation" = "Dokumentation";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Duke" = "Duke";
|
||||
|
||||
/* Location of the new Journal file in E:D 2.2. [EDMarketConnector.py] */
|
||||
"E:D journal file location" = "E:D journal-fil sökväg";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Earl" = "Earl";
|
||||
|
||||
/* Menu title. [EDMarketConnector.py] */
|
||||
"Edit" = "Ändra";
|
||||
|
||||
/* Popup title: Warning about plugins without Python 3.x support [EDMarketConnector.py] */
|
||||
"EDMC: Plugins Without Python 3.x Support" = "EDMC: Plugins utan stöd för Python 3.x";
|
||||
|
||||
/* Top rank. [stats.py] */
|
||||
"Elite" = "Elite";
|
||||
|
||||
/* Section heading in settings. [edsm.py] */
|
||||
"Elite Dangerous Star Map credentials" = "Elite Dangerous Star Map användaruppgifter";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Empire" = "Empire";
|
||||
|
||||
/* List of plugins in settings. [prefs.py] */
|
||||
"Enabled Plugins" = "Aktiverade plugins";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Ensign" = "Ensign";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Entrepreneur" = "Entrepreneur";
|
||||
|
||||
/* [eddn.py] */
|
||||
"Error: Can't connect to EDDN" = "Fel: Kan inte ansluta till EDDN";
|
||||
|
||||
/* [edsm.py] */
|
||||
"Error: Can't connect to EDSM" = "Fel: Kan inte ansluta till EDSM";
|
||||
|
||||
/* [inara.py] */
|
||||
"Error: Can't connect to Inara" = "Fel: Kan inte ansluta till Inara";
|
||||
|
||||
/* [edsm.py] */
|
||||
"Error: EDSM {MSG}" = "Fel: EDSM {MSG}";
|
||||
|
||||
|
||||
/* OLD: Raised when cannot contact the Companion API server. [companion.py] */
|
||||
"Error: Frontier server is down" = "Fel: Frontier server okontaktbar";
|
||||
|
||||
/* Raised when Companion API server is returning old data, e.g. when the servers are too busy. [companion.py] */
|
||||
/* companion.py: Frontier CAPI data doesn't agree with latest Journal game location; In files: companion.py:190; */
|
||||
"Error: Frontier server is lagging" = "Fel: Frontier lag på server";
|
||||
|
||||
/* companion.py: Generic "something went wrong with Frontier Auth" error; In files: companion.py:214; */
|
||||
"Error: Invalid Credentials" = "Fel: ogiltligt användarnamn eller lösenord";
|
||||
|
||||
/* companion.py: Frontier CAPI authorisation not for currently game-active commander; In files: companion.py:230; */
|
||||
"Error: Wrong Cmdr" = "Fel: Fel användare. Har du flera konton eller en gammal API-nyckel från ett nollställt konto?";
|
||||
|
||||
|
||||
/* [inara.py] */
|
||||
"Error: Can't connect to Inara" = "Fel: Kan inte ansluta till Inara";
|
||||
/* EDMarketConnector.py: Update button in main window; In files: EDMarketConnector.py:424; EDMarketConnector.py:718; EDMarketConnector.py:1302; */
|
||||
"Update" = "Uppdatera";
|
||||
|
||||
/* EDMarketConnector.py: Appearance - Label for checkbox to select if application always on top; prefs.py: Appearance - Label for checkbox to select if application always on top; In files: EDMarketConnector.py:507; prefs.py:843; */
|
||||
"Always on top" = "Alltid överst";
|
||||
|
||||
/* EDMarketConnector.py: Label for commander name in main window; edsm.py: Game Commander name label in EDSM settings; stats.py: Cmdr stats; theme.py: Label for commander name in main window; In files: EDMarketConnector.py:712; edsm.py:219; stats.py:50; theme.py:227; */
|
||||
"Cmdr" = "Cmdr";
|
||||
|
||||
/* EDMarketConnector.py: 'Ship' or multi-crew role label in main window, as applicable; EDMarketConnector.py: Multicrew role label in main window; In files: EDMarketConnector.py:714; EDMarketConnector.py:1072; */
|
||||
"Role" = "Roll";
|
||||
|
||||
/* EDMarketConnector.py: 'Ship' or multi-crew role label in main window, as applicable; EDMarketConnector.py: 'Ship' label in main UI; stats.py: Status dialog subtitle; In files: EDMarketConnector.py:714; EDMarketConnector.py:1082; EDMarketConnector.py:1105; stats.py:363; */
|
||||
"Ship" = "Skepp";
|
||||
|
||||
/* EDMarketConnector.py: Label for 'System' line in main UI; prefs.py: Configuration - Label for selection of 'System' provider website; stats.py: Main window; In files: EDMarketConnector.py:716; prefs.py:605; stats.py:365; */
|
||||
"System" = "System";
|
||||
|
||||
/* EDMarketConnector.py: Label for 'Station' line in main UI; prefs.py: Configuration - Label for selection of 'Station' provider website; prefs.py: Appearance - Example 'Normal' text; stats.py: Status dialog subtitle; In files: EDMarketConnector.py:717; prefs.py:623; prefs.py:738; stats.py:366; */
|
||||
"Station" = "Station";
|
||||
|
||||
/* EDMarketConnector.py: 'File' menu title on OSX; EDMarketConnector.py: 'File' menu title; EDMarketConnector.py: 'File' menu; In files: EDMarketConnector.py:720; EDMarketConnector.py:735; EDMarketConnector.py:738; EDMarketConnector.py:1791; */
|
||||
"File" = "Fil";
|
||||
|
||||
/* EDMarketConnector.py: 'Edit' menu title on OSX; EDMarketConnector.py: 'Edit' menu title; In files: EDMarketConnector.py:721; EDMarketConnector.py:736; EDMarketConnector.py:739; */
|
||||
"Edit" = "Ändra";
|
||||
|
||||
/* EDMarketConnector.py: 'View' menu title on OSX; In files: EDMarketConnector.py:722; */
|
||||
"View" = "View";
|
||||
|
||||
/* EDMarketConnector.py: 'Window' menu title on OSX; In files: EDMarketConnector.py:723; */
|
||||
"Window" = "Fönster";
|
||||
|
||||
/* EDMarketConnector.py: Help' menu title on OSX; EDMarketConnector.py: 'Help' menu title; In files: EDMarketConnector.py:724; EDMarketConnector.py:737; EDMarketConnector.py:740; */
|
||||
"Help" = "Hjälp";
|
||||
|
||||
/* EDMarketConnector.py: App menu entry on OSX; EDMarketConnector.py: Help > About App; In files: EDMarketConnector.py:727; EDMarketConnector.py:753; EDMarketConnector.py:1347; */
|
||||
"About {APP}" = "Om {APP}";
|
||||
|
||||
/* EDMarketConnector.py: Help > Check for Updates...; In files: EDMarketConnector.py:729; EDMarketConnector.py:752; */
|
||||
"Check for Updates..." = "Sök efter uppdateringar...";
|
||||
|
||||
/* EDMarketConnector.py: File > Save Raw Data...; In files: EDMarketConnector.py:730; EDMarketConnector.py:744; */
|
||||
"Save Raw Data..." = "Lagra rådata...";
|
||||
|
||||
/* EDMarketConnector.py: File > Status; stats.py: Status dialog title; In files: EDMarketConnector.py:731; EDMarketConnector.py:743; stats.py:360; */
|
||||
"Status" = "Status";
|
||||
|
||||
/* EDMarketConnector.py: Help > Privacy Policy; In files: EDMarketConnector.py:732; EDMarketConnector.py:750; */
|
||||
"Privacy Policy" = "Integritetspolicy";
|
||||
|
||||
/* EDMarketConnector.py: Help > Release Notes; In files: EDMarketConnector.py:733; EDMarketConnector.py:751; EDMarketConnector.py:1381; */
|
||||
"Release Notes" = "Versionsinformation";
|
||||
|
||||
/* EDMarketConnector.py: File > Settings; prefs.py: File > Settings (macOS); In files: EDMarketConnector.py:745; EDMarketConnector.py:1792; prefs.py:254; */
|
||||
"Settings" = "Inställningar";
|
||||
|
||||
/* EDMarketConnector.py: File > Exit; In files: EDMarketConnector.py:746; */
|
||||
"Exit" = "Avsluta";
|
||||
|
||||
/* EDMarketConnector.py: Help > Documentation; In files: EDMarketConnector.py:749; */
|
||||
"Documentation" = "Dokumentation";
|
||||
|
||||
/* EDMarketConnector.py: Label for 'Copy' as in 'Copy and Paste'; ttkHyperlinkLabel.py: Label for 'Copy' as in 'Copy and Paste'; In files: EDMarketConnector.py:756; ttkHyperlinkLabel.py:42; */
|
||||
"Copy" = "Kopiera";
|
||||
|
||||
/* EDMarketConnector.py: Status - Attempting to get a Frontier Auth Access Token; In files: EDMarketConnector.py:762; */
|
||||
"Logging in..." = "Loggar in...";
|
||||
|
||||
/* EDMarketConnector.py: Successfully authenticated with the Frontier website; In files: EDMarketConnector.py:778; EDMarketConnector.py:1215; */
|
||||
"Authentication successful" = "Autentisering lyckad";
|
||||
|
||||
/* EDMarketConnector.py: Player is not docked at a station, when we expect them to be; In files: EDMarketConnector.py:809; */
|
||||
"You're not docked at a station!" = "Du är inte dockad vid en station!";
|
||||
|
||||
/* EDMarketConnector.py: Status - Either no market or no modules data for station from Frontier CAPI; In files: EDMarketConnector.py:817; */
|
||||
"Station doesn't have anything!" = "Stationen är tom!";
|
||||
|
||||
/* EDMarketConnector.py: Status - No station market data from Frontier CAPI; In files: EDMarketConnector.py:822; */
|
||||
"Station doesn't have a market!" = "Stationen har ingen marknad!";
|
||||
|
||||
/* EDMarketConnector.py: Status - Attempting to retrieve data from Frontier CAPI; EDMarketConnector.py: Status - Attempting to retrieve data from Frontier CAPI to save to file; stats.py: Fetching data from Frontier CAPI in order to display on File > Status; In files: EDMarketConnector.py:867; EDMarketConnector.py:1428; stats.py:279; */
|
||||
"Fetching data..." = "Hämtar data...";
|
||||
|
||||
/* EDMarketConnector.py: We didn't have the commander name when we should have; stats.py: Unknown commander; In files: EDMarketConnector.py:884; stats.py:297; */
|
||||
"Who are you?!" = "Vem är du? (felmeddelande)";
|
||||
|
||||
/* EDMarketConnector.py: We don't know where the commander is, when we should; stats.py: Unknown location; In files: EDMarketConnector.py:890; stats.py:307; */
|
||||
"Where are you?!" = "Vart är du? (felmeddelande)";
|
||||
|
||||
/* EDMarketConnector.py: We don't know what ship the commander is in, when we should; stats.py: Unknown ship; In files: EDMarketConnector.py:894; stats.py:312; */
|
||||
"What are you flying?!" = "Okänt skepp? (felmeddelande)";
|
||||
|
||||
/* EDMarketConnector.py: Time when we last obtained Frontier CAPI data; In files: EDMarketConnector.py:1026; */
|
||||
"Last updated at %H:%M:%S" = "Senaste uppdatering: %H:%M:%S";
|
||||
|
||||
/* EDMarketConnector.py: Multicrew role; In files: EDMarketConnector.py:1052; */
|
||||
"Fighter" = "Fighter";
|
||||
|
||||
/* EDMarketConnector.py: Multicrew role; In files: EDMarketConnector.py:1053; */
|
||||
"Gunner" = "Gunner";
|
||||
|
||||
/* EDMarketConnector.py: Multicrew role; In files: EDMarketConnector.py:1054; */
|
||||
"Helm" = "Helm";
|
||||
|
||||
/* EDMarketConnector.py: Cooldown on 'Update' button; In files: EDMarketConnector.py:1298; */
|
||||
"cooldown {SS}s" = "Vänta {SS}s";
|
||||
|
||||
/* EDMarketConnector.py: Generic 'OK' button label; prefs.py: 'OK' button on Settings/Preferences window; In files: EDMarketConnector.py:1407; prefs.py:304; */
|
||||
"OK" = "OK";
|
||||
|
||||
/* EDMarketConnector.py: Popup-text about 'active' plugins without Python 3.x support; In files: EDMarketConnector.py:1780:1786; */
|
||||
"One or more of your enabled plugins do not yet have support for Python 3.x. Please see the list on the '{PLUGINS}' tab of '{FILE}' > '{SETTINGS}'. You should check if there is an updated version available, else alert the developer that they need to update the code for Python 3.x.\r\n\r\nYou can disable a plugin by renaming its folder to have '{DISABLED}' on the end of the name." = "En eller flera aktiverade plugins har inte stöd för Python 3.x. Var vänlig kontrollera listan med plugins under fliken '{PLUGINS}' under '{FILE}' > '{SETTINGS}'. Kontrollera om det finns en nyare version tillgänglig eller informera utvecklaren.\n\nDu kan också avaktivera din plugin genom att ändra slutet av namnet på mappen till '{DISABLED}'";
|
||||
|
||||
/* EDMarketConnector.py: Settings > Plugins tab; prefs.py: Label on Settings > Plugins tab; In files: EDMarketConnector.py:1790; prefs.py:953; */
|
||||
"Plugins" = "Plugins";
|
||||
|
||||
/* EDMarketConnector.py: Popup window title for list of 'enabled' plugins that don't work with Python 3.x; In files: EDMarketConnector.py:1801; */
|
||||
"EDMC: Plugins Without Python 3.x Support" = "EDMC: Plugins utan stöd för Python 3.x";
|
||||
|
||||
/* l10n.py: The system default language choice in Settings > Appearance; prefs.py: Settings > Configuration - Label on 'reset journal files location to default' button; prefs.py: The system default language choice in Settings > Appearance; prefs.py: Label for 'Default' theme radio button; In files: l10n.py:194; prefs.py:466; prefs.py:678; prefs.py:711; */
|
||||
"Default" = "Standard";
|
||||
|
||||
/* eddn.py: Status text shown while attempting to send data; In files: eddn.py:215; eddn.py:619; eddn.py:969; */
|
||||
"Sending data to EDDN..." = "Skickar data till EDDN...";
|
||||
|
||||
/* eddn.py: Error while trying to send data to EDDN; In files: eddn.py:264; eddn.py:907; eddn.py:942; eddn.py:981; */
|
||||
"Error: Can't connect to EDDN" = "Fel: Kan inte ansluta till EDDN";
|
||||
|
||||
/* eddn.py: Enable EDDN support for station data checkbox label; In files: eddn.py:699; */
|
||||
"Send station data to the Elite Dangerous Data Network" = "Skicka stationsdata till Elite Dangerous Data Network";
|
||||
|
||||
/* eddn.py: Enable EDDN support for system and other scan data checkbox label; In files: eddn.py:710; */
|
||||
"Send system and scan data to the Elite Dangerous Data Network" = "Skicka system och scan-data till Elite Dangerous Data Network";
|
||||
|
||||
/* eddn.py: EDDN delay sending until docked option is on, this message notes that a send was skipped due to this; In files: eddn.py:721; */
|
||||
"Delay sending until docked" = "Skicka bara uppdateringar till EDDN när du är dockad";
|
||||
|
||||
/* edsm.py: Settings>EDSM - Label on checkbox for 'send data'; In files: edsm.py:198; */
|
||||
"Send flight log and Cmdr status to EDSM" = "Skicka flight log-data och Cmdr-status till EDSM";
|
||||
|
||||
/* edsm.py: Settings>EDSM - Label on header/URL to EDSM API key page; In files: edsm.py:208; */
|
||||
"Elite Dangerous Star Map credentials" = "Elite Dangerous Star Map användaruppgifter";
|
||||
|
||||
/* edsm.py: EDSM Commander name label in EDSM settings; In files: edsm.py:227; */
|
||||
"Commander Name" = "CMDR namn";
|
||||
|
||||
/* edsm.py: EDSM API key label; inara.py: Inara API key label; In files: edsm.py:235; inara.py:237; */
|
||||
"API Key" = "API Nyckel";
|
||||
|
||||
/* edsm.py: We have no data on the current commander; prefs.py: No hotkey/shortcut set; stats.py: No rank; In files: edsm.py:262; prefs.py:518; prefs.py:1156; prefs.py:1189; stats.py:117; stats.py:136; stats.py:155; stats.py:172; */
|
||||
"None" = "Ingen";
|
||||
|
||||
/* edsm.py: EDSM Plugin - Error message from EDSM API; In files: edsm.py:640; edsm.py:745; */
|
||||
"Error: EDSM {MSG}" = "Fel: EDSM {MSG}";
|
||||
|
||||
/* edsm.py: EDSM Plugin - Error connecting to EDSM API; In files: edsm.py:677; edsm.py:740; */
|
||||
"Error: Can't connect to EDSM" = "Fel: Kan inte ansluta till EDSM";
|
||||
|
||||
/* inara.py: Checkbox to enable INARA API Usage; In files: inara.py:216; */
|
||||
"Send flight log and Cmdr status to Inara" = "Skicka flight log-data och Cmdr-status till Inara";
|
||||
|
||||
/* inara.py: Text for INARA API keys link ( goes to https://inara.cz/settings-api ); In files: inara.py:228; */
|
||||
"Inara credentials" = "Inara autentiseringsuppgifter";
|
||||
|
||||
|
||||
/* Raised when the Companion API server thinks that the user has not purchased E:D. i.e. doesn't have the correct 'SKU'. [companion.py] */
|
||||
"Error: Frontier server SKU problem" = "Fel: Frontier server SKU problem (licensnyckel)";
|
||||
|
||||
/* [inara.py] */
|
||||
/* inara.py: INARA API returned some kind of error (error message will be contained in {MSG}); In files: inara.py:1549; inara.py:1562; */
|
||||
"Error: Inara {MSG}" = "Fel: Inara {MSG}";
|
||||
|
||||
/* [companion.py] */
|
||||
"Error: Invalid Credentials" = "Fel: ogiltligt användarnamn eller lösenord";
|
||||
|
||||
/* Raised when the user has multiple accounts and the username/password setting is not for the account they're currently playing OR the user has reset their Cmdr and the Companion API server is still returning data for the old Cmdr. [companion.py] */
|
||||
"Error: Wrong Cmdr" = "Fel: Fel användare. Har du flera konton eller en gammal API-nyckel från ett nollställt konto?";
|
||||
|
||||
/* Item in the File menu on Windows. [EDMarketConnector.py] */
|
||||
"Exit" = "Avsluta";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Expert" = "Expert";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Explorer" = "Explorer";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Federation" = "Federation";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Fetching data..." = "Hämtar data...";
|
||||
|
||||
/* Multicrew role. [EDMarketConnector.py] */
|
||||
"Fighter" = "Fighter";
|
||||
|
||||
/* Menu title. [EDMarketConnector.py] */
|
||||
"File" = "Fil";
|
||||
|
||||
/* Section heading in settings. [prefs.py] */
|
||||
"File location" = "Filsökväg";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Gladiator" = "Gladiator";
|
||||
|
||||
/* Multicrew role. [EDMarketConnector.py] */
|
||||
"Gunner" = "Gunner";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Harmless" = "Harmless";
|
||||
|
||||
/* Multicrew role. [EDMarketConnector.py] */
|
||||
"Helm" = "Helm";
|
||||
|
||||
/* Menu title. [EDMarketConnector.py] */
|
||||
"Help" = "Hjälp";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Helpless" = "Helpless";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Hero" = "Hero";
|
||||
|
||||
/* Dark theme color setting. [prefs.py] */
|
||||
"Highlighted text" = "Markerad text";
|
||||
|
||||
/* Hotkey/Shortcut settings prompt on Windows. [prefs.py] */
|
||||
"Hotkey" = "Snabbkommando";
|
||||
|
||||
/* Section heading in settings. [inara.py] */
|
||||
"Inara credentials" = "Inara autentiseringsuppgifter";
|
||||
|
||||
/* Settings>Plugins>Information on migrating plugins [prefs.py] */
|
||||
"Information on migrating plugins" = "Information om migrering av plugins";
|
||||
|
||||
/* Hotkey/Shortcut settings prompt on OSX. [prefs.py] */
|
||||
"Keyboard shortcut" = "Genväg, tangentbord";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"King" = "King";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Knight" = "Knight";
|
||||
|
||||
/* Appearance setting prompt. [prefs.py] */
|
||||
"Language" = "Språk";
|
||||
|
||||
/* [EDMarketConnector.py] - Leave '%H:%M:%S' as-is */
|
||||
"Last updated at %H:%M:%S" = "Senaste uppdatering: %H:%M:%S";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Lieutenant" = "Lieutenant";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Lieutenant Commander" = "Lieutenant Commander";
|
||||
|
||||
/* Cmdr stats. [stats.py] */
|
||||
"Loan" = "Lån";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Logging in..." = "Loggar in...";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Lord" = "Lord";
|
||||
|
||||
/* [prefs.py] */
|
||||
"Market data in CSV format file" = "Marknadsdata i CSV-formaterad fil";
|
||||
|
||||
/* [prefs.py] */
|
||||
"Market data in Trade Dangerous format file" = "Marknadsdata i Trade Dangerous-formaterad fil";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Marquis" = "Marquis";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Master" = "Master";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Merchant" = "Merchant";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Midshipman" = "Midshipman";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Mostly Aimless" = "Mostly Aimless";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Mostly Harmless" = "Mostly Harmless";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Mostly Helpless" = "Mostly Helpless";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Mostly Penniless" = "Mostly Penniless";
|
||||
|
||||
/* No hotkey/shortcut currently defined. [prefs.py] */
|
||||
"None" = "Ingen";
|
||||
|
||||
/* Dark theme color setting. [prefs.py] */
|
||||
"Normal text" = "Normal text";
|
||||
|
||||
/* Combat rank. [stats.py] */
|
||||
"Novice" = "Novice";
|
||||
|
||||
/* [prefs.py] */
|
||||
"OK" = "OK";
|
||||
|
||||
/* Popup body: Warning about plugins without Python 3.x support [EDMarketConnector.py] */
|
||||
"One or more of your enabled plugins do not yet have support for Python 3.x. Please see the list on the '{PLUGINS}' tab of '{FILE}' > '{SETTINGS}'. You should check if there is an updated version available, else alert the developer that they need to update the code for Python 3.x.\r\n\r\nYou can disable a plugin by renaming its folder to have '{DISABLED}' on the end of the name." = "En eller flera aktiverade plugins har inte stöd för Python 3.x. Var vänlig kontrollera listan med plugins under fliken '{PLUGINS}' under '{FILE}' > '{SETTINGS}'. Kontrollera om det finns en nyare version tillgänglig eller informera utvecklaren.\n\nDu kan också avaktivera din plugin genom att ändra slutet av namnet på mappen till '{DISABLED}'";
|
||||
|
||||
/* Hotkey/Shortcut setting. [prefs.py] */
|
||||
"Only when Elite: Dangerous is the active app" = "Bara när: Elite Dangerous är det aktiva programmet";
|
||||
|
||||
/* Button that opens a folder in Explorer/Finder. [prefs.py] */
|
||||
"Open" = "Öppna";
|
||||
|
||||
/* Shortcut settings button on OSX. [prefs.py] */
|
||||
"Open System Preferences" = "Öppna systeminställningar";
|
||||
|
||||
/* Tab heading in settings. [prefs.py] */
|
||||
"Output" = "Exportdata";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Outsider" = "Outsider";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Pathfinder" = "Pathfinder";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Peddler" = "Peddler";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
"Penniless" = "Penniless";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Petty Officer" = "Petty Officer";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Pioneer" = "Pioneer";
|
||||
|
||||
/* Hotkey/Shortcut setting. [prefs.py] */
|
||||
"Play sound" = "Spela ljud";
|
||||
|
||||
/* [prefs.py] */
|
||||
"Please choose what data to save" = "Välj vilket data som skall lagras";
|
||||
|
||||
/* Tab heading in settings. [prefs.py] */
|
||||
"Plugins" = "Plugins";
|
||||
|
||||
/* Section heading in settings. [prefs.py] */
|
||||
"Plugins folder" = "Mapp för plugins";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Post Captain" = "Post Captain";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Post Commander" = "Post Commander";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Powerplay" = "Powerplay";
|
||||
|
||||
/* [prefs.py] */
|
||||
/* prefs.py: File > Preferences menu entry for macOS; In files: prefs.py:250; */
|
||||
"Preferences" = "Inställningar";
|
||||
|
||||
/* Settings prompt for preferred ship loadout, system and station info websites. [prefs.py] */
|
||||
"Preferred websites" = "Föredragna webbsidor";
|
||||
/* prefs.py: Settings > Output - choosing what data to save to files; In files: prefs.py:346; */
|
||||
"Please choose what data to save" = "Välj vilket data som skall lagras";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Prince" = "Prince";
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:352; */
|
||||
"Market data in CSV format file" = "Marknadsdata i CSV-formaterad fil";
|
||||
|
||||
/* Help menu item. [EDMarketConnector.py] */
|
||||
"Privacy Policy" = "Integritetspolicy";
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:361; */
|
||||
"Market data in Trade Dangerous format file" = "Marknadsdata i Trade Dangerous-formaterad fil";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Professional" = "Professional";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Ranger" = "Ranger";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 1" = "Rating 1";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 2" = "Rating 2";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 3" = "Rating 3";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 4" = "Rating 4";
|
||||
|
||||
/* Power rank. [stats.py] */
|
||||
"Rating 5" = "Rating 5";
|
||||
|
||||
/* Shortcut settings prompt on OSX. [prefs.py] */
|
||||
"Re-start {APP} to use shortcuts" = "Starta om {APP} för att använda genvägar";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Rear Admiral" = "Rear Admiral";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Recruit" = "Recruit";
|
||||
|
||||
/* Help menu item. [EDMarketConnector.py] */
|
||||
"Release Notes" = "Versionsinformation";
|
||||
|
||||
/* Multicrew role label in main window. [EDMarketConnector.py] */
|
||||
"Role" = "Roll";
|
||||
|
||||
/* Menu item. [EDMarketConnector.py] */
|
||||
"Save Raw Data..." = "Lagra rådata...";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Scout" = "Scout";
|
||||
|
||||
/* CQC rank. [stats.py] */
|
||||
"Semi Professional" = "Semi Professional";
|
||||
|
||||
/* [edsm.py] */
|
||||
"Send flight log and Cmdr status to EDSM" = "Skicka flight log-data och Cmdr-status till EDSM";
|
||||
|
||||
/* [inara.py] */
|
||||
"Send flight log and Cmdr status to Inara" = "Skicka flight log-data och Cmdr-status till Inara";
|
||||
|
||||
/* Output setting. [eddn.py] */
|
||||
"Send station data to the Elite Dangerous Data Network" = "Skicka stationsdata till Elite Dangerous Data Network";
|
||||
|
||||
/* Output setting new in E:D 2.2. [eddn.py] */
|
||||
"Send system and scan data to the Elite Dangerous Data Network" = "Skicka system och scan-data till Elite Dangerous Data Network";
|
||||
|
||||
/* [eddn.py] */
|
||||
"Sending data to EDDN..." = "Skickar data till EDDN...";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Serf" = "Serf";
|
||||
|
||||
/* Item in the File menu on Windows. [EDMarketConnector.py] */
|
||||
"Settings" = "Inställningar";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"Ship" = "Skepp";
|
||||
|
||||
/* Output setting. [prefs.py] */
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:371; */
|
||||
"Ship loadout" = "Översikt av skepp";
|
||||
|
||||
/* Status dialog title. [stats.py] */
|
||||
"Ships" = "Skepp";
|
||||
/* prefs.py: Settings > Output option; In files: prefs.py:381; */
|
||||
"Automatically update on docking" = "Automatisk uppdatering vid dockning";
|
||||
|
||||
/* Setting to decide which ship outfitting website to link to - either E:D Shipyard or Coriolis. [prefs.py] */
|
||||
/* prefs.py: Settings > Output - Label for "where files are located"; In files: prefs.py:390; prefs.py:409; */
|
||||
"File location" = "Filsökväg";
|
||||
|
||||
/* prefs.py: macOS Preferences - files location selection button; In files: prefs.py:398; prefs.py:448; */
|
||||
"Change..." = "Ändra...";
|
||||
|
||||
/* prefs.py: NOT-macOS Settings - files location selection button; prefs.py: NOT-macOS Setting - files location selection button; In files: prefs.py:401; prefs.py:451; */
|
||||
"Browse..." = "Bläddra...";
|
||||
|
||||
/* prefs.py: Label for 'Output' Settings/Preferences tab; In files: prefs.py:416; */
|
||||
"Output" = "Exportdata";
|
||||
|
||||
/* prefs.py: Settings > Configuration - Label for Journal files location; In files: prefs.py:442; prefs.py:457; */
|
||||
"E:D journal file location" = "E:D journal-fil sökväg";
|
||||
|
||||
/* prefs.py: Hotkey/Shortcut settings prompt on OSX; In files: prefs.py:482; */
|
||||
"Keyboard shortcut" = "Genväg, tangentbord";
|
||||
|
||||
/* prefs.py: Hotkey/Shortcut settings prompt on Windows; In files: prefs.py:484; */
|
||||
"Hotkey" = "Snabbkommando";
|
||||
|
||||
/* prefs.py: macOS Preferences > Configuration - restart the app message; In files: prefs.py:493; */
|
||||
"Re-start {APP} to use shortcuts" = "Starta om {APP} för att använda genvägar";
|
||||
|
||||
/* prefs.py: macOS - Configuration - need to grant the app permission for keyboard shortcuts; In files: prefs.py:502; */
|
||||
"{APP} needs permission to use shortcuts" = "{APP} behöver rättigheter för att använda genvägar";
|
||||
|
||||
/* prefs.py: Shortcut settings button on OSX; In files: prefs.py:507; */
|
||||
"Open System Preferences" = "Öppna systeminställningar";
|
||||
|
||||
/* prefs.py: Configuration - Act on hotkey only when ED is in foreground; In files: prefs.py:529; */
|
||||
"Only when Elite: Dangerous is the active app" = "Bara när: Elite Dangerous är det aktiva programmet";
|
||||
|
||||
/* prefs.py: Configuration - play sound when hotkey used; In files: prefs.py:540; */
|
||||
"Play sound" = "Spela ljud";
|
||||
|
||||
/* prefs.py: Configuration - disable checks for app updates when in-game; In files: prefs.py:555; */
|
||||
"Disable Automatic Application Updates Check when in-game" = "Leta inte efter programuppdateringar när spelet körs";
|
||||
|
||||
/* prefs.py: Label for preferred shipyard, system and station 'providers'; In files: prefs.py:568; */
|
||||
"Preferred websites" = "Föredragna webbsidor";
|
||||
|
||||
/* prefs.py: Label for Shipyard provider selection; In files: prefs.py:579; */
|
||||
"Shipyard" = "Översikt av skepp";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Squire" = "Squire";
|
||||
/* prefs.py: Label for 'Configuration' tab in Settings; In files: prefs.py:672; */
|
||||
"Configuration" = "Konfiguration";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"Station" = "Station";
|
||||
/* prefs.py: Label for Settings > Appeareance > selection of 'normal' text colour; In files: prefs.py:685; */
|
||||
"Normal text" = "Normal text";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Station doesn't have a market!" = "Stationen har ingen marknad!";
|
||||
/* prefs.py: Label for Settings > Appeareance > selection of 'highlightes' text colour; In files: prefs.py:687; */
|
||||
"Highlighted text" = "Markerad text";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"Station doesn't have anything!" = "Stationen är tom!";
|
||||
/* prefs.py: Appearance - Label for selection of application display language; In files: prefs.py:696; */
|
||||
"Language" = "Språk";
|
||||
|
||||
/* Menu item. [EDMarketConnector.py] */
|
||||
"Status" = "Status";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Surveyor" = "Surveyor";
|
||||
|
||||
/* Main window. [EDMarketConnector.py] */
|
||||
"System" = "System";
|
||||
|
||||
/* Appearance setting. [prefs.py] */
|
||||
/* prefs.py: Label for Settings > Appearance > Theme selection; In files: prefs.py:706; */
|
||||
"Theme" = "Tema";
|
||||
|
||||
/* Help text in settings. [prefs.py] */
|
||||
"Tip: You can disable a plugin by{CR}adding '{EXT}' to its folder name" = "Tips: du kan avaktivera en plugin genom{CR}att lägga till '{EXT}' på slutet av mappens namn";
|
||||
/* prefs.py: Label for 'Dark' theme radio button; In files: prefs.py:717; */
|
||||
"Dark" = "Mörk";
|
||||
|
||||
/* Ranking. [stats.py] */
|
||||
"Trade" = "Trade";
|
||||
|
||||
/* Explorer rank. [stats.py] */
|
||||
"Trailblazer" = "Trailblazer";
|
||||
|
||||
/* Appearance theme setting. [prefs.py] */
|
||||
/* prefs.py: Label for 'Transparent' theme radio button; In files: prefs.py:724; */
|
||||
"Transparent" = "Transparent";
|
||||
|
||||
/* Trade rank. [stats.py] */
|
||||
/* prefs.py: Label for Settings > Appearance tab; In files: prefs.py:860; */
|
||||
"Appearance" = "Utseende";
|
||||
|
||||
/* prefs.py: Label for location of third-party plugins folder; In files: prefs.py:875; */
|
||||
"Plugins folder" = "Mapp för plugins";
|
||||
|
||||
/* prefs.py: Label on button used to open a filesystem folder; In files: prefs.py:882; */
|
||||
"Open" = "Öppna";
|
||||
|
||||
/* prefs.py: Tip/label about how to disable plugins; In files: prefs.py:890; */
|
||||
"Tip: You can disable a plugin by{CR}adding '{EXT}' to its folder name" = "Tips: du kan avaktivera en plugin genom{CR}att lägga till '{EXT}' på slutet av mappens namn";
|
||||
|
||||
/* prefs.py: Label on list of enabled plugins; In files: prefs.py:901; */
|
||||
"Enabled Plugins" = "Aktiverade plugins";
|
||||
|
||||
/* prefs.py: Plugins - Label on URL to documentation about migrating plugins from Python 2.7; In files: prefs.py:929; */
|
||||
"Information on migrating plugins" = "Information om migrering av plugins";
|
||||
|
||||
/* prefs.py: Lable on list of user-disabled plugins; In files: prefs.py:944; */
|
||||
"Disabled Plugins" = "Avaktiverade plugins";
|
||||
|
||||
/* stats.py: Cmdr stats; In files: stats.py:51; */
|
||||
"Balance" = "Balance";
|
||||
|
||||
/* stats.py: Cmdr stats; In files: stats.py:52; */
|
||||
"Loan" = "Lån";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:57; */
|
||||
"Combat" = "Combat";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:58; */
|
||||
"Trade" = "Trade";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:59; */
|
||||
"Explorer" = "Explorer";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:60; */
|
||||
"CQC" = "CQC";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:61; */
|
||||
"Federation" = "Federation";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:62; */
|
||||
"Empire" = "Empire";
|
||||
|
||||
/* stats.py: Ranking; In files: stats.py:63; */
|
||||
"Powerplay" = "Powerplay";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:71; */
|
||||
"Harmless" = "Harmless";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:72; */
|
||||
"Mostly Harmless" = "Mostly Harmless";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:73; */
|
||||
"Novice" = "Novice";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:74; */
|
||||
"Competent" = "Competent";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:75; */
|
||||
"Expert" = "Expert";
|
||||
|
||||
/* stats.py: Combat rank; stats.py: Empire rank; In files: stats.py:76; stats.py:139; */
|
||||
"Master" = "Master";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:77; */
|
||||
"Dangerous" = "Dangerous";
|
||||
|
||||
/* stats.py: Combat rank; In files: stats.py:78; */
|
||||
"Deadly" = "Deadly";
|
||||
|
||||
/* stats.py: Top rank; In files: stats.py:79; stats.py:90; stats.py:101; stats.py:112; */
|
||||
"Elite" = "Elite";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:82; */
|
||||
"Penniless" = "Penniless";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:83; */
|
||||
"Mostly Penniless" = "Mostly Penniless";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:84; */
|
||||
"Peddler" = "Peddler";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:85; */
|
||||
"Dealer" = "Dealer";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:86; */
|
||||
"Merchant" = "Merchant";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:87; */
|
||||
"Broker" = "Broker";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:88; */
|
||||
"Entrepreneur" = "Entrepreneur";
|
||||
|
||||
/* stats.py: Trade rank; In files: stats.py:89; */
|
||||
"Tycoon" = "Tycoon";
|
||||
|
||||
/* Update button in main window. [EDMarketConnector.py] */
|
||||
"Update" = "Uppdatera";
|
||||
/* stats.py: Explorer rank; In files: stats.py:93; */
|
||||
"Aimless" = "Aimless";
|
||||
|
||||
/* Status dialog subtitle - CR value of ship. [stats.py] */
|
||||
"Value" = "Värde";
|
||||
/* stats.py: Explorer rank; In files: stats.py:94; */
|
||||
"Mostly Aimless" = "Mostly Aimless";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
"Vice Admiral" = "Vice Admiral";
|
||||
/* stats.py: Explorer rank; In files: stats.py:95; */
|
||||
"Scout" = "Scout";
|
||||
|
||||
/* Menu title on OSX. [EDMarketConnector.py] */
|
||||
"View" = "View";
|
||||
/* stats.py: Explorer rank; In files: stats.py:96; */
|
||||
"Surveyor" = "Surveyor";
|
||||
|
||||
/* Empire rank. [stats.py] */
|
||||
"Viscount" = "Viscount";
|
||||
/* stats.py: Explorer rank; In files: stats.py:97; */
|
||||
"Trailblazer" = "Trailblazer";
|
||||
|
||||
/* Federation rank. [stats.py] */
|
||||
/* stats.py: Explorer rank; In files: stats.py:98; */
|
||||
"Pathfinder" = "Pathfinder";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:99; */
|
||||
"Ranger" = "Ranger";
|
||||
|
||||
/* stats.py: Explorer rank; In files: stats.py:100; */
|
||||
"Pioneer" = "Pioneer";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:104; */
|
||||
"Helpless" = "Helpless";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:105; */
|
||||
"Mostly Helpless" = "Mostly Helpless";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:106; */
|
||||
"Amateur" = "Amatör";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:107; */
|
||||
"Semi Professional" = "Semi Professional";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:108; */
|
||||
"Professional" = "Professional";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:109; */
|
||||
"Champion" = "Champion";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:110; */
|
||||
"Hero" = "Hero";
|
||||
|
||||
/* stats.py: CQC rank; In files: stats.py:111; */
|
||||
"Gladiator" = "Gladiator";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:118; */
|
||||
"Recruit" = "Recruit";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:119; */
|
||||
"Cadet" = "Cadet";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:120; */
|
||||
"Midshipman" = "Midshipman";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:121; */
|
||||
"Petty Officer" = "Petty Officer";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:122; */
|
||||
"Chief Petty Officer" = "Chief Petty Officer";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:123; */
|
||||
"Warrant Officer" = "Warrant Officer";
|
||||
|
||||
/* Shouldn't happen. [EDMarketConnector.py] */
|
||||
"What are you flying?!" = "Okänt skepp? (felmeddelande)";
|
||||
/* stats.py: Federation rank; In files: stats.py:124; */
|
||||
"Ensign" = "Ensign";
|
||||
|
||||
/* Shouldn't happen. [EDMarketConnector.py] */
|
||||
"Where are you?!" = "Vart är du? (felmeddelande)";
|
||||
/* stats.py: Federation rank; In files: stats.py:125; */
|
||||
"Lieutenant" = "Lieutenant";
|
||||
|
||||
/* Shouldn't happen. [EDMarketConnector.py] */
|
||||
"Who are you?!" = "Vem är du? (felmeddelande)";
|
||||
/* stats.py: Federation rank; In files: stats.py:126; */
|
||||
"Lieutenant Commander" = "Lieutenant Commander";
|
||||
|
||||
/* Menu title on OSX. [EDMarketConnector.py] */
|
||||
"Window" = "Fönster";
|
||||
/* stats.py: Federation rank; In files: stats.py:127; */
|
||||
"Post Commander" = "Post Commander";
|
||||
|
||||
/* [EDMarketConnector.py] */
|
||||
"You're not docked at a station!" = "Du är inte dockad vid en station!";
|
||||
/* stats.py: Federation rank; In files: stats.py:128; */
|
||||
"Post Captain" = "Post Captain";
|
||||
|
||||
/* Shortcut settings prompt on OSX. [prefs.py] */
|
||||
"{APP} needs permission to use shortcuts" = "{APP} behöver rättigheter för att använda genvägar";
|
||||
/* stats.py: Federation rank; In files: stats.py:129; */
|
||||
"Rear Admiral" = "Rear Admiral";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:130; */
|
||||
"Vice Admiral" = "Vice Admiral";
|
||||
|
||||
/* stats.py: Federation rank; In files: stats.py:131; */
|
||||
"Admiral" = "Admiral";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:137; */
|
||||
"Outsider" = "Outsider";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:138; */
|
||||
"Serf" = "Serf";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:140; */
|
||||
"Squire" = "Squire";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:141; */
|
||||
"Knight" = "Knight";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:142; */
|
||||
"Lord" = "Lord";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:143; */
|
||||
"Baron" = "Baron";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:144; */
|
||||
"Viscount" = "Viscount";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:145; */
|
||||
"Count" = "Count";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:146; */
|
||||
"Earl" = "Earl";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:147; */
|
||||
"Marquis" = "Marquis";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:148; */
|
||||
"Duke" = "Duke";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:149; */
|
||||
"Prince" = "Prince";
|
||||
|
||||
/* stats.py: Empire rank; In files: stats.py:150; */
|
||||
"King" = "King";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:156; */
|
||||
"Rating 1" = "Rating 1";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:157; */
|
||||
"Rating 2" = "Rating 2";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:158; */
|
||||
"Rating 3" = "Rating 3";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:159; */
|
||||
"Rating 4" = "Rating 4";
|
||||
|
||||
/* stats.py: Power rank; In files: stats.py:160; */
|
||||
"Rating 5" = "Rating 5";
|
||||
|
||||
/* stats.py: Status dialog subtitle - CR value of ship; In files: stats.py:367; */
|
||||
"Value" = "Värde";
|
||||
|
||||
/* stats.py: Status dialog title; In files: stats.py:376; */
|
||||
"Ships" = "Skepp";
|
||||
|
1061
L10n/uk.strings
1061
L10n/uk.strings
File diff suppressed because it is too large
Load Diff
1171
L10n/zh-Hans.strings
1171
L10n/zh-Hans.strings
File diff suppressed because it is too large
Load Diff
35
PLUGINS.md
35
PLUGINS.md
@ -603,7 +603,7 @@ Content of `state` (updated to the current journal entry):
|
||||
| `Data` | `dict` | 'Data' MicroResources in Odyssey, `int` count each. |
|
||||
| `BackPack` | `dict` | `dict` of Odyssey MicroResources in backpack. |
|
||||
| `BackpackJSON` | `dict` | Content of Backpack.json as of last read. |
|
||||
| `ShipLockerJSON` | `dict` | Content of ShipLocker.json as of last read. |
|
||||
| `ShipLockerJSON` | `dict` | Content of ShipLocker.json as of last read. |
|
||||
| `SuitCurrent` | `dict` | CAPI-returned data of currently worn suit. NB: May be `None` if no data. |
|
||||
| `Suits` | `dict`[1] | CAPI-returned data of owned suits. NB: May be `None` if no data. |
|
||||
| `SuitLoadoutCurrent` | `dict` | CAPI-returned data of current Suit Loadout. NB: May be `None` if no data. |
|
||||
@ -1043,6 +1043,39 @@ step for the extra module(s) until it works.
|
||||
|
||||
---
|
||||
|
||||
## Debug HTTP POST requests
|
||||
|
||||
You can debug your http post requests using the builtin debug webserver.
|
||||
|
||||
To add support for said debug webserver to your plugin, you need to check `config.debug_senders` (`list[str]`) for
|
||||
some indicator string for your plugin. `debug_senders` is generated from args to `--debug-sender` on the invocation
|
||||
command line.
|
||||
|
||||
If said string exists, `DEBUG_WEBSERVER_HOST` and `DEBUG_WEBSERVER_PORT` in
|
||||
`edmc_data` will contain the host and port for the currently running local webserver. Simply redirect your requests
|
||||
there, and your requests will be logged to disk. For organisation, rewrite your request path to simply be `/pluginname`.
|
||||
|
||||
Logs exist in `$TEMP/EDMarketConnector/http_debug/$path.log`. If somehow you manage to cause a directory traversal, your
|
||||
data will not be saved to disk at all. You will see this in EDMCs log.
|
||||
|
||||
The simplest way to go about adding support is:
|
||||
|
||||
```py
|
||||
from edmc_data import DEBUG_WEBSERVER_HOST, DEBUG_WEBSERVER_PORT
|
||||
from config import debug_senders
|
||||
|
||||
TARGET_URL = "https://host.tld/path/to/api/magic"
|
||||
if 'my_plugin' in debug_senders:
|
||||
TARGET_URL = f'http://{DEBUG_WEBSERVER_HOST}:{DEBUG_WEBSERVER_PORT}/my_plugin'
|
||||
|
||||
# Code that uses TARGET_URL to post info from your plugin below.
|
||||
|
||||
```
|
||||
|
||||
For returned data, you can modify `debug_webserver.DEFAULT_RESPONSES` (`dict[str, Union[Callable[[str], str]], str])`
|
||||
with either a function that accepts a single string (the raw post data) and returns a single string
|
||||
(the response to send), or with a string if your required response is simple.
|
||||
|
||||
## Disable a plugin
|
||||
|
||||
EDMC now lets you disable a plugin without deleting it, simply rename the
|
||||
|
64
companion.py
64
companion.py
@ -167,6 +167,7 @@ class ServerError(Exception):
|
||||
# Raised when cannot contact the Companion API server
|
||||
self.args = args
|
||||
if not args:
|
||||
# LANG: Frontier CAPI didn't respond
|
||||
self.args = (_("Error: Frontier CAPI didn't respond"),)
|
||||
|
||||
|
||||
@ -175,7 +176,8 @@ class ServerConnectionError(ServerError):
|
||||
|
||||
|
||||
class ServerLagging(Exception):
|
||||
"""Exception Class for CAPI Server lagging.
|
||||
"""
|
||||
Exception Class for CAPI Server lagging.
|
||||
|
||||
Raised when Companion API server is returning old data, e.g. when the
|
||||
servers are too busy.
|
||||
@ -184,20 +186,24 @@ class ServerLagging(Exception):
|
||||
def __init__(self, *args) -> None:
|
||||
self.args = args
|
||||
if not args:
|
||||
# LANG: Frontier CAPI data doesn't agree with latest Journal game location
|
||||
self.args = (_('Error: Frontier server is lagging'),)
|
||||
|
||||
|
||||
class SKUError(Exception):
|
||||
"""Exception Class for CAPI SKU error.
|
||||
class NoMonitorStation(Exception):
|
||||
"""
|
||||
Exception Class for being docked, but not knowing where in monitor.
|
||||
|
||||
Raised when the Companion API server thinks that the user has not
|
||||
purchased E:D i.e. doesn't have the correct 'SKU'.
|
||||
Raised when CAPI says we're docked but we forgot where we were at an EDO
|
||||
Settlement, Disembarked, re-Embarked and then user hit 'Update'.
|
||||
As of 4.0.0.401 both Disembark and Embark say `"Onstation": false`.
|
||||
"""
|
||||
|
||||
def __init__(self, *args) -> None:
|
||||
self.args = args
|
||||
if not args:
|
||||
self.args = (_('Error: Frontier server SKU problem'),)
|
||||
# LANG: Commander is docked at an EDO settlement, got out and back in, we forgot the station
|
||||
self.args = (_("Docked but unknown station: EDO Settlement?"),)
|
||||
|
||||
|
||||
class CredentialsError(Exception):
|
||||
@ -206,6 +212,7 @@ class CredentialsError(Exception):
|
||||
def __init__(self, *args) -> None:
|
||||
self.args = args
|
||||
if not args:
|
||||
# LANG: Generic "something went wrong with Frontier Auth" error
|
||||
self.args = (_('Error: Invalid Credentials'),)
|
||||
|
||||
|
||||
@ -221,6 +228,7 @@ class CmdrError(Exception):
|
||||
def __init__(self, *args) -> None:
|
||||
self.args = args
|
||||
if not args:
|
||||
# LANG: Frontier CAPI authorisation not for currently game-active commander
|
||||
self.args = (_('Error: Wrong Cmdr'),)
|
||||
|
||||
|
||||
@ -331,6 +339,7 @@ class Auth(object):
|
||||
(data[k] for k in ('error_description', 'error', 'message') if k in data),
|
||||
'<unknown error>'
|
||||
)
|
||||
# LANG: Generic error prefix - following text is from Frontier auth service
|
||||
raise CredentialsError(f'{_("Error")}: {error!r}')
|
||||
|
||||
r = None
|
||||
@ -369,15 +378,18 @@ class Auth(object):
|
||||
|
||||
if (usr := data_decode.get('usr')) is None:
|
||||
logger.error('No "usr" in /decode data')
|
||||
# LANG: Frontier auth, no 'usr' section in returned data
|
||||
raise CredentialsError(_("Error: Couldn't check token customer_id"))
|
||||
|
||||
if (customer_id := usr.get('customer_id')) is None:
|
||||
logger.error('No "usr"->"customer_id" in /decode data')
|
||||
# LANG: Frontier auth, no 'customer_id' in 'usr' section in returned data
|
||||
raise CredentialsError(_("Error: Couldn't check token customer_id"))
|
||||
|
||||
# All 'FID' seen in Journals so far have been 'F<id>'
|
||||
# Frontier, Steam and Epic
|
||||
if f'F{customer_id}' != monitor.state.get('FID'):
|
||||
# LANG: Frontier auth customer_id doesn't match game session FID
|
||||
raise CredentialsError(_("Error: customer_id doesn't match!"))
|
||||
|
||||
logger.info(f'Frontier CAPI Auth: New token for \"{self.cmdr}\"')
|
||||
@ -399,6 +411,7 @@ class Auth(object):
|
||||
if r:
|
||||
self.dump(r)
|
||||
|
||||
# LANG: Failed to get Access Token from Frontier Auth service
|
||||
raise CredentialsError(_('Error: unable to get token')) from e
|
||||
|
||||
logger.error(f"Frontier CAPI Auth: Can't get token for \"{self.cmdr}\"")
|
||||
@ -407,18 +420,31 @@ class Auth(object):
|
||||
(data[k] for k in ('error_description', 'error', 'message') if k in data),
|
||||
'<unknown error>'
|
||||
)
|
||||
# LANG: Generic error prefix - following text is from Frontier auth service
|
||||
raise CredentialsError(f'{_("Error")}: {error!r}')
|
||||
|
||||
@staticmethod
|
||||
def invalidate(cmdr: str) -> None:
|
||||
def invalidate(cmdr: Optional[str]) -> None:
|
||||
"""Invalidate Refresh Token for specified Commander."""
|
||||
logger.info(f'Frontier CAPI Auth: Invalidated token for "{cmdr}"')
|
||||
cmdrs = config.get_list('cmdrs', default=[])
|
||||
idx = cmdrs.index(cmdr)
|
||||
tokens = config.get_list('fdev_apikeys', default=[])
|
||||
tokens = tokens + [''] * (len(cmdrs) - len(tokens))
|
||||
tokens[idx] = ''
|
||||
config.set('fdev_apikeys', tokens)
|
||||
to_set: Optional[list] = None
|
||||
if cmdr is None:
|
||||
logger.info('Frontier CAPI Auth: Invalidating ALL tokens!')
|
||||
cmdrs = config.get_list('cmdrs', default=[])
|
||||
to_set = [''] * len(cmdrs)
|
||||
|
||||
else:
|
||||
logger.info(f'Frontier CAPI Auth: Invalidated token for "{cmdr}"')
|
||||
cmdrs = config.get_list('cmdrs', default=[])
|
||||
idx = cmdrs.index(cmdr)
|
||||
to_set = config.get_list('fdev_apikeys', default=[])
|
||||
to_set = to_set + [''] * (len(cmdrs) - len(to_set))
|
||||
to_set[idx] = ''
|
||||
|
||||
if to_set is None:
|
||||
logger.error('REFUSING TO SET NONE AS TOKENS!')
|
||||
raise ValueError('Unexpected None for tokens while resetting')
|
||||
|
||||
config.set('fdev_apikeys', to_set)
|
||||
config.save() # Save settings now for use by command-line app
|
||||
|
||||
# noinspection PyMethodMayBeStatic
|
||||
@ -526,7 +552,7 @@ class Session(object):
|
||||
self.session.headers['User-Agent'] = USER_AGENT
|
||||
self.state = Session.STATE_OK
|
||||
|
||||
def query(self, endpoint: str) -> CAPIData:
|
||||
def query(self, endpoint: str) -> CAPIData: # noqa: CCR001
|
||||
"""Perform a query against the specified CAPI endpoint."""
|
||||
logger.trace(f'Performing query for endpoint "{endpoint}"')
|
||||
if self.state == Session.STATE_INIT:
|
||||
@ -547,6 +573,7 @@ class Session(object):
|
||||
|
||||
except Exception as e:
|
||||
logger.debug('Attempting GET', exc_info=e)
|
||||
# LANG: Frontier CAPI data retrieval failed
|
||||
raise ServerError(f'{_("Frontier CAPI query failure")}: {endpoint}') from e
|
||||
|
||||
if r.url.startswith(SERVER_AUTH):
|
||||
@ -562,6 +589,7 @@ class Session(object):
|
||||
# Server error. Typically 500 "Internal Server Error" if server is down
|
||||
logger.debug('500 status back from CAPI')
|
||||
self.dump(r)
|
||||
# LANG: Frontier CAPI data retrieval failed with 5XX code
|
||||
raise ServerError(f'{_("Frontier CAPI server error")}: {r.status_code}')
|
||||
|
||||
try:
|
||||
@ -581,7 +609,7 @@ class Session(object):
|
||||
raise CredentialsError('query failed after refresh') from e
|
||||
|
||||
elif self.login(): # Maybe our token expired. Re-authorize in any case
|
||||
logger.debug('Maybe our token expired.')
|
||||
logger.debug('Initial query failed, but login() just worked, trying again...')
|
||||
self.retrying = True
|
||||
return self.query(endpoint)
|
||||
|
||||
@ -660,6 +688,8 @@ class Session(object):
|
||||
if services.get('commodities'):
|
||||
marketdata = self.query(URL_MARKET)
|
||||
if last_starport_name != marketdata['name'] or last_starport_id != int(marketdata['id']):
|
||||
logger.warning(f"{last_starport_name!r} != {marketdata['name']!r}"
|
||||
f" or {last_starport_id!r} != {int(marketdata['id'])!r}")
|
||||
raise ServerLagging()
|
||||
|
||||
else:
|
||||
@ -668,6 +698,8 @@ class Session(object):
|
||||
if services.get('outfitting') or services.get('shipyard'):
|
||||
shipdata = self.query(URL_SHIPYARD)
|
||||
if last_starport_name != shipdata['name'] or last_starport_id != int(shipdata['id']):
|
||||
logger.warning(f"{last_starport_name!r} != {shipdata['name']!r} or "
|
||||
f"{last_starport_id!r} != {int(shipdata['id'])!r}")
|
||||
raise ServerLagging()
|
||||
|
||||
else:
|
||||
|
12
config.py
12
config.py
@ -33,11 +33,14 @@ appcmdname = 'EDMC'
|
||||
# <https://semver.org/#semantic-versioning-specification-semver>
|
||||
# Major.Minor.Patch(-prerelease)(+buildmetadata)
|
||||
# NB: Do *not* import this, use the functions appversion() and appversion_nobuild()
|
||||
_static_appversion = '5.1.1'
|
||||
_static_appversion = '5.1.2'
|
||||
_cached_version: Optional[semantic_version.Version] = None
|
||||
copyright = '© 2015-2019 Jonathan Harris, 2020-2021 EDCD'
|
||||
|
||||
update_feed = 'https://raw.githubusercontent.com/EDCD/EDMarketConnector/releases/edmarketconnector.xml'
|
||||
update_interval = 8*60*60
|
||||
# Providers marked to be in debug mode. Generally this is expected to switch to sending data to a log file
|
||||
debug_senders: List[str] = []
|
||||
|
||||
# This must be done here in order to avoid an import cycle with EDMCLogging.
|
||||
# Other code should use EDMCLogging.get_main_logger
|
||||
@ -136,6 +139,10 @@ def appversion() -> semantic_version.Version:
|
||||
|
||||
:return: The augmented app version.
|
||||
"""
|
||||
global _cached_version
|
||||
if _cached_version is not None:
|
||||
return _cached_version
|
||||
|
||||
if getattr(sys, 'frozen', False):
|
||||
# Running frozen, so we should have a .gitversion file
|
||||
# Yes, .parent because if frozen we're inside library.zip
|
||||
@ -148,7 +155,8 @@ def appversion() -> semantic_version.Version:
|
||||
if shorthash is None:
|
||||
shorthash = 'UNKNOWN'
|
||||
|
||||
return semantic_version.Version(f'{_static_appversion}+{shorthash}')
|
||||
_cached_version = semantic_version.Version(f'{_static_appversion}+{shorthash}')
|
||||
return _cached_version
|
||||
|
||||
|
||||
def appversion_nobuild() -> semantic_version.Version:
|
||||
|
147
debug_webserver.py
Normal file
147
debug_webserver.py
Normal file
@ -0,0 +1,147 @@
|
||||
"""Simple HTTP listener to be used with debugging various EDMC sends."""
|
||||
import json
|
||||
import pathlib
|
||||
import tempfile
|
||||
import threading
|
||||
from http import server
|
||||
from typing import Any, Callable, Tuple, Union
|
||||
from urllib.parse import parse_qs
|
||||
|
||||
from config import appname
|
||||
from EDMCLogging import get_main_logger
|
||||
|
||||
logger = get_main_logger()
|
||||
|
||||
output_lock = threading.Lock()
|
||||
output_data_path = pathlib.Path(tempfile.gettempdir()) / f'{appname}' / 'http_debug'
|
||||
SAFE_TRANSLATE = str.maketrans({x: '_' for x in "!@#$%^&*()./\\\r\n[]-+='\";:?<>,~`"})
|
||||
|
||||
|
||||
class LoggingHandler(server.BaseHTTPRequestHandler):
|
||||
"""HTTP Handler implementation that logs to EDMCs logger and writes data to files on disk."""
|
||||
|
||||
def __init__(self, request: bytes, client_address: Tuple[str, int], server) -> None:
|
||||
super().__init__(request, client_address, server)
|
||||
|
||||
def log_message(self, format: str, *args: Any) -> None:
|
||||
"""Override default handler logger with EDMC logger."""
|
||||
logger.info(format % args)
|
||||
|
||||
def do_POST(self) -> None: # noqa: N802 # I cant change it
|
||||
"""Handle POST."""
|
||||
logger.info(f"Received a POST for {self.path!r}!")
|
||||
data = self.rfile.read(int(self.headers['Content-Length'])).decode('utf-8', errors='replace')
|
||||
to_save = data
|
||||
|
||||
target_path = self.path
|
||||
if len(target_path) > 1 and target_path[0] == '/':
|
||||
target_path = target_path[1:]
|
||||
|
||||
elif len(target_path) == 1 and target_path[0] == '/':
|
||||
target_path = 'WEB_ROOT'
|
||||
|
||||
response: Union[Callable[[str], str], str, None] = DEFAULT_RESPONSES.get(target_path)
|
||||
if callable(response):
|
||||
response = response(data)
|
||||
|
||||
self.send_response_only(200, "OK")
|
||||
if response is not None:
|
||||
self.send_header('Content-Length', str(len(response)))
|
||||
|
||||
self.end_headers() # This is needed because send_response_only DOESN'T ACTUALLY SEND THE RESPONSE </rant>
|
||||
if response is not None:
|
||||
self.wfile.write(response.encode())
|
||||
self.wfile.flush()
|
||||
|
||||
if target_path == 'edsm':
|
||||
# attempt to extract data from urlencoded stream
|
||||
try:
|
||||
edsm_data = extract_edsm_data(data)
|
||||
data = data + "\n" + json.dumps(edsm_data)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
target_file = output_data_path / (safe_file_name(target_path) + '.log')
|
||||
if target_file.parent != output_data_path:
|
||||
logger.warning(f"REFUSING TO WRITE FILE THAT ISN'T IN THE RIGHT PLACE! {target_file=}")
|
||||
logger.warning(f'DATA FOLLOWS\n{data}')
|
||||
return
|
||||
|
||||
with output_lock, target_file.open('a') as f:
|
||||
f.write(to_save + "\n\n")
|
||||
|
||||
|
||||
def safe_file_name(name: str):
|
||||
"""
|
||||
Escape special characters out of a file name.
|
||||
|
||||
This is a nicety. Don't rely on it to be ultra secure.
|
||||
"""
|
||||
return name.translate(SAFE_TRANSLATE)
|
||||
|
||||
|
||||
def generate_inara_response(raw_data: str) -> str:
|
||||
"""Generate nonstatic data for inara plugin."""
|
||||
try:
|
||||
data = json.loads(raw_data)
|
||||
except json.JSONDecodeError:
|
||||
return "UNKNOWN REQUEST"
|
||||
|
||||
out = {
|
||||
'header': {
|
||||
'eventStatus': 200
|
||||
},
|
||||
|
||||
'events': [
|
||||
{
|
||||
'eventName': e['eventName'], 'eventStatus': 200, 'eventStatusText': "DEBUG STUFF"
|
||||
} for e in data.get('events')
|
||||
]
|
||||
}
|
||||
|
||||
return json.dumps(out)
|
||||
|
||||
|
||||
def extract_edsm_data(data: str) -> dict[str, Any]:
|
||||
res = parse_qs(data)
|
||||
return {name: data[0] for name, data in res.items()}
|
||||
|
||||
|
||||
def generate_edsm_response(raw_data: str) -> str:
|
||||
"""Generate nonstatic data for edsm plugin."""
|
||||
try:
|
||||
data = extract_edsm_data(raw_data)
|
||||
events = json.loads(data['message'])
|
||||
except (json.JSONDecodeError, Exception):
|
||||
logger.exception("????")
|
||||
return "UNKNOWN REQUEST"
|
||||
|
||||
out = {
|
||||
'msgnum': 100, # Ok
|
||||
'msg': 'debug stuff',
|
||||
'events': [
|
||||
{'event': e['event'], 'msgnum': 100, 'msg': 'debug stuff'} for e in events
|
||||
]
|
||||
}
|
||||
|
||||
return json.dumps(out)
|
||||
|
||||
|
||||
DEFAULT_RESPONSES = {
|
||||
'inara': generate_inara_response,
|
||||
'edsm': generate_edsm_response
|
||||
}
|
||||
|
||||
|
||||
def run_listener(host: str = "127.0.0.1", port: int = 9090) -> None:
|
||||
"""Run a listener thread."""
|
||||
output_data_path.mkdir(exist_ok=True)
|
||||
logger.info(f'Starting HTTP listener on {host=} {port=}!')
|
||||
listener = server.HTTPServer((host, port), LoggingHandler)
|
||||
logger.info(listener)
|
||||
threading.Thread(target=listener.serve_forever, daemon=True).start()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
output_data_path.mkdir(exist_ok=True)
|
||||
server.HTTPServer(("127.0.0.1", 9090), LoggingHandler).serve_forever()
|
@ -240,7 +240,7 @@ the .exe and .msi because ChangeLog.md is bundled with the install.
|
||||
If anything in this new release addresses a bug that causes, e.g. bad data
|
||||
to be sent over EDDN, then you should add an appropriate entry to the
|
||||
killswitches.json file *in the `releases` branch*. That file **must only ever
|
||||
be commited to the `releases` branch!!!** See [docs/Killswitches.md](docs/Killswitches.md).
|
||||
be commited to the `releases` branch!!!** See [docs/Killswitches.md](Killswitches.md).
|
||||
|
||||
# Packaging & Installer Generation
|
||||
|
||||
|
18
edmc_data.py
18
edmc_data.py
@ -570,3 +570,21 @@ edmc_suit_symbol_localised = {
|
||||
'utilitysuit': 'Traje Maverick',
|
||||
},
|
||||
}
|
||||
|
||||
# WORKAROUND 2021-07-03 | 4.0.0.600 Update 5: duplicates of `fileheader` keys in `LoadGame`,
|
||||
# but the GameLanguage in the latter has doubled up the `\`, so cater for either here.
|
||||
# This is sourced from what the game is passed by the launcher, caveat emptor. It was mentioned that / is also
|
||||
# an option
|
||||
# This is only run once when this file is imported by something, no runtime cost or repeated expansions will occur
|
||||
__keys = list(edmc_suit_symbol_localised.keys())
|
||||
for lang in __keys:
|
||||
new_lang = lang.replace('\\', r'\\')
|
||||
new_lang_2 = lang.replace('\\', '/')
|
||||
|
||||
edmc_suit_symbol_localised[new_lang] = edmc_suit_symbol_localised[lang]
|
||||
edmc_suit_symbol_localised[new_lang_2] = edmc_suit_symbol_localised[lang]
|
||||
|
||||
|
||||
# Local webserver for debugging. See implementation in debug_webserver.py
|
||||
DEBUG_WEBSERVER_HOST = '127.0.0.1'
|
||||
DEBUG_WEBSERVER_PORT = 9090
|
||||
|
@ -202,6 +202,7 @@ class JournalLock:
|
||||
|
||||
self.parent = parent
|
||||
self.callback = callback
|
||||
# LANG: Title text on popup when Journal directory already locked
|
||||
self.title(_('Journal directory already locked'))
|
||||
|
||||
# remove decoration
|
||||
@ -218,13 +219,16 @@ class JournalLock:
|
||||
frame.grid(sticky=tk.NSEW)
|
||||
|
||||
self.blurb = tk.Label(frame)
|
||||
# LANG: Text for when newly selected Journal directory is already locked
|
||||
self.blurb['text'] = _("The new Journal Directory location is already locked.{CR}"
|
||||
"You can either attempt to resolve this and then Retry, or choose to Ignore this.")
|
||||
self.blurb.grid(row=1, column=0, columnspan=2, sticky=tk.NSEW)
|
||||
|
||||
# LANG: Generic 'Retry' button label
|
||||
self.retry_button = ttk.Button(frame, text=_('Retry'), command=self.retry)
|
||||
self.retry_button.grid(row=2, column=0, sticky=tk.EW)
|
||||
|
||||
# LANG: Generic 'Ignore' button label
|
||||
self.ignore_button = ttk.Button(frame, text=_('Ignore'), command=self.ignore)
|
||||
self.ignore_button.grid(row=2, column=1, sticky=tk.EW)
|
||||
self.protocol("WM_DELETE_WINDOW", self._destroy)
|
||||
|
271
monitor.py
271
monitor.py
@ -182,9 +182,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
if journal_dir == '' or journal_dir is None:
|
||||
journal_dir = config.default_journal_dir
|
||||
|
||||
# TODO(A_D): this is ignored for type checking due to all the different types config.get returns
|
||||
# When that is refactored, remove the magic comment
|
||||
logdir = expanduser(journal_dir) # type: ignore # config is weird
|
||||
logdir = expanduser(journal_dir)
|
||||
|
||||
if not logdir or not isdir(logdir):
|
||||
logger.error(f'Journal Directory is invalid: "{logdir}"')
|
||||
@ -201,11 +199,11 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
# Do this before setting up the observer in case the journal directory has gone away
|
||||
try: # TODO: This should be replaced with something specific ONLY wrapping listdir
|
||||
logfiles = sorted(
|
||||
(x for x in listdir(self.currentdir) if self._RE_LOGFILE.search(x)), # type: ignore # config is weird
|
||||
(x for x in listdir(self.currentdir) if self._RE_LOGFILE.search(x)),
|
||||
key=lambda x: x.split('.')[1:]
|
||||
)
|
||||
|
||||
self.logfile = join(self.currentdir, logfiles[-1]) if logfiles else None # type: ignore # config is weird
|
||||
self.logfile = join(self.currentdir, logfiles[-1]) if logfiles else None
|
||||
|
||||
except Exception:
|
||||
logger.exception('Failed to find latest logfile')
|
||||
@ -489,11 +487,9 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
entry: MutableMapping[str, Any] = json.loads(line, object_pairs_hook=OrderedDict)
|
||||
entry['timestamp'] # we expect this to exist # TODO: replace with assert? or an if key in check
|
||||
|
||||
event_type = entry['event']
|
||||
if event_type == 'Fileheader':
|
||||
event_type = entry['event'].lower()
|
||||
if event_type == 'fileheader':
|
||||
self.live = False
|
||||
self.version = entry['gameversion']
|
||||
self.is_beta = any(v in entry['gameversion'].lower() for v in ('alpha', 'beta'))
|
||||
|
||||
self.cmdr = None
|
||||
self.mode = None
|
||||
@ -508,15 +504,19 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
self.systemaddress = None
|
||||
self.started = None
|
||||
self.__init_state()
|
||||
# In self.state as well, as that's what plugins get
|
||||
self.state['GameLanguage'] = entry['language']
|
||||
self.state['GameVersion'] = entry['gameversion']
|
||||
self.state['GameBuild'] = entry['build']
|
||||
|
||||
elif event_type == 'Commander':
|
||||
# Do this AFTER __init_state() lest our nice new state entries be None
|
||||
self.populate_version_info(entry)
|
||||
|
||||
elif event_type == 'commander':
|
||||
self.live = True # First event in 3.0
|
||||
|
||||
elif event_type == 'LoadGame':
|
||||
elif event_type == 'loadgame':
|
||||
# Odyssey Release Update 5 -- This contains data that doesn't match the format used in FileHeader above
|
||||
self.populate_version_info(entry, suppress=True)
|
||||
|
||||
# alpha4
|
||||
# Odyssey: bool
|
||||
self.cmdr = entry['Commander']
|
||||
# 'Open', 'Solo', 'Group', or None for CQC (and Training - but no LoadGame event)
|
||||
self.mode = entry.get('GameMode')
|
||||
@ -551,11 +551,11 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
if entry.get('Ship') is not None and self._RE_SHIP_ONFOOT.search(entry['Ship']):
|
||||
self.state['OnFoot'] = True
|
||||
|
||||
elif event_type == 'NewCommander':
|
||||
elif event_type == 'newcommander':
|
||||
self.cmdr = entry['Name']
|
||||
self.group = None
|
||||
|
||||
elif event_type == 'SetUserShipName':
|
||||
elif event_type == 'setusershipname':
|
||||
self.state['ShipID'] = entry['ShipID']
|
||||
if 'UserShipId' in entry: # Only present when changing the ship's ident
|
||||
self.state['ShipIdent'] = entry['UserShipId']
|
||||
@ -563,7 +563,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
self.state['ShipName'] = entry.get('UserShipName')
|
||||
self.state['ShipType'] = self.canonicalise(entry['Ship'])
|
||||
|
||||
elif event_type == 'ShipyardBuy':
|
||||
elif event_type == 'shipyardbuy':
|
||||
self.state['ShipID'] = None
|
||||
self.state['ShipIdent'] = None
|
||||
self.state['ShipName'] = None
|
||||
@ -575,7 +575,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
|
||||
self.state['Credits'] -= entry.get('ShipPrice', 0)
|
||||
|
||||
elif event_type == 'ShipyardSwap':
|
||||
elif event_type == 'shipyardswap':
|
||||
self.state['ShipID'] = entry['ShipID']
|
||||
self.state['ShipIdent'] = None
|
||||
self.state['ShipName'] = None
|
||||
@ -585,9 +585,11 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
self.state['Rebuy'] = None
|
||||
self.state['Modules'] = None
|
||||
|
||||
elif (event_type == 'Loadout' and
|
||||
'fighter' not in self.canonicalise(entry['Ship']) and
|
||||
'buggy' not in self.canonicalise(entry['Ship'])):
|
||||
elif (
|
||||
event_type == 'loadout' and
|
||||
'fighter' not in self.canonicalise(entry['Ship']) and
|
||||
'buggy' not in self.canonicalise(entry['Ship'])
|
||||
):
|
||||
self.state['ShipID'] = entry['ShipID']
|
||||
self.state['ShipIdent'] = entry['ShipIdent']
|
||||
|
||||
@ -615,7 +617,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
|
||||
self.state['Modules'][module['Slot']] = module
|
||||
|
||||
elif event_type == 'ModuleBuy':
|
||||
elif event_type == 'modulebuy':
|
||||
self.state['Modules'][entry['Slot']] = {
|
||||
'Slot': entry['Slot'],
|
||||
'Item': self.canonicalise(entry['BuyItem']),
|
||||
@ -627,21 +629,21 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
|
||||
self.state['Credits'] -= entry.get('BuyPrice', 0)
|
||||
|
||||
elif event_type == 'ModuleRetrieve':
|
||||
elif event_type == 'moduleretrieve':
|
||||
self.state['Credits'] -= entry.get('Cost', 0)
|
||||
|
||||
elif event_type == 'ModuleSell':
|
||||
elif event_type == 'modulesell':
|
||||
self.state['Modules'].pop(entry['Slot'], None)
|
||||
self.state['Credits'] += entry.get('SellPrice', 0)
|
||||
|
||||
elif event_type == 'ModuleSellRemote':
|
||||
elif event_type == 'modulesellremote':
|
||||
self.state['Credits'] += entry.get('SellPrice', 0)
|
||||
|
||||
elif event_type == 'ModuleStore':
|
||||
elif event_type == 'modulestore':
|
||||
self.state['Modules'].pop(entry['Slot'], None)
|
||||
self.state['Credits'] -= entry.get('Cost', 0)
|
||||
|
||||
elif event_type == 'ModuleSwap':
|
||||
elif event_type == 'moduleswap':
|
||||
to_item = self.state['Modules'].get(entry['ToSlot'])
|
||||
to_slot = entry['ToSlot']
|
||||
from_slot = entry['FromSlot']
|
||||
@ -653,13 +655,13 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
else:
|
||||
modules.pop(from_slot, None)
|
||||
|
||||
elif event_type == 'Undocked':
|
||||
elif event_type == 'undocked':
|
||||
self.station = None
|
||||
self.station_marketid = None
|
||||
self.stationtype = None
|
||||
self.stationservices = None
|
||||
|
||||
elif event_type == 'Embark':
|
||||
elif event_type == 'embark':
|
||||
# This event is logged when a player (on foot) gets into a ship or SRV
|
||||
# Parameters:
|
||||
# • SRV: true if getting into SRV, false if getting into a ship
|
||||
@ -686,7 +688,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
# ShipLocker.
|
||||
self.backpack_set_empty()
|
||||
|
||||
elif event_type == 'Disembark':
|
||||
elif event_type == 'disembark':
|
||||
# This event is logged when the player steps out of a ship or SRV
|
||||
#
|
||||
# Parameters:
|
||||
@ -717,13 +719,13 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
self.state['Taxi'] = False
|
||||
self.state['Dropship'] = False
|
||||
|
||||
elif event_type == 'DropshipDeploy':
|
||||
elif event_type == 'dropshipdeploy':
|
||||
# We're definitely on-foot now
|
||||
self.state['OnFoot'] = True
|
||||
self.state['Taxi'] = False
|
||||
self.state['Dropship'] = False
|
||||
|
||||
elif event_type == 'Docked':
|
||||
elif event_type == 'docked':
|
||||
self.station = entry.get('StationName') # May be None
|
||||
self.station_marketid = entry.get('MarketID') # May be None
|
||||
self.stationtype = entry.get('StationType') # May be None
|
||||
@ -731,7 +733,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
|
||||
# No need to set self.state['Taxi'] or Dropship here, if its those, the next event is a Disembark anyway
|
||||
|
||||
elif event_type in ('Location', 'FSDJump', 'CarrierJump'):
|
||||
elif event_type in ('location', 'fsdjump', 'carrierjump'):
|
||||
# alpha4 - any changes ?
|
||||
# Location:
|
||||
# New in Odyssey:
|
||||
@ -739,15 +741,15 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
# • Multicrew: bool
|
||||
# • InSRV: bool
|
||||
# • OnFoot: bool
|
||||
if event_type in ('Location', 'CarrierJump'):
|
||||
if event_type in ('location', 'carrierjump'):
|
||||
self.planet = entry.get('Body') if entry.get('BodyType') == 'Planet' else None
|
||||
self.state['Body'] = entry.get('Body')
|
||||
self.state['BodyType'] = entry.get('BodyType')
|
||||
|
||||
# if event_type == 'Location':
|
||||
# if event_type == 'location':
|
||||
# logger.trace('"Location" event')
|
||||
|
||||
elif event_type == 'FSDJump':
|
||||
elif event_type == 'fsdjump':
|
||||
self.planet = None
|
||||
self.state['Body'] = None
|
||||
self.state['BodyType'] = None
|
||||
@ -776,37 +778,38 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
if not self.state['Taxi']:
|
||||
self.state['Dropship'] = None
|
||||
|
||||
elif event_type == 'ApproachBody':
|
||||
elif event_type == 'approachbody':
|
||||
self.planet = entry['Body']
|
||||
self.state['Body'] = entry['Body']
|
||||
self.state['BodyType'] = 'Planet' # Best guess. Journal says always planet.
|
||||
|
||||
elif event_type in ('LeaveBody', 'SupercruiseEntry'):
|
||||
elif event_type in ('leavebody', 'supercruiseentry'):
|
||||
self.planet = None
|
||||
self.state['Body'] = None
|
||||
self.state['BodyType'] = None
|
||||
|
||||
elif event_type in ('Rank', 'Promotion'):
|
||||
elif event_type in ('rank', 'promotion'):
|
||||
payload = dict(entry)
|
||||
payload.pop('event')
|
||||
payload.pop('timestamp')
|
||||
|
||||
self.state['Rank'].update({k: (v, 0) for k, v in payload.items()})
|
||||
|
||||
elif event_type == 'Progress':
|
||||
elif event_type == 'progress':
|
||||
rank = self.state['Rank']
|
||||
for k, v in entry.items():
|
||||
if k in rank:
|
||||
# perhaps not taken promotion mission yet
|
||||
rank[k] = (rank[k][0], min(v, 100))
|
||||
|
||||
elif event_type in ('Reputation', 'Statistics'):
|
||||
elif event_type in ('reputation', 'statistics'):
|
||||
payload = OrderedDict(entry)
|
||||
payload.pop('event')
|
||||
payload.pop('timestamp')
|
||||
self.state[event_type] = payload
|
||||
# NB: We need the original casing for these keys
|
||||
self.state[entry['event']] = payload
|
||||
|
||||
elif event_type == 'EngineerProgress':
|
||||
elif event_type == 'engineerprogress':
|
||||
# Sanity check - at least once the 'Engineer' (name) was missing from this in early
|
||||
# Odyssey 4.0.0.100. Might only have been a server issue causing incomplete data.
|
||||
|
||||
@ -826,7 +829,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
else:
|
||||
engineers[engineer] = entry['Progress']
|
||||
|
||||
elif event_type == 'Cargo' and entry.get('Vessel') == 'Ship':
|
||||
elif event_type == 'cargo' and entry.get('Vessel') == 'Ship':
|
||||
self.state['Cargo'] = defaultdict(int)
|
||||
# From 3.3 full Cargo event (after the first one) is written to a separate file
|
||||
if 'Inventory' not in entry:
|
||||
@ -838,7 +841,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
|
||||
self.state['Cargo'].update({self.canonicalise(x['Name']): x['Count'] for x in clean})
|
||||
|
||||
elif event_type == 'CargoTransfer':
|
||||
elif event_type == 'cargotransfer':
|
||||
for c in entry['Transfers']:
|
||||
name = self.canonicalise(c['Type'])
|
||||
if c['Direction'] == 'toship':
|
||||
@ -848,7 +851,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
# So it's *from* the ship
|
||||
self.state['Cargo'][name] -= c['Count']
|
||||
|
||||
elif event_type == 'ShipLocker':
|
||||
elif event_type == 'shiplocker':
|
||||
# As of 4.0.0.400 (2021-06-10)
|
||||
# "ShipLocker" will be a full list written to the journal at startup/boarding/disembarking, and also
|
||||
# written to a separate shiplocker.json file - other updates will just update that file and mention it
|
||||
@ -904,12 +907,16 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
)
|
||||
|
||||
# Journal v31 implies this was removed before Odyssey launch
|
||||
elif event_type == 'BackPackMaterials':
|
||||
elif event_type == 'backpackmaterials':
|
||||
# Last seen in a 4.0.0.102 journal file.
|
||||
logger.warning(f'We have a BackPackMaterials event, defunct since > 4.0.0.102 ?:\n{entry}\n')
|
||||
pass
|
||||
|
||||
elif event_type in ('BackPack', 'Backpack'): # WORKAROUND 4.0.0.200: BackPack becomes Backpack
|
||||
elif event_type in ('backpack', 'resupply'):
|
||||
# as of v4.0.0.600, a `resupply` event is dropped when resupplying your suit at your ship.
|
||||
# This event writes the same data as a backpack event. It will also be followed by a ShipLocker
|
||||
# but that follows normal behaviour in its handler.
|
||||
|
||||
# TODO: v31 doc says this is`backpack.json` ... but Howard Chalkley
|
||||
# said it's `Backpack.json`
|
||||
backpack_file = pathlib.Path(str(self.currentdir)) / 'Backpack.json'
|
||||
@ -964,7 +971,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
{self.canonicalise(x['Name']): x['Count'] for x in clean_data}
|
||||
)
|
||||
|
||||
elif event_type == 'BackpackChange':
|
||||
elif event_type == 'backpackchange':
|
||||
# Changes to Odyssey Backpack contents *other* than from a Transfer
|
||||
# See TransferMicroResources event for that.
|
||||
|
||||
@ -997,36 +1004,35 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
if self.state['BackPack'][c][m] < 0:
|
||||
self.state['BackPack'][c][m] = 0
|
||||
|
||||
elif event_type == 'BuyMicroResources':
|
||||
elif event_type == 'buymicroresources':
|
||||
# From 4.0.0.400 we get an empty (see file) `ShipLocker` event,
|
||||
# so we can ignore this for inventory purposes.
|
||||
|
||||
# But do record the credits balance change.
|
||||
self.state['Credits'] -= entry.get('Price', 0)
|
||||
|
||||
elif event_type == 'SellMicroResources':
|
||||
elif event_type == 'sellmicroresources':
|
||||
# As of 4.0.0.400 we can ignore this as an empty (see file)
|
||||
# `ShipLocker` event is written for the full new inventory.
|
||||
|
||||
# But still record the credits balance change.
|
||||
self.state['Credits'] += entry.get('Price', 0)
|
||||
|
||||
elif event_type in ('TradeMicroResources', 'CollectItems', 'DropItems', 'UseConsumable'):
|
||||
elif event_type in ('tradeMicroResources', 'collectitems', 'dropitems', 'useconsumable'):
|
||||
# As of 4.0.0.400 we can ignore these as an empty (see file)
|
||||
# `ShipLocker` event and/or a `BackpackChange` is also written.
|
||||
pass
|
||||
|
||||
# TODO:
|
||||
# <https://forums.frontier.co.uk/threads/575010/>
|
||||
# also there's one additional journal event that was missed out from
|
||||
# this version of the docs: "SuitLoadout": # when starting on foot, or
|
||||
# when disembarking from a ship, with the same info as found in "CreateSuitLoadout"
|
||||
elif event_type == 'SuitLoadout':
|
||||
elif event_type == 'suitloadout':
|
||||
suit_slotid, suitloadout_slotid = self.suitloadout_store_from_event(entry)
|
||||
if not self.suit_and_loadout_setcurrent(suit_slotid, suitloadout_slotid):
|
||||
logger.error(f"Event was: {entry}")
|
||||
|
||||
elif event_type == 'SwitchSuitLoadout':
|
||||
elif event_type == 'switchsuitloadout':
|
||||
# 4.0.0.101
|
||||
#
|
||||
# { "timestamp":"2021-05-21T10:39:43Z", "event":"SwitchSuitLoadout",
|
||||
@ -1044,7 +1050,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
if not self.suit_and_loadout_setcurrent(suitid, suitloadout_slotid):
|
||||
logger.error(f"Event was: {entry}")
|
||||
|
||||
elif event_type == 'CreateSuitLoadout':
|
||||
elif event_type == 'createsuitloadout':
|
||||
# 4.0.0.101
|
||||
#
|
||||
# { "timestamp":"2021-05-21T11:13:15Z", "event":"CreateSuitLoadout", "SuitID":1700216165682989,
|
||||
@ -1061,7 +1067,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
# if not self.suit_and_loadout_setcurrent(suitid, suitloadout_slotid):
|
||||
# logger.error(f"Event was: {entry}")
|
||||
|
||||
elif event_type == 'DeleteSuitLoadout':
|
||||
elif event_type == 'deletesuitloadout':
|
||||
# alpha4:
|
||||
# { "timestamp":"2021-04-29T10:32:27Z", "event":"DeleteSuitLoadout", "SuitID":1698365752966423,
|
||||
# "SuitName":"explorationsuit_class1", "SuitName_Localised":"Artemis Suit", "LoadoutID":4293000003,
|
||||
@ -1076,7 +1082,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
# This should no longer happen, as we're now handling CreateSuitLoadout properly
|
||||
logger.debug(f"loadout slot id {loadout_id} doesn't exist, not in last CAPI pull ?")
|
||||
|
||||
elif event_type == 'RenameSuitLoadout':
|
||||
elif event_type == 'renamesuitloadout':
|
||||
# alpha4
|
||||
# Parameters:
|
||||
# • SuitID
|
||||
@ -1095,7 +1101,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
except KeyError:
|
||||
logger.debug(f"loadout slot id {loadout_id} doesn't exist, not in last CAPI pull ?")
|
||||
|
||||
elif event_type == 'BuySuit':
|
||||
elif event_type == 'buysuit':
|
||||
# alpha4 :
|
||||
# { "timestamp":"2021-04-29T09:03:37Z", "event":"BuySuit", "Name":"UtilitySuit_Class1",
|
||||
# "Name_Localised":"Maverick Suit", "Price":150000, "SuitID":1698364934364699 }
|
||||
@ -1106,7 +1112,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
'edmcName': self.suit_sane_name(loc_name),
|
||||
'id': None, # Is this an FDev ID for suit type ?
|
||||
'suitId': entry['SuitID'],
|
||||
'slots': [],
|
||||
'mods': entry['SuitMods'], # Suits can (rarely) be bought with modules installed
|
||||
}
|
||||
|
||||
# update credits
|
||||
@ -1116,7 +1122,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
else:
|
||||
self.state['Credits'] -= price
|
||||
|
||||
elif event_type == 'SellSuit':
|
||||
elif event_type == 'sellsuit':
|
||||
# Remove from known suits
|
||||
# As of Odyssey Alpha Phase 2, Hotfix 5 (4.0.0.13) this isn't possible as this event
|
||||
# doesn't contain the specific suit ID as per CAPI `suits` dict.
|
||||
@ -1144,7 +1150,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
else:
|
||||
self.state['Credits'] += price
|
||||
|
||||
elif event_type == 'UpgradeSuit':
|
||||
elif event_type == 'upgradesuit':
|
||||
# alpha4
|
||||
# This event is logged when the player upgrades their flight suit
|
||||
#
|
||||
@ -1156,7 +1162,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
# TODO: Update self.state['Suits'] when we have an example to work from
|
||||
self.state['Credits'] -= entry.get('Cost', 0)
|
||||
|
||||
elif event_type == 'LoadoutEquipModule':
|
||||
elif event_type == 'loadoutequipmodule':
|
||||
# alpha4:
|
||||
# { "timestamp":"2021-04-29T11:11:13Z", "event":"LoadoutEquipModule", "LoadoutName":"Dom L/K/K",
|
||||
# "SuitID":1698364940285172, "SuitName":"tacticalsuit_class1", "SuitName_Localised":"Dominator Suit",
|
||||
@ -1171,12 +1177,14 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
'id': None,
|
||||
'weaponrackId': entry['SuitModuleID'],
|
||||
'locDescription': '',
|
||||
'class': entry['Class'],
|
||||
'mods': entry['WeaponMods']
|
||||
}
|
||||
|
||||
except KeyError:
|
||||
logger.error(f"LoadoutEquipModule: {entry}")
|
||||
|
||||
elif event_type == 'LoadoutRemoveModule':
|
||||
elif event_type == 'loadoutremovemodule':
|
||||
# alpha4 - triggers if selecting an already-equipped weapon into a different slot
|
||||
# { "timestamp":"2021-04-29T11:11:13Z", "event":"LoadoutRemoveModule", "LoadoutName":"Dom L/K/K",
|
||||
# "SuitID":1698364940285172, "SuitName":"tacticalsuit_class1", "SuitName_Localised":"Dominator Suit",
|
||||
@ -1190,7 +1198,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
except KeyError:
|
||||
logger.error(f"LoadoutRemoveModule: {entry}")
|
||||
|
||||
elif event_type == 'BuyWeapon':
|
||||
elif event_type == 'buyweapon':
|
||||
# alpha4
|
||||
# { "timestamp":"2021-04-29T11:10:51Z", "event":"BuyWeapon", "Name":"Wpn_M_AssaultRifle_Laser_FAuto",
|
||||
# "Name_Localised":"TK Aphelion", "Price":125000, "SuitModuleID":1698372938719590 }
|
||||
@ -1201,7 +1209,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
else:
|
||||
self.state['Credits'] -= price
|
||||
|
||||
elif event_type == 'SellWeapon':
|
||||
elif event_type == 'sellweapon':
|
||||
# We're not actually keeping track of all owned weapons, only those in
|
||||
# Suit Loadouts.
|
||||
# alpha4:
|
||||
@ -1225,20 +1233,20 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
else:
|
||||
self.state['Credits'] += price
|
||||
|
||||
elif event_type == 'UpgradeWeapon':
|
||||
elif event_type == 'upgradeweapon':
|
||||
# We're not actually keeping track of all owned weapons, only those in
|
||||
# Suit Loadouts.
|
||||
self.state['Credits'] -= entry.get('Cost', 0)
|
||||
|
||||
elif event_type == 'ScanOrganic':
|
||||
elif event_type == 'scanorganic':
|
||||
# Nothing of interest to our state.
|
||||
pass
|
||||
|
||||
elif event_type == 'SellOrganicData':
|
||||
elif event_type == 'sellorganicdata':
|
||||
for bd in entry['BioData']:
|
||||
self.state['Credits'] += bd.get('Value', 0) + bd.get('Bonus', 0)
|
||||
|
||||
elif event_type == 'BookDropship':
|
||||
elif event_type == 'bookdropship':
|
||||
self.state['Credits'] -= entry.get('Cost', 0)
|
||||
self.state['Dropship'] = True
|
||||
# Technically we *might* now not be OnFoot.
|
||||
@ -1252,20 +1260,20 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
# not still on-foot, BUT it doesn't really matter as the next significant
|
||||
# event is going to be Disembark to on-foot anyway.
|
||||
|
||||
elif event_type == 'BookTaxi':
|
||||
elif event_type == 'booktaxi':
|
||||
self.state['Credits'] -= entry.get('Cost', 0)
|
||||
# Dont set taxi state here, as we're not IN a taxi yet. Set it on Embark
|
||||
|
||||
elif event_type == 'CancelDropship':
|
||||
elif event_type == 'canceldropship':
|
||||
self.state['Credits'] += entry.get('Refund', 0)
|
||||
self.state['Dropship'] = False
|
||||
self.state['Taxi'] = False
|
||||
|
||||
elif event_type == 'CancelTaxi':
|
||||
elif event_type == 'canceltaxi':
|
||||
self.state['Credits'] += entry.get('Refund', 0)
|
||||
self.state['Taxi'] = False
|
||||
|
||||
elif event_type == 'NavRoute':
|
||||
elif event_type == 'navroute':
|
||||
# Added in ED 3.7 - multi-hop route details in NavRoute.json
|
||||
with open(join(self.currentdir, 'NavRoute.json'), 'rb') as rf: # type: ignore
|
||||
try:
|
||||
@ -1277,7 +1285,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
else:
|
||||
self.state['NavRoute'] = entry
|
||||
|
||||
elif event_type == 'ModuleInfo':
|
||||
elif event_type == 'moduleinfo':
|
||||
with open(join(self.currentdir, 'ModulesInfo.json'), 'rb') as mf: # type: ignore
|
||||
try:
|
||||
entry = json.load(mf)
|
||||
@ -1288,30 +1296,30 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
else:
|
||||
self.state['ModuleInfo'] = entry
|
||||
|
||||
elif event_type in ('CollectCargo', 'MarketBuy', 'BuyDrones', 'MiningRefined'):
|
||||
elif event_type in ('collectcargo', 'marketbuy', 'buydrones', 'miningrefined'):
|
||||
commodity = self.canonicalise(entry['Type'])
|
||||
self.state['Cargo'][commodity] += entry.get('Count', 1)
|
||||
|
||||
if event_type == 'BuyDrones':
|
||||
if event_type == 'buydrones':
|
||||
self.state['Credits'] -= entry.get('TotalCost', 0)
|
||||
|
||||
elif event_type == 'MarketBuy':
|
||||
elif event_type == 'marketbuy':
|
||||
self.state['Credits'] -= entry.get('TotalCost', 0)
|
||||
|
||||
elif event_type in ('EjectCargo', 'MarketSell', 'SellDrones'):
|
||||
elif event_type in ('ejectcargo', 'marketsell', 'selldrones'):
|
||||
commodity = self.canonicalise(entry['Type'])
|
||||
cargo = self.state['Cargo']
|
||||
cargo[commodity] -= entry.get('Count', 1)
|
||||
if cargo[commodity] <= 0:
|
||||
cargo.pop(commodity)
|
||||
|
||||
if event_type == 'MarketSell':
|
||||
if event_type == 'marketsell':
|
||||
self.state['Credits'] += entry.get('TotalSale', 0)
|
||||
|
||||
elif event_type == 'SellDrones':
|
||||
elif event_type == 'selldrones':
|
||||
self.state['Credits'] += entry.get('TotalSale', 0)
|
||||
|
||||
elif event_type == 'SearchAndRescue':
|
||||
elif event_type == 'searchandrescue':
|
||||
for item in entry.get('Items', []):
|
||||
commodity = self.canonicalise(item['Name'])
|
||||
cargo = self.state['Cargo']
|
||||
@ -1319,25 +1327,25 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
if cargo[commodity] <= 0:
|
||||
cargo.pop(commodity)
|
||||
|
||||
elif event_type == 'Materials':
|
||||
elif event_type == 'materials':
|
||||
for category in ('Raw', 'Manufactured', 'Encoded'):
|
||||
self.state[category] = defaultdict(int)
|
||||
self.state[category].update({
|
||||
self.canonicalise(x['Name']): x['Count'] for x in entry.get(category, [])
|
||||
})
|
||||
|
||||
elif event_type == 'MaterialCollected':
|
||||
elif event_type == 'materialcollected':
|
||||
material = self.canonicalise(entry['Name'])
|
||||
self.state[entry['Category']][material] += entry['Count']
|
||||
|
||||
elif event_type in ('MaterialDiscarded', 'ScientificResearch'):
|
||||
elif event_type in ('materialdiscarded', 'scientificresearch'):
|
||||
material = self.canonicalise(entry['Name'])
|
||||
state_category = self.state[entry['Category']]
|
||||
state_category[material] -= entry['Count']
|
||||
if state_category[material] <= 0:
|
||||
state_category.pop(material)
|
||||
|
||||
elif event_type == 'Synthesis':
|
||||
elif event_type == 'synthesis':
|
||||
for category in ('Raw', 'Manufactured', 'Encoded'):
|
||||
for x in entry['Materials']:
|
||||
material = self.canonicalise(x['Name'])
|
||||
@ -1346,7 +1354,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
if self.state[category][material] <= 0:
|
||||
self.state[category].pop(material)
|
||||
|
||||
elif event_type == 'MaterialTrade':
|
||||
elif event_type == 'materialtrade':
|
||||
category = self.category(entry['Paid']['Category'])
|
||||
state_category = self.state[category]
|
||||
paid = entry['Paid']
|
||||
@ -1360,7 +1368,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
state_category[received['Material']] += received['Quantity']
|
||||
|
||||
elif event_type == 'EngineerCraft' or (
|
||||
event_type == 'EngineerLegacyConvert' and not entry.get('IsPreview')
|
||||
event_type == 'engineerlegacyconvert' and not entry.get('IsPreview')
|
||||
):
|
||||
|
||||
for category in ('Raw', 'Manufactured', 'Encoded'):
|
||||
@ -1391,7 +1399,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
module['Engineering'].pop('ExperimentalEffect', None)
|
||||
module['Engineering'].pop('ExperimentalEffect_Localised', None)
|
||||
|
||||
elif event_type == 'MissionCompleted':
|
||||
elif event_type == 'missioncompleted':
|
||||
self.state['Credits'] += entry.get('Reward', 0)
|
||||
|
||||
for reward in entry.get('CommodityReward', []):
|
||||
@ -1404,7 +1412,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
material = self.canonicalise(reward['Name'])
|
||||
self.state[category][material] += reward.get('Count', 1)
|
||||
|
||||
elif event_type == 'EngineerContribution':
|
||||
elif event_type == 'engineercontribution':
|
||||
commodity = self.canonicalise(entry.get('Commodity'))
|
||||
if commodity:
|
||||
self.state['Cargo'][commodity] -= entry['Quantity']
|
||||
@ -1419,7 +1427,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
if self.state[category][material] <= 0:
|
||||
self.state[category].pop(material)
|
||||
|
||||
elif event_type == 'TechnologyBroker':
|
||||
elif event_type == 'technologybroker':
|
||||
for thing in entry.get('Ingredients', []): # 3.01
|
||||
for category in ('Cargo', 'Raw', 'Manufactured', 'Encoded'):
|
||||
item = self.canonicalise(thing['Name'])
|
||||
@ -1441,7 +1449,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
if self.state[category][material] <= 0:
|
||||
self.state[category].pop(material)
|
||||
|
||||
elif event_type == 'JoinACrew':
|
||||
elif event_type == 'joinacrew':
|
||||
self.state['Captain'] = entry['Captain']
|
||||
self.state['Role'] = 'Idle'
|
||||
self.planet = None
|
||||
@ -1457,10 +1465,10 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
self.state['Body'] = None
|
||||
self.state['BodyType'] = None
|
||||
|
||||
elif event_type == 'ChangeCrewRole':
|
||||
elif event_type == 'changecrewrole':
|
||||
self.state['Role'] = entry['Role']
|
||||
|
||||
elif event_type == 'QuitACrew':
|
||||
elif event_type == 'quitacrew':
|
||||
self.state['Captain'] = None
|
||||
self.state['Role'] = None
|
||||
self.planet = None
|
||||
@ -1476,7 +1484,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
self.state['BodyType'] = None
|
||||
# TODO: on_foot: Will we get an event after this to know ?
|
||||
|
||||
elif event_type == 'Friends':
|
||||
elif event_type == 'friends':
|
||||
if entry['Status'] in ('Online', 'Added'):
|
||||
self.state['Friends'].add(entry['Name'])
|
||||
|
||||
@ -1484,75 +1492,75 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
self.state['Friends'].discard(entry['Name'])
|
||||
|
||||
# Try to keep Credits total updated
|
||||
elif event_type in ('MultiSellExplorationData', 'SellExplorationData'):
|
||||
elif event_type in ('multisellexplorationdata', 'sellexplorationdata'):
|
||||
self.state['Credits'] += entry.get('TotalEarnings', 0)
|
||||
|
||||
elif event_type == 'BuyExplorationData':
|
||||
elif event_type == 'buyexplorationdata':
|
||||
self.state['Credits'] -= entry.get('Cost', 0)
|
||||
|
||||
elif event_type == 'BuyTradeData':
|
||||
elif event_type == 'buytradedata':
|
||||
self.state['Credits'] -= entry.get('Cost', 0)
|
||||
|
||||
elif event_type == 'BuyAmmo':
|
||||
elif event_type == 'buyammo':
|
||||
self.state['Credits'] -= entry.get('Cost', 0)
|
||||
|
||||
elif event_type == 'CommunityGoalReward':
|
||||
elif event_type == 'communitygoalreward':
|
||||
self.state['Credits'] += entry.get('Reward', 0)
|
||||
|
||||
elif event_type == 'CrewHire':
|
||||
elif event_type == 'crewhire':
|
||||
self.state['Credits'] -= entry.get('Cost', 0)
|
||||
|
||||
elif event_type == 'FetchRemoteModule':
|
||||
elif event_type == 'fetchremotemodule':
|
||||
self.state['Credits'] -= entry.get('TransferCost', 0)
|
||||
|
||||
elif event_type == 'MissionAbandoned':
|
||||
elif event_type == 'missionabandoned':
|
||||
# Is this paid at this point, or just a fine to pay later ?
|
||||
# self.state['Credits'] -= entry.get('Fine', 0)
|
||||
pass
|
||||
|
||||
elif event_type in ('PayBounties', 'PayFines', 'PayLegacyFines'):
|
||||
elif event_type in ('paybounties', 'payfines', 'paylegacyfines'):
|
||||
self.state['Credits'] -= entry.get('Amount', 0)
|
||||
|
||||
elif event_type == 'RedeemVoucher':
|
||||
elif event_type == 'redeemvoucher':
|
||||
self.state['Credits'] += entry.get('Amount', 0)
|
||||
|
||||
elif event_type in ('RefuelAll', 'RefuelPartial', 'Repair', 'RepairAll', 'RestockVehicle'):
|
||||
elif event_type in ('refuelall', 'refuelpartial', 'repair', 'repairall', 'restockvehicle'):
|
||||
self.state['Credits'] -= entry.get('Cost', 0)
|
||||
|
||||
elif event_type == 'SellShipOnRebuy':
|
||||
elif event_type == 'sellshiponrebuy':
|
||||
self.state['Credits'] += entry.get('ShipPrice', 0)
|
||||
|
||||
elif event_type == 'ShipyardSell':
|
||||
elif event_type == 'shipyardsell':
|
||||
self.state['Credits'] += entry.get('ShipPrice', 0)
|
||||
|
||||
elif event_type == 'ShipyardTransfer':
|
||||
elif event_type == 'shipyardtransfer':
|
||||
self.state['Credits'] -= entry.get('TransferPrice', 0)
|
||||
|
||||
elif event_type == 'PowerplayFastTrack':
|
||||
elif event_type == 'powerplayfasttrack':
|
||||
self.state['Credits'] -= entry.get('Cost', 0)
|
||||
|
||||
elif event_type == 'PowerplaySalary':
|
||||
elif event_type == 'powerplaysalary':
|
||||
self.state['Credits'] += entry.get('Amount', 0)
|
||||
|
||||
elif event_type == 'SquadronCreated':
|
||||
elif event_type == 'squadroncreated':
|
||||
# v30 docs don't actually say anything about credits cost
|
||||
pass
|
||||
|
||||
elif event_type == 'CarrierBuy':
|
||||
elif event_type == 'carrierbuy':
|
||||
self.state['Credits'] -= entry.get('Price', 0)
|
||||
|
||||
elif event_type == 'CarrierBankTransfer':
|
||||
elif event_type == 'carrierbanktransfer':
|
||||
if (newbal := entry.get('PlayerBalance')):
|
||||
self.state['Credits'] = newbal
|
||||
|
||||
elif event_type == 'CarrierDecommission':
|
||||
elif event_type == 'carrierdecommission':
|
||||
# v30 doc says nothing about citing the refund amount
|
||||
pass
|
||||
|
||||
elif event_type == 'NpcCrewPaidWage':
|
||||
elif event_type == 'npccrewpaidwage':
|
||||
self.state['Credits'] -= entry.get('Amount', 0)
|
||||
|
||||
elif event_type == 'Resurrect':
|
||||
elif event_type == 'resurrect':
|
||||
self.state['Credits'] -= entry.get('Cost', 0)
|
||||
|
||||
# There should be a `Backpack` event as you 'come to' in the
|
||||
@ -1569,6 +1577,22 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
logger.debug(f'Invalid journal entry:\n{line!r}\n', exc_info=ex)
|
||||
return {'event': None}
|
||||
|
||||
def populate_version_info(self, entry: MutableMapping[str, str], suppress: bool = False):
|
||||
"""
|
||||
Update game version information stored locally.
|
||||
|
||||
:param entry: Either a Fileheader or LoadGame event
|
||||
"""
|
||||
try:
|
||||
self.state['GameLanguage'] = entry['language']
|
||||
self.state['GameVersion'] = entry['gameversion']
|
||||
self.state['GameBuild'] = entry['build']
|
||||
self.version = self.state['GameVersion']
|
||||
self.is_beta = any(v in self.version.lower() for v in ('alpha', 'beta'))
|
||||
except KeyError:
|
||||
if not suppress:
|
||||
raise
|
||||
|
||||
def backpack_set_empty(self):
|
||||
"""Set the BackPack contents to be empty."""
|
||||
self.state['BackPack']['Component'] = defaultdict(int)
|
||||
@ -1643,10 +1667,14 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
suit = {
|
||||
'edmcName': edmc_suitname,
|
||||
'locName': suitname,
|
||||
'suitId': entry['SuitID'],
|
||||
'name': entry['SuitName'],
|
||||
}
|
||||
|
||||
# Overwrite with latest data, just in case, as this can be from CAPI which may or may not have had
|
||||
# all the data we wanted
|
||||
suit['suitId'] = entry['SuitID']
|
||||
suit['name'] = entry['SuitName']
|
||||
suit['mods'] = entry['SuitMods']
|
||||
|
||||
suitloadout_slotid = self.suit_loadout_id_from_loadoutid(entry['LoadoutID'])
|
||||
# Make the new loadout, in the CAPI format
|
||||
new_loadout = {
|
||||
@ -1660,7 +1688,6 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
|
||||
# Now add in the extra fields for new_suit to be a 'full' Suit structure
|
||||
suit['id'] = suit.get('id') # Not available in 4.0.0.100 journal event
|
||||
suit['slots'] = new_loadout['slots'] # 'slots', not 'Modules', to match CAPI
|
||||
# Ensure the suit is in self.state['Suits']
|
||||
self.state['Suits'][f"{suitid}"] = suit
|
||||
|
||||
@ -2093,6 +2120,8 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
|
||||
'weaponrackId': loadout_slots[s]['SuitModuleID'],
|
||||
'locName': loadout_slots[s].get('ModuleName_Localised', loadout_slots[s]['ModuleName']),
|
||||
'locDescription': '',
|
||||
'class': loadout_slots[s]['Class'],
|
||||
'mods': loadout_slots[s]['WeaponMods'],
|
||||
}
|
||||
|
||||
return slots
|
||||
|
@ -48,7 +48,11 @@ def plugin_start3(path: str) -> str:
|
||||
normal_textvar.set(value=normal_url)
|
||||
beta_textvar.set(value=beta_url)
|
||||
override_textvar.set(
|
||||
value={'auto': _('Auto'), 'normal': _('Normal'), 'beta': _('Beta')}.get(override_mode, _('Auto'))
|
||||
value={
|
||||
'auto': _('Auto'), # LANG: 'Auto' label for Coriolis site override selection
|
||||
'normal': _('Normal'), # LANG: 'Normal' label for Coriolis site override selection
|
||||
'beta': _('Beta') # LANG: 'Beta' label for Coriolis site override selection
|
||||
}.get(override_mode, _('Auto')) # LANG: 'Auto' label for Coriolis site override selection
|
||||
)
|
||||
|
||||
return 'Coriolis'
|
||||
@ -61,31 +65,40 @@ def plugin_prefs(parent: tk.Widget, cmdr: str, is_beta: bool) -> tk.Frame:
|
||||
conf_frame = nb.Frame(parent)
|
||||
conf_frame.columnconfigure(index=1, weight=1)
|
||||
cur_row = 0
|
||||
# LANG: Settings>Coriolis: Help/hint for changing coriolis URLs
|
||||
nb.Label(conf_frame, text=_(
|
||||
"Set the URL to use with coriolis.io ship loadouts. Note that this MUST end with '/import?data='"
|
||||
)).grid(sticky=tk.EW, row=cur_row, column=0, columnspan=3)
|
||||
cur_row += 1
|
||||
|
||||
# LANG: Settings>Coriolis: Label for 'NOT alpha/beta game version' URL
|
||||
nb.Label(conf_frame, text=_('Normal URL')).grid(sticky=tk.W, row=cur_row, column=0, padx=PADX)
|
||||
nb.Entry(conf_frame, textvariable=normal_textvar).grid(sticky=tk.EW, row=cur_row, column=1, padx=PADX)
|
||||
# LANG: Generic 'Reset' button label
|
||||
nb.Button(conf_frame, text=_("Reset"), command=lambda: normal_textvar.set(value=DEFAULT_NORMAL_URL)).grid(
|
||||
sticky=tk.W, row=cur_row, column=2, padx=PADX
|
||||
)
|
||||
cur_row += 1
|
||||
|
||||
# LANG: Settings>Coriolis: Label for 'alpha/beta game version' URL
|
||||
nb.Label(conf_frame, text=_('Beta URL')).grid(sticky=tk.W, row=cur_row, column=0, padx=PADX)
|
||||
nb.Entry(conf_frame, textvariable=beta_textvar).grid(sticky=tk.EW, row=cur_row, column=1, padx=PADX)
|
||||
# LANG: Generic 'Reset' button label
|
||||
nb.Button(conf_frame, text=_('Reset'), command=lambda: beta_textvar.set(value=DEFAULT_BETA_URL)).grid(
|
||||
sticky=tk.W, row=cur_row, column=2, padx=PADX
|
||||
)
|
||||
cur_row += 1
|
||||
|
||||
# TODO: This needs a help/hint text to be sure users know what it's for.
|
||||
# LANG: Settings>Coriolis: Label for selection of using Normal, Beta or 'auto' Coriolis URL
|
||||
nb.Label(conf_frame, text=_('Override Beta/Normal Selection')).grid(sticky=tk.W, row=cur_row, column=0, padx=PADX)
|
||||
nb.OptionMenu(
|
||||
conf_frame,
|
||||
override_textvar,
|
||||
override_textvar.get(),
|
||||
_('Normal'), _('Beta'), _('Auto')
|
||||
_('Normal'), # LANG: 'Normal' label for Coriolis site override selection
|
||||
_('Beta'), # LANG: 'Beta' label for Coriolis site override selection
|
||||
_('Auto') # LANG: 'Auto' label for Coriolis site override selection
|
||||
).grid(sticky=tk.W, row=cur_row, column=1, padx=PADX)
|
||||
cur_row += 1
|
||||
|
||||
@ -107,7 +120,7 @@ def prefs_changed(cmdr: str, is_beta: bool) -> None:
|
||||
if override_mode not in ('beta', 'normal', 'auto'):
|
||||
logger.warning(f'Unexpected value {override_mode=!r}. defaulting to "auto"')
|
||||
override_mode = 'auto'
|
||||
override_textvar.set(value=_('Auto'))
|
||||
override_textvar.set(value=_('Auto')) # LANG: 'Auto' label for Coriolis site override selection
|
||||
|
||||
config.set('coriolis_normal_url', normal_url)
|
||||
config.set('coriolis_beta_url', beta_url)
|
||||
@ -117,6 +130,7 @@ def prefs_changed(cmdr: str, is_beta: bool) -> None:
|
||||
def _get_target_url(is_beta: bool) -> str:
|
||||
global override_mode
|
||||
if override_mode not in ('auto', 'normal', 'beta'):
|
||||
# LANG: Settings>Coriolis - invalid override mode found
|
||||
show_error(_('Invalid Coriolis override mode!'))
|
||||
logger.warning(f'Unexpected override mode {override_mode!r}! defaulting to auto!')
|
||||
override_mode = 'auto'
|
||||
|
@ -96,6 +96,7 @@ def prefs_changed(cmdr, is_beta):
|
||||
def journal_entry(cmdr, is_beta, system, station, entry, state):
|
||||
if (ks := killswitch.get_disabled('plugins.eddb.journal')).disabled:
|
||||
logger.warning(f'Journal processing for EDDB has been disabled: {ks.reason}')
|
||||
# LANG: Journal Processing disabled due to an active killswitch
|
||||
plug.show_error(_('EDDB Journal processing disabled. See Log.'))
|
||||
return
|
||||
|
||||
|
@ -16,11 +16,12 @@ from typing import TextIO, Tuple
|
||||
|
||||
import requests
|
||||
|
||||
import edmc_data
|
||||
import killswitch
|
||||
import myNotebook as nb # noqa: N813
|
||||
import plug
|
||||
from companion import CAPIData, category_map
|
||||
from config import applongname, appversion_nobuild, config
|
||||
from config import applongname, appversion_nobuild, config, debug_senders
|
||||
from EDMCLogging import get_main_logger
|
||||
from monitor import monitor
|
||||
from myNotebook import Frame
|
||||
@ -86,10 +87,15 @@ HORIZ_SKU = 'ELITE_HORIZONS_V_PLANETARY_LANDINGS'
|
||||
|
||||
class EDDN:
|
||||
"""EDDN Data export."""
|
||||
|
||||
# SERVER = 'http://localhost:8081' # testing
|
||||
DEBUG = 'eddn' in debug_senders
|
||||
SERVER = 'https://eddn.edcd.io:4430'
|
||||
if DEBUG:
|
||||
SERVER = f'http://{edmc_data.DEBUG_WEBSERVER_HOST}:{edmc_data.DEBUG_WEBSERVER_PORT}'
|
||||
|
||||
UPLOAD = f'{SERVER}/upload/'
|
||||
if DEBUG:
|
||||
UPLOAD = f'{SERVER}/eddn'
|
||||
|
||||
REPLAYPERIOD = 400 # Roughly two messages per second, accounting for send delays [ms]
|
||||
REPLAYFLUSH = 20 # Update log on disk roughly every 10 seconds
|
||||
TIMEOUT = 10 # requests timeout
|
||||
@ -212,7 +218,7 @@ Msg:\n{msg}'''
|
||||
status['text'] = ''
|
||||
return
|
||||
|
||||
localized: str = _('Sending data to EDDN...')
|
||||
localized: str = _('Sending data to EDDN...') # LANG: Status text shown while attempting to send data
|
||||
if len(self.replaylog) == 1:
|
||||
status['text'] = localized
|
||||
|
||||
@ -260,6 +266,7 @@ Msg:\n{msg}'''
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
logger.debug('Failed sending', exc_info=e)
|
||||
# LANG: Error while trying to send data to EDDN
|
||||
status['text'] = _("Error: Can't connect to EDDN")
|
||||
return # stop sending
|
||||
|
||||
@ -277,15 +284,18 @@ Msg:\n{msg}'''
|
||||
|
||||
if status_code == 429: # HTTP UPGRADE REQUIRED
|
||||
logger.warning('EDMC is sending schemas that are too old')
|
||||
# LANG: EDDN has banned this version of our client
|
||||
return _('EDDN Error: EDMC is too old for EDDN. Please update.')
|
||||
|
||||
elif status_code == 400:
|
||||
# we a validation check or something else.
|
||||
logger.warning(f'EDDN Error: {status_code} -- {exception.response}')
|
||||
# LANG: EDDN returned an error that indicates something about what we sent it was wrong
|
||||
return _('EDDN Error: Validation Failed (EDMC Too Old?). See Log')
|
||||
|
||||
else:
|
||||
logger.warning(f'Unknown status code from EDDN: {status_code} -- {exception.response}')
|
||||
# LANG: EDDN returned some sort of HTTP error, one we didn't expect. {STATUS} contains a number
|
||||
return _('EDDN Error: Returned {STATUS} status code').format(status_code)
|
||||
|
||||
def export_commodities(self, data: Mapping[str, Any], is_beta: bool, is_odyssey: bool) -> None: # noqa: CCR001
|
||||
@ -611,7 +621,8 @@ Msg:\n{msg}'''
|
||||
|
||||
else:
|
||||
# Can't access replay file! Send immediately.
|
||||
self.parent.children['status']['text'] = _('Sending data to EDDN...') # LANG: Data is being sent to EDDN
|
||||
# LANG: Status text shown while attempting to send data
|
||||
self.parent.children['status']['text'] = _('Sending data to EDDN...')
|
||||
self.parent.update_idletasks()
|
||||
self.send(cmdr, msg)
|
||||
self.parent.children['status']['text'] = ''
|
||||
@ -690,6 +701,7 @@ def plugin_prefs(parent, cmdr: str, is_beta: bool) -> Frame:
|
||||
this.eddn_station = tk.IntVar(value=(output & config.OUT_MKT_EDDN) and 1)
|
||||
this.eddn_station_button = nb.Checkbutton(
|
||||
eddnframe,
|
||||
# LANG: Enable EDDN support for station data checkbox label
|
||||
text=_('Send station data to the Elite Dangerous Data Network'),
|
||||
variable=this.eddn_station,
|
||||
command=prefsvarchanged
|
||||
@ -700,6 +712,7 @@ def plugin_prefs(parent, cmdr: str, is_beta: bool) -> Frame:
|
||||
# Output setting new in E:D 2.2
|
||||
this.eddn_system_button = nb.Checkbutton(
|
||||
eddnframe,
|
||||
# LANG: Enable EDDN support for system and other scan data checkbox label
|
||||
text=_('Send system and scan data to the Elite Dangerous Data Network'),
|
||||
variable=this.eddn_system,
|
||||
command=prefsvarchanged
|
||||
@ -710,6 +723,7 @@ def plugin_prefs(parent, cmdr: str, is_beta: bool) -> Frame:
|
||||
# Output setting under 'Send system and scan data to the Elite Dangerous Data Network' new in E:D 2.2
|
||||
this.eddn_delay_button = nb.Checkbutton(
|
||||
eddnframe,
|
||||
# LANG: EDDN delay sending until docked option is on, this message notes that a send was skipped due to this
|
||||
text=_('Delay sending until docked'),
|
||||
variable=this.eddn_delay
|
||||
)
|
||||
@ -774,7 +788,7 @@ def journal_entry( # noqa: C901, CCR001
|
||||
"""
|
||||
if (ks := killswitch.get_disabled("plugins.eddn.journal")).disabled:
|
||||
logger.warning(f'EDDN journal handler has been disabled via killswitch: {ks.reason}')
|
||||
plug.show_error(_('EDDN journal handler disabled. See Log.'))
|
||||
plug.show_error(_('EDDN journal handler disabled. See Log.')) # LANG: Killswitch disabled EDDN
|
||||
return None
|
||||
|
||||
elif (ks := killswitch.get_disabled(f'plugins.eddn.journal.event.{entry["event"]}')).disabled:
|
||||
@ -896,7 +910,7 @@ def journal_entry( # noqa: C901, CCR001
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
logger.debug('Failed in export_journal_entry', exc_info=e)
|
||||
return _("Error: Can't connect to EDDN")
|
||||
return _("Error: Can't connect to EDDN") # LANG: Error while trying to send data to EDDN
|
||||
|
||||
except Exception as e:
|
||||
logger.debug('Failed in export_journal_entry', exc_info=e)
|
||||
@ -931,7 +945,7 @@ def journal_entry( # noqa: C901, CCR001
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
logger.debug(f'Failed exporting {entry["event"]}', exc_info=e)
|
||||
return _("Error: Can't connect to EDDN")
|
||||
return _("Error: Can't connect to EDDN") # LANG: Error while trying to send data to EDDN
|
||||
|
||||
except Exception as e:
|
||||
logger.debug(f'Failed exporting {entry["event"]}', exc_info=e)
|
||||
@ -958,7 +972,7 @@ def cmdr_data(data: CAPIData, is_beta: bool) -> Optional[str]: # noqa: CCR001
|
||||
status = this.parent.children['status']
|
||||
old_status = status['text']
|
||||
if not old_status:
|
||||
status['text'] = _('Sending data to EDDN...')
|
||||
status['text'] = _('Sending data to EDDN...') # LANG: Status text shown while attempting to send data
|
||||
status.update_idletasks()
|
||||
|
||||
this.eddn.export_commodities(data, is_beta, this.odyssey)
|
||||
@ -970,7 +984,7 @@ def cmdr_data(data: CAPIData, is_beta: bool) -> Optional[str]: # noqa: CCR001
|
||||
|
||||
except requests.RequestException as e:
|
||||
logger.debug('Failed exporting data', exc_info=e)
|
||||
return _("Error: Can't connect to EDDN")
|
||||
return _("Error: Can't connect to EDDN") # LANG: Error while trying to send data to EDDN
|
||||
|
||||
except Exception as e:
|
||||
logger.debug('Failed exporting data', exc_info=e)
|
||||
|
@ -22,7 +22,8 @@ import killswitch
|
||||
import myNotebook as nb # noqa: N813
|
||||
import plug
|
||||
from companion import CAPIData
|
||||
from config import applongname, appversion, config
|
||||
from config import applongname, appversion, config, debug_senders
|
||||
from edmc_data import DEBUG_WEBSERVER_HOST, DEBUG_WEBSERVER_PORT
|
||||
from EDMCLogging import get_main_logger
|
||||
from ttkHyperlinkLabel import HyperlinkLabel
|
||||
|
||||
@ -194,6 +195,7 @@ def plugin_prefs(parent: tk.Tk, cmdr: str, is_beta: bool) -> tk.Frame:
|
||||
|
||||
this.log = tk.IntVar(value=config.get_int('edsm_out') and 1)
|
||||
this.log_button = nb.Checkbutton(
|
||||
# LANG: Settings>EDSM - Label on checkbox for 'send data'
|
||||
frame, text=_('Send flight log and Cmdr status to EDSM'), variable=this.log, command=prefsvarchanged
|
||||
)
|
||||
|
||||
@ -203,6 +205,7 @@ def plugin_prefs(parent: tk.Tk, cmdr: str, is_beta: bool) -> tk.Frame:
|
||||
# Section heading in settings
|
||||
this.label = HyperlinkLabel(
|
||||
frame,
|
||||
# LANG: Settings>EDSM - Label on header/URL to EDSM API key page
|
||||
text=_('Elite Dangerous Star Map credentials'),
|
||||
background=nb.Label().cget('background'),
|
||||
url='https://www.edsm.net/settings/api',
|
||||
@ -352,6 +355,7 @@ def journal_entry(
|
||||
"""Journal Entry hook."""
|
||||
if (ks := killswitch.get_disabled('plugins.edsm.journal')).disabled:
|
||||
logger.warning(f'EDSM Journal handler disabled via killswitch: {ks.reason}')
|
||||
# LANG: EDSM plugin - Journal handling disabled by killswitch
|
||||
plug.show_error(_('EDSM Handler disabled. See Log.'))
|
||||
return
|
||||
|
||||
@ -525,8 +529,14 @@ def cmdr_data(data: CAPIData, is_beta: bool) -> None:
|
||||
this.system_link.update_idletasks()
|
||||
|
||||
|
||||
TARGET_URL = 'https://www.edsm.net/api-journal-v1'
|
||||
if 'edsm' in debug_senders:
|
||||
TARGET_URL = f'http://{DEBUG_WEBSERVER_HOST}:{DEBUG_WEBSERVER_PORT}/edsm'
|
||||
|
||||
# Worker thread
|
||||
def worker() -> None:
|
||||
|
||||
|
||||
def worker() -> None: # noqa: CCR001 C901 # Cant be broken up currently
|
||||
"""
|
||||
Handle uploading events to EDSM API.
|
||||
|
||||
@ -620,9 +630,10 @@ def worker() -> None:
|
||||
|
||||
# logger.trace(f'Overall POST data (elided) is:\n{data_elided}')
|
||||
|
||||
r = this.session.post('https://www.edsm.net/api-journal-v1', data=data, timeout=_TIMEOUT)
|
||||
r = this.session.post(TARGET_URL, data=data, timeout=_TIMEOUT)
|
||||
# logger.trace(f'API response content: {r.content}')
|
||||
r.raise_for_status()
|
||||
|
||||
reply = r.json()
|
||||
msg_num = reply['msgnum']
|
||||
msg = reply['msg']
|
||||
@ -633,6 +644,7 @@ def worker() -> None:
|
||||
|
||||
if msg_num // 100 == 2:
|
||||
logger.warning(f'EDSM\t{msg_num} {msg}\t{json.dumps(pending, separators=(",", ": "))}')
|
||||
# LANG: EDSM Plugin - Error message from EDSM API
|
||||
plug.show_error(_('Error: EDSM {MSG}').format(MSG=msg))
|
||||
|
||||
else:
|
||||
@ -669,6 +681,7 @@ def worker() -> None:
|
||||
retrying += 1
|
||||
|
||||
else:
|
||||
# LANG: EDSM Plugin - Error connecting to EDSM API
|
||||
plug.show_error(_("Error: Can't connect to EDSM"))
|
||||
|
||||
if closing:
|
||||
@ -731,10 +744,12 @@ def edsm_notify_system(reply: Mapping[str, Any]) -> None:
|
||||
"""Update the image next to the system link."""
|
||||
if not reply:
|
||||
this.system_link['image'] = this._IMG_ERROR
|
||||
# LANG: EDSM Plugin - Error connecting to EDSM API
|
||||
plug.show_error(_("Error: Can't connect to EDSM"))
|
||||
|
||||
elif reply['msgnum'] // 100 not in (1, 4):
|
||||
this.system_link['image'] = this._IMG_ERROR
|
||||
# LANG: EDSM Plugin - Error message from EDSM API
|
||||
plug.show_error(_('Error: EDSM {MSG}').format(MSG=reply['msg']))
|
||||
|
||||
elif reply.get('systemCreated'):
|
||||
|
@ -13,12 +13,13 @@ from typing import Sequence, Union, cast
|
||||
|
||||
import requests
|
||||
|
||||
import edmc_data
|
||||
import killswitch
|
||||
import myNotebook as nb # noqa: N813
|
||||
import plug
|
||||
import timeout_session
|
||||
from companion import CAPIData
|
||||
from config import applongname, appversion, config
|
||||
from config import applongname, appversion, config, debug_senders
|
||||
from EDMCLogging import get_main_logger
|
||||
from ttkHyperlinkLabel import HyperlinkLabel
|
||||
|
||||
@ -126,6 +127,9 @@ STATION_UNDOCKED: str = '×' # "Station" name to display when not docked = U+00
|
||||
|
||||
|
||||
TARGET_URL = 'https://inara.cz/inapi/v1/'
|
||||
DEBUG = 'inara' in debug_senders
|
||||
if DEBUG:
|
||||
TARGET_URL = f'http://{edmc_data.DEBUG_WEBSERVER_HOST}:{edmc_data.DEBUG_WEBSERVER_PORT}/inara'
|
||||
|
||||
|
||||
def system_url(system_name: str) -> str:
|
||||
@ -212,7 +216,10 @@ def plugin_prefs(parent: tk.Tk, cmdr: str, is_beta: bool) -> tk.Frame:
|
||||
|
||||
this.log = tk.IntVar(value=config.get_int('inara_out') and 1)
|
||||
this.log_button = nb.Checkbutton(
|
||||
frame, text=_('Send flight log and Cmdr status to Inara'), variable=this.log, command=prefsvarchanged
|
||||
frame,
|
||||
text=_('Send flight log and Cmdr status to Inara'), # LANG: Checkbox to enable INARA API Usage
|
||||
variable=this.log,
|
||||
command=prefsvarchanged
|
||||
)
|
||||
|
||||
this.log_button.grid(columnspan=2, padx=x_button_padding, pady=(5, 0), sticky=tk.W)
|
||||
@ -222,7 +229,7 @@ def plugin_prefs(parent: tk.Tk, cmdr: str, is_beta: bool) -> tk.Frame:
|
||||
# Section heading in settings
|
||||
this.label = HyperlinkLabel(
|
||||
frame,
|
||||
text=_('Inara credentials'),
|
||||
text=_('Inara credentials'), # LANG: Text for INARA API keys link ( goes to https://inara.cz/settings-api )
|
||||
background=nb.Label().cget('background'),
|
||||
url='https://inara.cz/settings-api',
|
||||
underline=True
|
||||
@ -329,11 +336,13 @@ def journal_entry( # noqa: C901, CCR001
|
||||
"""
|
||||
if (ks := killswitch.get_disabled('plugins.inara.journal')).disabled:
|
||||
logger.warning(f'Inara support has been disabled via killswitch: {ks.reason}')
|
||||
plug.show_error(_('Inara disabled. See Log.'))
|
||||
plug.show_error(_('Inara disabled. See Log.')) # LANG: INARA support disabled via killswitch
|
||||
return ''
|
||||
|
||||
elif (ks := killswitch.get_disabled(f'plugins.inara.journal.event.{entry["event"]}')).disabled:
|
||||
logger.warning(f'event {entry["event"]} processing has been disabled via killswitch: {ks.reason}')
|
||||
# this can and WILL break state, but if we're concerned about it sending bad data, we'd disable globally anyway
|
||||
return ''
|
||||
|
||||
this.on_foot = state['OnFoot']
|
||||
event_name: str = entry['event']
|
||||
@ -1542,6 +1551,7 @@ def send_data(url: str, data: Mapping[str, Any]) -> bool: # noqa: CCR001
|
||||
# Log fatal errors
|
||||
logger.warning(f'Inara\t{status} {reply["header"].get("eventStatusText", "")}')
|
||||
logger.debug(f'JSON data:\n{json.dumps(data, indent=2, separators = (",", ": "))}')
|
||||
# LANG: INARA API returned some kind of error (error message will be contained in {MSG})
|
||||
plug.show_error(_('Error: Inara {MSG}').format(MSG=reply['header'].get('eventStatusText', status)))
|
||||
|
||||
else:
|
||||
@ -1554,6 +1564,7 @@ def send_data(url: str, data: Mapping[str, Any]) -> bool: # noqa: CCR001
|
||||
logger.debug(f'JSON data:\n{json.dumps(data_event)}')
|
||||
|
||||
if reply_event['eventStatus'] // 100 != 2:
|
||||
# LANG: INARA API returned some kind of error (error message will be contained in {MSG})
|
||||
plug.show_error(_('Error: Inara {MSG}').format(
|
||||
MSG=f'{data_event["eventName"]},'
|
||||
f'{reply_event.get("eventStatusText", reply_event["eventStatus"])}'
|
||||
|
64
prefs.py
64
prefs.py
@ -245,7 +245,13 @@ class PreferencesDialog(tk.Toplevel):
|
||||
|
||||
self.parent = parent
|
||||
self.callback = callback
|
||||
self.title(_('Preferences') if platform == 'darwin' else _('Settings'))
|
||||
if platform == 'darwin':
|
||||
# LANG: File > Preferences menu entry for macOS
|
||||
self.title(_('Preferences'))
|
||||
|
||||
else:
|
||||
# LANG: File > Settings (macOS)
|
||||
self.title(_('Settings'))
|
||||
|
||||
if parent.winfo_viewable():
|
||||
self.transient(parent)
|
||||
@ -336,13 +342,14 @@ class PreferencesDialog(tk.Toplevel):
|
||||
|
||||
row = AutoInc(start=1)
|
||||
|
||||
# LANG: Settings > Output - choosing what data to save to files
|
||||
self.out_label = nb.Label(output_frame, text=_('Please choose what data to save'))
|
||||
self.out_label.grid(columnspan=2, padx=self.PADX, sticky=tk.W, row=row.get())
|
||||
|
||||
self.out_csv = tk.IntVar(value=1 if (output & config.OUT_MKT_CSV) else 0)
|
||||
self.out_csv_button = nb.Checkbutton(
|
||||
output_frame,
|
||||
text=_('Market data in CSV format file'),
|
||||
text=_('Market data in CSV format file'), # LANG: Settings > Output option
|
||||
variable=self.out_csv,
|
||||
command=self.outvarchanged
|
||||
)
|
||||
@ -351,7 +358,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
self.out_td = tk.IntVar(value=1 if (output & config.OUT_MKT_TD) else 0)
|
||||
self.out_td_button = nb.Checkbutton(
|
||||
output_frame,
|
||||
text=_('Market data in Trade Dangerous format file'),
|
||||
text=_('Market data in Trade Dangerous format file'), # LANG: Settings > Output option
|
||||
variable=self.out_td,
|
||||
command=self.outvarchanged
|
||||
)
|
||||
@ -361,7 +368,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
# Output setting
|
||||
self.out_ship_button = nb.Checkbutton(
|
||||
output_frame,
|
||||
text=_('Ship loadout'),
|
||||
text=_('Ship loadout'), # LANG: Settings > Output option
|
||||
variable=self.out_ship,
|
||||
command=self.outvarchanged
|
||||
)
|
||||
@ -371,7 +378,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
# Output setting
|
||||
self.out_auto_button = nb.Checkbutton(
|
||||
output_frame,
|
||||
text=_('Automatically update on docking'),
|
||||
text=_('Automatically update on docking'), # LANG: Settings > Output option
|
||||
variable=self.out_auto,
|
||||
command=self.outvarchanged
|
||||
)
|
||||
@ -379,7 +386,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
|
||||
self.outdir = tk.StringVar()
|
||||
self.outdir.set(str(config.get_str('outdir')))
|
||||
# LANG: Label for "where files are located"
|
||||
# LANG: Settings > Output - Label for "where files are located"
|
||||
self.outdir_label = nb.Label(output_frame, text=_('File location')+':') # Section heading in settings
|
||||
# Type ignored due to incorrect type annotation. a 2 tuple does padding for each side
|
||||
self.outdir_label.grid(padx=self.PADX, pady=(5, 0), sticky=tk.W, row=row.get()) # type: ignore
|
||||
@ -387,16 +394,25 @@ class PreferencesDialog(tk.Toplevel):
|
||||
self.outdir_entry = nb.Entry(output_frame, takefocus=False)
|
||||
self.outdir_entry.grid(columnspan=2, padx=self.PADX, pady=(0, self.PADY), sticky=tk.EW, row=row.get())
|
||||
|
||||
if platform == 'darwin':
|
||||
text = (_('Change...')) # LANG: macOS Preferences - files location selection button
|
||||
|
||||
else:
|
||||
text = (_('Browse...')) # LANG: NOT-macOS Settings - files location selection button
|
||||
|
||||
self.outbutton = nb.Button(
|
||||
output_frame,
|
||||
text=(_('Change...') if platform == 'darwin' else _('Browse...')),
|
||||
text=text,
|
||||
# Technically this is different from the label in Settings > Output, as *this* is used
|
||||
# as the title of the popup folder selection window.
|
||||
# LANG: Settings > Output - Label for "where files are located"
|
||||
command=lambda: self.filebrowse(_('File location'), self.outdir)
|
||||
)
|
||||
self.outbutton.grid(column=1, padx=self.PADX, pady=self.PADY, sticky=tk.NSEW, row=row.get())
|
||||
|
||||
nb.Frame(output_frame).grid(row=row.get()) # bottom spacer # TODO: does nothing?
|
||||
|
||||
# LANG: Label for 'Output' Settings tab
|
||||
# LANG: Label for 'Output' Settings/Preferences tab
|
||||
root_notebook.add(output_frame, text=_('Output')) # Tab heading in settings
|
||||
|
||||
def __setup_plugin_tabs(self, notebook: Notebook) -> None:
|
||||
@ -419,17 +435,25 @@ class PreferencesDialog(tk.Toplevel):
|
||||
self.logdir.set(logdir)
|
||||
self.logdir_entry = nb.Entry(config_frame, takefocus=False)
|
||||
|
||||
# Location of the new Journal file in E:D 2.2
|
||||
# Location of the Journal files
|
||||
nb.Label(
|
||||
config_frame,
|
||||
# LANG: Settings > Configuration - Label for Journal files location
|
||||
text=_('E:D journal file location')+':'
|
||||
).grid(columnspan=4, padx=self.PADX, sticky=tk.W, row=row.get())
|
||||
|
||||
self.logdir_entry.grid(columnspan=4, padx=self.PADX, pady=(0, self.PADY), sticky=tk.EW, row=row.get())
|
||||
|
||||
if platform == 'darwin':
|
||||
text = (_('Change...')) # LANG: macOS Preferences - files location selection button
|
||||
|
||||
else:
|
||||
text = (_('Browse...')) # LANG: NOT-macOS Setting - files location selection button
|
||||
|
||||
self.logbutton = nb.Button(
|
||||
config_frame,
|
||||
text=(_('Change...') if platform == 'darwin' else _('Browse...')),
|
||||
text=text,
|
||||
# LANG: Settings > Configuration - Label for Journal files location
|
||||
command=lambda: self.filebrowse(_('E:D journal file location'), self.logdir)
|
||||
)
|
||||
self.logbutton.grid(column=3, padx=self.PADX, pady=self.PADY, sticky=tk.EW, row=row.get())
|
||||
@ -438,6 +462,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
# Appearance theme and language setting
|
||||
nb.Button(
|
||||
config_frame,
|
||||
# LANG: Settings > Configuration - Label on 'reset journal files location to default' button
|
||||
text=_('Default'),
|
||||
command=self.logdir_reset,
|
||||
state=tk.NORMAL if config.get_str('journaldir') else tk.DISABLED
|
||||
@ -464,6 +489,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
# Shortcut settings prompt on OSX
|
||||
nb.Label(
|
||||
config_frame,
|
||||
# LANG: macOS Preferences > Configuration - restart the app message
|
||||
text=_('Re-start {APP} to use shortcuts').format(APP=applongname),
|
||||
foreground='firebrick'
|
||||
).grid(padx=self.PADX, sticky=tk.W, row=row.get())
|
||||
@ -472,6 +498,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
# Shortcut settings prompt on OSX
|
||||
nb.Label(
|
||||
config_frame,
|
||||
# LANG: macOS - Configuration - need to grant the app permission for keyboard shortcuts
|
||||
text=_('{APP} needs permission to use shortcuts').format(APP=applongname),
|
||||
foreground='firebrick'
|
||||
).grid(columnspan=4, padx=self.PADX, sticky=tk.W, row=row.get())
|
||||
@ -498,6 +525,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
# Hotkey/Shortcut setting
|
||||
self.hotkey_only_btn = nb.Checkbutton(
|
||||
config_frame,
|
||||
# LANG: Configuration - Act on hotkey only when ED is in foreground
|
||||
text=_('Only when Elite: Dangerous is the active app'),
|
||||
variable=self.hotkey_only,
|
||||
state=tk.NORMAL if self.hotkey_code else tk.DISABLED
|
||||
@ -508,6 +536,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
# Hotkey/Shortcut setting
|
||||
self.hotkey_play_btn = nb.Checkbutton(
|
||||
config_frame,
|
||||
# LANG: Configuration - play sound when hotkey used
|
||||
text=_('Play sound'),
|
||||
variable=self.hotkey_play,
|
||||
state=tk.NORMAL if self.hotkey_code else tk.DISABLED
|
||||
@ -522,6 +551,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
self.disable_autoappupdatecheckingame = tk.IntVar(value=config.get_int('disable_autoappupdatecheckingame'))
|
||||
self.disable_autoappupdatecheckingame_btn = nb.Checkbutton(
|
||||
config_frame,
|
||||
# LANG: Configuration - disable checks for app updates when in-game
|
||||
text=_('Disable Automatic Application Updates Check when in-game'),
|
||||
variable=self.disable_autoappupdatecheckingame,
|
||||
command=self.disable_autoappupdatecheckingame_changed
|
||||
@ -571,6 +601,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
value=str(system_provider if system_provider in plug.provides('system_url') else 'EDSM')
|
||||
)
|
||||
|
||||
# LANG: Configuration - Label for selection of 'System' provider website
|
||||
nb.Label(config_frame, text=_('System')).grid(padx=self.PADX, pady=2*self.PADY, sticky=tk.W, row=cur_row)
|
||||
self.system_button = nb.OptionMenu(
|
||||
config_frame,
|
||||
@ -588,6 +619,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
value=str(station_provider if station_provider in plug.provides('station_url') else 'eddb')
|
||||
)
|
||||
|
||||
# LANG: Configuration - Label for selection of 'Station' provider website
|
||||
nb.Label(config_frame, text=_('Station')).grid(padx=self.PADX, pady=2*self.PADY, sticky=tk.W, row=cur_row)
|
||||
self.station_button = nb.OptionMenu(
|
||||
config_frame,
|
||||
@ -608,6 +640,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
# Set the current loglevel
|
||||
nb.Label(
|
||||
config_frame,
|
||||
# LANG: Configuration - Label for selection of Log Level
|
||||
text=_('Log Level')
|
||||
).grid(padx=self.PADX, pady=2*self.PADY, sticky=tk.W, row=cur_row)
|
||||
|
||||
@ -659,6 +692,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
appearance_frame = nb.Frame(notebook)
|
||||
appearance_frame.columnconfigure(2, weight=1)
|
||||
with row as cur_row:
|
||||
# LANG: Appearance - Label for selection of application display language
|
||||
nb.Label(appearance_frame, text=_('Language')).grid(padx=self.PADX, sticky=tk.W, row=cur_row)
|
||||
self.lang_button = nb.OptionMenu(appearance_frame, self.lang, self.lang.get(), *self.languages.values())
|
||||
self.lang_button.grid(column=1, columnspan=2, padx=self.PADX, sticky=tk.W, row=cur_row)
|
||||
@ -700,6 +734,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
# Main window
|
||||
self.theme_button_0 = nb.ColoredButton(
|
||||
appearance_frame,
|
||||
# LANG: Appearance - Example 'Normal' text
|
||||
text=_('Station'),
|
||||
background='grey4',
|
||||
command=lambda: self.themecolorbrowse(0)
|
||||
@ -731,6 +766,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
columnspan=4, padx=self.PADX, pady=self.PADY*4, sticky=tk.EW, row=row.get()
|
||||
)
|
||||
with row as cur_row:
|
||||
# LANG: Appearance - Label for selection of UI scaling
|
||||
nb.Label(appearance_frame, text=_('UI Scale Percentage')).grid(
|
||||
padx=self.PADX, pady=2*self.PADY, sticky=tk.W, row=cur_row
|
||||
)
|
||||
@ -751,6 +787,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
self.uiscale_bar.grid(column=1, sticky=tk.W, row=cur_row)
|
||||
self.ui_scaling_defaultis = nb.Label(
|
||||
appearance_frame,
|
||||
# LANG: Appearance - Help/hint text for UI scaling selection
|
||||
text=_('100 means Default{CR}Restart Required for{CR}changes to take effect!')
|
||||
).grid(column=3, padx=self.PADX, pady=2*self.PADY, sticky=tk.E, row=cur_row)
|
||||
|
||||
@ -760,6 +797,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
)
|
||||
|
||||
with row as cur_row:
|
||||
# LANG: Appearance - Label for selection of main window transparency
|
||||
nb.Label(appearance_frame, text=_("Main window transparency")).grid(
|
||||
padx=self.PADX, pady=self.PADY*2, sticky=tk.W, row=cur_row
|
||||
)
|
||||
@ -779,6 +817,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
|
||||
nb.Label(
|
||||
appearance_frame,
|
||||
# LANG: Appearance - Help/hint text for Main window transparency selection
|
||||
text=_(
|
||||
"100 means fully opaque.{CR}"
|
||||
"Window is updated in real time"
|
||||
@ -800,6 +839,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
|
||||
self.ontop_button = nb.Checkbutton(
|
||||
appearance_frame,
|
||||
# LANG: Appearance - Label for checkbox to select if application always on top
|
||||
text=_('Always on top'),
|
||||
variable=self.always_ontop,
|
||||
command=self.themevarchanged
|
||||
@ -877,6 +917,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
ttk.Separator(plugins_frame, orient=tk.HORIZONTAL).grid(
|
||||
columnspan=3, padx=self.PADX, pady=self.PADY * 8, sticky=tk.EW, row=row.get()
|
||||
)
|
||||
# LANG: Plugins - Label for list of 'enabled' plugins that don't work with Python 3.x
|
||||
nb.Label(plugins_frame, text=_('Plugins Without Python 3.x Support:')+':').grid(padx=self.PADX, sticky=tk.W)
|
||||
|
||||
for plugin in plug.PLUGINS_not_py3:
|
||||
@ -884,9 +925,10 @@ class PreferencesDialog(tk.Toplevel):
|
||||
nb.Label(plugins_frame, text=plugin.name).grid(columnspan=2, padx=self.PADX*2, sticky=tk.W)
|
||||
|
||||
HyperlinkLabel(
|
||||
# LANG: Plugins - Label on URL to documentation about migrating plugins from Python 2.7
|
||||
plugins_frame, text=_('Information on migrating plugins'),
|
||||
background=nb.Label().cget('background'),
|
||||
url='https://github.com/EDCD/EDMarketConnector/blob/main/PLUGINS.md#migration-to-python-37',
|
||||
url='https://github.com/EDCD/EDMarketConnector/blob/main/PLUGINS.md#migration-from-python-27',
|
||||
underline=True
|
||||
).grid(columnspan=2, padx=self.PADX, sticky=tk.W)
|
||||
############################################################
|
||||
|
@ -50,7 +50,7 @@ class GenericProtocolHandler:
|
||||
|
||||
logger.trace(f'Payload: {self.lastpayload}')
|
||||
if not config.shutting_down:
|
||||
logger.debug('event_generate("<<CompanionAuthEvent>>"')
|
||||
logger.debug('event_generate("<<CompanionAuthEvent>>")')
|
||||
self.master.event_generate('<<CompanionAuthEvent>>', when="tail")
|
||||
|
||||
|
||||
|
@ -8,17 +8,17 @@ flake8-annotations-coverage==0.0.5
|
||||
flake8-cognitive-complexity==0.1.0
|
||||
flake8-comprehensions==3.5.0
|
||||
flake8-docstrings==1.6.0
|
||||
isort==5.8.0
|
||||
isort==5.9.2
|
||||
flake8-isort==4.0.0
|
||||
flake8-json==21.1.0
|
||||
flake8-json==21.7.0
|
||||
flake8-noqa==1.1.0
|
||||
flake8-polyfill==1.0.2
|
||||
flake8-use-fstring==1.1
|
||||
|
||||
mypy==0.901
|
||||
pep8-naming==0.11.1
|
||||
mypy==0.910
|
||||
pep8-naming==0.12.0
|
||||
safety==1.10.3
|
||||
types-requests==0.1.9
|
||||
types-requests==2.25.0
|
||||
|
||||
# Code formatting tools
|
||||
autopep8==1.5.7
|
||||
|
@ -1,6 +1,6 @@
|
||||
certifi==2021.5.30
|
||||
requests==2.25.1
|
||||
watchdog==2.1.2
|
||||
requests==2.26.0
|
||||
watchdog==2.1.3
|
||||
# Commented out because this doesn't package well with py2exe
|
||||
# infi.systray==0.1.12; sys_platform == 'win32'
|
||||
# argh==0.26.2 watchdog dep
|
||||
|
@ -49,10 +49,20 @@ def find_calls_in_stmt(statement: ast.AST) -> list[ast.Call]:
|
||||
return out
|
||||
|
||||
|
||||
COMMENT_RE = re.compile(r'^.*?(#.*)$')
|
||||
"""
|
||||
Regular expressions for finding comments.
|
||||
|
||||
COMMENT_SAME_LINE_RE is for an in-line comment on the end of code.
|
||||
COMMENT_OWN_LINE_RE is for a comment on its own line.
|
||||
|
||||
The difference is necessary in order to tell if a 'above' LANG comment is for
|
||||
its own line (SAME_LINE), or meant to be for this following line (OWN_LINE).
|
||||
"""
|
||||
COMMENT_SAME_LINE_RE = re.compile(r'^.*?(#.*)$')
|
||||
COMMENT_OWN_LINE_RE = re.compile(r'^\s*?(#.*)$')
|
||||
|
||||
|
||||
def extract_comments(call: ast.Call, lines: list[str], file: pathlib.Path) -> Optional[str]:
|
||||
def extract_comments(call: ast.Call, lines: list[str], file: pathlib.Path) -> Optional[str]: # noqa: CCR001
|
||||
"""
|
||||
Extract comments from source code based on the given call.
|
||||
|
||||
@ -69,32 +79,44 @@ def extract_comments(call: ast.Call, lines: list[str], file: pathlib.Path) -> Op
|
||||
current = call.lineno - 1
|
||||
|
||||
above_line = lines[above].strip() if len(lines) >= above else None
|
||||
above_comment: Optional[str] = None
|
||||
current_line = lines[current].strip()
|
||||
current_comment: Optional[str] = None
|
||||
|
||||
bad_comment: Optional[str] = None
|
||||
for line in (above_line, current_line):
|
||||
if line is None or '#' not in line:
|
||||
continue
|
||||
if above_line is not None:
|
||||
match = COMMENT_OWN_LINE_RE.match(above_line)
|
||||
if match:
|
||||
above_comment = match.group(1).strip()
|
||||
if not above_comment.startswith('# LANG:'):
|
||||
bad_comment = f'Unknown comment for {file}:{call.lineno} {above_line}'
|
||||
above_comment = None
|
||||
|
||||
match = COMMENT_RE.match(line)
|
||||
if not match:
|
||||
print(line)
|
||||
continue
|
||||
else:
|
||||
above_comment = above_comment.replace('# LANG:', '').strip()
|
||||
|
||||
comment = match.group(1).strip()
|
||||
if not comment.startswith('# LANG:'):
|
||||
bad_comment = f'Unknown comment for {file}:{current} {line}'
|
||||
continue
|
||||
if current_line is not None:
|
||||
match = COMMENT_SAME_LINE_RE.match(current_line)
|
||||
if match:
|
||||
current_comment = match.group(1).strip()
|
||||
if not current_comment.startswith('# LANG:'):
|
||||
bad_comment = f'Unknown comment for {file}:{call.lineno} {current_line}'
|
||||
current_comment = None
|
||||
|
||||
out = comment.replace('# LANG:', '').strip()
|
||||
bad_comment = None
|
||||
break
|
||||
else:
|
||||
current_comment = current_comment.replace('# LANG:', '').strip()
|
||||
|
||||
if bad_comment is not None:
|
||||
if current_comment is not None:
|
||||
out = current_comment
|
||||
|
||||
elif above_comment is not None:
|
||||
out = above_comment
|
||||
|
||||
elif bad_comment is not None:
|
||||
print(bad_comment, file=sys.stderr)
|
||||
|
||||
if out is None:
|
||||
print(f'No comment for {file}:{current} {line}', file=sys.stderr)
|
||||
print(f'No comment for {file}:{call.lineno} {current_line}', file=sys.stderr)
|
||||
|
||||
return out
|
||||
|
||||
|
3
stats.py
3
stats.py
@ -35,7 +35,7 @@ if platform == 'win32':
|
||||
GetWindowRect.argtypes = [HWND, ctypes.POINTER(RECT)]
|
||||
|
||||
except Exception: # Not supported under Wine 4.0
|
||||
CalculatePopupWindowPosition = None
|
||||
CalculatePopupWindowPosition = None # type: ignore
|
||||
|
||||
|
||||
def status(data: Dict[str, Any]) -> List[List[str]]:
|
||||
@ -275,6 +275,7 @@ class StatsDialog():
|
||||
if not monitor.cmdr:
|
||||
return
|
||||
|
||||
# LANG: Fetching data from Frontier CAPI in order to display on File > Status
|
||||
self.status['text'] = _('Fetching data...')
|
||||
self.parent.update_idletasks()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user