Mercurial > p > roundup > code
annotate roundup/i18n.py @ 5296:b48e2fe4a7bd
Make tracker user native (postgres) test indexer. This is apparently
how things are expected to be set up on the server. Leaving
it blank pulls in the xapian indexer which they don't want.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Thu, 28 Sep 2017 19:22:21 -0400 |
| parents | 6102252d3a8a |
| children | 56c9bcdea47f |
| rev | line source |
|---|---|
|
399
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
1 # |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
3 # This module is free software, and you may redistribute it and/or modify |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
4 # under the same terms as Python, so long as this copyright message and |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
5 # disclaimer are retained in their original form. |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
6 # |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
10 # POSSIBILITY OF SUCH DAMAGE. |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
11 # |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
|
2302
004dff9a159f
use python gettext engine
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2005
diff
changeset
|
17 # |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
18 """ |
|
399
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
19 RoundUp Internationalization (I18N) |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
20 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
21 To use this module, the following code should be used:: |
|
399
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
22 |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
23 from roundup.i18n import _ |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
24 ... |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
25 print _("Some text that can be translated") |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
26 |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
27 Note that to enable re-ordering of inserted texts in formatting strings |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
28 (which can easily happen if a sentence has to be re-ordered due to |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
29 grammatical changes), translatable formats should use named format specs:: |
|
399
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
30 |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
31 ... _('Index of %(classname)s') % {'classname': cn} ... |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
32 |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
33 Also, this eases the job of translators since they have some context what |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
34 the dynamic portion of a message really means. |
|
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
35 """ |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
36 __docformat__ = 'restructuredtext' |
|
399
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
37 |
|
2355
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
38 import errno |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
39 import gettext as gettext_module |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
40 import os |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
41 |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
42 from roundup import msgfmt |
|
2355
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
43 |
|
3350
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
44 # List of directories for mo file search (see SF bug 1219689) |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
45 LOCALE_DIRS = [ |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
46 gettext_module._default_localedir, |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
47 ] |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
48 # compute mo location relative to roundup installation directory |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
49 # (prefix/lib/python/site-packages/roundup/msgfmt.py on posix systems, |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
50 # prefix/lib/site-packages/roundup/msgfmt.py on windows). |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
51 # locale root is prefix/share/locale. |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
52 if os.name == "nt": |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
53 _mo_path = [".."] * 4 + ["share", "locale"] |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
54 else: |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
55 _mo_path = [".."] * 5 + ["share", "locale"] |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
56 _mo_path = os.path.normpath(os.path.join(msgfmt.__file__, *_mo_path)) |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
57 if _mo_path not in LOCALE_DIRS: |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
58 LOCALE_DIRS.append(_mo_path) |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
59 del _mo_path |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
60 |
|
2355
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
61 # Roundup text domain |
|
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
62 DOMAIN = "roundup" |
|
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
63 |
|
4813
a072b35d0606
i18n: Remove Python 2.3 compatibility
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
64 RoundupNullTranslations = gettext_module.NullTranslations |
|
a072b35d0606
i18n: Remove Python 2.3 compatibility
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
65 RoundupTranslations = gettext_module.GNUTranslations |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
66 |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
67 def find_locales(language=None): |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
68 """Return normalized list of locale names to try for given language |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
69 |
|
2917
5809f81fba24
accept a list of languages as well as single language name (thanks donfu)
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2810
diff
changeset
|
70 Argument 'language' may be a single language code or a list of codes. |
|
5809f81fba24
accept a list of languages as well as single language name (thanks donfu)
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2810
diff
changeset
|
71 If 'language' is omitted or None, use locale settings in OS environment. |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
72 |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
73 """ |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
74 # body of this function is borrowed from gettext_module.find() |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
75 if language is None: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
76 languages = [] |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
77 for envar in ('LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG'): |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
78 val = os.environ.get(envar) |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
79 if val: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
80 languages = val.split(':') |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
81 break |
|
2918
a3d9d7e98c36
oops. isinstance() did not accept tuples in 2.1.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2917
diff
changeset
|
82 elif isinstance(language, str) or isinstance(language, unicode): |
|
2917
5809f81fba24
accept a list of languages as well as single language name (thanks donfu)
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2810
diff
changeset
|
83 languages = [language] |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
84 else: |
|
2917
5809f81fba24
accept a list of languages as well as single language name (thanks donfu)
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2810
diff
changeset
|
85 # 'language' must be iterable |
|
5809f81fba24
accept a list of languages as well as single language name (thanks donfu)
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2810
diff
changeset
|
86 languages = language |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
87 # now normalize and expand the languages |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
88 nelangs = [] |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
89 for lang in languages: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
90 for nelang in gettext_module._expand_lang(lang): |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
91 if nelang not in nelangs: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
92 nelangs.append(nelang) |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
93 return nelangs |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
94 |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
95 def get_mofile(languages, localedir, domain=None): |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
96 """Return the first of .mo files found in localedir for languages |
|
2355
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
97 |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
98 Parameters: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
99 languages: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
100 list of locale names to try |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
101 localedir: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
102 path to directory containing locale files. |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
103 Usually this is either gettext_module._default_localedir |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
104 or 'locale' subdirectory in the tracker home. |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
105 domain: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
106 optional name of messages domain. |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
107 If omitted or None, work with simplified |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
108 locale directory, as used in tracker homes: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
109 message catalogs are kept in files locale.po |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
110 instead of locale/LC_MESSAGES/domain.po |
|
399
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
111 |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
112 Return the path of the first .mo file found. |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
113 If nothing found, return None. |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
114 |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
115 Automatically compile .po files if necessary. |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
116 |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
117 """ |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
118 for locale in languages: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
119 if locale == "C": |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
120 break |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
121 if domain: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
122 basename = os.path.join(localedir, locale, "LC_MESSAGES", domain) |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
123 else: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
124 basename = os.path.join(localedir, locale) |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
125 # look for message catalog files, check timestamps |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
126 mofile = basename + ".mo" |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
127 if os.path.isfile(mofile): |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
128 motime = os.path.getmtime(mofile) |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
129 else: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
130 motime = 0 |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
131 pofile = basename + ".po" |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
132 if os.path.isfile(pofile): |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
133 potime = os.path.getmtime(pofile) |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
134 else: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
135 potime = 0 |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
136 # see what we've found |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
137 if motime < potime: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
138 # compile |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
139 msgfmt.make(pofile, mofile) |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
140 elif motime == 0: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
141 # no files found - proceed to the next locale name |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
142 continue |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
143 # .mo file found or made |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
144 return mofile |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
145 return None |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
146 |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
147 def get_translation(language=None, tracker_home=None, |
|
2555
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
148 translation_class=RoundupTranslations, |
|
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
149 null_translation_class=RoundupNullTranslations |
|
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
150 ): |
|
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
151 """Return Translation object for given language and domain |
|
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
152 |
|
2917
5809f81fba24
accept a list of languages as well as single language name (thanks donfu)
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2810
diff
changeset
|
153 Argument 'language' may be a single language code or a list of codes. |
|
5809f81fba24
accept a list of languages as well as single language name (thanks donfu)
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2810
diff
changeset
|
154 If 'language' is omitted or None, use locale settings in OS environment. |
|
5809f81fba24
accept a list of languages as well as single language name (thanks donfu)
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2810
diff
changeset
|
155 |
|
2555
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
156 Arguments 'translation_class' and 'null_translation_class' |
|
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
157 specify the classes that are instantiated for existing |
|
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
158 and non-existing translations, respectively. |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
159 |
|
2555
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
160 """ |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
161 mofiles = [] |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
162 # locale directory paths |
|
2810
ca541343c3ae
straighten "if not ... else" logic;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2806
diff
changeset
|
163 if tracker_home is None: |
|
ca541343c3ae
straighten "if not ... else" logic;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2806
diff
changeset
|
164 tracker_locale = None |
|
ca541343c3ae
straighten "if not ... else" logic;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2806
diff
changeset
|
165 else: |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
166 tracker_locale = os.path.join(tracker_home, "locale") |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
167 # get the list of locales |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
168 locales = find_locales(language) |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
169 # add mofiles found in the tracker, then in the system locale directory |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
170 if tracker_locale: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
171 mofiles.append(get_mofile(locales, tracker_locale)) |
|
3350
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
172 for system_locale in LOCALE_DIRS: |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
173 mofiles.append(get_mofile(locales, system_locale, DOMAIN)) |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
174 # we want to fall back to english unless english is selected language |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
175 if "en" not in locales: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
176 locales = find_locales("en") |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
177 # add mofiles found in the tracker, then in the system locale directory |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
178 if tracker_locale: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
179 mofiles.append(get_mofile(locales, tracker_locale)) |
|
3350
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
180 for system_locale in LOCALE_DIRS: |
|
73ef4805a2eb
search mo files relative ro roundup installation path [SF#1219689]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2918
diff
changeset
|
181 mofiles.append(get_mofile(locales, system_locale, DOMAIN)) |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
182 # filter out elements that are not found |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
183 mofiles = filter(None, mofiles) |
|
4838
6102252d3a8a
Do not throw an internal error if a .mo file can not be read
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4813
diff
changeset
|
184 translator = None |
|
6102252d3a8a
Do not throw an internal error if a .mo file can not be read
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4813
diff
changeset
|
185 for mofile in mofiles: |
|
6102252d3a8a
Do not throw an internal error if a .mo file can not be read
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4813
diff
changeset
|
186 try: |
|
6102252d3a8a
Do not throw an internal error if a .mo file can not be read
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4813
diff
changeset
|
187 mo = open(mofile, "rb") |
|
6102252d3a8a
Do not throw an internal error if a .mo file can not be read
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4813
diff
changeset
|
188 if translator is None: |
|
6102252d3a8a
Do not throw an internal error if a .mo file can not be read
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4813
diff
changeset
|
189 translator = translation_class(mo) |
|
6102252d3a8a
Do not throw an internal error if a .mo file can not be read
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4813
diff
changeset
|
190 else: |
|
6102252d3a8a
Do not throw an internal error if a .mo file can not be read
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4813
diff
changeset
|
191 # note: current implementation of gettext_module |
|
6102252d3a8a
Do not throw an internal error if a .mo file can not be read
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4813
diff
changeset
|
192 # always adds fallback to the end of the fallback chain. |
|
6102252d3a8a
Do not throw an internal error if a .mo file can not be read
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4813
diff
changeset
|
193 translator.add_fallback(translation_class(mo)) |
|
6102252d3a8a
Do not throw an internal error if a .mo file can not be read
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4813
diff
changeset
|
194 except IOError: |
|
6102252d3a8a
Do not throw an internal error if a .mo file can not be read
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4813
diff
changeset
|
195 # ignore unreadable .mo files |
|
6102252d3a8a
Do not throw an internal error if a .mo file can not be read
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4813
diff
changeset
|
196 pass |
|
6102252d3a8a
Do not throw an internal error if a .mo file can not be read
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4813
diff
changeset
|
197 if translator is None: |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
198 translator = null_translation_class() |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
199 return translator |
|
2355
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
200 |
|
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
201 # static translations object |
|
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
202 translation = get_translation() |
|
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
203 # static translation functions |
|
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
204 _ = gettext = translation.gettext |
|
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
205 ugettext = translation.ugettext |
|
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
206 ngettext = translation.ngettext |
|
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
207 ungettext = translation.ungettext |
|
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
208 |
|
2555
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
209 # vim: set filetype=python sts=4 sw=4 et si : |
