i18n翻译如何在Django / GAE中运作 - 波兰人的奇怪行为?

时间:2013-02-28 12:48:51

标签: django google-app-engine internationalization globalization django-i18n

我使用Django 1.3 / Google App Engine编写了程序,发现缺乏支持和奇怪的行为。

Prapration - 波兰语翻译(可能很重要)

首先 ungettext不支持波兰语直接看看,但是django 1.3支持PO文件标签多种形式(很多不是英语有多个复数形式) - 我这样做是为了波兰语 - 也许同样会为俄罗斯人:

复数形式:nplurals = 3;复数=(n == 1?0:n%10> = 2& n%10< = 4&&(n%100< 10 || n%100> = 20)?1:2) ;

我把一些例子说成uncutext之前的说法没用,因为波兰语有比英语更多的复数形式我用它来提取msgId

# should be 0 kóz
ungettext(u'%s kóz', u'%s kozy', 0) % 0
# should be 1 koza
ungettext(u'%s kóz', u'%s kozy', 1) % 1
# should be 2 kozy
ungettext(u'%s kóz', u'%s kozy', 2) % 2
# should be 5 kóz
ungettext(u'%s kóz', u'%s kozy', 5) % 5

我使用makemessages.py并将其翻译为技巧以获得3个复数形式而不是2个像英语(波兰语需要2-3个表格):

msgid "%s kóz"
msgid_plural "%s kozy"
msgstr[0] "%s 1 koza"
msgstr[1] "%s 2 kozy"
msgstr[2] "%s 5 kóz"

Django的奇怪行为(主要问题)

现在我做的更多技巧但不理解行为:

我正确地为DJANGO设置了所有变量,包括(希望如此)和:

LANGUAGE_CODE ='pl' - 所有翻译都有效但不是波兰语我有两种形式而不是3种。     msgstr“%skóz”     msgid_plural“%s kozy”     msgstr [0]“%s 1 koza”     msgstr [1]“%s 2 kozy”     msgstr [2]“%s5kóz”

LANGUAGE_CODE ='en' - 所有翻译工作(pl,en-us,en-gb,de-de,...)

LANGUAGE_CODE ='xx' - 所有翻译工作(pl,en-us,en-gb,de-de,...)

LANGUAGE_CODE ='en-us' - 所有翻译工作(pl,en-us,en-gb,de-de,...)但不是en-us transaltion

为什么我应该将我的语言设置为INVALID'xx'或其他不存在的翻译以使其在django中工作对我来说很奇怪?你能帮我解决一下这个问题吗?

1 个答案:

答案 0 :(得分:1)

这是一个微不足道的错误:

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'pl'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# Valid languages
LANGUAGES = (
  (u'pl', _('Polski')),
  (u'en-us', _('angielski - Stany Zjednoczone')),
  (u'en-gb', _('angielski - Wielka Brytania')),
  (u'de-de', _('niemiecki - Niemcy')),
)

LOCALE_PATHS = (
  os.path.join(__ROOT_PATH, 'conf', 'locale'),
)

路径是在第一次使用后定义的,因此django无法构建默认翻译 - 这里修复非常简单。

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'pl'

LOCALE_PATHS = (
  os.path.join(__ROOT_PATH, 'conf', 'locale'),
)

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# Valid languages
LANGUAGES = (
  (u'pl', _('Polski')),
  (u'en-us', _('angielski - Stany Zjednoczone')),
  (u'en-gb', _('angielski - Wielka Brytania')),
  (u'de-de', _('niemiecki - Niemcy')),
)

LANGUAGE_CODE ='xx'正在创建永远不会使用的无效翻译容器,并且首次使用其他语言(如pl)的有效设置会产生如此好的副作用:)