#!/usr/bin/env python # # Copyright 2014 Dan Smith # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import glob import os import six import sys import os import locale import gettext import argparse import logging import urllib if six.PY3: from gi import pygtkcompat pygtkcompat.enable() pygtkcompat.enable_gtk(version='3.0') from chirp import chirp_common from chirp import directory from chirp import logger from chirp import elib_intl from chirp import platform from chirp.ui import config directory.safe_import_drivers() LOG = logging.getLogger("chirpw") # Does not work with python3 chirpw # urllib.URLopener.version = chirp_common.http_user_agent() localepath = platform.get_platform().find_resource("locale") conf = config.get() manual_language = conf.get("language", "state") langs = [] if manual_language and manual_language != "Auto": lang_codes = {"English": "en_US", "Polish": "pl", "Italian": "it", "Dutch": "nl", "German": "de", "Hungarian": "hu", "Russian": "ru", "Portuguese (BR)": "pt_BR", "French": "fr", "Spanish": "es_ES", } try: LOG.info("Language: %s", lang_codes[manual_language]) langs = [lang_codes[manual_language]] except KeyError: LOG.error("Unsupported language `%s'" % manual_language) else: lc, encoding = locale.getdefaultlocale() if (lc): langs = [lc] try: langs += os.getenv("LANG").split(":") except: pass try: if os.name == "nt": elib_intl._putenv("LANG", langs[0]) else: os.putenv("LANG", langs[0]) except IndexError: pass path = "locale" gettext.bindtextdomain("CHIRP", localepath) gettext.textdomain("CHIRP") lang = gettext.translation("CHIRP", localepath, languages=langs, fallback=True) # Python <2.6 does not have str.format(), which chirp uses to make translation # strings nicer. So, instead of installing the gettext standard "_()" function, # we can install our own, which returns a string of the following class, # which emulates the new behavior, thus allowing us to run on older Python # versions. class CompatStr(str): def format(self, **kwargs): base = lang.gettext(self) for k, v in kwargs.items(): base = base.replace("{%s}" % k, str(v)) return base pyver = sys.version.split()[0] try: vmaj, vmin, vrel = pyver.split(".", 3) except: vmaj, vmin = pyver.split(".", 2) vrel = 0 if int(vmaj) == 2 and int(vmin) < 6: # Python <2.6, emulate str.format() import __builtin__ def lang_with_format(string): return CompatStr(string) __builtin__._ = lang_with_format else: # Python >=2.6, use normal gettext behavior lang.install() parser = argparse.ArgumentParser() parser.add_argument("files", metavar="file", nargs='*', help="File to open") parser.add_argument("--module", metavar="module", help="Load module on startup") logger.add_version_argument(parser) parser.add_argument("--profile", action="store_true", help="Enable profiling") logger.add_arguments(parser) args = parser.parse_args() logger.handle_options(args) a = None if True: from chirp.ui import mainapp a = mainapp.ChirpMain() # Be sure to load module before opening files if args.module: a.load_module(args.module) for i in args.files: LOG.info("Opening %s", i) a.do_open(i) a.show() if args.profile: import cProfile import pstats import gtk cProfile.run("gtk.main()", "chirpw.stats") p = pstats.Stats("chirpw.stats") p.sort_stats("cumulative").print_stats(10) else: import gtk gtk.main() if config._CONFIG: config._CONFIG.set("last_dir", platform.get_platform().get_last_dir(), "state") config._CONFIG.save()