diff --git a/gui/characterSelection.py b/gui/characterSelection.py index 0ad63c948..20a05108a 100644 --- a/gui/characterSelection.py +++ b/gui/characterSelection.py @@ -32,7 +32,7 @@ from gui.utils.clipboard import toClipboard from service.character import Character from service.fit import Fit - +_ = wx.GetTranslation pyfalog = Logger(__name__) @@ -44,7 +44,7 @@ class CharacterSelection(wx.Panel): mainSizer = wx.BoxSizer(wx.HORIZONTAL) self.SetSizer(mainSizer) - mainSizer.Add(wx.StaticText(self, wx.ID_ANY, "Character: "), 0, wx.CENTER | wx.RIGHT | wx.LEFT, 3) + mainSizer.Add(wx.StaticText(self, wx.ID_ANY, _("Character: ")), 0, wx.CENTER | wx.RIGHT | wx.LEFT, 3) # cache current selection to fall back in case we choose to open char editor self.charCache = None @@ -65,7 +65,7 @@ class CharacterSelection(wx.Panel): self.btnRefresh.SetMinSize(size) self.btnRefresh.SetMaxSize(size) - self.btnRefresh.SetToolTip("Refresh API") + self.btnRefresh.SetToolTip(_("Refresh Skills")) self.btnRefresh.Bind(wx.EVT_BUTTON, self.refreshApi) self.btnRefresh.Enable(False) @@ -99,10 +99,10 @@ class CharacterSelection(wx.Panel): menu = wx.Menu() - grantItem = menu.Append(wx.ID_ANY, "Grant Missing Skills") + grantItem = menu.Append(wx.ID_ANY, _("Grant Missing Skills")) self.Bind(wx.EVT_MENU, self.grantMissingSkills, grantItem) - exportItem = menu.Append(wx.ID_ANY, "Copy Missing Skills") + exportItem = menu.Append(wx.ID_ANY, _("Copy Missing Skills")) self.Bind(wx.EVT_MENU, self.exportSkills, exportItem) self.PopupMenu(menu, pos) @@ -147,7 +147,7 @@ class CharacterSelection(wx.Panel): sFit = Fit.getInstance() sFit.changeChar(fitID, charID) - choice.Append("\u2015 Open Character Editor \u2015", -1) + choice.Append("\u2015 " + _("Open Character Editor") + " \u2015", -1) self.charCache = self.charChoice.GetCurrentSelection() if event is not None: @@ -170,8 +170,8 @@ class CharacterSelection(wx.Panel): pyfalog.warn(exc_value) wx.MessageBox( - "Error fetching skill information", - "Error", wx.ICON_ERROR | wx.STAY_ON_TOP) + _("Error fetching skill information"), + _("Error"), wx.ICON_ERROR | wx.STAY_ON_TOP) def charChanged(self, event): fitID = self.mainFrame.getActiveFit() @@ -227,7 +227,7 @@ class CharacterSelection(wx.Panel): if activeFitID is None: self.skillReqsStaticBitmap.SetBitmap(self.cleanSkills) - self.skillReqsStaticBitmap.SetToolTip("No active fit") + self.skillReqsStaticBitmap.SetToolTip(_("No active fit")) else: sCharacter = Character.getInstance() self.reqs = sCharacter.checkRequirements(fit) @@ -235,11 +235,11 @@ class CharacterSelection(wx.Panel): sCharacter.skillReqsDict = {'charname': fit.character.name, 'skills': []} if len(self.reqs) == 0: self.needsSkills = False - tip = "All skill prerequisites have been met" + tip = _("All skill prerequisites have been met") self.skillReqsStaticBitmap.SetBitmap(self.greenSkills) else: self.needsSkills = True - tip = "Skills required:\n" + tip = _("Skills required:") + "\n" condensed = sFit.serviceFittingOptions["compactSkills"] if condensed: dict_ = self._buildSkillsTooltipCondensed(self.reqs, skillsMap={}) diff --git a/gui/devTools.py b/gui/devTools.py index 3e5ac725e..ea581f06f 100644 --- a/gui/devTools.py +++ b/gui/devTools.py @@ -29,7 +29,6 @@ import eos.db from gui.auxFrame import AuxiliaryFrame from gui.builtinShipBrowser.events import FitSelected - pyfalog = Logger(__name__) diff --git a/gui/errorDialog.py b/gui/errorDialog.py index b5e83c0d6..1c9101214 100644 --- a/gui/errorDialog.py +++ b/gui/errorDialog.py @@ -30,6 +30,7 @@ from gui.auxFrame import AuxiliaryFrame from service.prereqsCheck import version_block +_ = wx.GetTranslation pyfalog = Logger(__name__) @@ -64,17 +65,17 @@ class ErrorHandler: class ErrorFrame(AuxiliaryFrame): - def __init__(self, parent=None, error_title='Error!'): - super().__init__(parent, id=wx.ID_ANY, title="pyfa error", pos=wx.DefaultPosition, size=wx.Size(500, 600)) + def __init__(self, parent=None, error_title=_('Error!')): + super().__init__(parent, id=wx.ID_ANY, title=_("pyfa error"), pos=wx.DefaultPosition, size=wx.Size(500, 600)) from eos.config import gamedata_version, gamedata_date time = datetime.datetime.fromtimestamp(int(gamedata_date)).strftime('%Y-%m-%d %H:%M:%S') version = "pyfa " + config.getVersion() + '\nEVE Data Version: {} ({})\n\n'.format(gamedata_version, time) # gui.aboutData.versionString - desc = "pyfa has experienced an unexpected issue. Below is a message that contains crucial\n" \ - "information about how this was triggered. Please contact the developers with the\n" \ - "information provided through the EVE Online forums or file a GitHub issue." + desc = _("pyfa has experienced an unexpected issue. Below is a message that contains crucial \n" + "information about how this was triggered. Please contact the developers with the \n" + "information provided through the EVE Online forums or file a GitHub issue.") self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) diff --git a/gui/esiFittings.py b/gui/esiFittings.py index 0b87d0187..8752a78f9 100644 --- a/gui/esiFittings.py +++ b/gui/esiFittings.py @@ -20,6 +20,7 @@ from service.port import Port from service.port.esi import ESIExportException +_ = wx.GetTranslation pyfalog = Logger(__name__) @@ -27,7 +28,7 @@ class EveFittings(AuxiliaryFrame): def __init__(self, parent): super().__init__( - parent, id=wx.ID_ANY, title="Browse EVE Fittings", pos=wx.DefaultPosition, + parent, id=wx.ID_ANY, title=_("Browse EVE Fittings"), pos=wx.DefaultPosition, size=wx.Size(750, 450), resizeable=True) self.mainFrame = parent @@ -39,7 +40,7 @@ class EveFittings(AuxiliaryFrame): characterSelectSizer.Add(self.charChoice, 1, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5) self.updateCharList() - self.fetchBtn = wx.Button(self, wx.ID_ANY, "Fetch Fits", wx.DefaultPosition, wx.DefaultSize, 5) + self.fetchBtn = wx.Button(self, wx.ID_ANY, _("Fetch Fits"), wx.DefaultPosition, wx.DefaultSize, 5) characterSelectSizer.Add(self.fetchBtn, 0, wx.ALL, 5) mainSizer.Add(characterSelectSizer, 0, wx.EXPAND, 5) @@ -59,8 +60,8 @@ class EveFittings(AuxiliaryFrame): fitSizer.Add(self.fitView, 1, wx.ALL | wx.EXPAND, 5) btnSizer = wx.BoxSizer(wx.HORIZONTAL) - self.importBtn = wx.Button(self, wx.ID_ANY, "Import to pyfa", wx.DefaultPosition, wx.DefaultSize, 5) - self.deleteBtn = wx.Button(self, wx.ID_ANY, "Delete from EVE", wx.DefaultPosition, wx.DefaultSize, 5) + self.importBtn = wx.Button(self, wx.ID_ANY, _("Import to pyfa"), wx.DefaultPosition, wx.DefaultSize, 5) + self.deleteBtn = wx.Button(self, wx.ID_ANY, _("Delete from EVE"), wx.DefaultPosition, wx.DefaultSize, 5) btnSizer.Add(self.importBtn, 1, wx.ALL, 5) btnSizer.Add(self.deleteBtn, 1, wx.ALL, 5) fitSizer.Add(btnSizer, 0, wx.EXPAND) @@ -106,10 +107,10 @@ class EveFittings(AuxiliaryFrame): def fetchFittings(self, event): sEsi = Esi.getInstance() - waitDialog = wx.BusyInfo("Fetching fits, please wait...", parent=self) + waitDialog = wx.BusyInfo(_("Fetching fits, please wait..."), parent=self) activeChar = self.getActiveCharacter() if activeChar is None: - msg = "Need at least one ESI character to fetch" + msg = _("Need at least one ESI character to fetch") pyfalog.warning(msg) self.statusbar.SetStatusText(msg) return @@ -121,7 +122,7 @@ class EveFittings(AuxiliaryFrame): self.fitTree.populateSkillTree(self.fittings) del waitDialog except requests.exceptions.ConnectionError: - msg = "Connection error, please check your internet connection" + msg = _("Connection error, please check your internet connection") pyfalog.error(msg) self.statusbar.SetStatusText(msg) except APIException as ex: @@ -151,8 +152,8 @@ class EveFittings(AuxiliaryFrame): data = json.loads(self.fitTree.fittingsTreeCtrl.GetItemData(selection)) with wx.MessageDialog( - self, "Do you really want to delete %s (%s) from EVE?" % (data['name'], getItem(data['ship_type_id']).name), - "Confirm Delete", wx.YES | wx.NO | wx.ICON_QUESTION + self, _("Do you really want to delete {} ({}) from EVE?").format((data['name'], getItem(data['ship_type_id']).name)), + _("Confirm Delete"), wx.YES | wx.NO | wx.ICON_QUESTION ) as dlg: if dlg.ShowModal() == wx.ID_YES: activeChar = self.getActiveCharacter() @@ -164,7 +165,7 @@ class EveFittings(AuxiliaryFrame): self.fitTree.populateSkillTree(self.fittings) self.fitView.update([]) except requests.exceptions.ConnectionError: - msg = "Connection error, please check your internet connection" + msg = _("Connection error, please check your internet connection") pyfalog.error(msg) self.statusbar.SetStatusText(msg) @@ -174,11 +175,11 @@ class ESIServerExceptionHandler: pyfalog.error(ex) with wx.MessageDialog( parentWindow, - "There was an issue starting up the localized server, try setting " + _("There was an issue starting up the localized server, try setting " "Login Authentication Method to Manual by going to Preferences -> EVE SS0 -> " "Login Authentication Method. If this doesn't fix the problem please file an " - "issue on Github.", - "Add Character Error", + "issue on Github."), + _("Add Character Error"), wx.OK | wx.ICON_ERROR ) as dlg: dlg.ShowModal() @@ -191,9 +192,9 @@ class ESIExceptionHandler: pyfalog.error(ex) with wx.MessageDialog( parentWindow, - "There was an error validating characters' SSO token. Please try " - "logging into the character again to reset the token.", - "Invalid Token", + _("There was an error validating characters' SSO token. Please try " + "logging into the character again to reset the token."), + _("Invalid Token"), wx.OK | wx.ICON_ERROR ) as dlg: dlg.ShowModal() @@ -206,7 +207,7 @@ class ExportToEve(AuxiliaryFrame): def __init__(self, parent): super().__init__( - parent, id=wx.ID_ANY, title="Export fit to EVE", pos=wx.DefaultPosition, + parent, id=wx.ID_ANY, title=_("Export fit to EVE"), pos=wx.DefaultPosition, size=wx.Size(400, 120) if "wxGTK" in wx.PlatformInfo else wx.Size(350, 100), resizeable=True) self.mainFrame = parent @@ -219,7 +220,7 @@ class ExportToEve(AuxiliaryFrame): self.updateCharList() self.charChoice.SetSelection(0) - self.exportBtn = wx.Button(self, wx.ID_ANY, "Export Fit", wx.DefaultPosition, wx.DefaultSize, 5) + self.exportBtn = wx.Button(self, wx.ID_ANY, _("Export Fit"), wx.DefaultPosition, wx.DefaultSize, 5) hSizer.Add(self.exportBtn, 0, wx.ALL, 5) mainSizer.Add(hSizer, 0, wx.EXPAND, 5) @@ -267,10 +268,10 @@ class ExportToEve(AuxiliaryFrame): self.statusbar.SetStatusText("", 0) if fitID is None: - self.statusbar.SetStatusText("Please select an active fitting in the main window", 1) + self.statusbar.SetStatusText(_("Please select an active fitting in the main window"), 1) return - self.statusbar.SetStatusText("Sending request and awaiting response", 1) + self.statusbar.SetStatusText(_("Sending request and awaiting response"), 1) sEsi = Esi.getInstance() sFit = Fit.getInstance() @@ -279,13 +280,13 @@ class ExportToEve(AuxiliaryFrame): except ESIExportException as e: msg = str(e) if not msg: - msg = "Failed to generate export data" + msg = _("Failed to generate export data") pyfalog.warning(msg) self.statusbar.SetStatusText(msg, 1) return activeChar = self.getActiveCharacter() if activeChar is None: - msg = "Need at least one ESI character to export" + msg = _("Need at least one ESI character to export") pyfalog.warning(msg) self.statusbar.SetStatusText(msg, 1) return @@ -296,13 +297,13 @@ class ExportToEve(AuxiliaryFrame): self.statusbar.SetStatusText("", 0) self.statusbar.SetStatusText(res.reason, 1) except requests.exceptions.ConnectionError: - msg = "Connection error, please check your internet connection" + msg = _("Connection error, please check your internet connection") pyfalog.error(msg) - self.statusbar.SetStatusText("ERROR", 0) + self.statusbar.SetStatusText(_("ERROR"), 0) self.statusbar.SetStatusText(msg, 1) except ESIExportException as ex: pyfalog.error(ex) - self.statusbar.SetStatusText("ERROR", 0) + self.statusbar.SetStatusText(_("ERROR"), 0) self.statusbar.SetStatusText("{} - {}".format(res.status_code, res.reason), 1) except APIException as ex: try: @@ -310,7 +311,7 @@ class ExportToEve(AuxiliaryFrame): except (KeyboardInterrupt, SystemExit): raise except Exception as ex: - self.statusbar.SetStatusText("ERROR", 0) + self.statusbar.SetStatusText(_("ERROR"), 0) self.statusbar.SetStatusText("{} - {}".format(res.status_code, res.reason), 1) pyfalog.error(ex) @@ -319,15 +320,15 @@ class SsoCharacterMgmt(AuxiliaryFrame): def __init__(self, parent): super().__init__( - parent, id=wx.ID_ANY, title="SSO Character Management", pos=wx.DefaultPosition, + parent, id=wx.ID_ANY, title=_("SSO Character Management"), pos=wx.DefaultPosition, size=wx.Size(550, 250), resizeable=True) self.mainFrame = parent mainSizer = wx.BoxSizer(wx.HORIZONTAL) self.lcCharacters = wx.ListCtrl(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LC_REPORT) - self.lcCharacters.InsertColumn(0, heading='Character') - self.lcCharacters.InsertColumn(1, heading='Character ID') + self.lcCharacters.InsertColumn(0, heading=_('Character')) + self.lcCharacters.InsertColumn(1, heading=_('Character ID')) self.popCharList() @@ -335,10 +336,10 @@ class SsoCharacterMgmt(AuxiliaryFrame): btnSizer = wx.BoxSizer(wx.VERTICAL) - self.addBtn = wx.Button(self, wx.ID_ANY, "Add Character", wx.DefaultPosition, wx.DefaultSize, 0) + self.addBtn = wx.Button(self, wx.ID_ANY, _("Add Character"), wx.DefaultPosition, wx.DefaultSize, 0) btnSizer.Add(self.addBtn, 0, wx.ALL | wx.EXPAND, 5) - self.deleteBtn = wx.Button(self, wx.ID_ANY, "Remove Character", wx.DefaultPosition, wx.DefaultSize, 0) + self.deleteBtn = wx.Button(self, wx.ID_ANY, _("Remove Character"), wx.DefaultPosition, wx.DefaultSize, 0) btnSizer.Add(self.deleteBtn, 0, wx.ALL | wx.EXPAND, 5) mainSizer.Add(btnSizer, 0, wx.EXPAND, 5) diff --git a/gui/fitBrowserLite.py b/gui/fitBrowserLite.py index 9e7caecac..06b188e0e 100644 --- a/gui/fitBrowserLite.py +++ b/gui/fitBrowserLite.py @@ -6,6 +6,7 @@ import wx import gui.display as d from service.fit import Fit +_ = wx.GetTranslation def fitSorter(fit): return fit.shipName, fit.name @@ -13,7 +14,7 @@ def fitSorter(fit): class FitBrowserLiteDialog(wx.Dialog): - def __init__(self, parent, title='Add Fits', excludedFitIDs=()): + def __init__(self, parent, title=_('Add Fits'), excludedFitIDs=()): super().__init__(parent, title=title, style=wx.DEFAULT_DIALOG_STYLE) listWidth = 250 if 'wxGTK' in wx.PlatformInfo else 200 diff --git a/gui/itemStats.py b/gui/itemStats.py index 284121ecc..b1d9db570 100644 --- a/gui/itemStats.py +++ b/gui/itemStats.py @@ -37,6 +37,8 @@ from gui.builtinItemStatsViews.itemRequirements import ItemRequirements from gui.builtinItemStatsViews.itemTraits import ItemTraits from service.market import Market +_ = wx.GetTranslation + class ItemStatsFrame(AuxiliaryFrame): @@ -53,7 +55,7 @@ class ItemStatsFrame(AuxiliaryFrame): super().__init__( parent=gui.mainFrame.MainFrame.getInstance(), id=wx.ID_ANY, - title="Item stats", + title=_("Item stats"), pos=pos, size=size, resizeable=True) @@ -82,8 +84,10 @@ class ItemStatsFrame(AuxiliaryFrame): itemImg = BitmapLoader.getBitmap(item.iconID, "icons") if itemImg is not None: self.SetIcon(wx.Icon(itemImg)) - self.SetTitle("%s: %s%s" % ("%s Stats" % itmContext if itmContext is not None else "Stats", item.name, - " (%d)" % item.ID if config.debug else "")) + self.SetTitle(_("{context}Stats: {name}{debug_info}").format( + context = "{} ".format(itmContext) if itmContext is not None else "", + name = item.name, + debug_info = " ({item_id})".format(item_id = item.ID) if config.debug else "")) self.SetMinSize((300, 200)) # GTK has huge tab widgets, give it a bit more room @@ -159,37 +163,37 @@ class ItemStatsContainer(wx.Panel): if item.traits is not None: self.traits = ItemTraits(self.nbContainer, stuff, item) - self.nbContainer.AddPage(self.traits, "Traits") + self.nbContainer.AddPage(self.traits, _("Traits")) if isinstance(stuff, Module) and stuff.isMutated: self.mutator = ItemMutatorPanel(self.nbContainer, stuff) - self.nbContainer.AddPage(self.mutator, "Mutations") + self.nbContainer.AddPage(self.mutator, _("Mutations")) if item.description: self.desc = ItemDescription(self.nbContainer, stuff, item) - self.nbContainer.AddPage(self.desc, "Description") + self.nbContainer.AddPage(self.desc, _("Description")) self.params = ItemParams(self.nbContainer, stuff, item, context) - self.nbContainer.AddPage(self.params, "Attributes") + self.nbContainer.AddPage(self.params, _("Attributes")) items = sMkt.getVariationsByItems([item]) if len(items) > 1: self.compare = ItemCompare(self.nbContainer, stuff, item, items, context) - self.nbContainer.AddPage(self.compare, "Compare") + self.nbContainer.AddPage(self.compare, _("Compare")) self.reqs = ItemRequirements(self.nbContainer, stuff, item) - self.nbContainer.AddPage(self.reqs, "Requirements") + self.nbContainer.AddPage(self.reqs, _("Requirements")) if context == "Skill": self.dependents = ItemDependents(self.nbContainer, stuff, item) - self.nbContainer.AddPage(self.dependents, "Dependents") + self.nbContainer.AddPage(self.dependents, _("Dependents")) self.effects = ItemEffects(self.nbContainer, stuff, item) - self.nbContainer.AddPage(self.effects, "Effects") + self.nbContainer.AddPage(self.effects, _("Effects")) if stuff is not None: self.affectedby = ItemAffectedBy(self.nbContainer, stuff, item) - self.nbContainer.AddPage(self.affectedby, "Affected by") + self.nbContainer.AddPage(self.affectedby, _("Affected by")) if config.debug: self.properties = ItemProperties(self.nbContainer, stuff, item, context) diff --git a/locale/zh_CH/LC_MESSAGES/lang.po b/locale/zh_CH/LC_MESSAGES/lang.po deleted file mode 100644 index da65d4bcf..000000000 --- a/locale/zh_CH/LC_MESSAGES/lang.po +++ /dev/null @@ -1,21 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2016-05-19 17:07" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: utf8\n" -"Generated-By: pygettext.py 1.5\n" - - -#: ./gui/mainFrame.py:189 -msgid "Market" -msgstr "zhCH Market" - diff --git a/locale/zh_CN/LC_MESSAGES/lang.po b/locale/zh_CN/LC_MESSAGES/lang.po new file mode 100644 index 000000000..d6b802f5b --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/lang.po @@ -0,0 +1,172 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2020-05-15 22:13-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: pygettext.py 1.5\n" + + +#: ./gui/app.py:34 ./gui/mainFrame.py:181 +msgid "Market" +msgstr "" + +#: ./gui/mainFrame.py:185 +msgid "Fittings" +msgstr "" + +#: ./gui/mainFrame.py:272 +msgid "Loading previous fits..." +msgstr "" + +#: ./gui/mainFrame.py:465 +msgid "Save Fitting As..." +msgstr "" + +#: ./gui/mainFrame.py:466 +msgid "EVE XML fitting files (*.xml)|*.xml" +msgstr "" + +#: ./gui/mainFrame.py:643 +msgid "Are you sure you wish to ignore fitting restrictions for the current fit? This could lead to wildly inaccurate results and possible errors." +msgstr "" + +#: ./gui/mainFrame.py:645 ./gui/mainFrame.py:651 +msgid "Confirm" +msgstr "" + +#: ./gui/mainFrame.py:650 +msgid "Re-enabling fitting restrictions for this fit will also remove any illegal items from the fit. Do you want to continue?" +msgstr "" + +#: ./gui/mainFrame.py:669 +msgid "Manage Characters" +msgstr "" + +#: ./gui/mainFrame.py:686 +msgid "&Turn Overrides Off" +msgstr "" + +#: ./gui/mainFrame.py:686 +msgid "&Turn Overrides On" +msgstr "" + +#: ./gui/mainFrame.py:719 +msgid "Please Wait..." +msgstr "" + +#: ./gui/mainFrame.py:769 +msgid "Drones" +msgstr "" + +#: ./gui/mainFrame.py:773 +msgid "Fighters" +msgstr "" + +#: ./gui/mainFrame.py:777 +msgid "Implants" +msgstr "" + +#: ./gui/mainFrame.py:781 +msgid "Boosters" +msgstr "" + +#: ./gui/mainFrame.py:785 +msgid "Cargo" +msgstr "" + +#: ./gui/mainFrame.py:803 +msgid "Export Skills Needed As..." +msgstr "" + +#: ./gui/mainFrame.py:804 +msgid "EVEMon skills training file (*.emp)|*.emp|EVEMon skills training XML file (*.xml)|*.xml|Text skills training file (*.txt)|*.txt" +msgstr "" + +#: ./gui/mainFrame.py:823 +msgid "Exporting skills needed..." +msgstr "" + +#: ./gui/mainFrame.py:830 +msgid "Open One Or More Fitting Files" +msgstr "" + +#: ./gui/mainFrame.py:831 +msgid "EVE XML fitting files (*.xml)|*.xml|EFT text fitting files (*.cfg)|*.cfg|All Files (*)|*" +msgstr "" + +#: ./gui/mainFrame.py:838 +msgid "Importing fits" +msgstr "" + +#: ./gui/mainFrame.py:852 +msgid "Save Backup As..." +msgstr "" + +#: ./gui/mainFrame.py:853 +msgid "EVE XML fitting file (*.xml)|*.xml" +msgstr "" + +#: ./gui/mainFrame.py:866 ./gui/mainFrame.py:894 +msgid "Backup fits" +msgstr "" + +#: ./gui/mainFrame.py:867 +msgid "Backing up %d fits to: %s" +msgstr "" + +#: ./gui/mainFrame.py:886 +msgid "" +"Invalid Path\n" +"\n" +"The following path is invalid or does not exist: \n" +"%s\n" +"\n" +"Please verify path location pyfa's preferences." +msgstr "" + +#: ./gui/mainFrame.py:887 +msgid "Error" +msgstr "" + +#: ./gui/mainFrame.py:895 +msgid "Generating HTML file at: %s" +msgstr "" + +#: ./gui/mainFrame.py:937 +msgid "Export Error" +msgstr "" + +#: ./gui/mainFrame.py:937 +msgid "Import Error" +msgstr "" + +#: ./gui/mainFrame.py:940 +msgid "" +"The following error was generated\n" +"\n" +"%s\n" +"\n" +"Be aware that already processed fits were not saved" +msgstr "" + +#: ./gui/mainFrame.py:999 +msgid "Open One Or More Character Files" +msgstr "" + +#: ./gui/mainFrame.py:1000 +msgid "EVE API XML character files (*.xml)|*.xml|All Files (*)|*" +msgstr "" + +#: ./gui/mainFrame.py:1005 +msgid "Importing Character..." +msgstr "" +