73 |
icon = 'misc_/PlacelessTranslationService/PlacelessTranslationService.png' |
icon = 'misc_/PlacelessTranslationService/PlacelessTranslationService.png' |
74 |
# major, minor, patchlevel, internal |
# major, minor, patchlevel, internal |
75 |
# internal is always 0 on releases; if you hack this internally, increment it |
# internal is always 0 on releases; if you hack this internally, increment it |
76 |
_class_version = (0, 5, 0, 0) |
_class_version = (0, 5, 0, 1) |
77 |
all_meta_types = () |
all_meta_types = () |
78 |
|
|
79 |
security = ClassSecurityInfo() |
security = ClassSecurityInfo() |
89 |
self._domain = default_domain |
self._domain = default_domain |
90 |
# _catalogs maps (language, domain) to identifiers |
# _catalogs maps (language, domain) to identifiers |
91 |
self._catalogs = {} |
self._catalogs = {} |
92 |
|
self._fb_catalogs = {} |
93 |
# What languages to fallback to, if there is no catalog for the |
# What languages to fallback to, if there is no catalog for the |
94 |
# requested language (no fallback on individual messages) |
# requested language (no fallback on individual messages) |
95 |
if fallbacks is None: |
if fallbacks is None: |
97 |
self._fallbacks = fallbacks |
self._fallbacks = fallbacks |
98 |
|
|
99 |
def _registerMessageCatalog(self, catalog): |
def _registerMessageCatalog(self, catalog): |
100 |
key = (catalog.getLanguage(), catalog.getDomain()) |
domain = catalog.getDomain() |
101 |
self._catalogs.setdefault(key, []).append(catalog.getIdentifier()) |
self._catalogs.setdefault((catalog.getLanguage(), domain), []).append(catalog.getIdentifier()) |
102 |
|
for lang in catalog.getOtherLanguages(): |
103 |
|
self._fb_catalogs.setdefault((lang, domain), []).append(catalog.getIdentifier()) |
104 |
self._p_changed = 1 |
self._p_changed = 1 |
105 |
|
|
106 |
def _unregisterMessageCatalog(self, catalog): |
def _unregister_inner(self, catalog, clist): |
107 |
for key, combo in self._catalogs.items(): |
for key, combo in clist.items(): |
108 |
try: |
try: |
109 |
combo.remove(catalog.getIdentifier()) |
combo.remove(catalog.getIdentifier()) |
110 |
except ValueError: |
except ValueError: |
111 |
continue |
continue |
112 |
if not combo: # removed the last catalog for a language/domain combination |
if not combo: # removed the last catalog for a language/domain combination |
113 |
del self._catalogs[key] |
del clist[key] |
114 |
|
|
115 |
|
def _unregisterMessageCatalog(self, catalog): |
116 |
|
self._unregister_inner(catalog, self._catalogs) |
117 |
|
self._unregister_inner(catalog, self._fb_catalogs) |
118 |
self._p_changed = 1 |
self._p_changed = 1 |
119 |
|
|
120 |
def _load_dir(self, basepath): |
def _load_dir(self, basepath): |
220 |
target_language = self.negotiate_language(context, domain) |
target_language = self.negotiate_language(context, domain) |
221 |
|
|
222 |
# Get the translation. Use the specified fallbacks if this fails |
# Get the translation. Use the specified fallbacks if this fails |
223 |
catalog_names = self._catalogs.get((target_language, domain), ()) |
catalog_names = self._catalogs.get((target_language, domain), ()) or \ |
224 |
|
self._fb_catalogs.get((target_language, domain), ()) |
225 |
if not catalog_names: |
if not catalog_names: |
226 |
for language in self._fallbacks: |
for language in self._fallbacks: |
227 |
catalog_names = self._catalogs.get((language, domain), ()) |
catalog_names = self._catalogs.get((language, domain), ()) |
260 |
if context is None: |
if context is None: |
261 |
raise TypeError, 'No destination language' |
raise TypeError, 'No destination language' |
262 |
else: |
else: |
263 |
langs = [m[0] for m in self._catalogs.keys() if m[1] == domain] |
langs = [m[0] for m in self._catalogs.keys() if m[1] == domain] + \ |
264 |
|
[m[0] for m in self._fb_catalogs.keys() if m[1] == domain] |
265 |
for fallback in self._fallbacks: |
for fallback in self._fallbacks: |
266 |
if fallback not in langs: |
if fallback not in langs: |
267 |
langs.append(fallback) |
langs.append(fallback) |