# SetLanguage.py # # Gramps - a GTK+ based genealogy program # # Copyright (C) 2010 Stephen George # # 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 2 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # # $Id: $ import locale import _winreg import sys import os import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(name)-10s %(levelname)-8s %(message)s', datefmt='%H:%M', filename= 'c:/launcher.log', #path.join(out_dir,'build.log'), filemode='w') #create a Handler for the console console = logging.StreamHandler() console.setLevel(logging.INFO) #Set a simle format for console formatter = logging.Formatter('%(levelname)-8s %(message)s') console.setFormatter(formatter) #add the console handler to the root handler log = logging.getLogger('BuildApp') log.addHandler(console) langLookup = { 'ar' : 'Arabic', 'bg' : 'Bulgarian', 'ca' : 'Catalan', 'cs' : 'Czech', 'da' : 'Danish ', 'de' : 'German', 'en' : 'English', 'eo' : 'Esperanto', 'es' : 'Spanish', 'fi' : 'Finnish', 'fr' : 'French', 'ga' : 'Irish', 'he' : 'Hebrew', 'hr' : 'Croatian', 'hu' : 'Hungarian', 'it' : 'Italian', 'ja' : 'Japanese', 'lt' : 'Lithuanian', 'mk' : 'Macedonian', 'nb' : '', 'nl' : 'Dutch', 'nn' : '', 'pl' : 'Polish', 'pt_BR' : 'Portuguese (Brazil)', 'ro' : 'Romanian', 'ru' : 'Russian', 'sk' : 'Slovak', 'sl' : 'Slovenian', 'sq' : 'Albanian', 'sr' : 'Serbian', 'sv' : 'Swedish', 'tr' : 'Turkish', 'uk' : 'Ukrainian', 'vi' : 'Vietnamese', 'zh_CN' : 'Chinese (PRC)', } def GetGtkPath(): log.debug('GetGtkPath()') dllPathInRegistry = None try: with _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, 'SOFTWARE\\GTK\\2.0') as key: dllPathInRegistry = _winreg.QueryValueEx(key, 'DllPath')[0] # check a few key files exist at this location gtkfiles = ['libgdk-win32-2.0-0.dll', 'libglib-2.0-0.dll', 'libgobject-2.0-0.dll', 'libcairo-2.dll'] for file in gtkfiles: if not os.path.isfile(os.path.join(dllPathInRegistry, file)): dllPathInRegistry = None # one of the files not present, so assume path is wrong break except WindowsError as e: dllPathInRegistry = None log.debug(' DLLPATH=%s'%dllPathInRegistry) return dllPathInRegistry def GetGrampsPath(): GrampsPathInRegistry = None try: with _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, 'SOFTWARE\\GRAMPS') as key: GrampsPathInRegistry = _winreg.QueryValue(key, '') # check a few key files exist at this location except WindowsError as e: GrampsPathInRegistry = None log.debug(' GRAMPSPATH=%s'%GrampsPathInRegistry) return GrampsPathInRegistry def GetLanguageFromLocale(): lang = ' ' try: lang = os.environ["LANG"] lang = lang.split('.')[0] except: # if LANG is not set lang = locale.getlocale()[0] if not lang: # if lang is empty/None lang = locale.getdefaultlocale()[0] return lang def writeLauncher(language, langcode, runtimepath, grampspath): lines = [] lines.append('''@rem Setting the working language @rem ============================ @rem GRAMPS looks during the start-up-phase for an environment variable (called LANG) @rem to switch to a special language. It's better to use a ".CMD" or ".BAT" file to @rem control this environment variable instead a permanent setting in the windows registry, @rem to have the possibility to go back to the GRAMPS standard language (English) in the @rem case you want to report about a problem or a bug. ''') lines.append('\n@rem Set GRAMPS environment settings to %s \n' % language) lines.append('SET LANG=$LANG$ \nSET LANGUAGE=$LANG$\n'.replace("$LANG$", langcode) ) lines.append('''\n\n@rem Setting the configuration path @rem ============================== @rem During the boot process of GRAMPS there is a check for an environment variable @rem called GRAMPSHOME. Without this environment variable GRAMPS uses the default @rem windows path as the location to save all configuration files: @rem \\\gramps @rem If required, uncomment GRAMPSHOME line and edit to suit your use. ''') lines.append('\n@rem set the path for GRAMPS configuration files') lines.append('\n@rem set GRAMPSHOME=PATH_TO_CONFIG_FILES') lines.append('''\n\n@rem Put GTK runtime on PATH @rem ========================= @rem Ensure GTK runtime on path first, so right GTK DLL's used. ''') if runtimepath: lines.append('\n@rem Put your gtk runtime first on path') path = '\npath="%s";%%PATH%%' % runtimepath else: lines.append('\n@rem Uncommnet following line, and edit path to your GTK runtime') path = "\n@rem path=PATH_TO_YOUR_GTK_RUNTIME;%%PATH%%\n" lines.append(path) lines.append('''\n\n@rem Start GRAMPS application @rem ========================= @rem Start GRAMPS with pythonw.exe (Python interpreter that runs without a command line console) ''') lines.append('\n@rem start Gramps') lines.append('\n"%s" "%s"\n' % (os.path.join(sys.prefix, 'pythonw.exe') , os.path.join(grampspath, 'gramps.py' ) )) fout = open( os.path.join(grampspath, 'gramps_locale.cmd'), 'w') fout.writelines(lines) fout.close() for line in lines: print(line) gtkpath = GetGtkPath() grampspath = GetGrampsPath() lang = GetLanguageFromLocale() if lang: try: lang_text = langLookup[lang.split('_', 1)[0]] except KeyError as e: try: lang_text = langLookup[lang] except KeyError as e: lang_text = "Unknown" writeLauncher(lang_text, "%s.utf-8"%lang, gtkpath, grampspath)