/usr/lib/python2.7/dist-packages/DisplayCAL/localization.py is in dispcalgui 3.5.0.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | # -*- coding: utf-8 -*-
import __builtin__
import locale
import os
import re
import sys
import demjson
from config import data_dirs, defaults, getcfg, storage
from debughelpers import handle_error
from jsondict import JSONDict
from log import safe_print
from options import debug_localization as debug
from util_os import expanduseru
from util_str import safe_unicode
def init(set_wx_locale=False):
"""
Populate translation dict with found language strings and set locale.
If set_wx_locale is True, set locale also for wxPython.
"""
langdirs = []
for dir_ in data_dirs:
langdirs.append(os.path.join(dir_, "lang"))
for langdir in langdirs:
if os.path.exists(langdir) and os.path.isdir(langdir):
try:
langfiles = os.listdir(langdir)
except Exception, exception:
safe_print(u"Warning - directory '%s' listing failed: %s" %
tuple(safe_unicode(s) for s in (langdir, exception)))
else:
for filename in langfiles:
name, ext = os.path.splitext(filename)
if ext.lower() == ".json" and name.lower() not in ldict:
path = os.path.join(langdir, filename)
ldict[name.lower()] = JSONDict(path)
if len(ldict) == 0:
handle_error(UserWarning("Warning: No language files found. The "
"following places have been searched:\n%s" %
"\n".join(langdirs)))
def update_defaults():
defaults.update({
"last_3dlut_path": os.path.join(expanduseru("~"), getstr("unnamed")),
"last_archive_save_path": os.path.join(expanduseru("~"),
getstr("unnamed")),
"last_cal_path": os.path.join(storage, getstr("unnamed")),
"last_cal_or_icc_path": os.path.join(storage, getstr("unnamed")),
"last_colorimeter_ti3_path": os.path.join(expanduseru("~"),
getstr("unnamed")),
"last_testchart_export_path": os.path.join(expanduseru("~"),
getstr("unnamed")),
"last_filedialog_path": os.path.join(expanduseru("~"),
getstr("unnamed")),
"last_icc_path": os.path.join(storage, getstr("unnamed")),
"last_reference_ti3_path": os.path.join(expanduseru("~"),
getstr("unnamed")),
"last_ti1_path": os.path.join(storage, getstr("unnamed")),
"last_ti3_path": os.path.join(storage, getstr("unnamed")),
"last_vrml_path": os.path.join(storage, getstr("unnamed"))
})
def getcode():
""" Get language code from config """
lcode = getcfg("lang")
if not lcode in ldict:
# fall back to default
lcode = defaults["lang"]
if not lcode in ldict:
# fall back to english
lcode = "en"
return lcode
def getstr(id_str, strvars=None, lcode=None):
""" Get a translated string from the dictionary """
if not lcode:
lcode = getcode()
if not lcode in ldict or not id_str in ldict[lcode]:
# fall back to english
lcode = "en"
if lcode in ldict and id_str in ldict[lcode]:
lstr = ldict[lcode][id_str]
if debug:
if not id_str in usage or not isinstance(usage[id_str], int):
usage[id_str] = 1
else:
usage[id_str] += 1
if strvars is not None:
if not isinstance(strvars, (list, tuple)):
strvars = [strvars]
fmt = re.findall(r"%\d?(?:\.\d+)?[deEfFgGiorsxX]", lstr)
if len(fmt) == len(strvars):
if not isinstance(strvars, list):
strvars = list(strvars)
for i, s in enumerate(strvars):
if fmt[i].endswith("s"):
s = safe_unicode(s)
elif not fmt[i].endswith("r"):
try:
if fmt[i][-1] in "dioxX":
s = int(s)
else:
s = float(s)
except ValueError:
s = 0
strvars[i] = s
lstr %= tuple(strvars)
return lstr
else:
if (debug and id_str and not isinstance(id_str, unicode) and
not " " in id_str):
usage[id_str] = 0
return id_str
def gettext(text):
if not catalog and defaults["lang"] in ldict:
for id_str in ldict[defaults["lang"]]:
lstr = ldict[defaults["lang"]][id_str]
catalog[lstr] = {}
catalog[lstr].id_str = id_str
lcode = getcode()
if catalog and text in catalog and not lcode in catalog[text]:
catalog[text][lcode] = ldict[lcode].get(catalog[text].id_str, text)
return catalog.get(text, {}).get(lcode, text)
ldict = {}
catalog = {}
if debug:
import atexit
from config import confighome
usage = JSONDict()
usage_path = os.path.join(confighome, "localization_usage.json")
if os.path.isfile(usage_path):
usage.path = usage_path
def write_usage():
global usage
if not usage:
return
if os.path.isfile(usage_path):
temp = JSONDict(usage_path)
temp.load()
temp.update(usage)
usage = temp
with open(usage_path, "wb") as usagefile:
usagefile.write("{\n")
for key, count in sorted(usage.items()):
usagefile.write('\t"%s": %i,\n' % (key.encode("UTF-8"), count))
usagefile.write("}")
atexit.register(write_usage)
|