Mercurial > p > roundup > code
annotate roundup/i18n.py @ 6524:f961dbbc3573
issue2551167 roundup issues when using pip install
Running pip install generates a wheel install. This places locale,
template and man pages under site-packages/usr/share/....
These changes make roundup look there for templates (affecting
admin.py) and locale (affecting i18n.py) files. This also makes it
work better in virtual environment and containers (docker).
There is also a commented out bit of code in setup.py that prevents it
from making a bdist_wheel forcing a regular install with files put
under /usr/locale etc. This can be re-enabled if needed for 2.2 if
there are still issues with roundup that aren't solved by then.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sun, 07 Nov 2021 01:49:03 -0400 |
| parents | 808f7a8ed2b6 |
| children | 5ad7fb912227 |
| 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 |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
38 import gettext as gettext_module |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
39 import os |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
40 |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
41 from roundup import msgfmt |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4838
diff
changeset
|
42 from roundup.anypy.strings import is_us |
|
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 |
|
6524
f961dbbc3573
issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents:
6479
diff
changeset
|
61 # find path when locale files are installed as part of a wheel |
|
f961dbbc3573
issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents:
6479
diff
changeset
|
62 # roundup.__path__ should be something like: |
|
f961dbbc3573
issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents:
6479
diff
changeset
|
63 # /usr/local/lib/python3.10/site-packages/roundup |
|
f961dbbc3573
issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents:
6479
diff
changeset
|
64 # os.prefix should be /usr, /usr/local or root of virtualenv |
|
f961dbbc3573
issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents:
6479
diff
changeset
|
65 # strip leading / to make os.path.join work right. |
|
f961dbbc3573
issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents:
6479
diff
changeset
|
66 import roundup, sys |
|
f961dbbc3573
issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents:
6479
diff
changeset
|
67 _ldir = os.path.join( |
|
f961dbbc3573
issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents:
6479
diff
changeset
|
68 os.path.dirname(roundup.__path__[0]), |
|
f961dbbc3573
issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents:
6479
diff
changeset
|
69 sys.prefix[1:], 'share', 'locale') |
|
f961dbbc3573
issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents:
6479
diff
changeset
|
70 if os.path.isdir(_ldir): |
|
f961dbbc3573
issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents:
6479
diff
changeset
|
71 LOCALE_DIRS.append(_ldir) |
|
f961dbbc3573
issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents:
6479
diff
changeset
|
72 del _ldir |
|
f961dbbc3573
issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents:
6479
diff
changeset
|
73 |
|
2355
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
74 # Roundup text domain |
|
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
75 DOMAIN = "roundup" |
|
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
76 |
|
4813
a072b35d0606
i18n: Remove Python 2.3 compatibility
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
77 RoundupNullTranslations = gettext_module.NullTranslations |
|
a072b35d0606
i18n: Remove Python 2.3 compatibility
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
78 RoundupTranslations = gettext_module.GNUTranslations |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
79 |
|
6067
289cee42cc19
flake8 whitespace fixes; remove unused import errno.
John Rouillard <rouilj@ieee.org>
parents:
5528
diff
changeset
|
80 |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
81 def find_locales(language=None): |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
82 """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
|
83 |
|
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
|
84 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
|
85 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
|
86 |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
87 """ |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
88 # 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
|
89 if language is None: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
90 languages = [] |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
91 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
|
92 val = os.environ.get(envar) |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
93 if val: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
94 languages = val.split(':') |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
95 break |
|
5416
56c9bcdea47f
Python 3 preparation: unicode.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4838
diff
changeset
|
96 elif is_us(language): |
|
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
|
97 languages = [language] |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
98 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
|
99 # '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
|
100 languages = language |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
101 # 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
|
102 nelangs = [] |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
103 for lang in languages: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
104 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
|
105 if nelang not in nelangs: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
106 nelangs.append(nelang) |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
107 return nelangs |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
108 |
|
6067
289cee42cc19
flake8 whitespace fixes; remove unused import errno.
John Rouillard <rouilj@ieee.org>
parents:
5528
diff
changeset
|
109 |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
110 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
|
111 """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
|
112 |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
113 Parameters: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
114 languages: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
115 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
|
116 localedir: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
117 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
|
118 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
|
119 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
|
120 domain: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
121 optional name of messages domain. |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
122 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
|
123 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
|
124 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
|
125 instead of locale/LC_MESSAGES/domain.po |
|
399
96b0db9ad389
Added dummy hooks for I18N...
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
126 |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
127 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
|
128 If nothing found, return None. |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
129 |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
130 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
|
131 |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
132 """ |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
133 for locale in languages: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
134 if locale == "C": |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
135 break |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
136 if domain: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
137 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
|
138 else: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
139 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
|
140 # 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
|
141 mofile = basename + ".mo" |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
142 if os.path.isfile(mofile): |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
143 motime = os.path.getmtime(mofile) |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
144 else: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
145 motime = 0 |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
146 pofile = basename + ".po" |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
147 if os.path.isfile(pofile): |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
148 potime = os.path.getmtime(pofile) |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
149 else: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
150 potime = 0 |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
151 # see what we've found |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
152 if motime < potime: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
153 # compile |
|
5528
bb364082a14a
msgfmt.make doesn't exist any more
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5477
diff
changeset
|
154 mo = msgfmt.Msgfmt(pofile).get() |
|
bb364082a14a
msgfmt.make doesn't exist any more
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5477
diff
changeset
|
155 open(mofile, 'wb').write(mo) |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
156 elif motime == 0: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
157 # 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
|
158 continue |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
159 # .mo file found or made |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
160 return mofile |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
161 return None |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
162 |
|
6067
289cee42cc19
flake8 whitespace fixes; remove unused import errno.
John Rouillard <rouilj@ieee.org>
parents:
5528
diff
changeset
|
163 |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
164 def get_translation(language=None, tracker_home=None, |
|
6067
289cee42cc19
flake8 whitespace fixes; remove unused import errno.
John Rouillard <rouilj@ieee.org>
parents:
5528
diff
changeset
|
165 translation_class=RoundupTranslations, |
|
289cee42cc19
flake8 whitespace fixes; remove unused import errno.
John Rouillard <rouilj@ieee.org>
parents:
5528
diff
changeset
|
166 null_translation_class=RoundupNullTranslations): |
|
2555
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
167 """Return Translation object for given language and domain |
|
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
168 |
|
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
|
169 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
|
170 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
|
171 |
|
2555
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
172 Arguments 'translation_class' and 'null_translation_class' |
|
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
173 specify the classes that are instantiated for existing |
|
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
174 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
|
175 |
|
2555
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
176 """ |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
177 mofiles = [] |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
178 # locale directory paths |
|
2810
ca541343c3ae
straighten "if not ... else" logic;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2806
diff
changeset
|
179 if tracker_home is None: |
|
ca541343c3ae
straighten "if not ... else" logic;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2806
diff
changeset
|
180 tracker_locale = None |
|
ca541343c3ae
straighten "if not ... else" logic;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2806
diff
changeset
|
181 else: |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
182 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
|
183 # get the list of locales |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
184 locales = find_locales(language) |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
185 # 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
|
186 if tracker_locale: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
187 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
|
188 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
|
189 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
|
190 # 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
|
191 if "en" not in locales: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
192 locales = find_locales("en") |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
193 # 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
|
194 if tracker_locale: |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
195 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
|
196 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
|
197 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
|
198 # 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
|
199 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
|
200 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
|
201 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
|
202 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
|
203 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
|
204 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
|
205 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
|
206 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
|
207 # 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
|
208 # 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
|
209 translator.add_fallback(translation_class(mo)) |
|
6479
808f7a8ed2b6
Clean leaking file descriptors. Eliminates ResourceWarnings.
John Rouillard <rouilj@ieee.org>
parents:
6067
diff
changeset
|
210 mo.close() |
|
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
|
211 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
|
212 # 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
|
213 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
|
214 if translator is None: |
|
2806
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
215 translator = null_translation_class() |
|
845e87d5e3ba
translator objects now have the following search path:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2576
diff
changeset
|
216 return translator |
|
2355
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
217 |
|
6067
289cee42cc19
flake8 whitespace fixes; remove unused import errno.
John Rouillard <rouilj@ieee.org>
parents:
5528
diff
changeset
|
218 |
|
2355
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
219 # static translations object |
|
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
220 translation = get_translation() |
|
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
221 # static translation functions |
|
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
222 _ = gettext = translation.gettext |
|
5477
b0c2307be3d1
applied remaining part of original patch 045 (slightly modified)
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5416
diff
changeset
|
223 try: |
|
b0c2307be3d1
applied remaining part of original patch 045 (slightly modified)
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5416
diff
changeset
|
224 # Python 2. |
|
b0c2307be3d1
applied remaining part of original patch 045 (slightly modified)
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5416
diff
changeset
|
225 ugettext = translation.ugettext |
|
b0c2307be3d1
applied remaining part of original patch 045 (slightly modified)
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5416
diff
changeset
|
226 except AttributeError: |
|
b0c2307be3d1
applied remaining part of original patch 045 (slightly modified)
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5416
diff
changeset
|
227 # Python 3. |
|
b0c2307be3d1
applied remaining part of original patch 045 (slightly modified)
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5416
diff
changeset
|
228 ugettext = translation.gettext |
|
2355
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
229 ngettext = translation.ngettext |
|
5477
b0c2307be3d1
applied remaining part of original patch 045 (slightly modified)
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5416
diff
changeset
|
230 try: |
|
b0c2307be3d1
applied remaining part of original patch 045 (slightly modified)
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5416
diff
changeset
|
231 # Python 2. |
|
b0c2307be3d1
applied remaining part of original patch 045 (slightly modified)
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5416
diff
changeset
|
232 ungettext = translation.ungettext |
|
b0c2307be3d1
applied remaining part of original patch 045 (slightly modified)
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5416
diff
changeset
|
233 except AttributeError: |
|
b0c2307be3d1
applied remaining part of original patch 045 (slightly modified)
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5416
diff
changeset
|
234 # Python 3. |
|
b0c2307be3d1
applied remaining part of original patch 045 (slightly modified)
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5416
diff
changeset
|
235 ungettext = translation.ngettext |
|
2355
6c2d8183a235
export unicode functions and DOMAIN name;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2326
diff
changeset
|
236 |
|
2555
e8b2044d82a6
fix vim modeline;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2356
diff
changeset
|
237 # vim: set filetype=python sts=4 sw=4 et si : |
