Ticket #14924: 14924.3.diff
File 14924.3.diff, 26.7 KB (added by , 14 years ago) |
---|
-
django/utils/translation/__init__.py
diff --git a/django/utils/translation/__init__.py b/django/utils/translation/__init__.py
a b 1 1 """ 2 2 Internationalization support. 3 3 """ 4 from os import path 5 import warnings 6 4 7 from django.utils.encoding import force_unicode 5 from django.utils.functional import lazy, curry 8 from django.utils.functional import lazy 9 from django.utils.importlib import import_module 6 10 7 11 8 12 __all__ = ['gettext', 'gettext_noop', 'gettext_lazy', 'ngettext', … … 33 37 performance effect, as access to the function goes the normal path, 34 38 instead of using __getattr__. 35 39 """ 40 36 41 def __getattr__(self, real_name): 37 42 from django.conf import settings 38 43 if settings.USE_I18N: 39 44 from django.utils.translation import trans_real as trans 45 46 if settings.SETTINGS_MODULE is not None: 47 parts = settings.SETTINGS_MODULE.split('.') 48 project = import_module(parts[0]) 49 if path.isdir(path.join(path.dirname(project.__file__), 'locale')): 50 warnings.warn( 51 "Translations in the project directory aren't supported anymore. Use the LOCALE_PATHS setting instead.", 52 PendingDeprecationWarning 53 ) 54 40 55 else: 41 56 from django.utils.translation import trans_null as trans 42 57 setattr(self, real_name, getattr(trans, real_name)) -
django/utils/translation/trans_real.py
diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py
a b 125 125 126 126 global _translations 127 127 128 loc = to_locale(lang)129 130 128 res = _translations.get(lang, None) 131 129 if res is not None: 132 130 return res 133 131 132 loc = to_locale(lang) 133 134 134 def _translation(path): 135 135 try: 136 136 t = gettext_module.translation('django', path, [loc], DjangoTranslation) … … 159 159 res.merge(t) 160 160 return res 161 161 162 for localepath in settings.LOCALE_PATHS: 163 if os.path.isdir(localepath): 164 res = _merge(localepath) 165 166 for appname in settings.INSTALLED_APPS: 162 for appname in reversed(settings.INSTALLED_APPS): 167 163 app = import_module(appname) 168 164 apppath = os.path.join(os.path.dirname(app.__file__), 'locale') 169 165 … … 173 169 if projectpath and os.path.isdir(projectpath): 174 170 res = _merge(projectpath) 175 171 172 for localepath in reversed(settings.LOCALE_PATHS): 173 if os.path.isdir(localepath): 174 res = _merge(localepath) 175 176 176 if res is None: 177 177 if fallback is not None: 178 178 res = fallback -
django/views/i18n.py
diff --git a/django/views/i18n.py b/django/views/i18n.py
a b 196 196 paths = [] 197 197 en_selected = locale.startswith('en') 198 198 en_catalog_missing = True 199 # first load all english languages files for defaults199 # paths of requested packages 200 200 for package in packages: 201 201 p = importlib.import_module(package) 202 202 path = os.path.join(os.path.dirname(p.__file__), 'locale') 203 203 paths.append(path) 204 # add the filesystem paths listed in the LOCALE_PATHS setting 205 paths.extend(list(reversed(settings.LOCALE_PATHS))) 206 # first load all english languages files for defaults 207 for path in paths: 204 208 try: 205 209 catalog = gettext_module.translation(domain, path, ['en']) 206 210 t.update(catalog._catalog) … … 278 282 src.append(LibFormatFoot) 279 283 src = ''.join(src) 280 284 return http.HttpResponse(src, 'text/javascript') 281 -
docs/howto/i18n.txt
diff --git a/docs/howto/i18n.txt b/docs/howto/i18n.txt
a b 4 4 Using internationalization in your own projects 5 5 =============================================== 6 6 7 At runtime, Django looks for translations by following this algorithm: 7 At runtime, Django builds an in-memory unified catalog of literals-translations. 8 To achieve this it looks for translations by following this algorithm regarding 9 the order in which it examines the different file paths to load the compiled 10 :term:`message files <message file>` (``.mo``) and the precedence of multiple 11 translations for the same literal: 8 12 9 * First, it looks for a ``locale`` directory in the directory containing 10 your settings file. 11 * Second, it looks for a ``locale`` directory in the project directory. 12 * Third, it looks for a ``locale`` directory in each of the installed apps. 13 It does this in the reverse order of INSTALLED_APPS 14 * Finally, it checks the Django-provided base translation in 15 ``django/conf/locale``. 13 1. The directories listed in :setting:`LOCALE_PATHS` have the highest 14 precedence, with the ones appearing first having higher precedence than 15 the ones appearing later. 16 2. Then, it looks for and uses if it exists a ``locale`` directory in each 17 of the installed apps listed in :setting:`INSTALLED_APPS`. The ones 18 appearing first have higher precedence than the ones appearing later. 19 3. Then, it looks for a ``locale`` directory in the project directory, or 20 more accurately, in the directory containing your settings file. 21 4. Finally, the Django-provided base translation in ``django/conf/locale`` 22 is used as a fallback. 23 24 .. deprecated:: 1.3 25 Lookup in the ``locale`` subdirectory of the directory containing your 26 settings file (item 3 above) is deprecated since the 1.3 release and will be 27 removed in Django 1.5. You can use the :setting:`LOCALE_PATHS` setting 28 instead, by listing the absolute filesystem path of such ``locale`` 29 directory in the setting value. 30 31 .. seealso:: 32 33 The translations for literals included in JavaScript assets are looked up 34 following a similar but not identical algorithm. See the 35 :ref:`javascript_catalog view documentation <javascript_catalog-view>` for 36 more details. 16 37 17 38 In all cases the name of the directory containing the translation is expected to 18 39 be named using :term:`locale name` notation. E.g. ``de``, ``pt_BR``, ``es_AR``, … … 20 41 21 42 This way, you can write applications that include their own translations, and 22 43 you can override base translations in your project path. Or, you can just build 23 a big project out of several apps and put all translations into one big project24 message file . The choice is yours.44 a big project out of several apps and put all translations into one big coomon 45 message file specific to the project you are composing. The choice is yours. 25 46 26 47 .. note:: 27 48 … … 34 55 35 56 All message file repositories are structured the same way. They are: 36 57 58 * All paths listed in ``LOCALE_PATHS`` in your settings file are 59 searched for ``<language>/LC_MESSAGES/django.(po|mo)`` 60 * ``$PROJECTPATH/locale/<language>/LC_MESSAGES/django.(po|mo)`` -- 61 deprecated, see above. 37 62 * ``$APPPATH/locale/<language>/LC_MESSAGES/django.(po|mo)`` 38 * ``$PROJECTPATH/locale/<language>/LC_MESSAGES/django.(po|mo)``39 * All paths listed in ``LOCALE_PATHS`` in your settings file are40 searched in that order for ``<language>/LC_MESSAGES/django.(po|mo)``41 63 * ``$PYTHONPATH/django/conf/locale/<language>/LC_MESSAGES/django.(po|mo)`` 42 64 43 65 To create message files, you use the :djadmin:`django-admin.py makemessages <makemessages>` … … 50 72 to make the compiler process all the directories in your :setting:`LOCALE_PATHS` 51 73 setting. 52 74 53 Application message files are a bit complicated to discover -- they need the54 :class:`~django.middleware.locale.LocaleMiddleware`. If you don't use the55 middleware, only the Django message files and project message files will be56 installed and available at runtime.57 58 75 Finally, you should give some thought to the structure of your translation 59 76 files. If your applications need to be delivered to other users and will 60 77 be used in other projects, you might want to use app-specific translations. 61 But using app-specific translations and project translations could produce 62 weird problems with ``makemessages``: It will traverse all directories below 63 the current path and so might put message IDs into the project message file 64 that are already in application message files. 78 But using app-specific translations and project-specific translations could 79 produce weird problems with ``makemessages``: It will traverse all directories 80 below the current path and so might put message IDs into a unified, common 81 message file for the current project that are already in application message 82 files. 65 83 66 84 The easiest way out is to store applications that are not part of the project 67 85 (and so carry their own translations) outside the project tree. That way, 68 ``django-admin.py makemessages`` on the project level will only translate86 ``django-admin.py makemessages``, when ran on a project level will only extract 69 87 strings that are connected to your explicit project and not strings that are 70 88 distributed independently. 71 89 -
docs/ref/settings.txt
diff --git a/docs/ref/settings.txt b/docs/ref/settings.txt
a b 1149 1149 A tuple of directories where Django looks for translation files. 1150 1150 See :ref:`using-translations-in-your-own-projects`. 1151 1151 1152 Example:: 1153 1154 LOCALE_PATHS = ( 1155 '/home/www/project/common_files/locale', 1156 '/var/local/translations/locale' 1157 ) 1158 1159 Note that in the paths you add to the value of this setting, if you have the 1160 typical ``/path/to/locale/xx/LC_MESSAGES`` hierarchy, you should use the path to 1161 the ``locale`` directory (i.e. ``'/path/to/locale'``). 1162 1152 1163 .. setting:: LOGGING 1153 1164 1154 1165 LOGGING -
docs/releases/1.3.txt
diff --git a/docs/releases/1.3.txt b/docs/releases/1.3.txt
a b 454 454 <topics-testing-fixtures>`, or using the ``setUp()`` method of your 455 455 test case. 456 456 457 Changed priority of translation loading 458 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 459 460 Work has been done to homogeneize, simplify, rationalize and properly document 461 the algorithm used by Django at runtime to build translations from the 462 differents translations found on disk, namely: 463 464 For translatable literals found in Python code and templates (``'django'`` 465 gettext domain): 466 467 * Change the priority of the translations included with the applications 468 listed in the :setting:`INSTALLED_APPS` setting. To provide a behavior 469 consistent with other parts of Django that also use such setting 470 (templates, etc.) now, when building the translation that will be made 471 available, the apps listed first have higher precedence than the ones listed 472 later. 473 474 * Provide a way to override the translations shipped with applications by using 475 the :setting:`LOCALE_PATHS` setting whose translations have now higher 476 precedence than the translations of ``INSTALLED_APPS`` applications. 477 the relative priority among the values listed in this setting has also been 478 modified so the paths listed first have higher precedence than the 479 ones listed later. 480 481 * The ``locale`` subdirectory of the directory containing the settings, that 482 usually coincides with and is know as the *project directory* is being 483 deprecated in this release as a source of translations. (the precedence of 484 these translations is intermediate between applications and ``LOCALE_PATHS`` 485 translations). See the `corresponding deprecated features section`_ 486 of this document. 487 488 For translatable literals found in Javascript code (``'djangojs'`` gettext 489 domain): 490 491 * Similarly to the ``'django'`` domain translations: Allow overriding of 492 translations shipped with applications by using the :setting:`LOCALE_PATHS` 493 setting that is now used for this domain and whose translations have higher 494 precedence than the translations of Python packages passed to the 495 :ref:`javascript_catalog view <javascript_catalog-view>`. Paths listed first 496 have higher precedence than the ones listed later. 497 498 * Translations under the ``locale`` sbdirectory of the *project directory* have 499 never been taken in account for JavaScript translations and remain in the 500 same situation considering the deprecation of such location. 501 502 .. _corresponding deprecated features section: loading_of_translations_from_the_project_directory_ 503 457 504 .. _deprecated-features-1.3: 458 505 459 506 Features deprecated in 1.3 … … 631 678 which was a bug-fix wrapper around the standard library ``SimpleCookie``. As the 632 679 fixes are moving upstream, this is now deprecated - you should use ``from 633 680 django.http import SimpleCookie`` instead. 681 682 .. _loading_of_translations_from_the_project_directory: 683 684 Loading of translations from the project directory 685 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 686 687 This release of Django starts the deprecation process for inclusion of 688 translations located under the *project path* in the translation building 689 process performed at runtime. The :setting:`LOCALE_PATHS` setting can be used 690 for the same task by including in it the filesystem path to the ``locale`` 691 directory containing project-level translations. 692 693 Rationale for this decision: 694 695 * The *project path* has always been a loosely defined concept (actually, the 696 directory used for locating project-level translations is the directory 697 containing the settings module) and there has been a shift in other parts 698 of the framework to stop using it as a reference for location of assets at 699 runtime. 700 701 * Detection of the ``locale`` subdirectory tends to fail when the deployment 702 scenario is more complex than the basic one. e.g. it fails when the settings 703 module is a directory (ticket #10765). 704 705 * Potential for strange development- and deployment-time problems like the 706 fact that the ``project_dir/locale/`` subdir can generate spurious error 707 messages when the project directory is included in the Python path (default 708 behavior of ``manage.py runserver``) and then it clashes with the equally 709 named standard library module:: 710 711 /usr/lib/python2.6/gettext.py:49: ImportWarning: Not importing directory '/path/to/project/dir/locale': missing __init__.py. 712 import locale, copy, os, re, struct, sys 713 714 * This location hadn't never been included so far in the translation building 715 process for JavaScript literals. -
docs/topics/i18n/deployment.txt
diff --git a/docs/topics/i18n/deployment.txt b/docs/topics/i18n/deployment.txt
a b 171 171 How Django discovers translations 172 172 --------------------------------- 173 173 174 As described in :ref:`using-translations-in-your-own-projects`, 175 at runtime, Django looks for translations by following this algorithm: 174 As described in :ref:`using-translations-in-your-own-projects`, Django looks for 175 translations by following this algorithm regarding the order in which it 176 examines the different file paths to load the compiled :term:`message files 177 <message file>` (``.mo``) and the precedence of multiple translations for the 178 same literal: 176 179 177 * First, it looks for a ``locale`` directory in the directory containing 178 your settings file. 179 * Second, it looks for a ``locale`` directory in the project directory. 180 * Third, it looks for a ``locale`` directory in each of the installed apps. 181 It does this in the reverse order of INSTALLED_APPS 182 * Finally, it checks the Django-provided base translation in 183 ``django/conf/locale``. 180 1. The directories listed in :setting:`LOCALE_PATHS` have the highest 181 precedence, with the ones appearing first having higher precedence than 182 the ones appearing later. 183 2. Then, it looks for and uses if it exists a ``locale`` directory in each 184 of the installed apps listed in :setting:`INSTALLED_APPS`. The ones 185 appearing first have higher precedence than the ones appearing later. 186 3. Then, it looks for a ``locale`` directory in the project directory, or 187 more accurately, in the directory containing your settings file. 188 4. Finally, the Django-provided base translation in ``django/conf/locale`` 189 is used as a fallback. 190 191 .. deprecated:: 1.3 192 Lookup in the ``locale`` subdirectory of the directory containing your 193 settings file (item 3 above) is deprecated since the 1.3 release and will be 194 removed in Django 1.5. You can use the :setting:`LOCALE_PATHS` setting 195 instead, by listing the absolute filesystem path of such ``locale`` 196 directory in the setting value. 197 198 .. seealso:: 199 200 The translations for literals included in JavaScript assets are looked up 201 following a similar but not identical algorithm. See the 202 :ref:`javascript_catalog view documentation <javascript_catalog-view>` for 203 more details. 184 204 185 205 In all cases the name of the directory containing the translation is expected to 186 206 be named using :term:`locale name` notation. E.g. ``de``, ``pt_BR``, ``es_AR``, -
docs/topics/i18n/internationalization.txt
diff --git a/docs/topics/i18n/internationalization.txt b/docs/topics/i18n/internationalization.txt
a b 348 348 Working with lazy translation objects 349 349 ------------------------------------- 350 350 351 .. highlightlang:: python352 353 351 Using ``ugettext_lazy()`` and ``ungettext_lazy()`` to mark strings in models 354 352 and utility functions is a common operation. When you're working with these 355 353 objects elsewhere in your code, you should ensure that you don't accidentally … … 633 631 Specifying translation strings: In JavaScript code 634 632 ================================================== 635 633 634 .. highlightlang:: python 635 636 636 Adding translations to JavaScript poses some problems: 637 637 638 638 * JavaScript code doesn't have access to a ``gettext`` implementation. … … 647 647 translations into JavaScript, so you can call ``gettext``, etc., from within 648 648 JavaScript. 649 649 650 .. _javascript_catalog-view: 651 650 652 The ``javascript_catalog`` view 651 653 ------------------------------- 652 654 … … 657 659 The main solution to these problems is the :meth:`django.views.i18n.javascript_catalog` 658 660 view, which sends out a JavaScript code library with functions that mimic the 659 661 ``gettext`` interface, plus an array of translation strings. Those translation 660 strings are taken from the application, project or Django core, according to what 661 you specify in either the info_dict or the URL. 662 strings are taken from applications or Django core, according to what you 663 specify in either the info_dict or the URL. Paths listed in 664 :setting:`LOCALE_PATHS` are also included. 662 665 663 666 You hook it up like this:: 664 667 … … 676 679 those catalogs are merged into one catalog. This is useful if you have 677 680 JavaScript that uses strings from different applications. 678 681 682 The precedence of translations is such that the packages appearing later in the 683 ``packages`` argument have higher precedence than the ones appearing at the 684 beginning, this is important in the case of clashing translations for the same 685 literal. 686 679 687 By default, the view uses the ``djangojs`` gettext domain. This can be 680 688 changed by altering the ``domain`` argument. 681 689 … … 691 699 catalog file. As a security measure, these values can only be either 692 700 ``django.conf`` or any package from the :setting:`INSTALLED_APPS` setting. 693 701 702 The JavaScript translations found in the paths listed in the 703 :setting:`LOCALE_PATHS` setting are also always included. To keep consistency 704 with the translations lookup order algorithm used for Python and templates, the 705 directories listed in :setting:`LOCALE_PATHS` have the highest precedence with 706 the ones appearing first having higher precedence than the ones appearing 707 later. 708 709 .. versionchanged:: 1.3 710 Directories listed in ``LOCALE_PATHS`` weren't included in the lookup 711 algorithm until version 1.3. 712 694 713 Using the JavaScript translation catalog 695 714 ---------------------------------------- 696 715 697 To use the catalog, just pull in the dynamically generated script like this:: 716 .. highlightlang:: javascript 717 718 To use the catalog, just pull in the dynamically generated script like this: 719 720 .. code-block:: html+django 698 721 699 722 <script type="text/javascript" src="{% url django.views.i18n.javascript_catalog %}"></script> 700 723 … … 751 774 The ``set_language`` redirect view 752 775 ================================== 753 776 777 .. highlightlang:: python 778 754 779 .. function:: set_language(request) 755 780 756 781 As a convenience, Django comes with a view, :meth:`django.views.i18n.set_language`, -
tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.po
diff --git a/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.po b/tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.po
a b 8 8 "Project-Id-Version: django tests\n" 9 9 "Report-Msgid-Bugs-To: \n" 10 10 "POT-Creation-Date: 2010-02-14 17:33+0100\n" 11 "PO-Revision-Date: 2011-01- 16 17:14+0100\n"11 "PO-Revision-Date: 2011-01-21 21:37-0300\n" 12 12 "Last-Translator: Jannis Leidel <jannis@leidel.info>\n" 13 13 "Language-Team: de <de@li.org>\n" 14 14 "MIME-Version: 1.0\n" … … 18 18 19 19 #: models.py:3 20 20 msgid "Time" 21 msgstr " Time(LOCALE_PATHS)"21 msgstr "Zeit (LOCALE_PATHS)" 22 22 23 23 #: models.py:5 24 msgid "Date/time" 25 msgstr "Datum/Zeit (LOCALE_PATHS)" 26 27 #: models.py:7 24 28 msgctxt "month name" 25 29 msgid "May" 26 30 msgstr "Mai" 27 31 28 #: models.py: 732 #: models.py:9 29 33 msgctxt "verb" 30 34 msgid "May" 31 35 msgstr "Kann" 32 36 33 #: models.py: 937 #: models.py:11 34 38 msgctxt "search" 35 39 msgid "%d result" 36 40 msgid_plural "%d results" 37 41 msgstr[0] "%d Resultat" 38 42 msgstr[1] "%d Resultate" 39 -
tests/regressiontests/i18n/resolution/locale/de/LC_MESSAGES/django.po
diff --git a/tests/regressiontests/i18n/resolution/locale/de/LC_MESSAGES/django.po b/tests/regressiontests/i18n/resolution/locale/de/LC_MESSAGES/django.po
a b 9 9 "Project-Id-Version: PACKAGE VERSION\n" 10 10 "Report-Msgid-Bugs-To: \n" 11 11 "POT-Creation-Date: 2010-02-14 17:33+0100\n" 12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"12 "PO-Revision-Date: 2011-01-21 21:37-0300\n" 13 13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 14 14 "Language-Team: LANGUAGE <LL@li.org>\n" 15 15 "MIME-Version: 1.0\n" … … 18 18 "Plural-Forms: nplurals=2; plural=(n != 1)\n" 19 19 20 20 #: models.py:3 21 msgid "Time" 22 msgstr "Zeit (APP)" 23 24 #: models.py:5 21 25 msgid "Date/time" 22 26 msgstr "Datum/Zeit (APP)" -
tests/regressiontests/i18n/tests.py
diff --git a/tests/regressiontests/i18n/tests.py b/tests/regressiontests/i18n/tests.py
a b 660 660 661 661 def assertUgettext(self, msgid, msgstr): 662 662 result = ugettext(msgid) 663 self.assert _(msgstr in result, ("The string '%s' isn't in the "663 self.assertTrue(msgstr in result, ("The string '%s' isn't in the " 664 664 "translation of '%s'; the actual result is '%s'." % (msgstr, msgid, result))) 665 665 666 666 class AppResolutionOrderI18NTests(ResolutionOrderI18NTests): 667 667 668 668 def setUp(self): 669 669 self.old_installed_apps = settings.INSTALLED_APPS 670 settings.INSTALLED_APPS = list(settings.INSTALLED_APPS) + ['regressiontests.i18n.resolution']670 settings.INSTALLED_APPS = ['regressiontests.i18n.resolution'] + list(settings.INSTALLED_APPS) 671 671 super(AppResolutionOrderI18NTests, self).setUp() 672 672 673 673 def tearDown(self): … … 691 691 def test_locale_paths_translation(self): 692 692 self.assertUgettext('Time', 'LOCALE_PATHS') 693 693 694 def test_locale_paths_override_app_translation(self): 695 old_installed_apps = settings.INSTALLED_APPS 696 settings.INSTALLED_APPS = list(settings.INSTALLED_APPS) + ['regressiontests.i18n.resolution'] 697 try: 698 self.assertUgettext('Time', 'LOCALE_PATHS') 699 finally: 700 settings.INSTALLED_APPS = old_installed_apps 701 702 def test_locale_paths_override_project_translation(self): 703 old_settings_module = settings.SETTINGS_MODULE 704 settings.SETTINGS_MODULE = 'regressiontests' 705 try: 706 self.assertUgettext('Date/time', 'LOCALE_PATHS') 707 finally: 708 settings.SETTINGS_MODULE = old_settings_module 709 694 710 class ProjectResolutionOrderI18NTests(ResolutionOrderI18NTests): 695 711 696 712 def setUp(self): … … 708 724 def test_project_override_app_translation(self): 709 725 old_installed_apps = settings.INSTALLED_APPS 710 726 settings.INSTALLED_APPS = list(settings.INSTALLED_APPS) + ['regressiontests.i18n.resolution'] 711 self.assertUgettext('Date/time', 'PROJECT') 712 settings.INSTALLED_APPS = old_installed_apps 713 714 def test_project_override_locale_paths_translation(self): 715 old_locale_paths = settings.LOCALE_PATHS 716 settings.LOCALE_PATHS += (os.path.join(os.path.dirname(os.path.abspath(__file__)), 'other', 'locale'),) 717 self.assertUgettext('Date/time', 'PROJECT') 718 settings.LOCALE_PATHS = old_locale_paths 727 try: 728 self.assertUgettext('Date/time', 'PROJECT') 729 finally: 730 settings.INSTALLED_APPS = old_installed_apps 719 731 720 732 class DjangoFallbackResolutionOrderI18NTests(ResolutionOrderI18NTests): 721 733 722 734 def test_django_fallback(self): 723 self.assert Ugettext('Date/time', 'Datum/Zeit')735 self.assertEqual(ugettext('Date/time'), 'Datum/Zeit') 724 736 725 737 726 738 class TestModels(TestCase): -
tests/regressiontests/locale/de/LC_MESSAGES/django.po
diff --git a/tests/regressiontests/locale/de/LC_MESSAGES/django.po b/tests/regressiontests/locale/de/LC_MESSAGES/django.po
a b 9 9 "Project-Id-Version: PACKAGE VERSION\n" 10 10 "Report-Msgid-Bugs-To: \n" 11 11 "POT-Creation-Date: 2010-02-14 17:33+0100\n" 12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"12 "PO-Revision-Date: 2011-01-21 21:37-0300\n" 13 13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 14 14 "Language-Team: LANGUAGE <LL@li.org>\n" 15 15 "MIME-Version: 1.0\n" … … 18 18 "Plural-Forms: nplurals=2; plural=(n != 1)\n" 19 19 20 20 #: models.py:3 21 msgid "Time" 22 msgstr "Zeit (PROJECT)" 23 24 #: models.py:5 21 25 msgid "Date/time" 22 26 msgstr "Datum/Zeit (PROJECT)" -
tests/regressiontests/views/tests/i18n.py
diff --git a/tests/regressiontests/views/tests/i18n.py b/tests/regressiontests/views/tests/i18n.py
a b 1 1 # -*- coding:utf-8 -*- 2 2 import gettext 3 from os import path 3 4 4 5 from django.conf import settings 5 6 from django.test import TestCase … … 150 151 response = self.client.get('/views/jsi18n_multi_packages2/') 151 152 self.assertContains(response, javascript_quote('este texto de app3 debe ser traducido')) 152 153 deactivate() 154 155 def testI18NWithLocalePaths(self): 156 settings.LANGUAGE_CODE = 'es-ar' 157 self.old_locale_paths = settings.LOCALE_PATHS 158 settings.LOCALE_PATHS += (path.join(path.dirname(path.dirname(path.abspath(__file__))), 'app3', 'locale'),) 159 response = self.client.get('/views/jsi18n/') 160 self.assertContains(response, javascript_quote('este texto de app3 debe ser traducido')) 161 settings.LOCALE_PATHS = self.old_locale_paths