From 9e724c25236b1e00a36a146e66b5deaa43d2af96 Mon Sep 17 00:00:00 2001 From: Georg Bauer Date: Thu, 3 Nov 2005 17:10:16 +0000 Subject: [PATCH] i18n: fixed documentation and message scanner for constant string translations git-svn-id: http://code.djangoproject.com/svn/django/branches/i18n@1066 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/utils/translation.py | 10 +++++++++- docs/translation.txt | 10 ++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/django/utils/translation.py b/django/utils/translation.py index a8b9192bc6..0d40a636c8 100644 --- a/django/utils/translation.py +++ b/django/utils/translation.py @@ -364,6 +364,7 @@ inline_re = re.compile(r"""^\s*trans\s+((?:".*?")|(?:'.*?'))\s*""") block_re = re.compile(r"""^\s*blocktrans(?:\s+|$)""") endblock_re = re.compile(r"""^\s*endblocktrans$""") plural_re = re.compile(r"""^\s*plural$""") +constant_re = re.compile(r"""_\(((?:".*?")|(?:'.*?'))\)""") def templateize(src): from django.core.template import tokenize, TOKEN_TEXT, TOKEN_VAR, TOKEN_BLOCK """ @@ -414,6 +415,7 @@ def templateize(src): if t.token_type == TOKEN_BLOCK: imatch = inline_re.match(t.contents) bmatch = block_re.match(t.contents) + cmatches = constant_re.findall(t.contents) if imatch: g = imatch.group(1) if g[0] == '"': g = g.strip('"') @@ -424,11 +426,17 @@ def templateize(src): inplural = False singular = [] plural = [] + elif cmatches: + for cmatch in cmatches: + out.write(' _(%s) ' % cmatch) else: out.write(blankout(t.contents, 'B')) elif t.token_type == TOKEN_VAR: parts = t.contents.split('|') - for p in parts: + cmatch = constant_re.match(parts[0]) + if cmatch: + out.write(' _(%s) ' % cmatch.group(1)) + for p in parts[1:]: if p.find(':_(') >= 0: out.write(' %s ' % p.split(':',1)[1]) else: diff --git a/docs/translation.txt b/docs/translation.txt index 21d947d1d6..637719b879 100644 --- a/docs/translation.txt +++ b/docs/translation.txt @@ -172,6 +172,16 @@ two tags:: All tags live in the ``i18n`` tag library, so you need to specify ``{% load i18n %}`` in the head of your template to make use of them. +There are some places where you will encounter constant strings in your template code. +One is filter arguments, the other are normal string constants for tags. If you need to +translate those, you can use the ``_("....")`` syntax:: + + {% some_special_tag _("Page not found") value|yesno:_("yes,no") %} + +In this case both the filter and the tag will see the already translated string, so they +don't need to be aware of translations. And both strings will be pulled out of the templates +for translation and stored in the .po files. + The ``setlang`` redirect view -----------------------------