2 # -*- coding: utf-8 -*-
4 # Copyright 2007 Zuza Software Foundation
6 # This file is part of translate.
8 # translate is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 2 of the License, or
11 # (at your option) any later version.
13 # translate is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with translate; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 """This module provides a factory to instantiate language classes."""
24 from translate
.lang
import common
25 from translate
.lang
import data
29 def getlanguage(code
):
30 """This returns a language class.
32 @param code: The ISO 639 language code
35 code
= code
.replace("-", "_")
39 raise ImportError ("Can't determine language code")
40 exec("from translate.lang import %s" % code
)
41 exec("langclass = %s.%s" % (code
, code
))
42 return langclass(code
)
43 except SyntaxError, e
:
44 # Someone is probably trying to import a language of which the code
45 # is a reserved word in python (like Icelandic (is) / Oriya (or))
46 # The convention to handle these is to have it in a file like
47 # code_is, for example.
48 exec("from translate.lang import %s%s" % (prefix
, code
))
49 exec("langclass = %s%s.%s%s" % (prefix
, code
, prefix
, code
))
50 return langclass(code
)
51 except ImportError, e
:
52 if code
and code
.startswith(prefix
):
53 code
= code
[:len(prefix
)]
54 simplercode
= data
.simplercode(code
)
56 relatedlanguage
= getlanguage(simplercode
)
57 if isinstance(relatedlanguage
, common
.Common
):
58 relatedlanguage
= relatedlanguage
.__class
__(code
)
59 return relatedlanguage
61 return common
.Common(code
)