184 lines
6.9 KiB
Python
184 lines
6.9 KiB
Python
# 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, 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, 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 <system drive>\<userpath>\<application data>\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, e:
|
|
try:
|
|
lang_text = langLookup[lang]
|
|
except KeyError, e:
|
|
lang_text = "Unknown"
|
|
|
|
writeLauncher(lang_text, "%s.utf-8"%lang, gtkpath, grampspath)
|