mirror of
https://github.com/Hopiu/django-rosetta.git
synced 2026-04-28 17:04:44 +00:00
Merge remote-tracking branch 'mbi/develop' into reflang
Conflicts: rosetta/conf/settings.py rosetta/tests/__init__.py rosetta/urls.py rosetta/views.py
This commit is contained in:
commit
90432b0eeb
54 changed files with 1979 additions and 3565 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -13,4 +13,4 @@ testproject/htmlcov/
|
|||
testproject/rosetta.db
|
||||
testproject/src/
|
||||
testproject/.coverage
|
||||
venv_*
|
||||
.venv_*
|
||||
|
|
|
|||
33
CHANGES
33
CHANGES
|
|
@ -1,3 +1,34 @@
|
|||
Version 0.7.5
|
||||
-------------
|
||||
* Fixed external JavaScript import to be url scheme independent (PR #101, thanks @tsouvarev)
|
||||
* Fixed a test
|
||||
* Added support for excluding certain locale paths from the list of PO catalogs (PR #102, thanks @elpaso)
|
||||
* Added support for translator groups (PR #103, thanks @barklund)
|
||||
* Removed Microsoft Translator as a shipped lib, relying on an external version instead
|
||||
* Improved the app loading mechanism to cope with Django 1.7's new AppConfig (thanks @artscoop)
|
||||
|
||||
|
||||
Version 0.7.4
|
||||
-------------
|
||||
* New ROSETTA_POFILENAMES setting. (PR #44, thanks @wrboyce)
|
||||
* Updated Czech translation (#97, #99 thanks @cuchac)
|
||||
* Fixed gettext standard compliance of all shipped translations
|
||||
* No longer ship polib, rely on the Cheeseshop instead
|
||||
|
||||
|
||||
Version 0.7.3
|
||||
-------------
|
||||
* Fix for test settings leaking onto global settings: LANGUAGES was overridden and not set back (Issue #81 - Thanks @zsoldosp)
|
||||
* Test against Django 1.6.1
|
||||
* Missing context variable in catalog list (Issue #87 - Thanks @kunitoki)
|
||||
* Added support for Yandex translation API (Issue #89 - Thanks @BlackWizard) See supported languages and limitations here: https://github.com/mbi/django-rosetta/pull/89
|
||||
* Added support for the Azure translation API, replacing the BING API. (Issue #86, thanks @davidkuchar and @maikelwever)
|
||||
* Removed support for the signed_cookies SESSION_ENGINE + SessionRosettaStorage in Django 1.6, because serialization of POFiles would fail
|
||||
* Simplified the group membership test (Issue #90 - Thanks @dotsbb)
|
||||
* Better serving of admin static files. (Issue #61, thanks @tback)
|
||||
* Dropped Django 1.3 support
|
||||
|
||||
|
||||
Version 0.7.2
|
||||
-------------
|
||||
* Fix for when settings imports unicode_literals for some reason (Issue #67)
|
||||
|
|
@ -5,6 +36,8 @@ Version 0.7.2
|
|||
* Added Farsi translation. Thanks, @amiraliakbari
|
||||
* Improved the permission system, allowing for more advanced permission mechanisms. Thanks, @codeinthehole and @tangentlabs
|
||||
* Fixed the ordering of apps in the language selection screen. (Issue #73, thanks @tsouvarev, @kanu and everyone else involved in tracking this one down)
|
||||
* Support for complex locale names. (Issue #71, Thanks @strycore)
|
||||
* Configurable cache name (Issue #75, Thanks @Karmak23)
|
||||
|
||||
Version 0.7.1
|
||||
-------------
|
||||
|
|
|
|||
|
|
@ -4,6 +4,9 @@ exclude *.pyc
|
|||
exclude *.sh
|
||||
recursive-include rosetta/locale *
|
||||
recursive-include rosetta/tests *
|
||||
recursive-include rosetta/utils *
|
||||
recursive-include rosetta/templates *
|
||||
prune testproject
|
||||
prune rosetta/tests/__pycache__
|
||||
prune rosetta/utils/__pycache__
|
||||
prune rosetta/utils/microsofttranslator/__pycache__
|
||||
|
|
|
|||
28
README.rst
28
README.rst
|
|
@ -4,13 +4,13 @@ Rosetta
|
|||
|
||||
Rosetta is a `Django <http://www.djangoproject.com/>`_ application that eases the translation process of your Django projects.
|
||||
|
||||
Because it doesn't export any models, Rosetta doesn't create any tables in your project's database. Rosetta can be installed and uninstalled by simply adding and removing a single entry in your project's `INSTALLED_APPS` and a single line in your main ``urls.py`` file.
|
||||
Because it doesn't export any models, Rosetta doesn't create any tables in your project's database. Rosetta can be installed and uninstalled by simply adding and removing a single entry in your project's `INSTALLED_APPS` and a single line in your main ``urls.py`` file.
|
||||
|
||||
********
|
||||
Features
|
||||
********
|
||||
|
||||
* Database independent
|
||||
* Database independent
|
||||
* Reads and writes your project's `gettext` catalogs (po and mo files)
|
||||
* Installed and uninstalled in under a minute
|
||||
* Uses Django's admin interface CSS
|
||||
|
|
@ -20,7 +20,7 @@ Features
|
|||
Requirements
|
||||
************
|
||||
|
||||
Rosetta requires Django 1.3, 1.4 or 1.5. When running with Django 1.5, Python 3.x is supported.
|
||||
Rosetta requires Django 1.4 or newer. When running with Django 1.5, Python 3.x is supported.
|
||||
|
||||
************
|
||||
Installation
|
||||
|
|
@ -34,7 +34,7 @@ To install Rosetta:
|
|||
3. Add an URL entry to your project's ``urls.py``, for example::
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
if 'rosetta' in settings.INSTALLED_APPS:
|
||||
urlpatterns += patterns('',
|
||||
url(r'^rosetta/', include('rosetta.urls')),
|
||||
|
|
@ -54,7 +54,8 @@ Rosetta can be configured via the following parameters, to be defined in your pr
|
|||
|
||||
* ``ROSETTA_MESSAGES_PER_PAGE``: Number of messages to display per page. Defaults to ``10``.
|
||||
* ``ROSETTA_ENABLE_TRANSLATION_SUGGESTIONS``: Enable AJAX translation suggestions. Defaults to ``False``.
|
||||
* ``BING_APP_ID``: Translation suggestions used to come from the Google Translation API service, but free service has been discontinued, and the next best thing is Microsoft `Bing's Translation API <http://msdn.microsoft.com/en-us/library/ff512404.aspx>`_. To use this service you must first `obtain an AppID key <https://ssl.bing.com/webmaster/Developers/AppIds/>`_, then specify the key here. Defaults to ``None``.
|
||||
* ``YANDEX_TRANSLATE_KEY``: Translation suggestions from Yandex `Yandex.Translate API <http://api.yandex.com/translate/>`_. To use this service you must first `obtain an AppID key <http://api.yandex.com/key/form.xml?service=trnsl>`_, then specify the key here. Defaults to ``None``.
|
||||
* ``AZURE_CLIENT_ID`` and ``AZURE_CLIENT_SECRET``: Translation suggestions using the Microsoft Azure API. To use this service, you must first `register for the service <https://datamarket.azure.com/dataset/5BA839F1-12CE-4CCE-BF57-A49D98D29A44>`_, then specify the 'Customer ID' and 'Primary Account Key' respectively, which you can find on your `account information page on Azure Marketplace <https://datamarket.azure.com/account?lang=en>`_.
|
||||
* ``ROSETTA_MESSAGES_SOURCE_LANGUAGE_CODE`` and ``ROSETTA_MESSAGES_SOURCE_LANGUAGE_NAME``: Change these if the source language in your PO files isn't English. Default to ``'en'`` and ``'English'`` respectively.
|
||||
* ``ROSETTA_WSGI_AUTO_RELOAD`` and ``ROSETTA_UWSGI_AUTO_RELOAD``: When running WSGI daemon mode, using ``mod_wsgi`` 2.0c5 or later, this setting controls whether the contents of the gettext catalog files should be automatically reloaded by the WSGI processes each time they are modified. For performance reasons, this setting should be disabled in production environments. Default to ``False``.
|
||||
* ``ROSETTA_EXCLUDED_APPLICATIONS``: Exclude applications defined in this list from being translated. Defaults to ``()``.
|
||||
|
|
@ -63,19 +64,25 @@ Rosetta can be configured via the following parameters, to be defined in your pr
|
|||
* ``ROSETTA_STORAGE_CLASS``: See the note below on Storages. Defaults to ``rosetta.storage.CacheRosettaStorage``
|
||||
* ``ROSETTA_ENABLE_REFLANG``: See the note below on Reference Language. Defaults to ``False``.
|
||||
* ``ROSETTA_ACCESS_CONTROL_FUNCTION``: An alternative function that determines if a given user can access the translation views. This function receives a ``user`` as its argument, and returns a boolean specifying whether the passed user is allowed to use Rosetta or not.
|
||||
* ``ROSETTA_LANGUAGE_GROUPS``: Set to ``True`` to enable language-specific groups, which can be used to give different translators access to different languages. Instead of creating a global ``translators`` group, create individual per-language groups, e.g. ``translators-de``, ``translators-fr``, and assign users to these.
|
||||
* ``ROSETTA_CACHE_NAME``: When using ``rosetta.storage.CacheRosettaStorage``, you can store the rosetta data in a specific cache. This is particularly useful when your ``default`` cache is a ``django.core.cache.backends.dummy.DummyCache`` (which happens on pre-production environments). If unset, it will default to ``rosetta`` if a cache with this name exists, or ``default`` if not.
|
||||
* ``ROSETTA_POFILENAMES``: Defines which po filenames are exposed in the web interface. Defaults to ``('django.po', 'djangojs.po')``
|
||||
* ``ROSETTA_EXCLUDE_PATHS``: Exclude paths defined in this list from being searched (usually ends with "locale"). Defaults to ``()``
|
||||
|
||||
********
|
||||
Storages
|
||||
********
|
||||
|
||||
To prevent re-reading and parsing the PO file catalogs over and over again, Rosetta stores them in a volatile location. This can be either the HTTP session or the Django cache.
|
||||
To prevent re-reading and parsing the PO file catalogs over and over again, Rosetta stores them in a volatile location. This can be either the HTTP session or the Django cache.
|
||||
|
||||
Django 1.4 has introduced a signed cookie session backend, which stores the whole content of the session in an encrypted cookie. Unfortunately this doesn't work with large PO files, as the limit of 4096 chars that can be stored in a cookie are easily exceeded.
|
||||
Django 1.4 has introduced a signed cookie session backend, which stores the whole content of the session in an encrypted cookie. Unfortunately this doesn't work with large PO files, as the limit of 4096 chars that can be stored in a cookie are easily exceeded.
|
||||
|
||||
In this case the Cache-based backend should be used (by setting ``ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage'``). Please make sure that a proper CACHES backend is configured in your Django settings.
|
||||
In this case the Cache-based backend should be used (by setting ``ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage'``). Please make sure that a proper ``CACHES`` backend is configured in your Django settings if your Django app is being served in a multi-process environment, or the different server processes, serving subsequent requests, won't find the storage data left by previous requests.
|
||||
|
||||
Alternatively you can switch back to using the Session based storage by setting ``ROSETTA_STORAGE_CLASS = 'rosetta.storage.SessionRosettaStorage`` in your settings. This is perfectly safe on Django 1.3. On Django 1.4 or higher make sure you have DON'T use the `signed_cookies <https://docs.djangoproject.com/en/dev/topics/http/sessions/#using-cookie-based-sessions>`_ ``SESSION_BACKEND`` with this Rosetta storage backend or funky things might happen.
|
||||
|
||||
**TL;DR**: if you run Django with gunincorn, mod-wsgi or other multi-process environment, the Django-default ``CACHES`` ``LocMemCache`` backend won't suffice: use memcache instead, or you will run into issues.
|
||||
|
||||
********
|
||||
Security
|
||||
********
|
||||
|
|
@ -83,7 +90,7 @@ Security
|
|||
Because Rosetta requires write access to some of the files in your Django project, access to the application is restricted to the administrator user only (as defined in your project's Admin interface)
|
||||
|
||||
If you wish to grant editing access to other users:
|
||||
|
||||
|
||||
1. Create a 'translators' group in your admin interface
|
||||
2. Add the user you wish to grant translating rights to this group
|
||||
|
||||
|
|
@ -144,3 +151,6 @@ Acknowledgments
|
|||
|
||||
* Rosetta uses the excellent `polib <https://bitbucket.org/izi/polib>`_ library to parse and handle gettext files.
|
||||
|
||||
.. image:: https://d2weczhvl823v0.cloudfront.net/mbi/django-rosetta/trend.png
|
||||
:alt: Bitdeli badge
|
||||
:target: https://bitdeli.com/free
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
VERSION = (0, 7, 2)
|
||||
VERSION = (0, 7, 5)
|
||||
|
||||
|
||||
def get_version(svn=False, limit=3):
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
from django.conf import settings
|
||||
from rosetta.conf import settings as rosetta_settings
|
||||
|
||||
from django.utils import importlib
|
||||
|
||||
|
||||
|
|
@ -28,9 +30,15 @@ def is_superuser_staff_or_in_translators_group(user):
|
|||
elif user.is_superuser and user.is_staff:
|
||||
return True
|
||||
else:
|
||||
try:
|
||||
from django.contrib.auth.models import Group
|
||||
translators = Group.objects.get(name='translators')
|
||||
return translators in user.groups.all()
|
||||
except Group.DoesNotExist:
|
||||
return False
|
||||
return user.groups.filter(name='translators').exists()
|
||||
|
||||
|
||||
def can_translate_language(user, langid):
|
||||
if not rosetta_settings.ROSETTA_LANGUAGE_GROUPS:
|
||||
return can_translate(user)
|
||||
elif not user.is_authenticated():
|
||||
return False
|
||||
elif user.is_superuser and user.is_staff:
|
||||
return True
|
||||
else:
|
||||
return user.groups.filter(name='translators-%s' % langid).exists()
|
||||
|
|
|
|||
|
|
@ -6,8 +6,14 @@ MESSAGES_PER_PAGE = getattr(settings, 'ROSETTA_MESSAGES_PER_PAGE', 10)
|
|||
|
||||
# Enable Google translation suggestions
|
||||
ENABLE_TRANSLATION_SUGGESTIONS = getattr(settings, 'ROSETTA_ENABLE_TRANSLATION_SUGGESTIONS', False)
|
||||
|
||||
|
||||
# Can be obtained for free here: https://translate.yandex.com/apikeys
|
||||
YANDEX_TRANSLATE_KEY = getattr(settings, 'YANDEX_TRANSLATE_KEY', None)
|
||||
|
||||
# Can be obtained for free here: https://ssl.bing.com/webmaster/Developers/AppIds/
|
||||
BING_APP_ID = getattr(settings, 'BING_APP_ID', None)
|
||||
AZURE_CLIENT_ID = getattr(settings, 'AZURE_CLIENT_ID', None)
|
||||
AZURE_CLIENT_SECRET = getattr(settings, 'AZURE_CLIENT_SECRET', None)
|
||||
|
||||
# Displays this language beside the original MSGID in the admin
|
||||
MAIN_LANGUAGE = getattr(settings, 'ROSETTA_MAIN_LANGUAGE', None)
|
||||
|
|
@ -56,3 +62,23 @@ POFILE_WRAP_WIDTH = getattr(settings, 'ROSETTA_POFILE_WRAP_WIDTH', 78)
|
|||
STORAGE_CLASS = getattr(settings, 'ROSETTA_STORAGE_CLASS', 'rosetta.storage.CacheRosettaStorage')
|
||||
|
||||
ENABLE_REFLANG = getattr(settings, 'ROSETTA_ENABLE_REFLANG', False)
|
||||
|
||||
# Allow overriding of the default filenames, you mostly won't need to change this
|
||||
POFILENAMES = getattr(settings, 'ROSETTA_POFILENAMES', ('django.po', 'djangojs.po'))
|
||||
|
||||
ROSETTA_CACHE_NAME = getattr(settings, 'ROSETTA_CACHE_NAME', 'default'
|
||||
if settings.CACHES.get('rosetta', None) is None
|
||||
else 'rosetta')
|
||||
|
||||
# Require users to be authenticated (and Superusers or in group "translators").
|
||||
# Set this to False at your own risk
|
||||
ROSETTA_REQUIRES_AUTH = getattr(settings, 'ROSETTA_REQUIRES_AUTH', True)
|
||||
|
||||
# Exclude paths defined in this list from being searched (usually ends with "locale")
|
||||
ROSETTA_EXCLUDED_PATHS = getattr(settings, 'ROSETTA_EXCLUDED_PATHS', ())
|
||||
|
||||
# Set to True to enable language-specific groups, which can be used to give
|
||||
# different translators access to different languages. Instead of creating a
|
||||
# 'translators` group, create individual per-language groups, e.g.
|
||||
# 'translators-de', 'translators-fr', ...
|
||||
ROSETTA_LANGUAGE_GROUPS = getattr(settings, 'ROSETTA_LANGUAGE_GROUPS', False)
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -7,56 +7,83 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Rosetta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-07-04 13:42+0200\n"
|
||||
"POT-Creation-Date: 2014-02-28 13:36+0100\n"
|
||||
"PO-Revision-Date: 2008-09-12 12:16\n"
|
||||
"Last-Translator: <tomasz@napierala.org>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language-Team: cs <LL@li.org>\n"
|
||||
"Language: cs\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Translated-Using: django-rosetta 0.4.RC2\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
|
||||
#: templates/rosetta/languages.html:4 templates/rosetta/languages.html.py:6
|
||||
|
||||
#: templates/rosetta/languages.html:5 templates/rosetta/languages.html.py:8
|
||||
msgid "Language selection"
|
||||
msgstr "Výběr jazyka"
|
||||
|
||||
#: templates/rosetta/languages.html:6 templates/rosetta/pofile.html:18
|
||||
#: templates/rosetta/languages.html:8 templates/rosetta/pofile.html:22
|
||||
msgid "Home"
|
||||
msgstr "Domů"
|
||||
|
||||
#: templates/rosetta/languages.html:9
|
||||
msgid ""
|
||||
"Couldn't load the specified language file. This usually happens when using "
|
||||
"the Encrypted Cookies Session Storage backend on Django 1.4 or higher.<br/"
|
||||
">Setting ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage' in "
|
||||
"your settings file should fix this."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:15
|
||||
msgid "Filter"
|
||||
msgstr "Filtr"
|
||||
|
||||
#: templates/rosetta/languages.html:16
|
||||
msgid "Project"
|
||||
msgstr "Projekt"
|
||||
|
||||
#: templates/rosetta/languages.html:17
|
||||
msgid "Third party"
|
||||
msgstr "Třetích stran"
|
||||
|
||||
#: templates/rosetta/languages.html:19 templates/rosetta/pofile.html:39
|
||||
msgid "All"
|
||||
msgstr "Vše"
|
||||
|
||||
#: templates/rosetta/languages.html:32
|
||||
msgid "Application"
|
||||
msgstr "Aplikace"
|
||||
|
||||
#: templates/rosetta/languages.html:18
|
||||
#: templates/rosetta/languages.html:33
|
||||
msgid "Progress"
|
||||
msgstr "Hotovo"
|
||||
|
||||
#: templates/rosetta/languages.html:19
|
||||
#: templates/rosetta/languages.html:34
|
||||
msgid "Messages"
|
||||
msgstr "Textů"
|
||||
|
||||
#: templates/rosetta/languages.html:20
|
||||
#: templates/rosetta/languages.html:35
|
||||
msgid "Translated"
|
||||
msgstr "Přeloženo"
|
||||
|
||||
#: templates/rosetta/languages.html:21 templates/rosetta/pofile.html:57
|
||||
#: templates/rosetta/languages.html:36 templates/rosetta/pofile.html:61
|
||||
msgid "Fuzzy"
|
||||
msgstr ""
|
||||
msgstr "Nepřesné"
|
||||
|
||||
#: templates/rosetta/languages.html:22
|
||||
#: templates/rosetta/languages.html:37
|
||||
msgid "Obsolete"
|
||||
msgstr "Zastaralé"
|
||||
|
||||
#: templates/rosetta/languages.html:23
|
||||
#: templates/rosetta/languages.html:38
|
||||
msgid "File"
|
||||
msgstr "Soubor"
|
||||
|
||||
#: templates/rosetta/languages.html:44
|
||||
#: templates/rosetta/languages.html:61
|
||||
msgid "Nothing to translate!"
|
||||
msgstr "Nic k překladu!"
|
||||
|
||||
#: templates/rosetta/languages.html:45
|
||||
#: templates/rosetta/languages.html:62
|
||||
msgid ""
|
||||
"You haven't specified any languages in your settings file, or haven't yet "
|
||||
"generated a batch of translation catalogs."
|
||||
|
|
@ -65,111 +92,110 @@ msgstr ""
|
|||
"spuštěn proces překladu katalogů."
|
||||
|
||||
# python-format
|
||||
#: templates/rosetta/languages.html:46
|
||||
#: templates/rosetta/languages.html:63
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</"
|
||||
"a> for a guide on how to set up internationalization for your project."
|
||||
msgstr ""
|
||||
"Podívejte se prosím do <a href=\"%(i18n_doc_link)s\">Django dokumentace "
|
||||
"I18N </a>, kde naleznete podklady pro nastavení Vašeho vícejazyčného projektu."
|
||||
"Podívejte se prosím do <a href=\"%(i18n_doc_link)s\">Django dokumentace I18N "
|
||||
"</a>, kde naleznete podklady pro nastavení Vašeho vícejazyčného projektu."
|
||||
|
||||
#: templates/rosetta/pofile.html:8
|
||||
#: templates/rosetta/pofile.html:9
|
||||
msgid "Pick another file"
|
||||
msgstr "Vybrat jiný soubor"
|
||||
|
||||
#: templates/rosetta/pofile.html:9
|
||||
#: templates/rosetta/pofile.html:10
|
||||
msgid "Download this catalog"
|
||||
msgstr "Stáhnout tento katalog"
|
||||
|
||||
#: templates/rosetta/pofile.html:21
|
||||
msgid "Progress: %(percent_translated)s%"
|
||||
#: templates/rosetta/pofile.html:25
|
||||
#, fuzzy, python-format
|
||||
msgid "Progress: %(percent_translated)s%%"
|
||||
msgstr "Hotovo: %(percent_translated)s %"
|
||||
|
||||
#: templates/rosetta/pofile.html:23
|
||||
#: templates/rosetta/pofile.html:27
|
||||
msgid "File is read-only: download the file when done editing!"
|
||||
msgstr "Soubor je pouze pro čtení: pro dokončení úprav si soubor stáhněte!"
|
||||
|
||||
#: templates/rosetta/pofile.html:24
|
||||
#: templates/rosetta/pofile.html:28
|
||||
msgid ""
|
||||
"Some items in your last translation block couldn't be saved: this usually "
|
||||
"happens when the catalog file changes on disk after you last loaded it."
|
||||
msgstr "Některé z Vámi přeložených textových položek nebyly uloženy: důvodem je"
|
||||
", že Váš kolega Vám provedl pod rukami nějaké úpravy :-)."
|
||||
msgstr ""
|
||||
"Některé z Vámi přeložených textových položek nebyly uloženy: důvodem je, že "
|
||||
"Váš kolega Vám provedl pod rukami nějaké úpravy :-)."
|
||||
|
||||
#: templates/rosetta/pofile.html:28
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#, python-format
|
||||
msgid "Translate into %(rosetta_i18n_lang_name)s"
|
||||
msgstr "Překlad do %(rosetta_i18n_lang_name)s "
|
||||
|
||||
#: templates/rosetta/pofile.html:31
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "Display:"
|
||||
msgstr "Zobrazit:"
|
||||
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#: templates/rosetta/pofile.html:36
|
||||
msgid "Untranslated only"
|
||||
msgstr "Pouze nepřeložené"
|
||||
|
||||
#: templates/rosetta/pofile.html:33
|
||||
#: templates/rosetta/pofile.html:37
|
||||
msgid "Translated only"
|
||||
msgstr "Pouze přeložené"
|
||||
|
||||
#: templates/rosetta/pofile.html:34
|
||||
#: templates/rosetta/pofile.html:38
|
||||
msgid "Fuzzy only"
|
||||
msgstr "Pouze Fuzzy"
|
||||
msgstr "Pouze nepřesné"
|
||||
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "All"
|
||||
msgstr "Vše"
|
||||
|
||||
#: templates/rosetta/pofile.html:42
|
||||
#: templates/rosetta/pofile.html:46
|
||||
msgid "Search"
|
||||
msgstr "Hledat"
|
||||
|
||||
#: templates/rosetta/pofile.html:44
|
||||
#: templates/rosetta/pofile.html:48
|
||||
msgid "Go"
|
||||
msgstr "Hledat"
|
||||
|
||||
#: templates/rosetta/pofile.html:54
|
||||
msgid "Original"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:58
|
||||
msgid "Original"
|
||||
msgstr "Originál"
|
||||
|
||||
#: templates/rosetta/pofile.html:62
|
||||
msgid "Occurrences(s)"
|
||||
msgstr "Výskyt(y)"
|
||||
|
||||
#: templates/rosetta/pofile.html:82
|
||||
#: templates/rosetta/pofile.html:76 templates/rosetta/pofile.html.py:79
|
||||
#: templates/rosetta/pofile.html:94 templates/rosetta/pofile.html.py:97
|
||||
msgid "Context hint"
|
||||
msgstr "Nápověda"
|
||||
|
||||
#: templates/rosetta/pofile.html:104
|
||||
msgid "suggest"
|
||||
msgstr "navrhnout"
|
||||
|
||||
#: templates/rosetta/pofile.html:93
|
||||
#: templates/rosetta/pofile.html:115
|
||||
#, python-format
|
||||
msgid "%(more_count)s more"
|
||||
msgid_plural "%(more_count)s more"
|
||||
msgstr[0] "%(more_count)s více"
|
||||
msgstr[1] "%(more_count)s více"
|
||||
msgstr[0] "další %(more_count)s"
|
||||
msgstr[1] "další %(more_count)s"
|
||||
msgstr[2] "dalších %(more_count)s"
|
||||
|
||||
#: templates/rosetta/pofile.html:105
|
||||
#: templates/rosetta/pofile.html:127
|
||||
msgid "Save and translate next block"
|
||||
msgstr "Uložit a přeložit další část"
|
||||
|
||||
#: templates/rosetta/pofile.html:109
|
||||
#: templates/rosetta/pofile.html:131
|
||||
msgid "Skip to page:"
|
||||
msgstr "Přejít na stránku:"
|
||||
|
||||
#: templates/rosetta/pofile.html:122
|
||||
#: templates/rosetta/pofile.html:144
|
||||
msgid "Displaying:"
|
||||
msgstr "Zobrazeno:"
|
||||
|
||||
#: templates/rosetta/pofile.html:124
|
||||
#: templates/rosetta/pofile.html:148
|
||||
#, python-format
|
||||
msgid "%(hits)s/%(message_number)s message"
|
||||
msgid_plural "%(hits)s/%(message_number)s messages"
|
||||
msgstr[0] "%(hits)s/%(message_number)s text"
|
||||
msgstr[1] "%(hits)s/%(message_number)s textů"
|
||||
|
||||
#~ msgid "English"
|
||||
#~ msgstr "Anglicky"
|
||||
|
||||
#~ msgid "Both"
|
||||
#~ msgstr "Oba"
|
||||
msgstr[1] "%(hits)s/%(message_number)s texty"
|
||||
msgstr[2] "%(hits)s/%(message_number)s textů"
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -7,10 +7,11 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Rosetta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-07-04 13:42+0200\n"
|
||||
"POT-Creation-Date: 2014-02-28 13:36+0100\n"
|
||||
"PO-Revision-Date: 2008-06-16 10:11+0100\n"
|
||||
"Last-Translator: Martin Mahner <martin@mahner.org>\n"
|
||||
"Language-Team: patrick lauber <patrick.lauber@divio.ch>\n"
|
||||
"Language-Team: de patrick lauber <patrick.lauber@divio.ch>\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
@ -18,47 +19,71 @@ msgstr ""
|
|||
"X-Poedit-Language: German\n"
|
||||
"X-Poedit-Country: SWITZERLAND\n"
|
||||
|
||||
#: templates/rosetta/languages.html:4 templates/rosetta/languages.html.py:6
|
||||
#: templates/rosetta/languages.html:5 templates/rosetta/languages.html.py:8
|
||||
msgid "Language selection"
|
||||
msgstr "Sprachwahl"
|
||||
|
||||
#: templates/rosetta/languages.html:6 templates/rosetta/pofile.html:18
|
||||
#: templates/rosetta/languages.html:8 templates/rosetta/pofile.html:22
|
||||
msgid "Home"
|
||||
msgstr "Home"
|
||||
|
||||
#: templates/rosetta/languages.html:9
|
||||
msgid ""
|
||||
"Couldn't load the specified language file. This usually happens when using "
|
||||
"the Encrypted Cookies Session Storage backend on Django 1.4 or higher.<br/"
|
||||
">Setting ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage' in "
|
||||
"your settings file should fix this."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:15
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:16
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:17
|
||||
msgid "Third party"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:19 templates/rosetta/pofile.html:39
|
||||
msgid "All"
|
||||
msgstr "Alle"
|
||||
|
||||
#: templates/rosetta/languages.html:32
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:18
|
||||
#: templates/rosetta/languages.html:33
|
||||
msgid "Progress"
|
||||
msgstr "Fortschritt"
|
||||
|
||||
#: templates/rosetta/languages.html:19
|
||||
#: templates/rosetta/languages.html:34
|
||||
msgid "Messages"
|
||||
msgstr "Texte"
|
||||
|
||||
#: templates/rosetta/languages.html:20
|
||||
#: templates/rosetta/languages.html:35
|
||||
msgid "Translated"
|
||||
msgstr "Übersetzt"
|
||||
|
||||
#: templates/rosetta/languages.html:21 templates/rosetta/pofile.html:57
|
||||
#: templates/rosetta/languages.html:36 templates/rosetta/pofile.html:61
|
||||
msgid "Fuzzy"
|
||||
msgstr "Unscharf"
|
||||
|
||||
#: templates/rosetta/languages.html:22
|
||||
#: templates/rosetta/languages.html:37
|
||||
msgid "Obsolete"
|
||||
msgstr "Veraltet"
|
||||
|
||||
#: templates/rosetta/languages.html:23
|
||||
#: templates/rosetta/languages.html:38
|
||||
msgid "File"
|
||||
msgstr "Datei"
|
||||
|
||||
#: templates/rosetta/languages.html:44
|
||||
#: templates/rosetta/languages.html:61
|
||||
msgid "Nothing to translate!"
|
||||
msgstr "Nichts zu übersetzen!"
|
||||
|
||||
#: templates/rosetta/languages.html:45
|
||||
#: templates/rosetta/languages.html:62
|
||||
msgid ""
|
||||
"You haven't specified any languages in your settings file, or haven't yet "
|
||||
"generated a batch of translation catalogs."
|
||||
|
|
@ -67,7 +92,7 @@ msgstr ""
|
|||
"noch keine Übersetzungskataloge generiert."
|
||||
|
||||
# python-format
|
||||
#: templates/rosetta/languages.html:46
|
||||
#: templates/rosetta/languages.html:63
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</"
|
||||
|
|
@ -77,95 +102,97 @@ msgstr ""
|
|||
"Sie eine Anleitung, wie sie Internationalisierung in Ihrem Projekt "
|
||||
"einrichten."
|
||||
|
||||
#: templates/rosetta/pofile.html:8
|
||||
#: templates/rosetta/pofile.html:9
|
||||
msgid "Pick another file"
|
||||
msgstr "Wähle eine andere Datei"
|
||||
|
||||
#: templates/rosetta/pofile.html:9
|
||||
#: templates/rosetta/pofile.html:10
|
||||
msgid "Download this catalog"
|
||||
msgstr "Laden sie diesen Katalog herunter"
|
||||
|
||||
#: templates/rosetta/pofile.html:21
|
||||
msgid "Progress: %(percent_translated)s%"
|
||||
#: templates/rosetta/pofile.html:25
|
||||
#, fuzzy, python-format
|
||||
msgid "Progress: %(percent_translated)s%%"
|
||||
msgstr "Fortschritt: %(percent_translated)s%"
|
||||
|
||||
#: templates/rosetta/pofile.html:23
|
||||
#: templates/rosetta/pofile.html:27
|
||||
msgid "File is read-only: download the file when done editing!"
|
||||
msgstr ""
|
||||
"Datei ist schreibgeschützt: Laden Sie die Datei herunter wenn sie mit dem "
|
||||
"Editieren fertig sind!"
|
||||
|
||||
#: templates/rosetta/pofile.html:24
|
||||
#: templates/rosetta/pofile.html:28
|
||||
msgid ""
|
||||
"Some items in your last translation block couldn't be saved: this usually "
|
||||
"happens when the catalog file changes on disk after you last loaded it."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:28
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#, python-format
|
||||
msgid "Translate into %(rosetta_i18n_lang_name)s"
|
||||
msgstr "Übersetze in %(rosetta_i18n_lang_name)s"
|
||||
|
||||
#: templates/rosetta/pofile.html:31
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "Display:"
|
||||
msgstr "Anzeige:"
|
||||
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#: templates/rosetta/pofile.html:36
|
||||
msgid "Untranslated only"
|
||||
msgstr "Nur unübersetzte"
|
||||
|
||||
#: templates/rosetta/pofile.html:33
|
||||
#: templates/rosetta/pofile.html:37
|
||||
msgid "Translated only"
|
||||
msgstr "Nur übersetzte"
|
||||
|
||||
#: templates/rosetta/pofile.html:34
|
||||
#: templates/rosetta/pofile.html:38
|
||||
msgid "Fuzzy only"
|
||||
msgstr "Nur unscharfe"
|
||||
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "All"
|
||||
msgstr "Alle"
|
||||
|
||||
#: templates/rosetta/pofile.html:42
|
||||
#: templates/rosetta/pofile.html:46
|
||||
msgid "Search"
|
||||
msgstr "Suchen"
|
||||
|
||||
#: templates/rosetta/pofile.html:44
|
||||
#: templates/rosetta/pofile.html:48
|
||||
msgid "Go"
|
||||
msgstr "Los"
|
||||
|
||||
#: templates/rosetta/pofile.html:54
|
||||
#: templates/rosetta/pofile.html:58
|
||||
msgid "Original"
|
||||
msgstr "Original"
|
||||
|
||||
#: templates/rosetta/pofile.html:58
|
||||
#: templates/rosetta/pofile.html:62
|
||||
msgid "Occurrences(s)"
|
||||
msgstr "Gefunden in"
|
||||
|
||||
#: templates/rosetta/pofile.html:82
|
||||
#: templates/rosetta/pofile.html:76 templates/rosetta/pofile.html.py:79
|
||||
#: templates/rosetta/pofile.html:94 templates/rosetta/pofile.html.py:97
|
||||
msgid "Context hint"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:104
|
||||
msgid "suggest"
|
||||
msgstr "vorschlagen"
|
||||
|
||||
#: templates/rosetta/pofile.html:93
|
||||
#: templates/rosetta/pofile.html:115
|
||||
#, python-format
|
||||
msgid "%(more_count)s more"
|
||||
msgid_plural "%(more_count)s more"
|
||||
msgstr[0] "%(more_count)s mehr"
|
||||
msgstr[1] "%(more_count)s mehr"
|
||||
|
||||
#: templates/rosetta/pofile.html:105
|
||||
#: templates/rosetta/pofile.html:127
|
||||
msgid "Save and translate next block"
|
||||
msgstr "Speichern und nächsten Block übersetzen"
|
||||
|
||||
#: templates/rosetta/pofile.html:109
|
||||
#: templates/rosetta/pofile.html:131
|
||||
msgid "Skip to page:"
|
||||
msgstr "Zur Seite:"
|
||||
|
||||
#: templates/rosetta/pofile.html:122
|
||||
#: templates/rosetta/pofile.html:144
|
||||
msgid "Displaying:"
|
||||
msgstr "Anzeigen:"
|
||||
|
||||
#: templates/rosetta/pofile.html:124
|
||||
#: templates/rosetta/pofile.html:148
|
||||
#, python-format
|
||||
msgid "%(hits)s/%(message_number)s message"
|
||||
msgid_plural "%(hits)s/%(message_number)s messages"
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -5,58 +5,85 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Project-Id-Version: Django Rosetta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-07-04 13:42+0200\n"
|
||||
"POT-Creation-Date: 2014-02-28 13:36+0100\n"
|
||||
"PO-Revision-Date: 2008-11-30 12:12\n"
|
||||
"Last-Translator: <antonio.mele@django.es>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language-Team: es <LL@li.org>\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Translated-Using: django-rosetta 0.4.RC2\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: templates/rosetta/languages.html:4 templates/rosetta/languages.html.py:6
|
||||
|
||||
#: templates/rosetta/languages.html:5 templates/rosetta/languages.html.py:8
|
||||
msgid "Language selection"
|
||||
msgstr "Selección de idioma"
|
||||
|
||||
#: templates/rosetta/languages.html:6 templates/rosetta/pofile.html:18
|
||||
#: templates/rosetta/languages.html:8 templates/rosetta/pofile.html:22
|
||||
msgid "Home"
|
||||
msgstr "Inicio"
|
||||
|
||||
#: templates/rosetta/languages.html:9
|
||||
msgid ""
|
||||
"Couldn't load the specified language file. This usually happens when using "
|
||||
"the Encrypted Cookies Session Storage backend on Django 1.4 or higher.<br/"
|
||||
">Setting ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage' in "
|
||||
"your settings file should fix this."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:15
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:16
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:17
|
||||
msgid "Third party"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:19 templates/rosetta/pofile.html:39
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:32
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:18
|
||||
#: templates/rosetta/languages.html:33
|
||||
msgid "Progress"
|
||||
msgstr "Progreso"
|
||||
|
||||
#: templates/rosetta/languages.html:19
|
||||
#: templates/rosetta/languages.html:34
|
||||
msgid "Messages"
|
||||
msgstr "Mensajes"
|
||||
|
||||
#: templates/rosetta/languages.html:20
|
||||
#: templates/rosetta/languages.html:35
|
||||
msgid "Translated"
|
||||
msgstr "Traducido"
|
||||
|
||||
#: templates/rosetta/languages.html:21 templates/rosetta/pofile.html:57
|
||||
#: templates/rosetta/languages.html:36 templates/rosetta/pofile.html:61
|
||||
msgid "Fuzzy"
|
||||
msgstr "Revisar"
|
||||
|
||||
#: templates/rosetta/languages.html:22
|
||||
#: templates/rosetta/languages.html:37
|
||||
msgid "Obsolete"
|
||||
msgstr "Obsoleto"
|
||||
|
||||
#: templates/rosetta/languages.html:23
|
||||
#: templates/rosetta/languages.html:38
|
||||
msgid "File"
|
||||
msgstr "Archivo"
|
||||
|
||||
#: templates/rosetta/languages.html:44
|
||||
#: templates/rosetta/languages.html:61
|
||||
msgid "Nothing to translate!"
|
||||
msgstr "¡Nada que traducir!"
|
||||
|
||||
#: templates/rosetta/languages.html:45
|
||||
#: templates/rosetta/languages.html:62
|
||||
msgid ""
|
||||
"You haven't specified any languages in your settings file, or haven't yet "
|
||||
"generated a batch of translation catalogs."
|
||||
|
|
@ -64,7 +91,7 @@ msgstr ""
|
|||
"No has especificado ningún idioma en tu archivo de settings o no has "
|
||||
"generado todavía un batch para traducción de catálogos."
|
||||
|
||||
#: templates/rosetta/languages.html:46
|
||||
#: templates/rosetta/languages.html:63
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</"
|
||||
|
|
@ -74,95 +101,97 @@ msgstr ""
|
|||
"sobre I18N</a> para obtener una guía sobre cómo añadir internacionalización "
|
||||
"a tu proyecto."
|
||||
|
||||
#: templates/rosetta/pofile.html:8
|
||||
#: templates/rosetta/pofile.html:9
|
||||
msgid "Pick another file"
|
||||
msgstr "Selecciona otro archivo"
|
||||
|
||||
#: templates/rosetta/pofile.html:9
|
||||
#: templates/rosetta/pofile.html:10
|
||||
msgid "Download this catalog"
|
||||
msgstr "Descarga este catálogo"
|
||||
|
||||
#: templates/rosetta/pofile.html:21
|
||||
msgid "Progress: %(percent_translated)s%"
|
||||
#: templates/rosetta/pofile.html:25
|
||||
#, fuzzy, python-format
|
||||
msgid "Progress: %(percent_translated)s%%"
|
||||
msgstr "Progreso: %(percent_translated)s%"
|
||||
|
||||
#: templates/rosetta/pofile.html:23
|
||||
#: templates/rosetta/pofile.html:27
|
||||
msgid "File is read-only: download the file when done editing!"
|
||||
msgstr ""
|
||||
"El archivo está en modo lectura: ¡Descarga el archivo cuando termines de "
|
||||
"editarlo!"
|
||||
|
||||
#: templates/rosetta/pofile.html:24
|
||||
#: templates/rosetta/pofile.html:28
|
||||
msgid ""
|
||||
"Some items in your last translation block couldn't be saved: this usually "
|
||||
"happens when the catalog file changes on disk after you last loaded it."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:28
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#, python-format
|
||||
msgid "Translate into %(rosetta_i18n_lang_name)s"
|
||||
msgstr "Traducir al %(rosetta_i18n_lang_name)s "
|
||||
|
||||
#: templates/rosetta/pofile.html:31
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "Display:"
|
||||
msgstr "Pantalla:"
|
||||
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#: templates/rosetta/pofile.html:36
|
||||
msgid "Untranslated only"
|
||||
msgstr "Sin traducir sólo"
|
||||
|
||||
#: templates/rosetta/pofile.html:33
|
||||
#: templates/rosetta/pofile.html:37
|
||||
msgid "Translated only"
|
||||
msgstr "Traducidos sólo"
|
||||
|
||||
#: templates/rosetta/pofile.html:34
|
||||
#: templates/rosetta/pofile.html:38
|
||||
msgid "Fuzzy only"
|
||||
msgstr "Vellosos sólo"
|
||||
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:42
|
||||
#: templates/rosetta/pofile.html:46
|
||||
msgid "Search"
|
||||
msgstr "Búsqueda"
|
||||
|
||||
#: templates/rosetta/pofile.html:44
|
||||
#: templates/rosetta/pofile.html:48
|
||||
msgid "Go"
|
||||
msgstr "Ir"
|
||||
|
||||
#: templates/rosetta/pofile.html:54
|
||||
#: templates/rosetta/pofile.html:58
|
||||
msgid "Original"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:58
|
||||
#: templates/rosetta/pofile.html:62
|
||||
msgid "Occurrences(s)"
|
||||
msgstr "Ocurrencia(s)"
|
||||
|
||||
#: templates/rosetta/pofile.html:82
|
||||
#: templates/rosetta/pofile.html:76 templates/rosetta/pofile.html.py:79
|
||||
#: templates/rosetta/pofile.html:94 templates/rosetta/pofile.html.py:97
|
||||
msgid "Context hint"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:104
|
||||
msgid "suggest"
|
||||
msgstr "sugerir"
|
||||
|
||||
#: templates/rosetta/pofile.html:93
|
||||
#: templates/rosetta/pofile.html:115
|
||||
#, python-format
|
||||
msgid "%(more_count)s more"
|
||||
msgid_plural "%(more_count)s more"
|
||||
msgstr[0] "%(more_count)s más"
|
||||
msgstr[1] "%(more_count)s más"
|
||||
|
||||
#: templates/rosetta/pofile.html:105
|
||||
#: templates/rosetta/pofile.html:127
|
||||
msgid "Save and translate next block"
|
||||
msgstr "Guardar y traducir siguiente bloque"
|
||||
|
||||
#: templates/rosetta/pofile.html:109
|
||||
#: templates/rosetta/pofile.html:131
|
||||
msgid "Skip to page:"
|
||||
msgstr "Ir a la página:"
|
||||
|
||||
#: templates/rosetta/pofile.html:122
|
||||
#: templates/rosetta/pofile.html:144
|
||||
msgid "Displaying:"
|
||||
msgstr "Mostrando:"
|
||||
|
||||
#: templates/rosetta/pofile.html:124
|
||||
#: templates/rosetta/pofile.html:148
|
||||
#, python-format
|
||||
msgid "%(hits)s/%(message_number)s message"
|
||||
msgid_plural "%(hits)s/%(message_number)s messages"
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -2,20 +2,19 @@
|
|||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Project-Id-Version: Django Rosetta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-04-01 18:36+0430\n"
|
||||
"POT-Creation-Date: 2014-02-28 13:36+0100\n"
|
||||
"PO-Revision-Date: 2013-04-01 19:03+0430\n"
|
||||
"Last-Translator: <admin@arsh.co>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language-Team: fa <LL@li.org>\n"
|
||||
"Language: fa\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: \n"
|
||||
"Plural-Forms: nplurals=1; plural=0\n"
|
||||
"X-Translated-Using: django-rosetta 0.7.1\n"
|
||||
|
||||
|
|
@ -30,14 +29,14 @@ msgstr "خانه"
|
|||
#: templates/rosetta/languages.html:9
|
||||
msgid ""
|
||||
"Couldn't load the specified language file. This usually happens when using "
|
||||
"the Encrypted Cookies Session Storage backend on Django 1.4 or "
|
||||
"higher.<br/>Setting ROSETTA_STORAGE_CLASS = "
|
||||
"'rosetta.storage.CacheRosettaStorage' in your settings file should fix this."
|
||||
"the Encrypted Cookies Session Storage backend on Django 1.4 or higher.<br/"
|
||||
">Setting ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage' in "
|
||||
"your settings file should fix this."
|
||||
msgstr ""
|
||||
"بارگزاری کاتالوگ زبان مورد نظر ممکن نبود. این مشکل معمولا به خاطر استفاده از"
|
||||
" Encrypted Cookies Session Storage backend در جنگو ۱.۴ یا بالاتر رخ "
|
||||
"میدهد.<br/>با افزودن خط زیر به فایل تنظیمات پروژه معمولا این مشکل را حل "
|
||||
"میکند:<br/>ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage'"
|
||||
"بارگزاری کاتالوگ زبان مورد نظر ممکن نبود. این مشکل معمولا به خاطر استفاده از "
|
||||
"Encrypted Cookies Session Storage backend در جنگو ۱.۴ یا بالاتر رخ میدهد.<br/"
|
||||
">با افزودن خط زیر به فایل تنظیمات پروژه معمولا این مشکل را حل میکند:<br/"
|
||||
">ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage'"
|
||||
|
||||
#: templates/rosetta/languages.html:15
|
||||
msgid "Filter"
|
||||
|
|
@ -71,7 +70,7 @@ msgstr "پیامها"
|
|||
msgid "Translated"
|
||||
msgstr "ترجمه شده"
|
||||
|
||||
#: templates/rosetta/languages.html:36 templates/rosetta/pofile.html:71
|
||||
#: templates/rosetta/languages.html:36 templates/rosetta/pofile.html:61
|
||||
msgid "Fuzzy"
|
||||
msgstr "نیاز به بازبینی"
|
||||
|
||||
|
|
@ -92,19 +91,18 @@ msgid ""
|
|||
"You haven't specified any languages in your settings file, or haven't yet "
|
||||
"generated a batch of translation catalogs."
|
||||
msgstr ""
|
||||
"شما زبانی را در فایل تنظیمات تعیین نکردید، یا هنوز کاتالوگهای ترجمه را "
|
||||
"ایجاد نکردید."
|
||||
"شما زبانی را در فایل تنظیمات تعیین نکردید، یا هنوز کاتالوگهای ترجمه را ایجاد "
|
||||
"نکردید."
|
||||
|
||||
#: templates/rosetta/languages.html:63
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N "
|
||||
"documentation</a> for a guide on how to set up internationalization for your"
|
||||
" project."
|
||||
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</"
|
||||
"a> for a guide on how to set up internationalization for your project."
|
||||
msgstr ""
|
||||
"لطفا به <a href=\"%(i18n_doc_link)s\">مستندات جهانیسازی جنگو "
|
||||
"documentation</a> برای راهنما در مورد روش راهاندازی امکانات جهانیسازی برای"
|
||||
" پروژهتان مراجعه کنید."
|
||||
"لطفا به <a href=\"%(i18n_doc_link)s\">مستندات جهانیسازی جنگو documentation</"
|
||||
"a> برای راهنما در مورد روش راهاندازی امکانات جهانیسازی برای پروژهتان مراجعه "
|
||||
"کنید."
|
||||
|
||||
#: templates/rosetta/pofile.html:9
|
||||
msgid "Pick another file"
|
||||
|
|
@ -162,45 +160,45 @@ msgstr "جستجو"
|
|||
msgid "Go"
|
||||
msgstr "برو"
|
||||
|
||||
#: templates/rosetta/pofile.html:68
|
||||
#: templates/rosetta/pofile.html:58
|
||||
msgid "Original"
|
||||
msgstr "اصلی"
|
||||
|
||||
#: templates/rosetta/pofile.html:72
|
||||
#: templates/rosetta/pofile.html:62
|
||||
msgid "Occurrences(s)"
|
||||
msgstr "موارد رخداد"
|
||||
|
||||
#: templates/rosetta/pofile.html:86 templates/rosetta/pofile.html.py:89
|
||||
#: templates/rosetta/pofile.html:104 templates/rosetta/pofile.html.py:107
|
||||
#: templates/rosetta/pofile.html:76 templates/rosetta/pofile.html.py:79
|
||||
#: templates/rosetta/pofile.html:94 templates/rosetta/pofile.html.py:97
|
||||
msgid "Context hint"
|
||||
msgstr "راهنمای محلی"
|
||||
|
||||
#: templates/rosetta/pofile.html:114
|
||||
#: templates/rosetta/pofile.html:104
|
||||
msgid "suggest"
|
||||
msgstr "پیشنهاد"
|
||||
|
||||
#: templates/rosetta/pofile.html:125
|
||||
#: templates/rosetta/pofile.html:115
|
||||
#, python-format
|
||||
msgid "%(more_count)s more"
|
||||
msgid_plural "%(more_count)s more"
|
||||
msgstr[0] "%(more_count)s مورد بیشتر"
|
||||
msgstr[1] "%(more_count)s مورد بیشتر"
|
||||
|
||||
#: templates/rosetta/pofile.html:137
|
||||
|
||||
#: templates/rosetta/pofile.html:127
|
||||
msgid "Save and translate next block"
|
||||
msgstr "ذخیره و ترجمهی دستهی بعدی"
|
||||
|
||||
#: templates/rosetta/pofile.html:141
|
||||
#: templates/rosetta/pofile.html:131
|
||||
msgid "Skip to page:"
|
||||
msgstr "پرش به صفحه:"
|
||||
|
||||
#: templates/rosetta/pofile.html:154
|
||||
#: templates/rosetta/pofile.html:144
|
||||
msgid "Displaying:"
|
||||
msgstr "در حال نمایش:"
|
||||
|
||||
#: templates/rosetta/pofile.html:158
|
||||
#: templates/rosetta/pofile.html:148
|
||||
#, python-format
|
||||
msgid "%(hits)s/%(message_number)s message"
|
||||
msgid_plural "%(hits)s/%(message_number)s messages"
|
||||
msgstr[0] "%(hits)s از %(message_number)s پیام"
|
||||
msgstr[1] "%(hits)s از %(message_number)s پیام"
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -2,77 +2,88 @@
|
|||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Rosetta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-04-05 15:09+0200\n"
|
||||
"POT-Creation-Date: 2014-02-28 13:36+0100\n"
|
||||
"PO-Revision-Date: 2008-09-22 11:02\n"
|
||||
"Last-Translator: Admin Admin <admin@admin.com>\n"
|
||||
"Language-Team: French <LL@li.org>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Translated-Using: django-rosetta 0.6.7\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: templates/rosetta/languages.html:4 templates/rosetta/languages.html.py:6
|
||||
|
||||
#: templates/rosetta/languages.html:5 templates/rosetta/languages.html.py:8
|
||||
msgid "Language selection"
|
||||
msgstr "Sélection de la langue"
|
||||
|
||||
#: templates/rosetta/languages.html:6 templates/rosetta/pofile.html:21
|
||||
#: templates/rosetta/languages.html:8 templates/rosetta/pofile.html:22
|
||||
msgid "Home"
|
||||
msgstr "Accueil"
|
||||
|
||||
#: templates/rosetta/languages.html:11
|
||||
#: templates/rosetta/languages.html:9
|
||||
msgid ""
|
||||
"Couldn't load the specified language file. This usually happens when using "
|
||||
"the Encrypted Cookies Session Storage backend on Django 1.4 or higher.<br/"
|
||||
">Setting ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage' in "
|
||||
"your settings file should fix this."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:15
|
||||
msgid "Filter"
|
||||
msgstr "Filtrer"
|
||||
|
||||
#: templates/rosetta/languages.html:12
|
||||
#: templates/rosetta/languages.html:16
|
||||
msgid "Project"
|
||||
msgstr "Projet"
|
||||
|
||||
#: templates/rosetta/languages.html:13
|
||||
#: templates/rosetta/languages.html:17
|
||||
msgid "Third party"
|
||||
msgstr "Tiers"
|
||||
|
||||
#: templates/rosetta/languages.html:15 templates/rosetta/pofile.html:38
|
||||
#: templates/rosetta/languages.html:19 templates/rosetta/pofile.html:39
|
||||
msgid "All"
|
||||
msgstr "Tous"
|
||||
|
||||
#: templates/rosetta/languages.html:28
|
||||
#: templates/rosetta/languages.html:32
|
||||
msgid "Application"
|
||||
msgstr "Application"
|
||||
|
||||
#: templates/rosetta/languages.html:29
|
||||
#: templates/rosetta/languages.html:33
|
||||
msgid "Progress"
|
||||
msgstr "Progression"
|
||||
|
||||
#: templates/rosetta/languages.html:30
|
||||
#: templates/rosetta/languages.html:34
|
||||
msgid "Messages"
|
||||
msgstr "Messages"
|
||||
|
||||
#: templates/rosetta/languages.html:31
|
||||
#: templates/rosetta/languages.html:35
|
||||
msgid "Translated"
|
||||
msgstr "Traduits"
|
||||
|
||||
#: templates/rosetta/languages.html:32 templates/rosetta/pofile.html:70
|
||||
#: templates/rosetta/languages.html:36 templates/rosetta/pofile.html:61
|
||||
msgid "Fuzzy"
|
||||
msgstr "Flous"
|
||||
|
||||
#: templates/rosetta/languages.html:33
|
||||
#: templates/rosetta/languages.html:37
|
||||
msgid "Obsolete"
|
||||
msgstr "Obsolètes"
|
||||
|
||||
#: templates/rosetta/languages.html:34
|
||||
#: templates/rosetta/languages.html:38
|
||||
msgid "File"
|
||||
msgstr "Fichier"
|
||||
|
||||
#: templates/rosetta/languages.html:57
|
||||
#: templates/rosetta/languages.html:61
|
||||
msgid "Nothing to translate!"
|
||||
msgstr "Rien à Traduire!"
|
||||
|
||||
#: templates/rosetta/languages.html:58
|
||||
#: templates/rosetta/languages.html:62
|
||||
msgid ""
|
||||
"You haven't specified any languages in your settings file, or haven't yet "
|
||||
"generated a batch of translation catalogs."
|
||||
|
|
@ -82,110 +93,109 @@ msgstr ""
|
|||
"projet."
|
||||
|
||||
# python-format
|
||||
#: templates/rosetta/languages.html:59
|
||||
#: templates/rosetta/languages.html:63
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N "
|
||||
"documentation</a> for a guide on how to set up internationalization for your"
|
||||
" project."
|
||||
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</"
|
||||
"a> for a guide on how to set up internationalization for your project."
|
||||
msgstr ""
|
||||
"Veuillez vous référer à la <a href=\"%(i18n_doc_link)s\">documentation sur "
|
||||
"l'internationalisation de Django</a> pour un guide sur comment activer et "
|
||||
"configurer la traduction de votre projet."
|
||||
|
||||
#: templates/rosetta/pofile.html:8
|
||||
#: templates/rosetta/pofile.html:9
|
||||
msgid "Pick another file"
|
||||
msgstr "Choisir un autre fichier"
|
||||
|
||||
#: templates/rosetta/pofile.html:9
|
||||
#: templates/rosetta/pofile.html:10
|
||||
msgid "Download this catalog"
|
||||
msgstr "Télécharger ce catalogue"
|
||||
|
||||
#: templates/rosetta/pofile.html:24
|
||||
#: templates/rosetta/pofile.html:25
|
||||
#, python-format
|
||||
msgid "Progress: %(percent_translated)s%%"
|
||||
msgstr "Progression: %(percent_translated)s%%"
|
||||
|
||||
#: templates/rosetta/pofile.html:26
|
||||
#: templates/rosetta/pofile.html:27
|
||||
msgid "File is read-only: download the file when done editing!"
|
||||
msgstr ""
|
||||
"Fichier en seule lecture: télécharger le fichier à la fin de l'édition!"
|
||||
|
||||
#: templates/rosetta/pofile.html:27
|
||||
#: templates/rosetta/pofile.html:28
|
||||
msgid ""
|
||||
"Some items in your last translation block couldn't be saved: this usually "
|
||||
"happens when the catalog file changes on disk after you last loaded it."
|
||||
msgstr ""
|
||||
"Certains parmi vos derniers éléments n'ont pas pu être sauvés: ceci arrive "
|
||||
"généralement quand le catalogue de traductions à été modifié après qu'il ait"
|
||||
" été chargé."
|
||||
"généralement quand le catalogue de traductions à été modifié après qu'il ait "
|
||||
"été chargé."
|
||||
|
||||
#: templates/rosetta/pofile.html:31
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#, python-format
|
||||
msgid "Translate into %(rosetta_i18n_lang_name)s"
|
||||
msgstr "Traduire en %(rosetta_i18n_lang_name)s"
|
||||
|
||||
#: templates/rosetta/pofile.html:34
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "Display:"
|
||||
msgstr "Afficher:"
|
||||
|
||||
#: templates/rosetta/pofile.html:35
|
||||
#: templates/rosetta/pofile.html:36
|
||||
msgid "Untranslated only"
|
||||
msgstr "Non-traduits uniquement"
|
||||
|
||||
#: templates/rosetta/pofile.html:36
|
||||
#: templates/rosetta/pofile.html:37
|
||||
msgid "Translated only"
|
||||
msgstr "Traduits uniquement"
|
||||
|
||||
#: templates/rosetta/pofile.html:37
|
||||
#: templates/rosetta/pofile.html:38
|
||||
msgid "Fuzzy only"
|
||||
msgstr "Flous uniquement"
|
||||
|
||||
#: templates/rosetta/pofile.html:45
|
||||
#: templates/rosetta/pofile.html:46
|
||||
msgid "Search"
|
||||
msgstr "Recherche"
|
||||
|
||||
#: templates/rosetta/pofile.html:47
|
||||
#: templates/rosetta/pofile.html:48
|
||||
msgid "Go"
|
||||
msgstr "Go"
|
||||
|
||||
#: templates/rosetta/pofile.html:67
|
||||
#: templates/rosetta/pofile.html:58
|
||||
msgid "Original"
|
||||
msgstr "Original"
|
||||
|
||||
#: templates/rosetta/pofile.html:71
|
||||
#: templates/rosetta/pofile.html:62
|
||||
msgid "Occurrences(s)"
|
||||
msgstr "Occurrences(s)"
|
||||
|
||||
#: templates/rosetta/pofile.html:85 templates/rosetta/pofile.html.py:88
|
||||
#: templates/rosetta/pofile.html:103 templates/rosetta/pofile.html.py:106
|
||||
#: templates/rosetta/pofile.html:76 templates/rosetta/pofile.html.py:79
|
||||
#: templates/rosetta/pofile.html:94 templates/rosetta/pofile.html.py:97
|
||||
msgid "Context hint"
|
||||
msgstr "Indice contextuel"
|
||||
|
||||
#: templates/rosetta/pofile.html:113
|
||||
#: templates/rosetta/pofile.html:104
|
||||
msgid "suggest"
|
||||
msgstr "suggérer"
|
||||
|
||||
#: templates/rosetta/pofile.html:124
|
||||
#: templates/rosetta/pofile.html:115
|
||||
#, python-format
|
||||
msgid "%(more_count)s more"
|
||||
msgid_plural "%(more_count)s more"
|
||||
msgstr[0] "%(more_count)s de plus"
|
||||
msgstr[1] "%(more_count)s de plus"
|
||||
|
||||
#: templates/rosetta/pofile.html:136
|
||||
#: templates/rosetta/pofile.html:127
|
||||
msgid "Save and translate next block"
|
||||
msgstr "Sauver et traduire le prochain bloc"
|
||||
|
||||
#: templates/rosetta/pofile.html:140
|
||||
#: templates/rosetta/pofile.html:131
|
||||
msgid "Skip to page:"
|
||||
msgstr "Passer à la page:"
|
||||
|
||||
#: templates/rosetta/pofile.html:153
|
||||
#: templates/rosetta/pofile.html:144
|
||||
msgid "Displaying:"
|
||||
msgstr "Affichés:"
|
||||
|
||||
#: templates/rosetta/pofile.html:157
|
||||
#: templates/rosetta/pofile.html:148
|
||||
#, python-format
|
||||
msgid "%(hits)s/%(message_number)s message"
|
||||
msgid_plural "%(hits)s/%(message_number)s messages"
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -5,57 +5,82 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Rosetta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-07-04 13:42+0200\n"
|
||||
"POT-Creation-Date: 2014-02-28 13:36+0100\n"
|
||||
"PO-Revision-Date: 2008-10-09 19:08+0100\n"
|
||||
"Last-Translator: Gergely Kontra <pihentagy@yahoo.com>\n"
|
||||
"Language-Team: nomail <hu@example.org>\n"
|
||||
"Language-Team: hu <hu@example.org>\n"
|
||||
"Language: hu\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Translated-Using: django-rosetta 0.4.RC2\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#: templates/rosetta/languages.html:4 templates/rosetta/languages.html.py:6
|
||||
#: templates/rosetta/languages.html:5 templates/rosetta/languages.html.py:8
|
||||
msgid "Language selection"
|
||||
msgstr "Nyelvválasztás"
|
||||
|
||||
#: templates/rosetta/languages.html:6 templates/rosetta/pofile.html:18
|
||||
#: templates/rosetta/languages.html:8 templates/rosetta/pofile.html:22
|
||||
msgid "Home"
|
||||
msgstr "Főoldal"
|
||||
|
||||
#: templates/rosetta/languages.html:9
|
||||
msgid ""
|
||||
"Couldn't load the specified language file. This usually happens when using "
|
||||
"the Encrypted Cookies Session Storage backend on Django 1.4 or higher.<br/"
|
||||
">Setting ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage' in "
|
||||
"your settings file should fix this."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:15
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:16
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:17
|
||||
msgid "Third party"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:19 templates/rosetta/pofile.html:39
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:32
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:18
|
||||
#: templates/rosetta/languages.html:33
|
||||
msgid "Progress"
|
||||
msgstr "Állapot"
|
||||
|
||||
#: templates/rosetta/languages.html:19
|
||||
#: templates/rosetta/languages.html:34
|
||||
msgid "Messages"
|
||||
msgstr "Üzenet"
|
||||
|
||||
#: templates/rosetta/languages.html:20
|
||||
#: templates/rosetta/languages.html:35
|
||||
msgid "Translated"
|
||||
msgstr "Lefordítva"
|
||||
|
||||
#: templates/rosetta/languages.html:21 templates/rosetta/pofile.html:57
|
||||
#: templates/rosetta/languages.html:36 templates/rosetta/pofile.html:61
|
||||
msgid "Fuzzy"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:22
|
||||
#: templates/rosetta/languages.html:37
|
||||
msgid "Obsolete"
|
||||
msgstr "Elavult"
|
||||
|
||||
#: templates/rosetta/languages.html:23
|
||||
#: templates/rosetta/languages.html:38
|
||||
msgid "File"
|
||||
msgstr "Fájl"
|
||||
|
||||
#: templates/rosetta/languages.html:44
|
||||
#: templates/rosetta/languages.html:61
|
||||
msgid "Nothing to translate!"
|
||||
msgstr "Nincs mit fordítani!"
|
||||
|
||||
#: templates/rosetta/languages.html:45
|
||||
#: templates/rosetta/languages.html:62
|
||||
msgid ""
|
||||
"You haven't specified any languages in your settings file, or haven't yet "
|
||||
"generated a batch of translation catalogs."
|
||||
|
|
@ -63,7 +88,7 @@ msgstr ""
|
|||
"Nincs beállítva egyetlen nyelv sem van nem hozott létre egy fordítási "
|
||||
"katalóguskoteget."
|
||||
|
||||
#: templates/rosetta/languages.html:46
|
||||
#: templates/rosetta/languages.html:63
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</"
|
||||
|
|
@ -72,92 +97,94 @@ msgstr ""
|
|||
"Projekted többnyelvűvé alakításához lásd a <a href=\"%(i18n_doc_link)s"
|
||||
"\">Django I18N dokumentációt</a>!"
|
||||
|
||||
#: templates/rosetta/pofile.html:8
|
||||
#: templates/rosetta/pofile.html:9
|
||||
msgid "Pick another file"
|
||||
msgstr "Másik fájl választása"
|
||||
|
||||
#: templates/rosetta/pofile.html:9
|
||||
#: templates/rosetta/pofile.html:10
|
||||
msgid "Download this catalog"
|
||||
msgstr "Katalógus letöltése"
|
||||
|
||||
#: templates/rosetta/pofile.html:21
|
||||
msgid "Progress: %(percent_translated)s%"
|
||||
#: templates/rosetta/pofile.html:25
|
||||
#, fuzzy, python-format
|
||||
msgid "Progress: %(percent_translated)s%%"
|
||||
msgstr "%(percent_translated)s% kész"
|
||||
|
||||
#: templates/rosetta/pofile.html:23
|
||||
#: templates/rosetta/pofile.html:27
|
||||
msgid "File is read-only: download the file when done editing!"
|
||||
msgstr "A fájl írásvédett: töltse le a katalógust, ha végzett!"
|
||||
|
||||
#: templates/rosetta/pofile.html:24
|
||||
#: templates/rosetta/pofile.html:28
|
||||
msgid ""
|
||||
"Some items in your last translation block couldn't be saved: this usually "
|
||||
"happens when the catalog file changes on disk after you last loaded it."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:28
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#, python-format
|
||||
msgid "Translate into %(rosetta_i18n_lang_name)s"
|
||||
msgstr "Fordítsa %(rosetta_i18n_lang_name)s nyelvre"
|
||||
|
||||
#: templates/rosetta/pofile.html:31
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "Display:"
|
||||
msgstr "Szűrés:"
|
||||
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#: templates/rosetta/pofile.html:36
|
||||
msgid "Untranslated only"
|
||||
msgstr "Fordításra vár"
|
||||
|
||||
#: templates/rosetta/pofile.html:33
|
||||
#: templates/rosetta/pofile.html:37
|
||||
msgid "Translated only"
|
||||
msgstr "Lefordított"
|
||||
|
||||
#: templates/rosetta/pofile.html:34
|
||||
#: templates/rosetta/pofile.html:38
|
||||
msgid "Fuzzy only"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:42
|
||||
#: templates/rosetta/pofile.html:46
|
||||
msgid "Search"
|
||||
msgstr "Keresés"
|
||||
|
||||
#: templates/rosetta/pofile.html:44
|
||||
#: templates/rosetta/pofile.html:48
|
||||
msgid "Go"
|
||||
msgstr "Keress"
|
||||
|
||||
#: templates/rosetta/pofile.html:54
|
||||
#: templates/rosetta/pofile.html:58
|
||||
msgid "Original"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:58
|
||||
#: templates/rosetta/pofile.html:62
|
||||
msgid "Occurrences(s)"
|
||||
msgstr "Előfordulások"
|
||||
|
||||
#: templates/rosetta/pofile.html:82
|
||||
#: templates/rosetta/pofile.html:76 templates/rosetta/pofile.html.py:79
|
||||
#: templates/rosetta/pofile.html:94 templates/rosetta/pofile.html.py:97
|
||||
msgid "Context hint"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:104
|
||||
msgid "suggest"
|
||||
msgstr "ajánl"
|
||||
|
||||
#: templates/rosetta/pofile.html:93
|
||||
#: templates/rosetta/pofile.html:115
|
||||
#, fuzzy, python-format
|
||||
msgid "%(more_count)s more"
|
||||
msgid_plural "%(more_count)s more"
|
||||
msgstr[0] "még %(more_count)s"
|
||||
|
||||
#: templates/rosetta/pofile.html:105
|
||||
#: templates/rosetta/pofile.html:127
|
||||
msgid "Save and translate next block"
|
||||
msgstr "Mentés"
|
||||
|
||||
#: templates/rosetta/pofile.html:109
|
||||
#: templates/rosetta/pofile.html:131
|
||||
msgid "Skip to page:"
|
||||
msgstr "Ugorj erre az oldalra:"
|
||||
|
||||
#: templates/rosetta/pofile.html:122
|
||||
#: templates/rosetta/pofile.html:144
|
||||
msgid "Displaying:"
|
||||
msgstr "Szűrés:"
|
||||
|
||||
#: templates/rosetta/pofile.html:124
|
||||
#: templates/rosetta/pofile.html:148
|
||||
#, fuzzy, python-format
|
||||
msgid "%(hits)s/%(message_number)s message"
|
||||
msgid_plural "%(hits)s/%(message_number)s messages"
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -7,54 +7,81 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Rosetta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-07-04 13:42+0200\n"
|
||||
"POT-Creation-Date: 2014-02-28 13:36+0100\n"
|
||||
"PO-Revision-Date: 2010-07-04 13:42+0200\n"
|
||||
"Last-Translator: Marco Bonetti <mbi@mbi.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language-Team: it <mbi@mbi.com>\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: templates/rosetta/languages.html:4 templates/rosetta/languages.html.py:6
|
||||
#: templates/rosetta/languages.html:5 templates/rosetta/languages.html.py:8
|
||||
msgid "Language selection"
|
||||
msgstr "Selezione della lingua"
|
||||
|
||||
#: templates/rosetta/languages.html:6 templates/rosetta/pofile.html:18
|
||||
#: templates/rosetta/languages.html:8 templates/rosetta/pofile.html:22
|
||||
msgid "Home"
|
||||
msgstr "Inizio"
|
||||
|
||||
#: templates/rosetta/languages.html:9
|
||||
msgid ""
|
||||
"Couldn't load the specified language file. This usually happens when using "
|
||||
"the Encrypted Cookies Session Storage backend on Django 1.4 or higher.<br/"
|
||||
">Setting ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage' in "
|
||||
"your settings file should fix this."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:15
|
||||
msgid "Filter"
|
||||
msgstr "Filtro"
|
||||
|
||||
#: templates/rosetta/languages.html:16
|
||||
msgid "Project"
|
||||
msgstr "Progetto"
|
||||
|
||||
#: templates/rosetta/languages.html:17
|
||||
msgid "Third party"
|
||||
msgstr "Altro"
|
||||
|
||||
#: templates/rosetta/languages.html:19 templates/rosetta/pofile.html:39
|
||||
msgid "All"
|
||||
msgstr "Tutti"
|
||||
|
||||
#: templates/rosetta/languages.html:32
|
||||
msgid "Application"
|
||||
msgstr "Applicazione"
|
||||
|
||||
#: templates/rosetta/languages.html:18
|
||||
#: templates/rosetta/languages.html:33
|
||||
msgid "Progress"
|
||||
msgstr "Progressione"
|
||||
|
||||
#: templates/rosetta/languages.html:19
|
||||
#: templates/rosetta/languages.html:34
|
||||
msgid "Messages"
|
||||
msgstr "Messaggio"
|
||||
|
||||
#: templates/rosetta/languages.html:20
|
||||
#: templates/rosetta/languages.html:35
|
||||
msgid "Translated"
|
||||
msgstr "Tradotto"
|
||||
|
||||
#: templates/rosetta/languages.html:21 templates/rosetta/pofile.html:57
|
||||
#: templates/rosetta/languages.html:36 templates/rosetta/pofile.html:61
|
||||
msgid "Fuzzy"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:22
|
||||
#: templates/rosetta/languages.html:37
|
||||
msgid "Obsolete"
|
||||
msgstr "Obsoleto"
|
||||
|
||||
#: templates/rosetta/languages.html:23
|
||||
#: templates/rosetta/languages.html:38
|
||||
msgid "File"
|
||||
msgstr "File"
|
||||
|
||||
#: templates/rosetta/languages.html:44
|
||||
#: templates/rosetta/languages.html:61
|
||||
msgid "Nothing to translate!"
|
||||
msgstr "Nulla da tradurre!"
|
||||
|
||||
#: templates/rosetta/languages.html:45
|
||||
#: templates/rosetta/languages.html:62
|
||||
msgid ""
|
||||
"You haven't specified any languages in your settings file, or haven't yet "
|
||||
"generated a batch of translation catalogs."
|
||||
|
|
@ -63,7 +90,7 @@ msgstr ""
|
|||
"ancore generato un catalogo iniziale da tradurre."
|
||||
|
||||
# python-format
|
||||
#: templates/rosetta/languages.html:46
|
||||
#: templates/rosetta/languages.html:63
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</"
|
||||
|
|
@ -73,94 +100,97 @@ msgstr ""
|
|||
"sull'internazionalizzazione di Django</a> per una giuda su come impostare le "
|
||||
"traduzioni per il vostro progetto."
|
||||
|
||||
#: templates/rosetta/pofile.html:8
|
||||
#: templates/rosetta/pofile.html:9
|
||||
msgid "Pick another file"
|
||||
msgstr "Scegliere un altro file"
|
||||
|
||||
#: templates/rosetta/pofile.html:9
|
||||
#: templates/rosetta/pofile.html:10
|
||||
msgid "Download this catalog"
|
||||
msgstr "Scaricare il catalogo"
|
||||
|
||||
#: templates/rosetta/pofile.html:21
|
||||
msgid "Progress: %(percent_translated)s%"
|
||||
#: templates/rosetta/pofile.html:25
|
||||
#, fuzzy, python-format
|
||||
msgid "Progress: %(percent_translated)s%%"
|
||||
msgstr "Progressione: %(percent_translated)s%"
|
||||
|
||||
#: templates/rosetta/pofile.html:23
|
||||
#: templates/rosetta/pofile.html:27
|
||||
msgid "File is read-only: download the file when done editing!"
|
||||
msgstr "file in solo lettura: scaricare il file alla fine dell'edizione!"
|
||||
|
||||
#: templates/rosetta/pofile.html:24
|
||||
#: templates/rosetta/pofile.html:28
|
||||
msgid ""
|
||||
"Some items in your last translation block couldn't be saved: this usually "
|
||||
"happens when the catalog file changes on disk after you last loaded it."
|
||||
msgstr "Alcuni elementi non sono stati salvati: questo capita solitamente quando "
|
||||
"il catalogo delle traduzioni è stato modificato dopo che voi l'abbiate caricato."
|
||||
msgstr ""
|
||||
"Alcuni elementi non sono stati salvati: questo capita solitamente quando il "
|
||||
"catalogo delle traduzioni è stato modificato dopo che voi l'abbiate caricato."
|
||||
|
||||
#: templates/rosetta/pofile.html:28
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#, python-format
|
||||
msgid "Translate into %(rosetta_i18n_lang_name)s"
|
||||
msgstr "Tradurre verso il %(rosetta_i18n_lang_name)s"
|
||||
|
||||
#: templates/rosetta/pofile.html:31
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "Display:"
|
||||
msgstr "Mostra:"
|
||||
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#: templates/rosetta/pofile.html:36
|
||||
msgid "Untranslated only"
|
||||
msgstr "Solo non tradotti"
|
||||
|
||||
#: templates/rosetta/pofile.html:33
|
||||
#: templates/rosetta/pofile.html:37
|
||||
msgid "Translated only"
|
||||
msgstr "Solo tradotti"
|
||||
|
||||
#: templates/rosetta/pofile.html:34
|
||||
#: templates/rosetta/pofile.html:38
|
||||
msgid "Fuzzy only"
|
||||
msgstr "Solo fuzzy"
|
||||
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "All"
|
||||
msgstr "Tutti"
|
||||
|
||||
#: templates/rosetta/pofile.html:42
|
||||
#: templates/rosetta/pofile.html:46
|
||||
msgid "Search"
|
||||
msgstr "Cercare"
|
||||
|
||||
#: templates/rosetta/pofile.html:44
|
||||
#: templates/rosetta/pofile.html:48
|
||||
msgid "Go"
|
||||
msgstr "Via"
|
||||
|
||||
#: templates/rosetta/pofile.html:54
|
||||
#: templates/rosetta/pofile.html:58
|
||||
msgid "Original"
|
||||
msgstr "Originale"
|
||||
|
||||
#: templates/rosetta/pofile.html:58
|
||||
#: templates/rosetta/pofile.html:62
|
||||
msgid "Occurrences(s)"
|
||||
msgstr "Occorrenze"
|
||||
|
||||
#: templates/rosetta/pofile.html:82
|
||||
#: templates/rosetta/pofile.html:76 templates/rosetta/pofile.html.py:79
|
||||
#: templates/rosetta/pofile.html:94 templates/rosetta/pofile.html.py:97
|
||||
msgid "Context hint"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:104
|
||||
msgid "suggest"
|
||||
msgstr "suggerire"
|
||||
|
||||
#: templates/rosetta/pofile.html:93
|
||||
#: templates/rosetta/pofile.html:115
|
||||
#, python-format
|
||||
msgid "%(more_count)s more"
|
||||
msgid_plural "%(more_count)s more"
|
||||
msgstr[0] "un altro"
|
||||
msgstr[1] "ancora %(more_count)s"
|
||||
|
||||
#: templates/rosetta/pofile.html:105
|
||||
#: templates/rosetta/pofile.html:127
|
||||
msgid "Save and translate next block"
|
||||
msgstr "Salvare e tradurre il prossimo blocco"
|
||||
|
||||
#: templates/rosetta/pofile.html:109
|
||||
#: templates/rosetta/pofile.html:131
|
||||
msgid "Skip to page:"
|
||||
msgstr "Passare alla pagina:"
|
||||
|
||||
#: templates/rosetta/pofile.html:122
|
||||
#: templates/rosetta/pofile.html:144
|
||||
msgid "Displaying:"
|
||||
msgstr "Mostrato:"
|
||||
|
||||
#: templates/rosetta/pofile.html:124
|
||||
#: templates/rosetta/pofile.html:148
|
||||
#, python-format
|
||||
msgid "%(hits)s/%(message_number)s message"
|
||||
msgid_plural "%(hits)s/%(message_number)s messages"
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -7,56 +7,81 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Rosetta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-07-04 13:42+0200\n"
|
||||
"POT-Creation-Date: 2014-02-28 13:36+0100\n"
|
||||
"PO-Revision-Date: 2008-06-05 17:06+0200\n"
|
||||
"Last-Translator: Joost Cassee <cassee@gmail.com>\n"
|
||||
"Language-Team: Joost Cassee <cassee@gmail.com>\n"
|
||||
"Language-Team: nl Joost Cassee <cassee@gmail.com>\n"
|
||||
"Language: nl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: templates/rosetta/languages.html:4 templates/rosetta/languages.html.py:6
|
||||
#: templates/rosetta/languages.html:5 templates/rosetta/languages.html.py:8
|
||||
msgid "Language selection"
|
||||
msgstr "Taalselectie"
|
||||
|
||||
#: templates/rosetta/languages.html:6 templates/rosetta/pofile.html:18
|
||||
#: templates/rosetta/languages.html:8 templates/rosetta/pofile.html:22
|
||||
msgid "Home"
|
||||
msgstr "Voorpagina"
|
||||
|
||||
#: templates/rosetta/languages.html:9
|
||||
msgid ""
|
||||
"Couldn't load the specified language file. This usually happens when using "
|
||||
"the Encrypted Cookies Session Storage backend on Django 1.4 or higher.<br/"
|
||||
">Setting ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage' in "
|
||||
"your settings file should fix this."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:15
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:16
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:17
|
||||
msgid "Third party"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:19 templates/rosetta/pofile.html:39
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:32
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:18
|
||||
#: templates/rosetta/languages.html:33
|
||||
msgid "Progress"
|
||||
msgstr "Voortgang"
|
||||
|
||||
#: templates/rosetta/languages.html:19
|
||||
#: templates/rosetta/languages.html:34
|
||||
msgid "Messages"
|
||||
msgstr "Berichten"
|
||||
|
||||
#: templates/rosetta/languages.html:20
|
||||
#: templates/rosetta/languages.html:35
|
||||
msgid "Translated"
|
||||
msgstr "Vertaald"
|
||||
|
||||
#: templates/rosetta/languages.html:21 templates/rosetta/pofile.html:57
|
||||
#: templates/rosetta/languages.html:36 templates/rosetta/pofile.html:61
|
||||
msgid "Fuzzy"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:22
|
||||
#: templates/rosetta/languages.html:37
|
||||
msgid "Obsolete"
|
||||
msgstr "Niet meer gebruikt"
|
||||
|
||||
#: templates/rosetta/languages.html:23
|
||||
#: templates/rosetta/languages.html:38
|
||||
msgid "File"
|
||||
msgstr "Bestand"
|
||||
|
||||
#: templates/rosetta/languages.html:44
|
||||
#: templates/rosetta/languages.html:61
|
||||
msgid "Nothing to translate!"
|
||||
msgstr "Niets te vertalen!"
|
||||
|
||||
#: templates/rosetta/languages.html:45
|
||||
#: templates/rosetta/languages.html:62
|
||||
msgid ""
|
||||
"You haven't specified any languages in your settings file, or haven't yet "
|
||||
"generated a batch of translation catalogs."
|
||||
|
|
@ -65,7 +90,7 @@ msgstr ""
|
|||
"catalogus gegenereerd."
|
||||
|
||||
# python-format
|
||||
#: templates/rosetta/languages.html:46
|
||||
#: templates/rosetta/languages.html:63
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</"
|
||||
|
|
@ -74,95 +99,97 @@ msgstr ""
|
|||
"Zie <a href=\"%(i18n_doc_link)s\">Django's I18N documentatie</a> (Engels) "
|
||||
"voor meer informatie over internationalisatie."
|
||||
|
||||
#: templates/rosetta/pofile.html:8
|
||||
#: templates/rosetta/pofile.html:9
|
||||
msgid "Pick another file"
|
||||
msgstr "Selecteer een ander bestand"
|
||||
|
||||
#: templates/rosetta/pofile.html:9
|
||||
#: templates/rosetta/pofile.html:10
|
||||
msgid "Download this catalog"
|
||||
msgstr "Download deze catalogus"
|
||||
|
||||
#: templates/rosetta/pofile.html:21
|
||||
msgid "Progress: %(percent_translated)s%"
|
||||
#: templates/rosetta/pofile.html:25
|
||||
#, fuzzy, python-format
|
||||
msgid "Progress: %(percent_translated)s%%"
|
||||
msgstr "Voortgang: %(percent_translated)s%"
|
||||
|
||||
#: templates/rosetta/pofile.html:23
|
||||
#: templates/rosetta/pofile.html:27
|
||||
msgid "File is read-only: download the file when done editing!"
|
||||
msgstr ""
|
||||
"Dit is bestand is alleen-lezen; download dit bestand wanneer u klaar bent "
|
||||
"met bewerken!"
|
||||
|
||||
#: templates/rosetta/pofile.html:24
|
||||
#: templates/rosetta/pofile.html:28
|
||||
msgid ""
|
||||
"Some items in your last translation block couldn't be saved: this usually "
|
||||
"happens when the catalog file changes on disk after you last loaded it."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:28
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#, python-format
|
||||
msgid "Translate into %(rosetta_i18n_lang_name)s"
|
||||
msgstr "Vertalen in het %(rosetta_i18n_lang_name)s"
|
||||
|
||||
#: templates/rosetta/pofile.html:31
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "Display:"
|
||||
msgstr "Beeld:"
|
||||
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#: templates/rosetta/pofile.html:36
|
||||
msgid "Untranslated only"
|
||||
msgstr "Alleen onvertaald"
|
||||
|
||||
#: templates/rosetta/pofile.html:33
|
||||
#: templates/rosetta/pofile.html:37
|
||||
msgid "Translated only"
|
||||
msgstr "Alleen vertaald"
|
||||
|
||||
#: templates/rosetta/pofile.html:34
|
||||
#: templates/rosetta/pofile.html:38
|
||||
msgid "Fuzzy only"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:42
|
||||
#: templates/rosetta/pofile.html:46
|
||||
msgid "Search"
|
||||
msgstr "Zoeken"
|
||||
|
||||
#: templates/rosetta/pofile.html:44
|
||||
#: templates/rosetta/pofile.html:48
|
||||
msgid "Go"
|
||||
msgstr "Ga"
|
||||
|
||||
#: templates/rosetta/pofile.html:54
|
||||
#: templates/rosetta/pofile.html:58
|
||||
msgid "Original"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:58
|
||||
#: templates/rosetta/pofile.html:62
|
||||
msgid "Occurrences(s)"
|
||||
msgstr "Gevonden in"
|
||||
|
||||
#: templates/rosetta/pofile.html:82
|
||||
#: templates/rosetta/pofile.html:76 templates/rosetta/pofile.html.py:79
|
||||
#: templates/rosetta/pofile.html:94 templates/rosetta/pofile.html.py:97
|
||||
msgid "Context hint"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:104
|
||||
msgid "suggest"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:93
|
||||
#: templates/rosetta/pofile.html:115
|
||||
#, python-format
|
||||
msgid "%(more_count)s more"
|
||||
msgid_plural "%(more_count)s more"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: templates/rosetta/pofile.html:105
|
||||
#: templates/rosetta/pofile.html:127
|
||||
msgid "Save and translate next block"
|
||||
msgstr "Opslaan en volgende blok vertalen"
|
||||
|
||||
#: templates/rosetta/pofile.html:109
|
||||
#: templates/rosetta/pofile.html:131
|
||||
msgid "Skip to page:"
|
||||
msgstr "Snel naar pagina:"
|
||||
|
||||
#: templates/rosetta/pofile.html:122
|
||||
#: templates/rosetta/pofile.html:144
|
||||
msgid "Displaying:"
|
||||
msgstr "Tonen:"
|
||||
|
||||
#: templates/rosetta/pofile.html:124
|
||||
#: templates/rosetta/pofile.html:148
|
||||
#, python-format
|
||||
msgid "%(hits)s/%(message_number)s message"
|
||||
msgid_plural "%(hits)s/%(message_number)s messages"
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -7,56 +7,83 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Rosetta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-07-04 13:42+0200\n"
|
||||
"POT-Creation-Date: 2014-02-28 13:36+0100\n"
|
||||
"PO-Revision-Date: 2008-09-12 12:16\n"
|
||||
"Last-Translator: <tomasz@napierala.org>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language-Team: pl <LL@li.org>\n"
|
||||
"Language: pl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Translated-Using: django-rosetta 0.4.RC2\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#: templates/rosetta/languages.html:4 templates/rosetta/languages.html.py:6
|
||||
#: templates/rosetta/languages.html:5 templates/rosetta/languages.html.py:8
|
||||
msgid "Language selection"
|
||||
msgstr "Wybór języka"
|
||||
|
||||
#: templates/rosetta/languages.html:6 templates/rosetta/pofile.html:18
|
||||
#: templates/rosetta/languages.html:8 templates/rosetta/pofile.html:22
|
||||
msgid "Home"
|
||||
msgstr "Początek"
|
||||
|
||||
#: templates/rosetta/languages.html:9
|
||||
msgid ""
|
||||
"Couldn't load the specified language file. This usually happens when using "
|
||||
"the Encrypted Cookies Session Storage backend on Django 1.4 or higher.<br/"
|
||||
">Setting ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage' in "
|
||||
"your settings file should fix this."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:15
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:16
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:17
|
||||
msgid "Third party"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:19 templates/rosetta/pofile.html:39
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:32
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:18
|
||||
#: templates/rosetta/languages.html:33
|
||||
msgid "Progress"
|
||||
msgstr "Postęp"
|
||||
|
||||
#: templates/rosetta/languages.html:19
|
||||
#: templates/rosetta/languages.html:34
|
||||
msgid "Messages"
|
||||
msgstr "Komunikaty"
|
||||
|
||||
#: templates/rosetta/languages.html:20
|
||||
#: templates/rosetta/languages.html:35
|
||||
msgid "Translated"
|
||||
msgstr "Przetłumaczone"
|
||||
|
||||
#: templates/rosetta/languages.html:21 templates/rosetta/pofile.html:57
|
||||
#: templates/rosetta/languages.html:36 templates/rosetta/pofile.html:61
|
||||
msgid "Fuzzy"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:22
|
||||
#: templates/rosetta/languages.html:37
|
||||
msgid "Obsolete"
|
||||
msgstr "Przestarzałe"
|
||||
|
||||
#: templates/rosetta/languages.html:23
|
||||
#: templates/rosetta/languages.html:38
|
||||
msgid "File"
|
||||
msgstr "Plik"
|
||||
|
||||
#: templates/rosetta/languages.html:44
|
||||
#: templates/rosetta/languages.html:61
|
||||
msgid "Nothing to translate!"
|
||||
msgstr "Nie ma nic do przetłumaczenia!"
|
||||
|
||||
#: templates/rosetta/languages.html:45
|
||||
#: templates/rosetta/languages.html:62
|
||||
msgid ""
|
||||
"You haven't specified any languages in your settings file, or haven't yet "
|
||||
"generated a batch of translation catalogs."
|
||||
|
|
@ -65,7 +92,7 @@ msgstr ""
|
|||
"jeszcze katalogów do tłumaczeń."
|
||||
|
||||
# python-format
|
||||
#: templates/rosetta/languages.html:46
|
||||
#: templates/rosetta/languages.html:63
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</"
|
||||
|
|
@ -75,98 +102,102 @@ msgstr ""
|
|||
"Django I18N </a>, aby znaleźć dokumentację na temat internacjonalizacji "
|
||||
"twojego projektu."
|
||||
|
||||
#: templates/rosetta/pofile.html:8
|
||||
#: templates/rosetta/pofile.html:9
|
||||
msgid "Pick another file"
|
||||
msgstr "Wybierz inny plik"
|
||||
|
||||
#: templates/rosetta/pofile.html:9
|
||||
#: templates/rosetta/pofile.html:10
|
||||
msgid "Download this catalog"
|
||||
msgstr "Pobierz ten katalog"
|
||||
|
||||
#: templates/rosetta/pofile.html:21
|
||||
msgid "Progress: %(percent_translated)s%"
|
||||
#: templates/rosetta/pofile.html:25
|
||||
#, fuzzy, python-format
|
||||
msgid "Progress: %(percent_translated)s%%"
|
||||
msgstr "Postęp: %(percent_translated)s %"
|
||||
|
||||
#: templates/rosetta/pofile.html:23
|
||||
#: templates/rosetta/pofile.html:27
|
||||
msgid "File is read-only: download the file when done editing!"
|
||||
msgstr "Plik jest tylko do odczytu: pobierz go kiedy skończysz edytować"
|
||||
|
||||
#: templates/rosetta/pofile.html:24
|
||||
#: templates/rosetta/pofile.html:28
|
||||
msgid ""
|
||||
"Some items in your last translation block couldn't be saved: this usually "
|
||||
"happens when the catalog file changes on disk after you last loaded it."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:28
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#, python-format
|
||||
msgid "Translate into %(rosetta_i18n_lang_name)s"
|
||||
msgstr "Przetłumacz na %(rosetta_i18n_lang_name)s "
|
||||
|
||||
#: templates/rosetta/pofile.html:31
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "Display:"
|
||||
msgstr "Wyświetl:"
|
||||
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#: templates/rosetta/pofile.html:36
|
||||
msgid "Untranslated only"
|
||||
msgstr "Tylko nieprzetłumaczone"
|
||||
|
||||
#: templates/rosetta/pofile.html:33
|
||||
#: templates/rosetta/pofile.html:37
|
||||
msgid "Translated only"
|
||||
msgstr "Tylko przetłumaczone"
|
||||
|
||||
#: templates/rosetta/pofile.html:34
|
||||
#: templates/rosetta/pofile.html:38
|
||||
msgid "Fuzzy only"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:42
|
||||
#: templates/rosetta/pofile.html:46
|
||||
msgid "Search"
|
||||
msgstr "Szukaj"
|
||||
|
||||
#: templates/rosetta/pofile.html:44
|
||||
#: templates/rosetta/pofile.html:48
|
||||
msgid "Go"
|
||||
msgstr "Idź"
|
||||
|
||||
#: templates/rosetta/pofile.html:54
|
||||
#: templates/rosetta/pofile.html:58
|
||||
msgid "Original"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:58
|
||||
#: templates/rosetta/pofile.html:62
|
||||
msgid "Occurrences(s)"
|
||||
msgstr "Wystąpienie(a)"
|
||||
|
||||
#: templates/rosetta/pofile.html:82
|
||||
#: templates/rosetta/pofile.html:76 templates/rosetta/pofile.html.py:79
|
||||
#: templates/rosetta/pofile.html:94 templates/rosetta/pofile.html.py:97
|
||||
msgid "Context hint"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:104
|
||||
msgid "suggest"
|
||||
msgstr "sugeruj"
|
||||
|
||||
#: templates/rosetta/pofile.html:93
|
||||
#: templates/rosetta/pofile.html:115
|
||||
#, python-format
|
||||
msgid "%(more_count)s more"
|
||||
msgid_plural "%(more_count)s more"
|
||||
msgstr[0] "%(more_count)s więcej"
|
||||
msgstr[1] "%(more_count)s więcej"
|
||||
msgstr[2] "%(more_count)s więcej"
|
||||
|
||||
#: templates/rosetta/pofile.html:105
|
||||
#: templates/rosetta/pofile.html:127
|
||||
msgid "Save and translate next block"
|
||||
msgstr "Zapisz i tłumacz następny blok"
|
||||
|
||||
#: templates/rosetta/pofile.html:109
|
||||
#: templates/rosetta/pofile.html:131
|
||||
msgid "Skip to page:"
|
||||
msgstr "Przejdź do strony:"
|
||||
|
||||
#: templates/rosetta/pofile.html:122
|
||||
#: templates/rosetta/pofile.html:144
|
||||
msgid "Displaying:"
|
||||
msgstr "Wyświetlanie:"
|
||||
|
||||
#: templates/rosetta/pofile.html:124
|
||||
#: templates/rosetta/pofile.html:148
|
||||
#, python-format
|
||||
msgid "%(hits)s/%(message_number)s message"
|
||||
msgid_plural "%(hits)s/%(message_number)s messages"
|
||||
msgstr[0] "%(hits)s/%(message_number)s komunikat"
|
||||
msgstr[1] "%(hits)s/%(message_number)s komunikatów"
|
||||
msgstr[2] "%(hits)s/%(message_number)s komunikatów"
|
||||
|
||||
#~ msgid "English"
|
||||
#~ msgstr "Angielski"
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -7,159 +7,191 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Rosetta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-07-04 13:42+0200\n"
|
||||
"POT-Creation-Date: 2014-02-28 13:36+0100\n"
|
||||
"PO-Revision-Date: 2010-07-04 13:42+0200\n"
|
||||
"Last-Translator: Nazar Leush <nazar@pleso.net>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#: templates/rosetta/languages.html:4 templates/rosetta/languages.html.py:6
|
||||
#: templates/rosetta/languages.html:5 templates/rosetta/languages.html.py:8
|
||||
msgid "Language selection"
|
||||
msgstr "Выбор языка"
|
||||
|
||||
#: templates/rosetta/languages.html:6 templates/rosetta/pofile.html:18
|
||||
#: templates/rosetta/languages.html:8 templates/rosetta/pofile.html:22
|
||||
msgid "Home"
|
||||
msgstr "Начало"
|
||||
|
||||
#: templates/rosetta/languages.html:9
|
||||
msgid ""
|
||||
"Couldn't load the specified language file. This usually happens when using "
|
||||
"the Encrypted Cookies Session Storage backend on Django 1.4 or higher.<br/"
|
||||
">Setting ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage' in "
|
||||
"your settings file should fix this."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:15
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:16
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:17
|
||||
msgid "Third party"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:19 templates/rosetta/pofile.html:39
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:32
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:18
|
||||
#: templates/rosetta/languages.html:33
|
||||
msgid "Progress"
|
||||
msgstr "Обработано"
|
||||
|
||||
#: templates/rosetta/languages.html:19
|
||||
#: templates/rosetta/languages.html:34
|
||||
msgid "Messages"
|
||||
msgstr "Сообщений"
|
||||
|
||||
#: templates/rosetta/languages.html:20
|
||||
#: templates/rosetta/languages.html:35
|
||||
msgid "Translated"
|
||||
msgstr "С переводом"
|
||||
|
||||
#: templates/rosetta/languages.html:21 templates/rosetta/pofile.html:57
|
||||
#: templates/rosetta/languages.html:36 templates/rosetta/pofile.html:61
|
||||
msgid "Fuzzy"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:22
|
||||
#: templates/rosetta/languages.html:37
|
||||
msgid "Obsolete"
|
||||
msgstr "Устаревших"
|
||||
|
||||
#: templates/rosetta/languages.html:23
|
||||
#: templates/rosetta/languages.html:38
|
||||
msgid "File"
|
||||
msgstr "Файл"
|
||||
|
||||
#: templates/rosetta/languages.html:44
|
||||
#: templates/rosetta/languages.html:61
|
||||
msgid "Nothing to translate!"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:45
|
||||
#: templates/rosetta/languages.html:62
|
||||
msgid ""
|
||||
"You haven't specified any languages in your settings file, or haven't yet "
|
||||
"generated a batch of translation catalogs."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:46
|
||||
#: templates/rosetta/languages.html:63
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</"
|
||||
"a> for a guide on how to set up internationalization for your project."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:8
|
||||
#: templates/rosetta/pofile.html:9
|
||||
msgid "Pick another file"
|
||||
msgstr "Выбрать другой файл"
|
||||
|
||||
#: templates/rosetta/pofile.html:9
|
||||
#: templates/rosetta/pofile.html:10
|
||||
msgid "Download this catalog"
|
||||
msgstr "Скачать этот каталог"
|
||||
|
||||
#: templates/rosetta/pofile.html:21
|
||||
msgid "Progress: %(percent_translated)s%"
|
||||
#: templates/rosetta/pofile.html:25
|
||||
#, fuzzy, python-format
|
||||
msgid "Progress: %(percent_translated)s%%"
|
||||
msgstr "Обработано: %(percent_translated)s%"
|
||||
|
||||
#: templates/rosetta/pofile.html:23
|
||||
#: templates/rosetta/pofile.html:27
|
||||
msgid "File is read-only: download the file when done editing!"
|
||||
msgstr ""
|
||||
"Файл только для чтения: загрузите файл после завершения редактирования!"
|
||||
|
||||
#: templates/rosetta/pofile.html:24
|
||||
#: templates/rosetta/pofile.html:28
|
||||
msgid ""
|
||||
"Some items in your last translation block couldn't be saved: this usually "
|
||||
"happens when the catalog file changes on disk after you last loaded it."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:28
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#, python-format
|
||||
msgid "Translate into %(rosetta_i18n_lang_name)s"
|
||||
msgstr "Перевод на %(rosetta_i18n_lang_name)s"
|
||||
|
||||
#: templates/rosetta/pofile.html:31
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "Display:"
|
||||
msgstr "Отображать:"
|
||||
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#: templates/rosetta/pofile.html:36
|
||||
msgid "Untranslated only"
|
||||
msgstr "Только без перевода"
|
||||
|
||||
#: templates/rosetta/pofile.html:33
|
||||
#: templates/rosetta/pofile.html:37
|
||||
msgid "Translated only"
|
||||
msgstr "Только с переводом"
|
||||
|
||||
#: templates/rosetta/pofile.html:34
|
||||
#: templates/rosetta/pofile.html:38
|
||||
msgid "Fuzzy only"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:42
|
||||
#: templates/rosetta/pofile.html:46
|
||||
msgid "Search"
|
||||
msgstr "Поиск"
|
||||
|
||||
#: templates/rosetta/pofile.html:44
|
||||
#: templates/rosetta/pofile.html:48
|
||||
msgid "Go"
|
||||
msgstr "Вперёд"
|
||||
|
||||
#: templates/rosetta/pofile.html:54
|
||||
#: templates/rosetta/pofile.html:58
|
||||
msgid "Original"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:58
|
||||
#: templates/rosetta/pofile.html:62
|
||||
msgid "Occurrences(s)"
|
||||
msgstr "Встречается в"
|
||||
|
||||
#: templates/rosetta/pofile.html:82
|
||||
#: templates/rosetta/pofile.html:76 templates/rosetta/pofile.html.py:79
|
||||
#: templates/rosetta/pofile.html:94 templates/rosetta/pofile.html.py:97
|
||||
msgid "Context hint"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:104
|
||||
msgid "suggest"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:93
|
||||
#: templates/rosetta/pofile.html:115
|
||||
#, python-format
|
||||
msgid "%(more_count)s more"
|
||||
msgid_plural "%(more_count)s more"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
#: templates/rosetta/pofile.html:105
|
||||
#: templates/rosetta/pofile.html:127
|
||||
msgid "Save and translate next block"
|
||||
msgstr "Сохранить и перевести следующий блок"
|
||||
|
||||
#: templates/rosetta/pofile.html:109
|
||||
#: templates/rosetta/pofile.html:131
|
||||
msgid "Skip to page:"
|
||||
msgstr "Перейти к странице:"
|
||||
|
||||
#: templates/rosetta/pofile.html:122
|
||||
#: templates/rosetta/pofile.html:144
|
||||
msgid "Displaying:"
|
||||
msgstr "Отображение:"
|
||||
|
||||
#: templates/rosetta/pofile.html:124
|
||||
#: templates/rosetta/pofile.html:148
|
||||
#, python-format
|
||||
msgid "%(hits)s/%(message_number)s message"
|
||||
msgid_plural "%(hits)s/%(message_number)s messages"
|
||||
msgstr[0] "%(hits)s/%(message_number)s сообщение"
|
||||
msgstr[1] "%(hits)s/%(message_number)s сообщений"
|
||||
msgstr[2] "%(hits)s/%(message_number)s сообщений"
|
||||
|
||||
#~ msgid "English"
|
||||
#~ msgstr "Английский"
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Rosetta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-11-11 15:45+0200\n"
|
||||
"POT-Creation-Date: 2014-02-28 13:36+0100\n"
|
||||
"PO-Revision-Date: 2008-06-16 10:11+0100\n"
|
||||
"Last-Translator: RECEP KIRMIZI <rkirmizi@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
|
|
@ -19,47 +19,71 @@ msgstr ""
|
|||
"X-Poedit-Language: \n"
|
||||
"X-Poedit-Country: \n"
|
||||
|
||||
#: templates/rosetta/languages.html:4 templates/rosetta/languages.html.py:6
|
||||
#: templates/rosetta/languages.html:5 templates/rosetta/languages.html.py:8
|
||||
msgid "Language selection"
|
||||
msgstr "Dil seçimi"
|
||||
|
||||
#: templates/rosetta/languages.html:6 templates/rosetta/pofile.html:18
|
||||
#: templates/rosetta/languages.html:8 templates/rosetta/pofile.html:22
|
||||
msgid "Home"
|
||||
msgstr "Ana Sayfa"
|
||||
|
||||
#: templates/rosetta/languages.html:9
|
||||
msgid ""
|
||||
"Couldn't load the specified language file. This usually happens when using "
|
||||
"the Encrypted Cookies Session Storage backend on Django 1.4 or higher.<br/"
|
||||
">Setting ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage' in "
|
||||
"your settings file should fix this."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:15
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:16
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:17
|
||||
msgid "Third party"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:19 templates/rosetta/pofile.html:39
|
||||
msgid "All"
|
||||
msgstr "Hepsi"
|
||||
|
||||
#: templates/rosetta/languages.html:32
|
||||
msgid "Application"
|
||||
msgstr "Uygulama"
|
||||
|
||||
#: templates/rosetta/languages.html:18
|
||||
#: templates/rosetta/languages.html:33
|
||||
msgid "Progress"
|
||||
msgstr "İlerleme"
|
||||
|
||||
#: templates/rosetta/languages.html:19
|
||||
#: templates/rosetta/languages.html:34
|
||||
msgid "Messages"
|
||||
msgstr "Mesaj"
|
||||
|
||||
#: templates/rosetta/languages.html:20
|
||||
#: templates/rosetta/languages.html:35
|
||||
msgid "Translated"
|
||||
msgstr "Çevrildi"
|
||||
|
||||
#: templates/rosetta/languages.html:21 templates/rosetta/pofile.html:57
|
||||
#: templates/rosetta/languages.html:36 templates/rosetta/pofile.html:61
|
||||
msgid "Fuzzy"
|
||||
msgstr "Belirsiz"
|
||||
|
||||
#: templates/rosetta/languages.html:22
|
||||
#: templates/rosetta/languages.html:37
|
||||
msgid "Obsolete"
|
||||
msgstr "Kullanımda olmayan"
|
||||
|
||||
#: templates/rosetta/languages.html:23
|
||||
#: templates/rosetta/languages.html:38
|
||||
msgid "File"
|
||||
msgstr "Dosya"
|
||||
|
||||
#: templates/rosetta/languages.html:44
|
||||
#: templates/rosetta/languages.html:61
|
||||
msgid "Nothing to translate!"
|
||||
msgstr "Çevrilecek birşey yok!"
|
||||
|
||||
#: templates/rosetta/languages.html:45
|
||||
#: templates/rosetta/languages.html:62
|
||||
msgid ""
|
||||
"You haven't specified any languages in your settings file, or haven't yet "
|
||||
"generated a batch of translation catalogs."
|
||||
|
|
@ -68,7 +92,7 @@ msgstr ""
|
|||
"kataloglarını oluşturmadınız."
|
||||
|
||||
# python-format
|
||||
#: templates/rosetta/languages.html:46
|
||||
#: templates/rosetta/languages.html:63
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</"
|
||||
|
|
@ -77,25 +101,25 @@ msgstr ""
|
|||
"Projenizdeki çoklu dilde geliştirebilmek için lütfen Django'nun <a href="
|
||||
"\"%(i18n_doc_link)s\">Django'nun I18N dökümantasyonuna</a> başvurun."
|
||||
|
||||
#: templates/rosetta/pofile.html:8
|
||||
#: templates/rosetta/pofile.html:9
|
||||
msgid "Pick another file"
|
||||
msgstr "Başka bir dosya alın"
|
||||
|
||||
#: templates/rosetta/pofile.html:9
|
||||
#: templates/rosetta/pofile.html:10
|
||||
msgid "Download this catalog"
|
||||
msgstr "Bu kataloğu bilgisayarınıza indirin"
|
||||
|
||||
#: templates/rosetta/pofile.html:21
|
||||
#: templates/rosetta/pofile.html:25
|
||||
#, fuzzy, python-format
|
||||
msgid "Progress: %(percent_translated)s%%"
|
||||
msgstr "İlerleme: %(percent_translated)s%"
|
||||
|
||||
#: templates/rosetta/pofile.html:23
|
||||
#: templates/rosetta/pofile.html:27
|
||||
msgid "File is read-only: download the file when done editing!"
|
||||
msgstr ""
|
||||
"Dosya salt-okunur: İşlemleriniz bittikten sonra bilgisayarınıza indirin"
|
||||
|
||||
#: templates/rosetta/pofile.html:24
|
||||
#: templates/rosetta/pofile.html:28
|
||||
msgid ""
|
||||
"Some items in your last translation block couldn't be saved: this usually "
|
||||
"happens when the catalog file changes on disk after you last loaded it."
|
||||
|
|
@ -103,71 +127,72 @@ msgstr ""
|
|||
"Çeviri bloğunuzdaki bazı öğeler kayıt edilemedi: bu genellikle üzerinde "
|
||||
"çalıştığınız dosyanın sunucu tarafında değişmesi sonucundaortaya çıkar."
|
||||
|
||||
#: templates/rosetta/pofile.html:28
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#, python-format
|
||||
msgid "Translate into %(rosetta_i18n_lang_name)s"
|
||||
msgstr "Şuna çevir %(rosetta_i18n_lang_name)s"
|
||||
|
||||
#: templates/rosetta/pofile.html:31
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "Display:"
|
||||
msgstr "Göster:"
|
||||
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#: templates/rosetta/pofile.html:36
|
||||
msgid "Untranslated only"
|
||||
msgstr "Sadece çevirilmemiş"
|
||||
|
||||
#: templates/rosetta/pofile.html:33
|
||||
#: templates/rosetta/pofile.html:37
|
||||
msgid "Translated only"
|
||||
msgstr "Sadece çevirilmiş"
|
||||
|
||||
#: templates/rosetta/pofile.html:34
|
||||
#: templates/rosetta/pofile.html:38
|
||||
msgid "Fuzzy only"
|
||||
msgstr "Sadece belirsiz"
|
||||
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "All"
|
||||
msgstr "Hepsi"
|
||||
|
||||
#: templates/rosetta/pofile.html:42
|
||||
#: templates/rosetta/pofile.html:46
|
||||
msgid "Search"
|
||||
msgstr "Arama"
|
||||
|
||||
#: templates/rosetta/pofile.html:44
|
||||
#: templates/rosetta/pofile.html:48
|
||||
msgid "Go"
|
||||
msgstr "Git"
|
||||
|
||||
#: templates/rosetta/pofile.html:54
|
||||
#: templates/rosetta/pofile.html:58
|
||||
msgid "Original"
|
||||
msgstr "Orijinal"
|
||||
|
||||
#: templates/rosetta/pofile.html:58
|
||||
#: templates/rosetta/pofile.html:62
|
||||
msgid "Occurrences(s)"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:82
|
||||
#: templates/rosetta/pofile.html:76 templates/rosetta/pofile.html.py:79
|
||||
#: templates/rosetta/pofile.html:94 templates/rosetta/pofile.html.py:97
|
||||
msgid "Context hint"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:104
|
||||
msgid "suggest"
|
||||
msgstr "öneri"
|
||||
|
||||
#: templates/rosetta/pofile.html:93
|
||||
#: templates/rosetta/pofile.html:115
|
||||
#, python-format
|
||||
msgid "%(more_count)s more"
|
||||
msgid_plural "%(more_count)s more"
|
||||
msgstr[0] "%(more_count)s daha"
|
||||
msgstr[1] "%(more_count)s daha"
|
||||
|
||||
#: templates/rosetta/pofile.html:105
|
||||
#: templates/rosetta/pofile.html:127
|
||||
msgid "Save and translate next block"
|
||||
msgstr "Kaydet ve sonraki bloğu çevir"
|
||||
|
||||
#: templates/rosetta/pofile.html:109
|
||||
#: templates/rosetta/pofile.html:131
|
||||
msgid "Skip to page:"
|
||||
msgstr "Sayfaya geç:"
|
||||
|
||||
#: templates/rosetta/pofile.html:122
|
||||
#: templates/rosetta/pofile.html:144
|
||||
msgid "Displaying:"
|
||||
msgstr "Gösteriliyor:"
|
||||
|
||||
#: templates/rosetta/pofile.html:124
|
||||
#: templates/rosetta/pofile.html:148
|
||||
#, python-format
|
||||
msgid "%(hits)s/%(message_number)s message"
|
||||
msgid_plural "%(hits)s/%(message_number)s messages"
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -7,158 +7,190 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Rosetta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-07-04 13:42+0200\n"
|
||||
"POT-Creation-Date: 2014-02-28 13:36+0100\n"
|
||||
"PO-Revision-Date: 2010-07-04 13:42+0200\n"
|
||||
"Last-Translator: Nazar Leush <nazar@pleso.net>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: uk\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#: templates/rosetta/languages.html:4 templates/rosetta/languages.html.py:6
|
||||
#: templates/rosetta/languages.html:5 templates/rosetta/languages.html.py:8
|
||||
msgid "Language selection"
|
||||
msgstr "Вибір мови"
|
||||
|
||||
#: templates/rosetta/languages.html:6 templates/rosetta/pofile.html:18
|
||||
#: templates/rosetta/languages.html:8 templates/rosetta/pofile.html:22
|
||||
msgid "Home"
|
||||
msgstr "Домівка"
|
||||
|
||||
#: templates/rosetta/languages.html:9
|
||||
msgid ""
|
||||
"Couldn't load the specified language file. This usually happens when using "
|
||||
"the Encrypted Cookies Session Storage backend on Django 1.4 or higher.<br/"
|
||||
">Setting ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage' in "
|
||||
"your settings file should fix this."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:15
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:16
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:17
|
||||
msgid "Third party"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:19 templates/rosetta/pofile.html:39
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:32
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:18
|
||||
#: templates/rosetta/languages.html:33
|
||||
msgid "Progress"
|
||||
msgstr "Завершено"
|
||||
|
||||
#: templates/rosetta/languages.html:19
|
||||
#: templates/rosetta/languages.html:34
|
||||
msgid "Messages"
|
||||
msgstr "Повідомлень"
|
||||
|
||||
#: templates/rosetta/languages.html:20
|
||||
#: templates/rosetta/languages.html:35
|
||||
msgid "Translated"
|
||||
msgstr "Перекладено"
|
||||
|
||||
#: templates/rosetta/languages.html:21 templates/rosetta/pofile.html:57
|
||||
#: templates/rosetta/languages.html:36 templates/rosetta/pofile.html:61
|
||||
msgid "Fuzzy"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:22
|
||||
#: templates/rosetta/languages.html:37
|
||||
msgid "Obsolete"
|
||||
msgstr "Застарілих"
|
||||
|
||||
#: templates/rosetta/languages.html:23
|
||||
#: templates/rosetta/languages.html:38
|
||||
msgid "File"
|
||||
msgstr "Файл"
|
||||
|
||||
#: templates/rosetta/languages.html:44
|
||||
#: templates/rosetta/languages.html:61
|
||||
msgid "Nothing to translate!"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:45
|
||||
#: templates/rosetta/languages.html:62
|
||||
msgid ""
|
||||
"You haven't specified any languages in your settings file, or haven't yet "
|
||||
"generated a batch of translation catalogs."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/languages.html:46
|
||||
#: templates/rosetta/languages.html:63
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please refer to <a href=\"%(i18n_doc_link)s\">Django's I18N documentation</"
|
||||
"a> for a guide on how to set up internationalization for your project."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:8
|
||||
#: templates/rosetta/pofile.html:9
|
||||
msgid "Pick another file"
|
||||
msgstr "Вибрати інший файл"
|
||||
|
||||
#: templates/rosetta/pofile.html:9
|
||||
#: templates/rosetta/pofile.html:10
|
||||
msgid "Download this catalog"
|
||||
msgstr "Завантажити цей каталог"
|
||||
|
||||
#: templates/rosetta/pofile.html:21
|
||||
msgid "Progress: %(percent_translated)s%"
|
||||
#: templates/rosetta/pofile.html:25
|
||||
#, fuzzy, python-format
|
||||
msgid "Progress: %(percent_translated)s%%"
|
||||
msgstr "Завершено: %(percent_translated)s%"
|
||||
|
||||
#: templates/rosetta/pofile.html:23
|
||||
#: templates/rosetta/pofile.html:27
|
||||
msgid "File is read-only: download the file when done editing!"
|
||||
msgstr "Файл тільки для читання: завантажте файл після завершення редагування!"
|
||||
|
||||
#: templates/rosetta/pofile.html:24
|
||||
#: templates/rosetta/pofile.html:28
|
||||
msgid ""
|
||||
"Some items in your last translation block couldn't be saved: this usually "
|
||||
"happens when the catalog file changes on disk after you last loaded it."
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:28
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#, python-format
|
||||
msgid "Translate into %(rosetta_i18n_lang_name)s"
|
||||
msgstr "Переклад на %(rosetta_i18n_lang_name)s"
|
||||
|
||||
#: templates/rosetta/pofile.html:31
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "Display:"
|
||||
msgstr "Відображати:"
|
||||
|
||||
#: templates/rosetta/pofile.html:32
|
||||
#: templates/rosetta/pofile.html:36
|
||||
msgid "Untranslated only"
|
||||
msgstr "Тільки неперекладені"
|
||||
|
||||
#: templates/rosetta/pofile.html:33
|
||||
#: templates/rosetta/pofile.html:37
|
||||
msgid "Translated only"
|
||||
msgstr "Тільки перекладені"
|
||||
|
||||
#: templates/rosetta/pofile.html:34
|
||||
#: templates/rosetta/pofile.html:38
|
||||
msgid "Fuzzy only"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:35
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:42
|
||||
#: templates/rosetta/pofile.html:46
|
||||
msgid "Search"
|
||||
msgstr "Пошук"
|
||||
|
||||
#: templates/rosetta/pofile.html:44
|
||||
#: templates/rosetta/pofile.html:48
|
||||
msgid "Go"
|
||||
msgstr "Вперед"
|
||||
|
||||
#: templates/rosetta/pofile.html:54
|
||||
#: templates/rosetta/pofile.html:58
|
||||
msgid "Original"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:58
|
||||
#: templates/rosetta/pofile.html:62
|
||||
msgid "Occurrences(s)"
|
||||
msgstr "Зустрічається в"
|
||||
|
||||
#: templates/rosetta/pofile.html:82
|
||||
#: templates/rosetta/pofile.html:76 templates/rosetta/pofile.html.py:79
|
||||
#: templates/rosetta/pofile.html:94 templates/rosetta/pofile.html.py:97
|
||||
msgid "Context hint"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:104
|
||||
msgid "suggest"
|
||||
msgstr ""
|
||||
|
||||
#: templates/rosetta/pofile.html:93
|
||||
#: templates/rosetta/pofile.html:115
|
||||
#, python-format
|
||||
msgid "%(more_count)s more"
|
||||
msgid_plural "%(more_count)s more"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
#: templates/rosetta/pofile.html:105
|
||||
#: templates/rosetta/pofile.html:127
|
||||
msgid "Save and translate next block"
|
||||
msgstr "Записати і перекласти наступний блок"
|
||||
|
||||
#: templates/rosetta/pofile.html:109
|
||||
#: templates/rosetta/pofile.html:131
|
||||
msgid "Skip to page:"
|
||||
msgstr "Перейти до сторінки:"
|
||||
|
||||
#: templates/rosetta/pofile.html:122
|
||||
#: templates/rosetta/pofile.html:144
|
||||
msgid "Displaying:"
|
||||
msgstr "Відображення:"
|
||||
|
||||
#: templates/rosetta/pofile.html:124
|
||||
#: templates/rosetta/pofile.html:148
|
||||
#, python-format
|
||||
msgid "%(hits)s/%(message_number)s message"
|
||||
msgid_plural "%(hits)s/%(message_number)s messages"
|
||||
msgstr[0] "%(hits)s/%(message_number)s повідомлення"
|
||||
msgstr[1] "%(hits)s/%(message_number)s повідомлень"
|
||||
msgstr[2] "%(hits)s/%(message_number)s повідомлень"
|
||||
|
||||
#~ msgid "English"
|
||||
#~ msgstr "Англійська"
|
||||
|
|
|
|||
|
|
@ -2,21 +2,21 @@
|
|||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Rosetta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2009-10-21 12:21+0200\n"
|
||||
"POT-Creation-Date: 2014-02-28 13:36+0100\n"
|
||||
"PO-Revision-Date: 2008-09-22 11:02\n"
|
||||
"Last-Translator: Admin Admin <admin@admin.com>\n"
|
||||
"Language-Team: French <LL@li.org>\n"
|
||||
"Language-Team: XX <LL@li.org>\n"
|
||||
"Language: XX\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Translated-Using: django-rosetta 0.4.RC2\n"
|
||||
|
||||
|
||||
msgid "String 1"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
|||
1751
rosetta/polib.py
1751
rosetta/polib.py
File diff suppressed because it is too large
Load diff
|
|
@ -1,21 +1,27 @@
|
|||
from datetime import datetime
|
||||
from django.conf import settings
|
||||
from django.core.cache import cache
|
||||
from django.core.cache import get_cache
|
||||
from rosetta.conf import settings as rosetta_settings
|
||||
import django
|
||||
import os
|
||||
import six
|
||||
import inspect
|
||||
|
||||
try:
|
||||
from django.utils import timezone
|
||||
except:
|
||||
timezone = None
|
||||
|
||||
|
||||
try:
|
||||
set
|
||||
except NameError:
|
||||
from sets import Set as set # Python 2.3 fallback
|
||||
|
||||
if django.VERSION[0:2] >= (1,7):
|
||||
from django.apps import AppConfig
|
||||
from django.apps import apps
|
||||
|
||||
cache = get_cache(rosetta_settings.ROSETTA_CACHE_NAME)
|
||||
|
||||
|
||||
def timestamp_with_timezone(dt=None):
|
||||
"""
|
||||
|
|
@ -77,6 +83,20 @@ def find_pos(lang, project_apps=True, django_apps=False, third_party_apps=False)
|
|||
app = getattr(__import__(appname[:p], {}, {}, [str(appname[p + 1:])]), appname[p + 1:])
|
||||
else:
|
||||
app = __import__(appname, {}, {}, [])
|
||||
# For django 1.7, an imported INSTALLED_APP can be an AppConfig instead
|
||||
# of an app module. This code converts the AppConfig to its application
|
||||
# module.
|
||||
if django.VERSION[0:2] >= (1,7):
|
||||
if inspect.isclass(app) and issubclass(app, AppConfig):
|
||||
app = apps.get_app_config(app.name).module
|
||||
|
||||
try:
|
||||
if issubclass(app, AppConfig):
|
||||
app = apps.get_app_config(app.name).module
|
||||
else:
|
||||
pass
|
||||
except:
|
||||
pass
|
||||
|
||||
apppath = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(app.__file__), 'locale')))
|
||||
|
||||
|
|
@ -92,27 +112,30 @@ def find_pos(lang, project_apps=True, django_apps=False, third_party_apps=False)
|
|||
if not project_apps and abs_project_path in apppath:
|
||||
continue
|
||||
|
||||
|
||||
if os.path.isdir(apppath):
|
||||
paths.append(apppath)
|
||||
|
||||
ret = set()
|
||||
langs = (lang,)
|
||||
langs = [lang, ]
|
||||
if u'-' in lang:
|
||||
_l, _c = map(lambda x: x.lower(), lang.split(u'-'))
|
||||
langs += (u'%s_%s' % (_l, _c), u'%s_%s' % (_l, _c.upper()), )
|
||||
langs += [u'%s_%s' % (_l, _c), u'%s_%s' % (_l, _c.upper()), ]
|
||||
elif u'_' in lang:
|
||||
_l, _c = map(lambda x: x.lower(), lang.split(u'_'))
|
||||
langs += (u'%s-%s' % (_l, _c), u'%s-%s' % (_l, _c.upper()), )
|
||||
langs += [u'%s-%s' % (_l, _c), u'%s-%s' % (_l, _c.upper()), ]
|
||||
|
||||
paths = map(os.path.normpath, paths)
|
||||
paths = list(set(paths))
|
||||
for path in paths:
|
||||
for lang_ in langs:
|
||||
dirname = os.path.join(path, lang_, 'LC_MESSAGES')
|
||||
for fn in ('django.po', 'djangojs.po',):
|
||||
filename = os.path.join(dirname, fn)
|
||||
if os.path.isfile(filename):
|
||||
ret.add(os.path.abspath(filename))
|
||||
# Exclude paths
|
||||
if not path in rosetta_settings.ROSETTA_EXCLUDED_PATHS:
|
||||
for lang_ in langs:
|
||||
dirname = os.path.join(path, lang_, 'LC_MESSAGES')
|
||||
for fn in rosetta_settings.POFILENAMES:
|
||||
filename = os.path.join(dirname, fn)
|
||||
if os.path.isfile(filename):
|
||||
ret.add(os.path.abspath(filename))
|
||||
return list(sorted(ret))
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,15 @@
|
|||
from django.core.cache import cache
|
||||
from django.core.cache import get_cache
|
||||
from django.conf import settings
|
||||
from django.utils import importlib
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from rosetta.conf import settings as rosetta_settings
|
||||
import hashlib
|
||||
import time
|
||||
import six
|
||||
import django
|
||||
|
||||
|
||||
cache = get_cache(rosetta_settings.ROSETTA_CACHE_NAME)
|
||||
|
||||
|
||||
class BaseRosettaStorage(object):
|
||||
|
|
@ -39,6 +44,12 @@ class DummyRosettaStorage(BaseRosettaStorage):
|
|||
|
||||
|
||||
class SessionRosettaStorage(BaseRosettaStorage):
|
||||
def __init__(self, request):
|
||||
super(SessionRosettaStorage, self).__init__(request)
|
||||
|
||||
if 'signed_cookies' in settings.SESSION_ENGINE and django.VERSION[1] >= 6 and 'pickle' not in settings.SESSION_SERIALIZER.lower():
|
||||
raise ImproperlyConfigured("Sorry, but django-rosetta doesn't support the `signed_cookies` SESSION_ENGINE in Django >= 1.6, because rosetta specific session files cannot be serialized.")
|
||||
|
||||
def get(self, key, default=None):
|
||||
if key in self.request.session:
|
||||
return self.request.session[key]
|
||||
|
|
@ -70,7 +81,7 @@ class CacheRosettaStorage(BaseRosettaStorage):
|
|||
raise ImproperlyConfigured("You can't use the CacheRosettaStorage because your Django Session storage doesn't seem to be working. The CacheRosettaStorage relies on the Django Session storage to avoid conflicts.")
|
||||
|
||||
# Make sure we're not using DummyCache
|
||||
if 'dummycache' in settings.CACHES['default']['BACKEND'].lower():
|
||||
if 'dummycache' in settings.CACHES[rosetta_settings.ROSETTA_CACHE_NAME]['BACKEND'].lower():
|
||||
raise ImproperlyConfigured("You can't use the CacheRosettaStorage if your cache isn't correctly set up (you are use the DummyCache cache backend).")
|
||||
|
||||
# Make sure the actually actually works
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
<!DOCTYPE html>{% load url from future %}
|
||||
<!DOCTYPE html>{% load url from future %}{% load admin_static %}
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<title>{% block pagetitle %}Rosetta{% endblock %}</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
|
||||
<link rel="stylesheet" href="{{ADMIN_MEDIA_PREFIX}}css/base.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="{{ADMIN_MEDIA_PREFIX}}css/forms.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="{{ADMIN_MEDIA_PREFIX}}css/changelists.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="{% static "admin/css/base.css" %}" type="text/css"/>
|
||||
<link rel="stylesheet" href="{% static "admin/css/forms.css" %}" type="text/css"/>
|
||||
<link rel="stylesheet" href="{% static "admin/css/changelists.css" %}" type="text/css"/>
|
||||
<style type="text/css" media="screen">
|
||||
{% include 'rosetta/css/rosetta.css' %}
|
||||
</style>
|
||||
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
|
||||
<script src="//www.google.com/jsapi" type="text/javascript"></script>
|
||||
<script type="text/javascript">
|
||||
//<!--
|
||||
google.load("jquery", "1.3");
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ google.setOnLoadCallback(function() {
|
|||
$('.hide', $(this).parent()).hide();
|
||||
});
|
||||
|
||||
{% if rosetta_settings.ENABLE_TRANSLATION_SUGGESTIONS and rosetta_settings.BING_APP_ID %}
|
||||
{% if rosetta_settings.ENABLE_TRANSLATION_SUGGESTIONS and rosetta_settings.AZURE_CLIENT_ID and rosetta_settings.AZURE_CLIENT_SECRET %}
|
||||
$('a.suggest').click(function(e){
|
||||
e.preventDefault();
|
||||
var a = $(this);
|
||||
|
|
@ -16,30 +16,63 @@ google.setOnLoadCallback(function() {
|
|||
var trans=$('textarea',a.parent());
|
||||
var sourceLang = '{{ rosetta_settings.MESSAGES_SOURCE_LANGUAGE_CODE }}';
|
||||
var destLang = '{{ rosetta_i18n_lang_code }}';
|
||||
var app_id = '{{ rosetta_settings.BING_APP_ID }}';
|
||||
var apiUrl = "http://api.microsofttranslator.com/V2/Ajax.svc/Translate";
|
||||
|
||||
orig = unescape(orig).replace(/<br\s?\/?>/g,'\n').replace(/<code>/,'').replace(/<\/code>/g,'').replace(/>/g,'>').replace(/</g,'<');
|
||||
a.attr('class','suggesting').html('...');
|
||||
window.onTranslationComplete = function(resp) {
|
||||
trans.val(unescape(resp).replace(/'/g,'\'').replace(/"/g,'"').replace(/%\s+(\([^\)]+\))\s*s/g,' %$1s '));
|
||||
a.hide();
|
||||
};
|
||||
window.onTranslationError = function(response){
|
||||
a.text(response);
|
||||
};
|
||||
|
||||
$.getJSON("/rosetta/translate/", {
|
||||
from: sourceLang,
|
||||
to: destLang,
|
||||
text: orig
|
||||
},
|
||||
function(data) {
|
||||
if (data.success){
|
||||
trans.val(unescape(data.translation).replace(/'/g,'\'').replace(/"/g,'"').replace(/%\s+(\([^\)]+\))\s*s/g,' %$1s '));
|
||||
a.hide();
|
||||
} else {
|
||||
a.text(data.error);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
{% endif %}
|
||||
|
||||
{% if rosetta_settings.ENABLE_TRANSLATION_SUGGESTIONS and rosetta_settings.YANDEX_TRANSLATE_KEY %}
|
||||
$('a.suggest').click(function(e){
|
||||
e.preventDefault();
|
||||
var a = $(this);
|
||||
var str = a.html();
|
||||
var orig = $('.original .message', a.parents('tr')).html();
|
||||
var trans=$('textarea',a.parent());
|
||||
var apiUrl = "https://translate.yandex.net/api/v1.5/tr.json/translate";
|
||||
|
||||
a.attr('class','suggesting').html('...');
|
||||
|
||||
var apiData = {
|
||||
onerror: 'onTranslationError',
|
||||
appid: app_id,
|
||||
from: sourceLang,
|
||||
to: destLang,
|
||||
oncomplete: "onTranslationComplete",
|
||||
error: 'onTranslationError',
|
||||
success: 'onTranslationComplete',
|
||||
lang: '{{ rosetta_settings.MESSAGES_SOURCE_LANGUAGE_CODE }}-{{ rosetta_i18n_lang_code }}',
|
||||
key: '{{ rosetta_settings.YANDEX_TRANSLATE_KEY }}',
|
||||
format: 'html',
|
||||
text: orig
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
url: apiUrl,
|
||||
data: apiData,
|
||||
dataType: 'jsonp'});
|
||||
dataType: 'jsonp',
|
||||
success: function(response) {
|
||||
if (response.code == 200) {
|
||||
trans.val(response.text[0]);
|
||||
a.hide();
|
||||
} else {
|
||||
a.text(response);
|
||||
}
|
||||
},
|
||||
error: function(response) {
|
||||
a.text(response);
|
||||
}
|
||||
});
|
||||
});
|
||||
{% endif %}
|
||||
|
||||
|
|
@ -50,7 +83,7 @@ google.setOnLoadCallback(function() {
|
|||
$($('.part',td).get(j)).css('top',textareaY + 'px');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
$('.translation textarea').blur(function() {
|
||||
if($(this).val()) {
|
||||
$('.alert', $(this).parents('tr')).remove();
|
||||
|
|
@ -78,5 +111,5 @@ google.setOnLoadCallback(function() {
|
|||
});
|
||||
|
||||
$('.translation textarea').eq(0).focus();
|
||||
|
||||
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{% extends "rosetta/base.html" %}
|
||||
{% extends "rosetta/base.html" %}{% load admin_static %}
|
||||
{% load rosetta i18n %}
|
||||
{% load url from future %}
|
||||
|
||||
|
|
@ -49,23 +49,14 @@
|
|||
|
||||
<div id="changelist" class="module{% if rosetta_i18n_lang_bidi %} rtl{% endif %}">
|
||||
<div id="toolbar">
|
||||
<form id="changelist-search" action="" method="post">
|
||||
<div>
|
||||
{% rosetta_csrf_token %}
|
||||
<label for="searchbar"><img src="{{ADMIN_IMAGE_DIR}}/icon_searchbox.png" alt="{% trans "Search" %}" /></label>
|
||||
<input type="text" size="40" name="query" value="{% if query %}{{query}}{% endif %}" id="searchbar" tabindex="0" />
|
||||
<input type="submit" name="search" value="{% trans "Go" %}" />
|
||||
</div>
|
||||
</form>
|
||||
{% comment %}
|
||||
{% if rosetta_settings.ENABLE_TRANSLATION_SUGGESTIONS %}
|
||||
<form id="translate-all">
|
||||
<div>
|
||||
<input type="submit" class="googleall" value="{% trans "Suggest All Translations" %}" />
|
||||
</div>
|
||||
</form>
|
||||
{% endif %}
|
||||
{% endcomment %}
|
||||
<form id="changelist-search" action="" method="post">
|
||||
<div>
|
||||
{% rosetta_csrf_token %}
|
||||
<label for="searchbar"><img src="{% static "admin/img/icon_searchbox.png" %}" alt="{% trans "Search" %}" /></label>
|
||||
<input type="text" size="40" name="query" value="{% if query %}{{query}}{% endif %}" id="searchbar" tabindex="0" />
|
||||
<input type="submit" name="search" value="{% trans "Go" %}" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<form method="post" action="">
|
||||
|
|
|
|||
|
|
@ -1,573 +1,2 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.template.defaultfilters import floatformat
|
||||
from django.test import TestCase
|
||||
from django.test.client import Client
|
||||
from rosetta.conf import settings as rosetta_settings
|
||||
from rosetta.signals import entry_changed, post_save
|
||||
import os
|
||||
import shutil
|
||||
import six
|
||||
import django
|
||||
|
||||
|
||||
try:
|
||||
from django.dispatch import receiver
|
||||
except ImportError:
|
||||
# We might be in django < 1.3, so backport this function
|
||||
def receiver(signal, **kwargs):
|
||||
def _decorator(func):
|
||||
signal.connect(func, **kwargs)
|
||||
return func
|
||||
return _decorator
|
||||
|
||||
|
||||
class RosettaTestCase(TestCase):
|
||||
urls = 'rosetta.tests.urls'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(RosettaTestCase, self).__init__(*args, **kwargs)
|
||||
self.curdir = os.path.dirname(__file__)
|
||||
self.dest_file = os.path.normpath(os.path.join(self.curdir, '../locale/xx/LC_MESSAGES/django.po'))
|
||||
self.django_version_major, self.django_version_minor = django.VERSION[0], django.VERSION[1]
|
||||
|
||||
def setUp(self):
|
||||
user = User.objects.create_user('test_admin', 'test@test.com', 'test_password')
|
||||
user2 = User.objects.create_user('test_admin2', 'test@test2.com', 'test_password')
|
||||
user3 = User.objects.create_user('test_admin3', 'test@test2.com', 'test_password')
|
||||
|
||||
user.is_superuser, user2.is_superuser, user3.is_superuser = True, True, True
|
||||
user.is_staff, user2.is_staff, user3.is_staff = True, True, False
|
||||
|
||||
user.save()
|
||||
user2.save()
|
||||
user3.save()
|
||||
|
||||
self.client2 = Client()
|
||||
|
||||
self.client.login(username='test_admin', password='test_password')
|
||||
self.client2.login(username='test_admin2', password='test_password')
|
||||
|
||||
settings.LANGUAGES = (('xx', 'dummy language'),)
|
||||
|
||||
shutil.copy(self.dest_file, self.dest_file + '.orig')
|
||||
|
||||
def tearDown(self):
|
||||
shutil.move(self.dest_file + '.orig', self.dest_file)
|
||||
|
||||
def test_1_ListLoading(self):
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue(os.path.normpath('rosetta/locale/xx/LC_MESSAGES/django.po') in str(r.content))
|
||||
|
||||
def test_2_PickFile(self):
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0,), kwargs=dict()) + '?rosetta')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
self.assertTrue('dummy language' in str(r.content))
|
||||
|
||||
def test_3_DownloadZIP(self):
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()) + '?rosetta')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
r = self.client.get(reverse('rosetta-download-file') + '?rosetta')
|
||||
self.assertTrue('content-type' in r._headers.keys())
|
||||
self.assertTrue('application/x-zip' in r._headers.get('content-type'))
|
||||
|
||||
def test_4_DoChanges(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.template')), self.dest_file)
|
||||
|
||||
# Load the template file
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
# make sure both strings are untranslated
|
||||
self.assertTrue('dummy language' in str(r.content))
|
||||
self.assertTrue('String 1' in str(r.content))
|
||||
self.assertTrue('String 2' in str(r.content))
|
||||
self.assertTrue('m_e48f149a8b2e8baa81b816c0edf93890' in str(r.content))
|
||||
|
||||
# post a translation
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world', _next='_next'))
|
||||
|
||||
# reload all untranslated strings
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()) + '?rosetta')
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
# the translated string no longer is up for translation
|
||||
self.assertTrue('String 1' in str(r.content))
|
||||
self.assertTrue('String 2' not in str(r.content))
|
||||
|
||||
# display only translated strings
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=translated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
# The tranlsation was persisted
|
||||
self.assertTrue('String 1' not in str(r.content))
|
||||
self.assertTrue('String 2' in str(r.content))
|
||||
self.assertTrue('Hello, world' in str(r.content))
|
||||
|
||||
def test_5_TestIssue67(self):
|
||||
# testcase for issue 67: http://code.google.com/p/django-rosetta/issues/detail?id=67
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue67.template')), self.dest_file)
|
||||
# Make sure the plurals string is valid
|
||||
f_ = open(self.dest_file, 'rb')
|
||||
content = f_.read()
|
||||
f_.close()
|
||||
self.assertTrue('Hello, world' not in six.text_type(content))
|
||||
self.assertTrue('|| n%100>=20) ? 1 : 2)' in six.text_type(content))
|
||||
del(content)
|
||||
|
||||
# Load the template file
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()) + '?rosetta')
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
# make sure all strings are untranslated
|
||||
self.assertTrue('dummy language' in str(r.content))
|
||||
self.assertTrue('String 1' in str(r.content))
|
||||
self.assertTrue('String 2' in str(r.content))
|
||||
self.assertTrue('m_e48f149a8b2e8baa81b816c0edf93890' in str(r.content))
|
||||
|
||||
# post a translation
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world', _next='_next'))
|
||||
|
||||
# Make sure the plurals string is still valid
|
||||
f_ = open(self.dest_file, 'rb')
|
||||
content = f_.read()
|
||||
f_.close()
|
||||
self.assertTrue('Hello, world' in str(content))
|
||||
self.assertTrue('|| n%100>=20) ? 1 : 2)' in str(content))
|
||||
self.assertTrue('or n%100>=20) ? 1 : 2)' not in str(content))
|
||||
del(content)
|
||||
|
||||
def test_6_ExcludedApps(self):
|
||||
|
||||
rosetta_settings.EXCLUDED_APPLICATIONS = ('rosetta',)
|
||||
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue('rosetta/locale/xx/LC_MESSAGES/django.po' not in str(r.content))
|
||||
|
||||
rosetta_settings.EXCLUDED_APPLICATIONS = ()
|
||||
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?rosetta')
|
||||
self.assertTrue('rosetta/locale/xx/LC_MESSAGES/django.po' in str(r.content))
|
||||
|
||||
def test_7_selfInApplist(self):
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue('rosetta/locale/xx/LC_MESSAGES/django.po' in str(r.content))
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=project')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue('rosetta/locale/xx/LC_MESSAGES/django.po' not in str(r.content))
|
||||
|
||||
def test_8_hideObsoletes(self):
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
|
||||
# not in listing
|
||||
for p in range(1, 5):
|
||||
r = self.client.get(reverse('rosetta-home') + '?page=%d' % p)
|
||||
self.assertTrue('dummy language' in str(r.content))
|
||||
self.assertTrue('Les deux' not in str(r.content))
|
||||
|
||||
r = self.client.get(reverse('rosetta-home') + '?query=Les%20Deux')
|
||||
self.assertTrue('dummy language' in str(r.content))
|
||||
self.assertTrue('Les deux' not in str(r.content))
|
||||
|
||||
def test_9_concurrency(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.template')), self.dest_file)
|
||||
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client2.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
|
||||
self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
self.client2.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
|
||||
# Load the template file
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
r2 = self.client2.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r2 = self.client2.get(reverse('rosetta-home'))
|
||||
|
||||
self.assertTrue('String 1' in str(r.content))
|
||||
self.assertTrue('String 1' in str(r2.content))
|
||||
self.assertTrue('m_08e4e11e2243d764fc45a5a4fba5d0f2' in str(r.content))
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_08e4e11e2243d764fc45a5a4fba5d0f2='Hello, world', _next='_next'), follow=True)
|
||||
r2 = self.client2.get(reverse('rosetta-home'))
|
||||
|
||||
# Client 2 reloads the home, forces a reload of the catalog,
|
||||
# the untranslated string1 is now translated
|
||||
self.assertTrue('String 1' not in str(r2.content))
|
||||
self.assertTrue('String 2' in str(r2.content))
|
||||
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
r2 = self.client2.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r2 = self.client2.get(reverse('rosetta-home'))
|
||||
|
||||
self.assertTrue('String 2' in str(r2.content) and 'm_e48f149a8b2e8baa81b816c0edf93890' in str(r2.content))
|
||||
self.assertTrue('String 2' in str(r.content) and 'm_e48f149a8b2e8baa81b816c0edf93890' in str(r.content))
|
||||
|
||||
# client 2 posts!
|
||||
r2 = self.client2.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world, from client two!', _next='_next'), follow=True)
|
||||
|
||||
self.assertTrue('save-conflict' not in str(r2.content))
|
||||
|
||||
# uh-oh here comes client 1
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world, from client one!', _next='_next'), follow=True)
|
||||
# An error message is displayed
|
||||
self.assertTrue('save-conflict' in str(r.content))
|
||||
|
||||
# client 2 won
|
||||
pofile_content = open(self.dest_file, 'r').read()
|
||||
self.assertTrue('Hello, world, from client two!' in pofile_content)
|
||||
|
||||
# Both clients show all strings, error messages are gone
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=translated')
|
||||
self.assertTrue('save-conflict' not in str(r.content))
|
||||
r2 = self.client2.get(reverse('rosetta-home') + '?filter=translated')
|
||||
self.assertTrue('save-conflict' not in str(r2.content))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('save-conflict' not in str(r.content))
|
||||
r2 = self.client2.get(reverse('rosetta-home'))
|
||||
self.assertTrue('save-conflict' not in str(r2.content))
|
||||
|
||||
# Both have client's two version
|
||||
self.assertTrue('Hello, world, from client two!' in str(r.content))
|
||||
self.assertTrue('Hello, world, from client two!' in str(r2.content))
|
||||
self.assertTrue('save-conflict' not in str(r2.content))
|
||||
self.assertTrue('save-conflict' not in str(r.content))
|
||||
|
||||
def test_10_issue_79_num_entries(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue79.template')), self.dest_file)
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
|
||||
self.assertTrue('<td class="ch-messages r">1</td>' in str(r.content))
|
||||
self.assertTrue('<td class="ch-progress r">%s%%</td>' % str(floatformat(0.0, 2)) in str(r.content))
|
||||
self.assertTrue('<td class="ch-obsolete r">1</td>' in str(r.content))
|
||||
|
||||
def test_11_issue_80_tab_indexes(self):
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0,), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('tabindex="3"' in str(r.content))
|
||||
|
||||
def test_12_issue_82_staff_user(self):
|
||||
settings.ROSETTA_REQUIRES_AUTH = True
|
||||
|
||||
self.client3 = Client()
|
||||
self.client3.login(username='test_admin3', password='test_password')
|
||||
|
||||
self.client3.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client3.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client3.get(reverse('rosetta-home'))
|
||||
self.assertTrue(not r.content)
|
||||
|
||||
settings.ROSETTA_REQUIRES_AUTH = False
|
||||
|
||||
self.client3.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client3.get(reverse('rosetta-language-selection', args=('xx', 0,), kwargs=dict()))
|
||||
r = self.client3.get(reverse('rosetta-home'))
|
||||
self.assertFalse(not r.content)
|
||||
|
||||
def test_13_catalog_filters(self):
|
||||
settings.LANGUAGES = (('fr', 'French'), ('xx', 'Dummy Language'),)
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue(os.path.normpath('rosetta/locale/xx/LC_MESSAGES/django.po') in str(r.content))
|
||||
self.assertTrue(('contrib') not in str(r.content))
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=django')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue(os.path.normpath('rosetta/locale/xx/LC_MESSAGES/django.po') not in str(r.content))
|
||||
|
||||
if self.django_version_major >= 1 and self.django_version_minor >= 3:
|
||||
self.assertTrue(('contrib') in str(r.content))
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=all')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue(os.path.normpath('rosetta/locale/xx/LC_MESSAGES/django.po') in str(r.content))
|
||||
|
||||
if self.django_version_major >= 1 and self.django_version_minor >= 3:
|
||||
self.assertTrue(('contrib') in str(r.content))
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=project')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue(os.path.normpath('rosetta/locale/xx/LC_MESSAGES/django.po') not in str(r.content))
|
||||
if self.django_version_major >= 1 and self.django_version_minor >= 3:
|
||||
self.assertTrue(('contrib') not in str(r.content))
|
||||
|
||||
def test_14_issue_99_context_and_comments(self):
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('This is a text of the base template' in str(r.content))
|
||||
self.assertTrue('Context hint' in str(r.content))
|
||||
|
||||
def test_14_issue_87_entry_changed_signal(self):
|
||||
# copy the template file
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0,), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
@receiver(entry_changed)
|
||||
def test_receiver(sender, **kwargs):
|
||||
self.test_old_msgstr = kwargs.get('old_msgstr')
|
||||
self.test_new_msgstr = sender.msgstr
|
||||
self.test_msg_id = sender.msgid
|
||||
self.assertTrue('m_e48f149a8b2e8baa81b816c0edf93890' in str(r.content))
|
||||
|
||||
# post a translation
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world', _next='_next'))
|
||||
|
||||
self.assertTrue(self.test_old_msgstr == '')
|
||||
self.assertTrue(self.test_new_msgstr == 'Hello, world')
|
||||
self.assertTrue(self.test_msg_id == 'String 2')
|
||||
|
||||
del(self.test_old_msgstr, self.test_new_msgstr, self.test_msg_id)
|
||||
|
||||
def test_15_issue_101_post_save_signal(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.template')), self.dest_file)
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
@receiver(post_save)
|
||||
def test_receiver(sender, **kwargs):
|
||||
self.test_sig_lang = kwargs.get('language_code')
|
||||
|
||||
self.assertTrue('m_e48f149a8b2e8baa81b816c0edf93890' in str(r.content))
|
||||
|
||||
# post a translation
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world', _next='_next'))
|
||||
|
||||
self.assertTrue(self.test_sig_lang == 'xx')
|
||||
del(self.test_sig_lang)
|
||||
|
||||
def test_16_issue_103_post_save_signal_has_request(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
@receiver(post_save)
|
||||
def test_receiver(sender, **kwargs):
|
||||
self.test_16_has_request = 'request' in kwargs
|
||||
|
||||
self.assertTrue('m_e48f149a8b2e8baa81b816c0edf93890' in str(r.content))
|
||||
|
||||
# post a translation
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world', _next='_next'))
|
||||
|
||||
self.assertTrue(self.test_16_has_request)
|
||||
del(self.test_16_has_request)
|
||||
# reset the original file
|
||||
|
||||
def test_17_Test_Issue_gh24(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue24gh.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0, ), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
self.assertTrue('m_bb9d8fe6159187b9ea494c1b313d23d4' in str(r.content))
|
||||
|
||||
# post a translation, it should have properly wrapped lines
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_bb9d8fe6159187b9ea494c1b313d23d4='Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium.', _next='_next'))
|
||||
pofile_content = open(self.dest_file, 'r').read()
|
||||
self.assertTrue('"pede mollis pretium."' in pofile_content)
|
||||
|
||||
# Again, with unwrapped lines
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue24gh.template')), self.dest_file)
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0, ), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('m_bb9d8fe6159187b9ea494c1b313d23d4' in str(r.content))
|
||||
rosetta_settings.POFILE_WRAP_WIDTH = 0
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_bb9d8fe6159187b9ea494c1b313d23d4='Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium.', _next='_next'))
|
||||
pofile_content = open(self.dest_file, 'r').read()
|
||||
self.assertTrue('felis eu pede mollis pretium."' in pofile_content)
|
||||
|
||||
def test_18_Test_Issue_gh34(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue34gh.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0, ), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('m_ff7060c1a9aae9c42af4d54ac8551f67_1' in str(r.content))
|
||||
self.assertTrue('m_ff7060c1a9aae9c42af4d54ac8551f67_0' in str(r.content))
|
||||
self.assertTrue('m_09f7e02f1290be211da707a266f153b3' in str(r.content))
|
||||
|
||||
# post a translation, it should have properly wrapped lines
|
||||
r = self.client.post(reverse('rosetta-home'), dict(
|
||||
m_ff7060c1a9aae9c42af4d54ac8551f67_0='Foo %s',
|
||||
m_ff7060c1a9aae9c42af4d54ac8551f67_1='Bar %s',
|
||||
m_09f7e02f1290be211da707a266f153b3='Salut', _next='_next'))
|
||||
pofile_content = open(self.dest_file, 'r').read()
|
||||
self.assertTrue('msgstr "Salut\\n"' in pofile_content)
|
||||
self.assertTrue('msgstr[0] ""\n"\\n"\n"Foo %s\\n"' in pofile_content)
|
||||
self.assertTrue('msgstr[1] ""\n"\\n"\n"Bar %s\\n"' in pofile_content)
|
||||
|
||||
def test_19_Test_Issue_gh38(self):
|
||||
if self.django_version_minor >= 4 and self.django_version_major >= 1:
|
||||
self.assertTrue('django.contrib.sessions.middleware.SessionMiddleware' in settings.MIDDLEWARE_CLASSES)
|
||||
|
||||
settings.SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"
|
||||
|
||||
# One: cache backend
|
||||
rosetta_settings.STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage'
|
||||
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue38gh.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
self.client.get(reverse('rosetta-language-selection', args=('xx', 0, ), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertFalse(len(str(self.client.cookies.get('sessionid'))) > 4096)
|
||||
self.assertTrue('m_9efd113f7919952523f06e0d88da9c54' in str(r.content))
|
||||
r = self.client.post(reverse('rosetta-home'), dict(
|
||||
m_9efd113f7919952523f06e0d88da9c54='Testing cookie length',
|
||||
_next='_next'
|
||||
))
|
||||
pofile_content = open(self.dest_file, 'r').read()
|
||||
self.assertTrue('Testing cookie length' in pofile_content)
|
||||
|
||||
self.client.get(reverse('rosetta-home') + '?filter=translated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('Testing cookie length' in str(r.content))
|
||||
self.assertTrue('m_9f6c442c6d579707440ba9dada0fb373' in str(r.content))
|
||||
|
||||
# Two, the cookie backend
|
||||
rosetta_settings.STORAGE_CLASS = 'rosetta.storage.SessionRosettaStorage'
|
||||
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue38gh.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
self.client.get(reverse('rosetta-language-selection', args=('xx', 0, ), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue(len(str(self.client.cookies.get('sessionid'))) > 4096)
|
||||
# boom: be a good browser, truncate the cookie
|
||||
self.client.cookies['sessionid'] = six.text_type(self.client.cookies.get('sessionid'))[:4096]
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
self.assertFalse('m_9efd113f7919952523f06e0d88da9c54' in str(r.content))
|
||||
|
||||
def test_20_concurrency_of_cache_backend(self):
|
||||
rosetta_settings.STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage'
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue38gh.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
self.client.get(reverse('rosetta-language-selection', args=('xx', 0, ), kwargs=dict()))
|
||||
|
||||
self.client2.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
self.client2.get(reverse('rosetta-language-selection', args=('xx', 0, ), kwargs=dict()))
|
||||
|
||||
self.assertTrue(self.client.session.get('rosetta_cache_storage_key_prefix') != self.client2.session.get('rosetta_cache_storage_key_prefix'))
|
||||
|
||||
def test_21_Test_Issue_gh39(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue39gh.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
# We have distinct hashes, even though the msgid and msgstr are identical
|
||||
#print (r.content)
|
||||
self.assertTrue('m_4765f7de94996d3de5975fa797c3451f' in str(r.content))
|
||||
self.assertTrue('m_08e4e11e2243d764fc45a5a4fba5d0f2' in str(r.content))
|
||||
|
||||
def test_22_save_header_data(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.template')), self.dest_file)
|
||||
|
||||
unicode_user = User.objects.create_user('test_unicode', 'save_header_data@test.com', 'test_unicode')
|
||||
unicode_user.first_name = "aéaéaé aàaàaàa"
|
||||
unicode_user.last_name = "aâââ üüüü"
|
||||
unicode_user.is_superuser, unicode_user.is_staff = True, True
|
||||
unicode_user.save()
|
||||
|
||||
self.client.login(username='test_unicode', password='test_unicode')
|
||||
|
||||
# Load the template file
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
# make sure both strings are untranslated
|
||||
self.assertTrue('dummy language' in str(r.content))
|
||||
self.assertTrue('String 1' in str(r.content))
|
||||
self.assertTrue('String 2' in str(r.content))
|
||||
self.assertTrue('m_e48f149a8b2e8baa81b816c0edf93890' in str(r.content))
|
||||
|
||||
# post a translation
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world', _next='_next'))
|
||||
# read the result
|
||||
f_ = open(self.dest_file, 'rb')
|
||||
content = six.text_type(f_.read())
|
||||
f_.close()
|
||||
#print (content)
|
||||
# make sure unicode data was properly converted to ascii
|
||||
self.assertTrue('Hello, world' in content)
|
||||
self.assertTrue('save_header_data@test.com' in content)
|
||||
self.assertTrue('aeaeae aaaaaaa aaaa uuuu' in content)
|
||||
|
||||
def test_23_percent_transaltion(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.template')), self.dest_file)
|
||||
|
||||
# Load the template file
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
self.assertTrue('Progress: 0.00%' in str(r.content))
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world', _next='_next'))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('Progress: 25.00%' in str(r.content))
|
||||
|
||||
def test_24_replace_access_control(self):
|
||||
# Test default access control allows access
|
||||
url = reverse('rosetta-home')
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(200, response.status_code)
|
||||
|
||||
# Now replace access control, and check we get redirected
|
||||
settings.ROSETTA_ACCESS_CONTROL_FUNCTION = 'rosetta.tests.no_access'
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(302, response.status_code)
|
||||
|
||||
# Restore setting to default
|
||||
settings.ROSETTA_ACCESS_CONTROL_FUNCTION = None
|
||||
|
||||
def test_25_reflang(self):
|
||||
rosetta_settings.ENABLE_REFLANG = True
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue60.template')), self.dest_file)
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
# Verify that there's an option to select a reflang
|
||||
self.assertTrue('<option value="/rosetta/select-ref/xx/">dummy language</option>' in str(r.content))
|
||||
|
||||
r = self.client.get('/rosetta/select-ref/xx/')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
# The translated string in the test PO file ends up in the "Reference" column
|
||||
self.assertTrue('<span class="message">translated-string1</span>' in str(r.content))
|
||||
|
||||
|
||||
# Stubbed access control function
|
||||
def no_access(user):
|
||||
return False
|
||||
from .tests import *
|
||||
from microsofttranslator.test import *
|
||||
|
|
|
|||
27
rosetta/tests/pr44.po.template
Normal file
27
rosetta/tests/pr44.po.template
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Rosetta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2009-10-21 12:21+0200\n"
|
||||
"PO-Revision-Date: 2008-09-22 11:02\n"
|
||||
"Last-Translator: Admin Admin <admin@admin.com>\n"
|
||||
"Language-Team: French <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Translated-Using: django-rosetta 0.4.RC2\n"
|
||||
|
||||
|
||||
msgid "String 1"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "String 2"
|
||||
#~ msgstr ""
|
||||
|
||||
|
||||
|
||||
675
rosetta/tests/tests.py
Normal file
675
rosetta/tests/tests.py
Normal file
|
|
@ -0,0 +1,675 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User, Group
|
||||
from django.core.urlresolvers import reverse, resolve
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.core.cache import cache
|
||||
from django.template.defaultfilters import floatformat
|
||||
from django.test import TestCase
|
||||
from django.test.client import Client
|
||||
from rosetta.conf import settings as rosetta_settings
|
||||
from rosetta.signals import entry_changed, post_save
|
||||
import os
|
||||
import shutil
|
||||
import six
|
||||
import django
|
||||
|
||||
|
||||
try:
|
||||
from django.dispatch import receiver
|
||||
except ImportError:
|
||||
# We might be in django < 1.3, so backport this function
|
||||
def receiver(signal, **kwargs):
|
||||
def _decorator(func):
|
||||
signal.connect(func, **kwargs)
|
||||
return func
|
||||
return _decorator
|
||||
|
||||
|
||||
class RosettaTestCase(TestCase):
|
||||
urls = 'rosetta.tests.urls'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(RosettaTestCase, self).__init__(*args, **kwargs)
|
||||
self.curdir = os.path.dirname(__file__)
|
||||
self.dest_file = os.path.normpath(os.path.join(self.curdir, '../locale/xx/LC_MESSAGES/django.po'))
|
||||
self.django_version_major, self.django_version_minor = django.VERSION[0], django.VERSION[1]
|
||||
|
||||
def setUp(self):
|
||||
user = User.objects.create_user('test_admin', 'test@test.com', 'test_password')
|
||||
user2 = User.objects.create_user('test_admin2', 'test@test2.com', 'test_password')
|
||||
user3 = User.objects.create_user('test_admin3', 'test@test2.com', 'test_password')
|
||||
|
||||
user.is_superuser, user2.is_superuser, user3.is_superuser = True, True, True
|
||||
user.is_staff, user2.is_staff, user3.is_staff = True, True, False
|
||||
|
||||
user.save()
|
||||
user2.save()
|
||||
user3.save()
|
||||
|
||||
self.client2 = Client()
|
||||
|
||||
self.client.login(username='test_admin', password='test_password')
|
||||
self.client2.login(username='test_admin2', password='test_password')
|
||||
|
||||
self.__old_settings_languages = settings.LANGUAGES
|
||||
settings.LANGUAGES = (('xx', 'dummy language'), ('fr_FR.utf8', 'French (France), UTF8'))
|
||||
|
||||
self.__session_engine = settings.SESSION_ENGINE
|
||||
self.__storage_class = rosetta_settings.STORAGE_CLASS
|
||||
self.__require_auth = rosetta_settings.ROSETTA_REQUIRES_AUTH
|
||||
|
||||
shutil.copy(self.dest_file, self.dest_file + '.orig')
|
||||
|
||||
def tearDown(self):
|
||||
settings.LANGUAGES = self.__old_settings_languages
|
||||
settings.SESSION_ENGINE = self.__session_engine
|
||||
rosetta_settings.STORAGE_CLASS = self.__storage_class
|
||||
rosetta_settings.ROSETTA_REQUIRES_AUTH = self.__require_auth
|
||||
shutil.move(self.dest_file + '.orig', self.dest_file)
|
||||
|
||||
def test_1_ListLoading(self):
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue(os.path.normpath('rosetta/locale/xx/LC_MESSAGES/django.po') in str(r.content))
|
||||
|
||||
def test_2_PickFile(self):
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0,), kwargs=dict()) + '?rosetta')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
self.assertTrue('dummy language' in str(r.content))
|
||||
|
||||
def test_3_DownloadZIP(self):
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()) + '?rosetta')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
r = self.client.get(reverse('rosetta-download-file') + '?rosetta')
|
||||
self.assertTrue('content-type' in r._headers.keys())
|
||||
self.assertTrue('application/x-zip' in r._headers.get('content-type'))
|
||||
|
||||
def test_4_DoChanges(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.template')), self.dest_file)
|
||||
|
||||
# Load the template file
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
# make sure both strings are untranslated
|
||||
self.assertTrue('dummy language' in str(r.content))
|
||||
self.assertTrue('String 1' in str(r.content))
|
||||
self.assertTrue('String 2' in str(r.content))
|
||||
self.assertTrue('m_e48f149a8b2e8baa81b816c0edf93890' in str(r.content))
|
||||
|
||||
# post a translation
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world', _next='_next'))
|
||||
|
||||
# reload all untranslated strings
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()) + '?rosetta')
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
# the translated string no longer is up for translation
|
||||
self.assertTrue('String 1' in str(r.content))
|
||||
self.assertTrue('String 2' not in str(r.content))
|
||||
|
||||
# display only translated strings
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=translated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
# The tranlsation was persisted
|
||||
self.assertTrue('String 1' not in str(r.content))
|
||||
self.assertTrue('String 2' in str(r.content))
|
||||
self.assertTrue('Hello, world' in str(r.content))
|
||||
|
||||
def test_5_TestIssue67(self):
|
||||
# testcase for issue 67: http://code.google.com/p/django-rosetta/issues/detail?id=67
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue67.template')), self.dest_file)
|
||||
# Make sure the plurals string is valid
|
||||
f_ = open(self.dest_file, 'rb')
|
||||
content = f_.read()
|
||||
f_.close()
|
||||
self.assertTrue('Hello, world' not in six.text_type(content))
|
||||
self.assertTrue('|| n%100>=20) ? 1 : 2)' in six.text_type(content))
|
||||
del(content)
|
||||
|
||||
# Load the template file
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()) + '?rosetta')
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
# make sure all strings are untranslated
|
||||
self.assertTrue('dummy language' in str(r.content))
|
||||
self.assertTrue('String 1' in str(r.content))
|
||||
self.assertTrue('String 2' in str(r.content))
|
||||
self.assertTrue('m_e48f149a8b2e8baa81b816c0edf93890' in str(r.content))
|
||||
|
||||
# post a translation
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world', _next='_next'))
|
||||
|
||||
# Make sure the plurals string is still valid
|
||||
f_ = open(self.dest_file, 'rb')
|
||||
content = f_.read()
|
||||
f_.close()
|
||||
self.assertTrue('Hello, world' in str(content))
|
||||
self.assertTrue('|| n%100>=20) ? 1 : 2)' in str(content))
|
||||
self.assertTrue('or n%100>=20) ? 1 : 2)' not in str(content))
|
||||
del(content)
|
||||
|
||||
def test_6_ExcludedApps(self):
|
||||
|
||||
rosetta_settings.EXCLUDED_APPLICATIONS = ('rosetta',)
|
||||
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue('rosetta/locale/xx/LC_MESSAGES/django.po' not in str(r.content))
|
||||
|
||||
rosetta_settings.EXCLUDED_APPLICATIONS = ()
|
||||
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?rosetta')
|
||||
self.assertTrue('rosetta/locale/xx/LC_MESSAGES/django.po' in str(r.content))
|
||||
|
||||
def test_7_selfInApplist(self):
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue('rosetta/locale/xx/LC_MESSAGES/django.po' in str(r.content))
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=project')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue('rosetta/locale/xx/LC_MESSAGES/django.po' not in str(r.content))
|
||||
|
||||
def test_8_hideObsoletes(self):
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
|
||||
# not in listing
|
||||
for p in range(1, 5):
|
||||
r = self.client.get(reverse('rosetta-home') + '?page=%d' % p)
|
||||
self.assertTrue('dummy language' in str(r.content))
|
||||
self.assertTrue('Les deux' not in str(r.content))
|
||||
|
||||
r = self.client.get(reverse('rosetta-home') + '?query=Les%20Deux')
|
||||
self.assertTrue('dummy language' in str(r.content))
|
||||
self.assertTrue('Les deux' not in str(r.content))
|
||||
|
||||
def test_9_concurrency(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.template')), self.dest_file)
|
||||
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client2.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
|
||||
self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
self.client2.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
|
||||
# Load the template file
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
r2 = self.client2.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r2 = self.client2.get(reverse('rosetta-home'))
|
||||
|
||||
self.assertTrue('String 1' in str(r.content))
|
||||
self.assertTrue('String 1' in str(r2.content))
|
||||
self.assertTrue('m_08e4e11e2243d764fc45a5a4fba5d0f2' in str(r.content))
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_08e4e11e2243d764fc45a5a4fba5d0f2='Hello, world', _next='_next'), follow=True)
|
||||
r2 = self.client2.get(reverse('rosetta-home'))
|
||||
|
||||
# Client 2 reloads the home, forces a reload of the catalog,
|
||||
# the untranslated string1 is now translated
|
||||
self.assertTrue('String 1' not in str(r2.content))
|
||||
self.assertTrue('String 2' in str(r2.content))
|
||||
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
r2 = self.client2.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r2 = self.client2.get(reverse('rosetta-home'))
|
||||
|
||||
self.assertTrue('String 2' in str(r2.content) and 'm_e48f149a8b2e8baa81b816c0edf93890' in str(r2.content))
|
||||
self.assertTrue('String 2' in str(r.content) and 'm_e48f149a8b2e8baa81b816c0edf93890' in str(r.content))
|
||||
|
||||
# client 2 posts!
|
||||
r2 = self.client2.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world, from client two!', _next='_next'), follow=True)
|
||||
|
||||
self.assertTrue('save-conflict' not in str(r2.content))
|
||||
|
||||
# uh-oh here comes client 1
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world, from client one!', _next='_next'), follow=True)
|
||||
# An error message is displayed
|
||||
self.assertTrue('save-conflict' in str(r.content))
|
||||
|
||||
# client 2 won
|
||||
pofile_content = open(self.dest_file, 'r').read()
|
||||
self.assertTrue('Hello, world, from client two!' in pofile_content)
|
||||
|
||||
# Both clients show all strings, error messages are gone
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=translated')
|
||||
self.assertTrue('save-conflict' not in str(r.content))
|
||||
r2 = self.client2.get(reverse('rosetta-home') + '?filter=translated')
|
||||
self.assertTrue('save-conflict' not in str(r2.content))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('save-conflict' not in str(r.content))
|
||||
r2 = self.client2.get(reverse('rosetta-home'))
|
||||
self.assertTrue('save-conflict' not in str(r2.content))
|
||||
|
||||
# Both have client's two version
|
||||
self.assertTrue('Hello, world, from client two!' in str(r.content))
|
||||
self.assertTrue('Hello, world, from client two!' in str(r2.content))
|
||||
self.assertTrue('save-conflict' not in str(r2.content))
|
||||
self.assertTrue('save-conflict' not in str(r.content))
|
||||
|
||||
def test_10_issue_79_num_entries(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue79.template')), self.dest_file)
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
|
||||
self.assertTrue('<td class="ch-messages r">1</td>' in str(r.content))
|
||||
self.assertTrue('<td class="ch-progress r">%s%%</td>' % str(floatformat(0.0, 2)) in str(r.content))
|
||||
self.assertTrue('<td class="ch-obsolete r">1</td>' in str(r.content))
|
||||
|
||||
def test_11_issue_80_tab_indexes(self):
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0,), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('tabindex="3"' in str(r.content))
|
||||
|
||||
def test_12_issue_82_staff_user(self):
|
||||
settings.ROSETTA_REQUIRES_AUTH = True
|
||||
|
||||
self.client3 = Client()
|
||||
self.client3.login(username='test_admin3', password='test_password')
|
||||
|
||||
self.client3.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client3.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client3.get(reverse('rosetta-home'))
|
||||
self.assertTrue(not r.content)
|
||||
|
||||
settings.ROSETTA_REQUIRES_AUTH = False
|
||||
|
||||
self.client3.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client3.get(reverse('rosetta-language-selection', args=('xx', 0,), kwargs=dict()))
|
||||
r = self.client3.get(reverse('rosetta-home'))
|
||||
self.assertFalse(not r.content)
|
||||
|
||||
def test_13_catalog_filters(self):
|
||||
settings.LANGUAGES = (('fr', 'French'), ('xx', 'Dummy Language'),)
|
||||
cache.delete('rosetta_django_paths')
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue(os.path.normpath('rosetta/locale/xx/LC_MESSAGES/django.po') in str(r.content))
|
||||
self.assertTrue(('contrib') not in str(r.content))
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=django')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue(os.path.normpath('rosetta/locale/xx/LC_MESSAGES/django.po') not in str(r.content))
|
||||
|
||||
if self.django_version_major >= 1 and self.django_version_minor >= 3:
|
||||
self.assertTrue(('contrib') in str(r.content))
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=all')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue(os.path.normpath('rosetta/locale/xx/LC_MESSAGES/django.po') in str(r.content))
|
||||
|
||||
if self.django_version_major >= 1 and self.django_version_minor >= 3:
|
||||
self.assertTrue(('contrib') in str(r.content))
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=project')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue(os.path.normpath('rosetta/locale/xx/LC_MESSAGES/django.po') not in str(r.content))
|
||||
if self.django_version_major >= 1 and self.django_version_minor >= 3:
|
||||
self.assertTrue(('contrib') not in str(r.content))
|
||||
|
||||
def test_14_issue_99_context_and_comments(self):
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('This is a text of the base template' in str(r.content))
|
||||
self.assertTrue('Context hint' in str(r.content))
|
||||
|
||||
def test_15_issue_87_entry_changed_signal(self):
|
||||
# copy the template file
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0,), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
@receiver(entry_changed)
|
||||
def test_receiver(sender, **kwargs):
|
||||
self.test_old_msgstr = kwargs.get('old_msgstr')
|
||||
self.test_new_msgstr = sender.msgstr
|
||||
self.test_msg_id = sender.msgid
|
||||
self.assertTrue('m_e48f149a8b2e8baa81b816c0edf93890' in str(r.content))
|
||||
|
||||
# post a translation
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world', _next='_next'))
|
||||
|
||||
self.assertTrue(self.test_old_msgstr == '')
|
||||
self.assertTrue(self.test_new_msgstr == 'Hello, world')
|
||||
self.assertTrue(self.test_msg_id == 'String 2')
|
||||
|
||||
del(self.test_old_msgstr, self.test_new_msgstr, self.test_msg_id)
|
||||
|
||||
def test_16_issue_101_post_save_signal(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.template')), self.dest_file)
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
@receiver(post_save)
|
||||
def test_receiver(sender, **kwargs):
|
||||
self.test_sig_lang = kwargs.get('language_code')
|
||||
|
||||
self.assertTrue('m_e48f149a8b2e8baa81b816c0edf93890' in str(r.content))
|
||||
|
||||
# post a translation
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world', _next='_next'))
|
||||
|
||||
self.assertTrue(self.test_sig_lang == 'xx')
|
||||
del(self.test_sig_lang)
|
||||
|
||||
def test_17_issue_103_post_save_signal_has_request(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
@receiver(post_save)
|
||||
def test_receiver(sender, **kwargs):
|
||||
self.test_16_has_request = 'request' in kwargs
|
||||
|
||||
self.assertTrue('m_e48f149a8b2e8baa81b816c0edf93890' in str(r.content))
|
||||
|
||||
# post a translation
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world', _next='_next'))
|
||||
|
||||
self.assertTrue(self.test_16_has_request)
|
||||
del(self.test_16_has_request)
|
||||
# reset the original file
|
||||
|
||||
def test_18_Test_Issue_gh24(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue24gh.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0, ), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
self.assertTrue('m_bb9d8fe6159187b9ea494c1b313d23d4' in str(r.content))
|
||||
|
||||
# post a translation, it should have properly wrapped lines
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_bb9d8fe6159187b9ea494c1b313d23d4='Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium.', _next='_next'))
|
||||
pofile_content = open(self.dest_file, 'r').read()
|
||||
self.assertTrue('"pede mollis pretium."' in pofile_content)
|
||||
|
||||
# Again, with unwrapped lines
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue24gh.template')), self.dest_file)
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0, ), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('m_bb9d8fe6159187b9ea494c1b313d23d4' in str(r.content))
|
||||
rosetta_settings.POFILE_WRAP_WIDTH = 0
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_bb9d8fe6159187b9ea494c1b313d23d4='Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium.', _next='_next'))
|
||||
pofile_content = open(self.dest_file, 'r').read()
|
||||
self.assertTrue('felis eu pede mollis pretium."' in pofile_content)
|
||||
|
||||
def test_19_Test_Issue_gh34(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue34gh.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0, ), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('m_ff7060c1a9aae9c42af4d54ac8551f67_1' in str(r.content))
|
||||
self.assertTrue('m_ff7060c1a9aae9c42af4d54ac8551f67_0' in str(r.content))
|
||||
self.assertTrue('m_09f7e02f1290be211da707a266f153b3' in str(r.content))
|
||||
|
||||
# post a translation, it should have properly wrapped lines
|
||||
r = self.client.post(reverse('rosetta-home'), dict(
|
||||
m_ff7060c1a9aae9c42af4d54ac8551f67_0='Foo %s',
|
||||
m_ff7060c1a9aae9c42af4d54ac8551f67_1='Bar %s',
|
||||
m_09f7e02f1290be211da707a266f153b3='Salut', _next='_next'))
|
||||
pofile_content = open(self.dest_file, 'r').read()
|
||||
self.assertTrue('msgstr "Salut\\n"' in pofile_content)
|
||||
self.assertTrue('msgstr[0] ""\n"\\n"\n"Foo %s\\n"' in pofile_content)
|
||||
self.assertTrue('msgstr[1] ""\n"\\n"\n"Bar %s\\n"' in pofile_content)
|
||||
|
||||
def test_20_Test_Issue_gh38(self):
|
||||
if self.django_version_minor >= 4 and self.django_version_major >= 1:
|
||||
self.assertTrue('django.contrib.sessions.middleware.SessionMiddleware' in settings.MIDDLEWARE_CLASSES)
|
||||
|
||||
settings.SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"
|
||||
|
||||
# One: cache backend
|
||||
rosetta_settings.STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage'
|
||||
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue38gh.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
self.client.get(reverse('rosetta-language-selection', args=('xx', 0, ), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertFalse(len(str(self.client.cookies.get('sessionid'))) > 4096)
|
||||
self.assertTrue('m_9efd113f7919952523f06e0d88da9c54' in str(r.content))
|
||||
r = self.client.post(reverse('rosetta-home'), dict(
|
||||
m_9efd113f7919952523f06e0d88da9c54='Testing cookie length',
|
||||
_next='_next'
|
||||
))
|
||||
pofile_content = open(self.dest_file, 'r').read()
|
||||
self.assertTrue('Testing cookie length' in pofile_content)
|
||||
|
||||
self.client.get(reverse('rosetta-home') + '?filter=translated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('Testing cookie length' in str(r.content))
|
||||
self.assertTrue('m_9f6c442c6d579707440ba9dada0fb373' in str(r.content))
|
||||
|
||||
# Two, the cookie backend
|
||||
if self.django_version_minor < 6:
|
||||
rosetta_settings.STORAGE_CLASS = 'rosetta.storage.SessionRosettaStorage'
|
||||
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue38gh.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
self.client.get(reverse('rosetta-language-selection', args=('xx', 0, ), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue(len(str(self.client.cookies.get('sessionid'))) > 4096)
|
||||
# boom: be a good browser, truncate the cookie
|
||||
self.client.cookies['sessionid'] = six.text_type(self.client.cookies.get('sessionid'))[:4096]
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
self.assertFalse('m_9efd113f7919952523f06e0d88da9c54' in str(r.content))
|
||||
|
||||
def test_21_concurrency_of_cache_backend(self):
|
||||
rosetta_settings.STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage'
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue38gh.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
self.client.get(reverse('rosetta-language-selection', args=('xx', 0, ), kwargs=dict()))
|
||||
|
||||
self.client2.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
self.client2.get(reverse('rosetta-language-selection', args=('xx', 0, ), kwargs=dict()))
|
||||
|
||||
self.assertTrue(self.client.session.get('rosetta_cache_storage_key_prefix') != self.client2.session.get('rosetta_cache_storage_key_prefix'))
|
||||
|
||||
def test_22_Test_Issue_gh39(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.issue39gh.template')), self.dest_file)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
# We have distinct hashes, even though the msgid and msgstr are identical
|
||||
#print (r.content)
|
||||
self.assertTrue('m_4765f7de94996d3de5975fa797c3451f' in str(r.content))
|
||||
self.assertTrue('m_08e4e11e2243d764fc45a5a4fba5d0f2' in str(r.content))
|
||||
|
||||
def test_23_save_header_data(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.template')), self.dest_file)
|
||||
|
||||
unicode_user = User.objects.create_user('test_unicode', 'save_header_data@test.com', 'test_unicode')
|
||||
unicode_user.first_name = "aéaéaé aàaàaàa"
|
||||
unicode_user.last_name = "aâââ üüüü"
|
||||
unicode_user.is_superuser, unicode_user.is_staff = True, True
|
||||
unicode_user.save()
|
||||
|
||||
self.client.login(username='test_unicode', password='test_unicode')
|
||||
|
||||
# Load the template file
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
# make sure both strings are untranslated
|
||||
self.assertTrue('dummy language' in str(r.content))
|
||||
self.assertTrue('String 1' in str(r.content))
|
||||
self.assertTrue('String 2' in str(r.content))
|
||||
self.assertTrue('m_e48f149a8b2e8baa81b816c0edf93890' in str(r.content))
|
||||
|
||||
# post a translation
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world', _next='_next'))
|
||||
# read the result
|
||||
f_ = open(self.dest_file, 'rb')
|
||||
content = six.text_type(f_.read())
|
||||
f_.close()
|
||||
#print (content)
|
||||
# make sure unicode data was properly converted to ascii
|
||||
self.assertTrue('Hello, world' in content)
|
||||
self.assertTrue('save_header_data@test.com' in content)
|
||||
self.assertTrue('aeaeae aaaaaaa aaaa uuuu' in content)
|
||||
|
||||
def test_24_percent_transaltion(self):
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './django.po.template')), self.dest_file)
|
||||
|
||||
# Load the template file
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home') + '?filter=untranslated')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
self.assertTrue('Progress: 0.00%' in str(r.content))
|
||||
r = self.client.post(reverse('rosetta-home'), dict(m_e48f149a8b2e8baa81b816c0edf93890='Hello, world', _next='_next'))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('Progress: 25.00%' in str(r.content))
|
||||
|
||||
def test_25_replace_access_control(self):
|
||||
# Test default access control allows access
|
||||
url = reverse('rosetta-home')
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(200, response.status_code)
|
||||
|
||||
# Now replace access control, and check we get redirected
|
||||
settings.ROSETTA_ACCESS_CONTROL_FUNCTION = 'rosetta.tests.no_access'
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(302, response.status_code)
|
||||
|
||||
# Restore setting to default
|
||||
settings.ROSETTA_ACCESS_CONTROL_FUNCTION = None
|
||||
|
||||
def test_26_urlconf_accept_dots_and_underscores(self):
|
||||
resolver_match = resolve("/rosetta/select/fr_FR.utf8/0/")
|
||||
self.assertEqual(resolver_match.url_name, "rosetta-language-selection")
|
||||
self.assertEqual(resolver_match.kwargs['langid'], 'fr_FR.utf8')
|
||||
|
||||
def test_27_extended_urlconf_language_code_loads_file(self):
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=all')
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('fr_FR.utf8', 0), kwargs=dict()))
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('French (France), UTF8' in str(r.content))
|
||||
self.assertTrue('m_71a6479faf8712e37dd5755cd1d11804' in str(r.content))
|
||||
|
||||
def test_28_issue_gh87(self):
|
||||
"make sure that rosetta_i18n_catalog_filter is passed into the context"
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue('<li class="active"><a href="?filter=third-party">' in str(r.content))
|
||||
|
||||
def test_29_unsupported_p3_django_16_storage(self):
|
||||
if self.django_version_minor >= 6 and self.django_version_major >= 1:
|
||||
self.assertTrue('django.contrib.sessions.middleware.SessionMiddleware' in settings.MIDDLEWARE_CLASSES)
|
||||
|
||||
settings.SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"
|
||||
rosetta_settings.STORAGE_CLASS = 'rosetta.storage.SessionRosettaStorage'
|
||||
|
||||
try:
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
self.fail()
|
||||
except ImproperlyConfigured:
|
||||
pass
|
||||
|
||||
def test_30_pofile_names(self):
|
||||
POFILENAMES = rosetta_settings.POFILENAMES
|
||||
rosetta_settings.POFILENAMES = ('pr44.po', )
|
||||
|
||||
os.unlink(self.dest_file)
|
||||
destfile = os.path.normpath(os.path.join(self.curdir, '../locale/xx/LC_MESSAGES/pr44.po'))
|
||||
shutil.copy(os.path.normpath(os.path.join(self.curdir, './pr44.po.template')), destfile)
|
||||
|
||||
self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
self.assertTrue('xx/LC_MESSAGES/pr44.po' in str(r.content))
|
||||
|
||||
r = self.client.get(reverse('rosetta-language-selection', args=('xx', 0,), kwargs=dict()) + '?rosetta')
|
||||
r = self.client.get(reverse('rosetta-home'))
|
||||
|
||||
self.assertTrue('dummy language' in str(r.content))
|
||||
|
||||
os.unlink(destfile)
|
||||
rosetta_settings.POFILENAMES = POFILENAMES
|
||||
|
||||
|
||||
def test_31_pr_102__exclude_paths(self):
|
||||
ROSETTA_EXCLUDED_PATHS = rosetta_settings.ROSETTA_EXCLUDED_PATHS
|
||||
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue(os.path.normpath('rosetta/locale/xx/LC_MESSAGES/django.po') in str(r.content))
|
||||
|
||||
exclude_path = os.path.normpath(os.path.join(self.curdir, '../locale'))
|
||||
rosetta_settings.ROSETTA_EXCLUDED_PATHS = [exclude_path, ]
|
||||
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertFalse(os.path.normpath('rosetta/locale/xx/LC_MESSAGES/django.po') in str(r.content))
|
||||
|
||||
rosetta_settings.ROSETTA_EXCLUDED_PATHS = ROSETTA_EXCLUDED_PATHS
|
||||
|
||||
def test_32_pr_103__language_groups(self):
|
||||
ROSETTA_LANGUAGE_GROUPS = rosetta_settings.ROSETTA_LANGUAGE_GROUPS
|
||||
rosetta_settings.ROSETTA_LANGUAGE_GROUPS = False
|
||||
|
||||
# Default behavior: non admins need to be in a translators group, they see
|
||||
# all catalogs
|
||||
translators = Group.objects.create(name='translators')
|
||||
translators_xx = Group.objects.create(name='translators-xx')
|
||||
|
||||
user4 = User.objects.create_user('test_admin4', 'test@test3.com', 'test_password')
|
||||
user4.groups.add(translators)
|
||||
user4.is_superuser = False
|
||||
user4.is_staff = True
|
||||
user4.save()
|
||||
self.client.login(username='test_admin4', password='test_password')
|
||||
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue(os.path.normpath('rosetta/locale/xx/LC_MESSAGES/django.po') in str(r.content))
|
||||
|
||||
# Activate the option, user doesn't see the XX catalog
|
||||
rosetta_settings.ROSETTA_LANGUAGE_GROUPS = True
|
||||
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertFalse(os.path.normpath('rosetta/locale/xx/LC_MESSAGES/django.po') in str(r.content))
|
||||
|
||||
# Now add them to the custom group
|
||||
user4.groups.add(translators_xx)
|
||||
|
||||
r = self.client.get(reverse('rosetta-pick-file') + '?filter=third-party')
|
||||
r = self.client.get(reverse('rosetta-pick-file'))
|
||||
self.assertTrue(os.path.normpath('rosetta/locale/xx/LC_MESSAGES/django.po') in str(r.content))
|
||||
|
||||
rosetta_settings.ROSETTA_LANGUAGE_GROUPS = ROSETTA_LANGUAGE_GROUPS
|
||||
|
||||
|
||||
# Stubbed access control function
|
||||
def no_access(user):
|
||||
return False
|
||||
|
|
@ -8,6 +8,7 @@ urlpatterns = patterns('rosetta.views',
|
|||
url(r'^$', 'home', name='rosetta-home'),
|
||||
url(r'^pick/$', 'list_languages', name='rosetta-pick-file'),
|
||||
url(r'^download/$', 'download_file', name='rosetta-download-file'),
|
||||
url(r'^select/(?P<langid>[\w\-]+)/(?P<idx>\d+)/$', 'lang_sel', name='rosetta-language-selection'),
|
||||
url(r'^select/(?P<langid>[\w\-_\.]+)/(?P<idx>\d+)/$', 'lang_sel', name='rosetta-language-selection'),
|
||||
url(r'^select-ref/(?P<langid>[\w\-]+)/$', 'ref_sel', name='rosetta-reference-selection'),
|
||||
url(r'^translate/$', 'translate_text', name='translate_text'),
|
||||
)
|
||||
|
|
|
|||
0
rosetta/utils/__init__.py
Normal file
0
rosetta/utils/__init__.py
Normal file
|
|
@ -8,12 +8,17 @@ from django.template import RequestContext
|
|||
from django.utils.encoding import iri_to_uri
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.views.decorators.cache import never_cache
|
||||
|
||||
from microsofttranslator import Translator, TranslateApiException
|
||||
|
||||
from rosetta.conf import settings as rosetta_settings
|
||||
from rosetta.polib import pofile
|
||||
from polib import pofile
|
||||
from rosetta.poutil import find_pos, pagination_range, timestamp_with_timezone
|
||||
from rosetta.signals import entry_changed, post_save
|
||||
from rosetta.storage import get_storage
|
||||
from rosetta.access import can_translate
|
||||
from rosetta.access import can_translate, can_translate_language
|
||||
|
||||
import json
|
||||
import re
|
||||
import rosetta
|
||||
import unicodedata
|
||||
|
|
@ -93,6 +98,10 @@ def home(request):
|
|||
# so we need unicode here.
|
||||
plural_id = six.text_type(rx_plural.match(key).groups()[1])
|
||||
|
||||
# Above no longer true as of Polib 1.0.4
|
||||
if plural_id and plural_id.isdigit():
|
||||
plural_id = int(plural_id)
|
||||
|
||||
elif rx.match(key):
|
||||
md5hash = str(rx.match(key).groups()[0])
|
||||
|
||||
|
|
@ -152,7 +161,7 @@ def home(request):
|
|||
|
||||
post_save.send(sender=None, language_code=rosetta_i18n_lang_code, request=request)
|
||||
# Try auto-reloading via the WSGI daemon mode reload mechanism
|
||||
if rosetta_settings.WSGI_AUTO_RELOAD and \
|
||||
if rosetta_settings.WSGI_AUTO_RELOAD and \
|
||||
'mod_wsgi.process_group' in request.environ and \
|
||||
request.environ.get('mod_wsgi.process_group', None) and \
|
||||
'SCRIPT_FILENAME' in request.environ and \
|
||||
|
|
@ -356,12 +365,15 @@ def list_languages(request, do_session_warn=False):
|
|||
|
||||
has_pos = False
|
||||
for language in settings.LANGUAGES:
|
||||
if not can_translate_language(request.user, language[0]):
|
||||
continue
|
||||
|
||||
pos = find_pos(language[0], project_apps=project_apps, django_apps=django_apps, third_party_apps=third_party_apps)
|
||||
has_pos = has_pos or len(pos)
|
||||
languages.append(
|
||||
(language[0],
|
||||
_(language[1]),
|
||||
sorted([(get_app_name(l), os.path.realpath(l), pofile(l)) for l in pos], key=lambda app: app[0]),
|
||||
sorted([(get_app_name(l), os.path.realpath(l), pofile(l)) for l in pos], key=lambda app: app[0]),
|
||||
)
|
||||
)
|
||||
try:
|
||||
|
|
@ -375,7 +387,8 @@ def list_languages(request, do_session_warn=False):
|
|||
ADMIN_MEDIA_PREFIX=ADMIN_MEDIA_PREFIX,
|
||||
do_session_warn=do_session_warn,
|
||||
languages=languages,
|
||||
has_pos=has_pos
|
||||
has_pos=has_pos,
|
||||
rosetta_i18n_catalog_filter=rosetta_i18n_catalog_filter
|
||||
), context_instance=RequestContext(request))
|
||||
|
||||
|
||||
|
|
@ -391,7 +404,7 @@ def lang_sel(request, langid, idx):
|
|||
Selects a file to be translated
|
||||
"""
|
||||
storage = get_storage(request)
|
||||
if langid not in [l[0] for l in settings.LANGUAGES]:
|
||||
if langid not in [l[0] for l in settings.LANGUAGES] or not can_translate_language(request.user, langid):
|
||||
raise Http404
|
||||
else:
|
||||
|
||||
|
|
@ -404,7 +417,7 @@ def lang_sel(request, langid, idx):
|
|||
|
||||
storage.set('rosetta_i18n_lang_code', langid)
|
||||
storage.set('rosetta_i18n_lang_name', six.text_type([l[1] for l in settings.LANGUAGES if l[0] == langid][0]))
|
||||
storage.set('rosetta_i18n_fn', file_)
|
||||
storage.set('rosetta_i18n_fn', file_)
|
||||
po = pofile(file_)
|
||||
for entry in po:
|
||||
entry.md5hash = hashlib.new('md5',
|
||||
|
|
@ -434,3 +447,26 @@ def ref_sel(request, langid):
|
|||
return HttpResponseRedirect(reverse('rosetta-home'))
|
||||
ref_sel = never_cache(ref_sel)
|
||||
ref_sel = user_passes_test(lambda user: can_translate(user), settings.LOGIN_URL)(ref_sel)
|
||||
|
||||
@user_passes_test(lambda user: can_translate(user), settings.LOGIN_URL)
|
||||
def translate_text(request):
|
||||
language_from = request.GET.get('from', None)
|
||||
language_to = request.GET.get('to', None)
|
||||
text = request.GET.get('text', None)
|
||||
|
||||
if language_from == language_to:
|
||||
data = {'success': True, 'translation': text}
|
||||
else:
|
||||
# run the translation:
|
||||
AZURE_CLIENT_ID = getattr(settings, 'AZURE_CLIENT_ID', None)
|
||||
AZURE_CLIENT_SECRET = getattr(settings, 'AZURE_CLIENT_SECRET', None)
|
||||
|
||||
translator = Translator(AZURE_CLIENT_ID, AZURE_CLIENT_SECRET)
|
||||
|
||||
try:
|
||||
translated_text = translator.translate(text, language_to)
|
||||
data = {'success': True, 'translation': translated_text}
|
||||
except TranslateApiException as e:
|
||||
data = {'success': False, 'error': "Translation API Exception: {0}".format(e.message)}
|
||||
|
||||
return HttpResponse(json.dumps(data), mimetype='application/json')
|
||||
|
|
|
|||
16
runtests.sh
16
runtests.sh
|
|
@ -1,16 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ ! -d venv_13 ]
|
||||
then
|
||||
virtualenv --no-site-packages --distribute --python=python2 venv_13
|
||||
. venv_13/bin/activate
|
||||
pip install Django==1.3 coverage python-memcached six
|
||||
deactivate
|
||||
fi
|
||||
|
||||
|
||||
. venv_13/bin/activate
|
||||
cd testproject
|
||||
python manage.py test rosetta
|
||||
cd ..
|
||||
deactivate
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ ! -d venv_13 ]
|
||||
then
|
||||
virtualenv --no-site-packages --distribute --python=python2 venv_13
|
||||
. venv_13/bin/activate
|
||||
pip install Django==1.3 coverage python-memcached six
|
||||
deactivate
|
||||
fi
|
||||
|
||||
. venv_13/bin/activate
|
||||
cd testproject
|
||||
coverage run --rcfile=.coveragerc manage.py test --failfast rosetta
|
||||
coverage xml
|
||||
coverage html
|
||||
cd ..
|
||||
|
|
@ -1,58 +1,59 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ ! -d venv_13 ]
|
||||
if [ ! -d .venv_14 ]
|
||||
then
|
||||
virtualenv --no-site-packages --distribute --python=python2 venv_13
|
||||
. venv_13/bin/activate
|
||||
pip install Django==1.3 coverage python-memcached six
|
||||
virtualenv --no-site-packages --distribute --python=python2.7 .venv_14
|
||||
. .venv_14/bin/activate
|
||||
pip install --use-mirrors Django==1.4 coverage python-memcached six requests==2.1.0 polib==1.0.4 microsofttranslator==0.5
|
||||
deactivate
|
||||
fi
|
||||
if [ ! -d venv_14 ]
|
||||
if [ ! -d .venv_15 ]
|
||||
then
|
||||
virtualenv --no-site-packages --distribute --python=python2 venv_14
|
||||
. venv_14/bin/activate
|
||||
pip install Django==1.4 coverage python-memcached six
|
||||
virtualenv --no-site-packages --distribute --python=python2.7 .venv_15
|
||||
. .venv_15/bin/activate
|
||||
pip install --use-mirrors Django==1.5 coverage python-memcached six requests==2.1.0 polib==1.0.4 microsofttranslator==0.5
|
||||
deactivate
|
||||
fi
|
||||
if [ ! -d venv_15 ]
|
||||
if [ ! -d .venv_15_p3 ]
|
||||
then
|
||||
virtualenv --no-site-packages --distribute --python=python2 venv_15
|
||||
. venv_15/bin/activate
|
||||
pip install Django==1.5 coverage python-memcached six
|
||||
virtualenv --no-site-packages --distribute --python=python3 .venv_15_p3
|
||||
. .venv_15_p3/bin/activate
|
||||
pip install --use-mirrors Django==1.5 coverage python3-memcached six requests==2.1.0 polib==1.0.4 microsofttranslator==0.5
|
||||
deactivate
|
||||
fi
|
||||
if [ ! -d venv_15_p3 ]
|
||||
if [ ! -d .venv_16 ]
|
||||
then
|
||||
virtualenv --no-site-packages --distribute --python=python3 venv_15_p3
|
||||
. venv_15_p3/bin/activate
|
||||
pip install Django==1.5 coverage python3-memcached six
|
||||
virtualenv --no-site-packages --distribute --python=python2.7 .venv_16
|
||||
. .venv_16/bin/activate
|
||||
pip install --use-mirrors coverage python-memcached six Django==1.6.1 requests==2.1.0 polib==1.0.4 microsofttranslator==0.5
|
||||
deactivate
|
||||
fi
|
||||
if [ ! -d .venv_16_p3 ]
|
||||
then
|
||||
virtualenv --no-site-packages --distribute --python=python3 .venv_16_p3
|
||||
. .venv_16_p3/bin/activate
|
||||
pip install --use-mirrors coverage python3-memcached six Django==1.6.1 requests==2.1.0 polib==1.0.4 microsofttranslator==0.5
|
||||
deactivate
|
||||
fi
|
||||
if [ ! -d .venv_17b ]
|
||||
then
|
||||
virtualenv --no-site-packages --distribute --python=python2.7 .venv_17b
|
||||
. .venv_17b/bin/activate
|
||||
pip install https://www.djangoproject.com/download/1.7.b4/tarball/
|
||||
pip install --use-mirrors coverage python-memcached six requests==2.1.0 polib==1.0.4 microsofttranslator==0.5
|
||||
deactivate
|
||||
fi
|
||||
if [ ! -d .venv_17b_p3 ]
|
||||
then
|
||||
virtualenv --no-site-packages --distribute --python=python3 .venv_17b_p3
|
||||
. .venv_17b_p3/bin/activate
|
||||
pip install https://www.djangoproject.com/download/1.7.b4/tarball/
|
||||
pip install --use-mirrors coverage python3-memcached six requests==2.1.0 polib==1.0.4 microsofttranslator==0.5
|
||||
deactivate
|
||||
fi
|
||||
|
||||
|
||||
|
||||
. venv_13/bin/activate
|
||||
cd testproject
|
||||
python manage.py --version
|
||||
python manage.py test rosetta
|
||||
cd ..
|
||||
deactivate
|
||||
|
||||
. venv_14/bin/activate
|
||||
cd testproject
|
||||
python manage.py --version
|
||||
python manage.py test rosetta
|
||||
cd ..
|
||||
deactivate
|
||||
|
||||
. venv_15/bin/activate
|
||||
cd testproject
|
||||
python manage.py --version
|
||||
python manage.py test rosetta
|
||||
cd ..
|
||||
deactivate
|
||||
|
||||
. venv_15_p3/bin/activate
|
||||
. .venv_14/bin/activate
|
||||
cd testproject
|
||||
python manage.py --version
|
||||
python --version
|
||||
|
|
@ -60,3 +61,53 @@ python manage.py test rosetta
|
|||
cd ..
|
||||
deactivate
|
||||
|
||||
. .venv_15/bin/activate
|
||||
cd testproject
|
||||
python manage.py --version
|
||||
python --version
|
||||
python manage.py test rosetta
|
||||
cd ..
|
||||
deactivate
|
||||
|
||||
. .venv_15_p3/bin/activate
|
||||
cd testproject
|
||||
python manage.py --version
|
||||
python --version
|
||||
python manage.py test rosetta
|
||||
cd ..
|
||||
deactivate
|
||||
|
||||
. .venv_16/bin/activate
|
||||
cd testproject
|
||||
python manage.py --version
|
||||
python --version
|
||||
python manage.py test rosetta
|
||||
cd ..
|
||||
deactivate
|
||||
|
||||
. .venv_16_p3/bin/activate
|
||||
cd testproject
|
||||
python manage.py --version
|
||||
python --version
|
||||
python manage.py test rosetta
|
||||
cd ..
|
||||
deactivate
|
||||
|
||||
. .venv_17b/bin/activate
|
||||
cd testproject
|
||||
python manage.py --version
|
||||
python --version
|
||||
python manage.py test rosetta
|
||||
cd ..
|
||||
deactivate
|
||||
|
||||
. .venv_17b_p3/bin/activate
|
||||
cd testproject
|
||||
python manage.py --version
|
||||
python --version
|
||||
python manage.py test rosetta
|
||||
cd ..
|
||||
deactivate
|
||||
|
||||
# Check translations
|
||||
for d in `find rosetta -name LC_MESSAGES -type d`; do msgfmt -c -o $d/django.mo $d/django.po; done
|
||||
|
|
|
|||
8
setup.py
8
setup.py
|
|
@ -18,11 +18,17 @@ setup(
|
|||
'Topic :: Software Development :: Localization',
|
||||
'Topic :: Software Development :: Internationalization',
|
||||
'Framework :: Django',
|
||||
'Programming Language :: Python :: 2.6',
|
||||
'Programming Language :: Python :: 2.7',
|
||||
'Programming Language :: Python :: 3.3',
|
||||
],
|
||||
include_package_data=True,
|
||||
zip_safe=False,
|
||||
install_requires=[
|
||||
'six >=1.2.0',
|
||||
'Django >= 1.3'
|
||||
'Django >= 1.3',
|
||||
'requests >= 2.1.0',
|
||||
'polib == 1.0.4',
|
||||
'microsofttranslator == 0.5'
|
||||
]
|
||||
)
|
||||
|
|
|
|||
34
testproject/locale/fr/LC_MESSAGES/django.po
Normal file
34
testproject/locale/fr/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-04-30 14:37+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
||||
|
||||
#: templates/test.html:3
|
||||
msgid "Some text to translate"
|
||||
msgstr ""
|
||||
|
||||
#: templates/test.html:5
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
"one bottle of beer on the wall\n"
|
||||
msgid_plural ""
|
||||
"\n"
|
||||
"%(num_bottles)s bottles of beer on the wall\n"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
34
testproject/locale/fr_FR.utf8/LC_MESSAGES/django.po
Normal file
34
testproject/locale/fr_FR.utf8/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-04-30 14:37+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
||||
|
||||
#: templates/test.html:3
|
||||
msgid "Some text to translate"
|
||||
msgstr ""
|
||||
|
||||
#: templates/test.html:5
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
"one bottle of beer on the wall\n"
|
||||
msgid_plural ""
|
||||
"\n"
|
||||
"%(num_bottles)s bottles of beer on the wall\n"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
|
@ -2,617 +2,66 @@
|
|||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Rosetta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2009-10-21 12:21+0200\n"
|
||||
"POT-Creation-Date: 2013-04-30 14:37+0200\n"
|
||||
"PO-Revision-Date: 2012-05-27 14:59\n"
|
||||
"Last-Translator: <admin@admin.com>\n"
|
||||
"Language-Team: French <LL@li.org>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2)\n"
|
||||
"X-Translated-Using: django-rosetta 0.6.7\n"
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 1"
|
||||
msgstr "aaa"
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 2"
|
||||
msgstr "111"
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 3"
|
||||
msgstr "asdasd"
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 4"
|
||||
msgstr "aa"
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 5"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 6"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 7"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 8"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 9"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 10"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 11"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 12"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 13"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 14"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 15"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 16"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 17"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 18"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 19"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 20"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 21"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 22"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 23"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 24"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 25"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 26"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 27"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 28"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 29"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 30"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 31"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 32"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 33"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 34"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 35"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 36"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 37"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 38"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 39"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 40"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 41"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 42"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 43"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 44"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 45"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 46"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 47"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 48"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 49"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
"Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
"kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 50"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 1"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 2"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 3"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 4"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 5"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 6"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 7"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 8"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 9"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 10"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 11"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 12"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 13"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 14"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 15"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 16"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 17"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 18"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 19"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 20"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 21"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 22"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 23"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 24"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 25"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 26"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 27"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 28"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 29"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 30"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 31"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 32"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 33"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 34"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 35"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 36"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 37"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 38"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 39"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 40"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 41"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 42"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 43"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 44"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 45"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 46"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 47"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 48"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 49"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
"aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
"qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String 50"
|
||||
msgstr "aaa2"
|
||||
#: templates/test.html:3
|
||||
msgid "Some text to translate"
|
||||
msgstr ""
|
||||
|
||||
#: templates/test.html:5
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\n"
|
||||
"one bottle of beer on the wall\n"
|
||||
msgid_plural ""
|
||||
"\n"
|
||||
"%(num_bottles)s bottles of beer on the wall\n"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
#~ "Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
#~ "kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 1"
|
||||
#~ msgstr "aaa"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
#~ "Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
#~ "kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 2"
|
||||
#~ msgstr "111"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
#~ "Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
#~ "kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 3"
|
||||
#~ msgstr "asdasd"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "0_81EhfRiLPoxAH5j3f1D2P33S_-"
|
||||
#~ "Fe_7Mn_R_t9V8Bysr01xWAgvVEyyA190oYYTnzJCBucLBWKiqaAIjWAvQ3ZfrbCkDRe02iESoGhHEIBmmDI49SY6cQQk0AxGoB-"
|
||||
#~ "kmZfloBiMsQraFOWetVEF4SRTHlxhNEPA-kCYB4LUCfl-l String 4"
|
||||
#~ msgstr "aa"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "xeXu5ur6xtXV69d2-7u7Fz5eD6TpYXyNVcFd28vjsZ7fnYIrzTTMEn__E_5ykGYGm-"
|
||||
#~ "aY_7JXpx9_fXD9K-75dlH1vTvOv2w2HsZPL9zu7MdvupP-"
|
||||
#~ "qNh5xo8PjfCLkR1kO4QUmB8CZHeW2BcGw2nYTjt7I7NcBLDuNM9PpbvPQt3le1Pex String "
|
||||
#~ "50"
|
||||
#~ msgstr "aaa2"
|
||||
|
|
|
|||
|
|
@ -1,16 +1,26 @@
|
|||
#!/usr/bin/env python
|
||||
from django.core.management import execute_manager
|
||||
import sys
|
||||
import os
|
||||
|
||||
try:
|
||||
import settings # Assumed to be in the same directory.
|
||||
from django.core.management import execute_manager
|
||||
OLD_DJANGO = True
|
||||
except ImportError:
|
||||
sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
|
||||
sys.exit(1)
|
||||
from django.core.management import execute_from_command_line
|
||||
OLD_DJANGO = False
|
||||
|
||||
if OLD_DJANGO:
|
||||
try:
|
||||
import settings # Assumed to be in the same directory.
|
||||
except ImportError:
|
||||
sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
|
||||
sys.exit(1)
|
||||
|
||||
BASEDIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
|
||||
sys.path.insert(0, BASEDIR)
|
||||
|
||||
if __name__ == "__main__":
|
||||
execute_manager(settings)
|
||||
os.environ["DJANGO_SETTINGS_MODULE"] = "testproject.settings"
|
||||
if OLD_DJANGO:
|
||||
execute_manager(settings)
|
||||
else:
|
||||
execute_from_command_line(sys.argv)
|
||||
|
|
|
|||
|
|
@ -47,10 +47,14 @@ INSTALLED_APPS = [
|
|||
LANGUAGE_CODE = "en"
|
||||
|
||||
LANGUAGES = (
|
||||
('en', 'English'),
|
||||
('ja', u'日本語'),
|
||||
('xx', u'XXXXX'),
|
||||
('fr', u'French'),
|
||||
('fr_FR.utf8', u'French (France), UTF8'),
|
||||
)
|
||||
LOCALE_PATHS = [
|
||||
os.path.join(PROJECT_PATH, 'locale'),
|
||||
]
|
||||
|
||||
SOUTH_TESTS_MIGRATE = False
|
||||
|
||||
|
|
|
|||
9
testproject/templates/test.html
Normal file
9
testproject/templates/test.html
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{% load i18n %}
|
||||
|
||||
{% trans "Some text to translate" %}
|
||||
|
||||
{% blocktrans %}
|
||||
one bottle of beer on the wall
|
||||
{% plural %}
|
||||
{{num_bottles}} bottles of beer on the wall
|
||||
{% endblocktrans %}
|
||||
Loading…
Reference in a new issue