From c1700d7233cb2f45501cc50f2572f62d85ef77b0 Mon Sep 17 00:00:00 2001 From: minime Date: Wed, 6 Mar 2013 18:22:53 +0400 Subject: [PATCH 01/11] fixed mess with app_id between pages --- rosetta/poutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rosetta/poutil.py b/rosetta/poutil.py index f22c6e9..cd63047 100644 --- a/rosetta/poutil.py +++ b/rosetta/poutil.py @@ -113,7 +113,7 @@ def find_pos(lang, project_apps=True, django_apps=False, third_party_apps=False) filename = os.path.join(dirname, fn) if os.path.isfile(filename): ret.add(os.path.abspath(filename)) - return list(ret) + return list(sorted(ret)) def pagination_range(first, last, current): From 3ce6ae6e8bab28e4ee56c80350e92ae16ee9bb2a Mon Sep 17 00:00:00 2001 From: Marco Bonetti Date: Wed, 6 Mar 2013 15:38:27 +0100 Subject: [PATCH 02/11] Changelog --- CHANGES | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES b/CHANGES index 1d9ad62..44e9fca 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,7 @@ Version 0.7.2 ------------- * Fix for when settings imports unicode_literals for some reason (Issue #67) +* Fixed mess with app_id between pages (Issue #68, thanks @tsouvarev) Version 0.7.1 ------------- From 2195d59ba86da742d150388a8a657d04284c3cff Mon Sep 17 00:00:00 2001 From: AmirAli Akbari Date: Mon, 1 Apr 2013 19:05:38 +0430 Subject: [PATCH 03/11] Added translation for Farsi (fa). --- rosetta/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 4449 bytes rosetta/locale/fa/LC_MESSAGES/django.po | 206 ++++++++++++++++++++++++ 2 files changed, 206 insertions(+) create mode 100644 rosetta/locale/fa/LC_MESSAGES/django.mo create mode 100644 rosetta/locale/fa/LC_MESSAGES/django.po diff --git a/rosetta/locale/fa/LC_MESSAGES/django.mo b/rosetta/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..246b1fc801613061ddba2abf71cfbdb6fbfed67d GIT binary patch literal 4449 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 literal 0 HcmV?d00001 diff --git a/rosetta/locale/fa/LC_MESSAGES/django.po b/rosetta/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 0000000..a18c85d --- /dev/null +++ b/rosetta/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,206 @@ +# 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 , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-04-01 18:36+0430\n" +"PO-Revision-Date: 2013-04-01 19:03+0430\n" +"Last-Translator: \n" +"Language-Team: LANGUAGE \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" + +#: templates/rosetta/languages.html:5 templates/rosetta/languages.html.py:8 +msgid "Language selection" +msgstr "انتخاب زبان" + +#: 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.
Setting ROSETTA_STORAGE_CLASS = " +"'rosetta.storage.CacheRosettaStorage' in your settings file should fix this." +msgstr "" +"بارگزاری کاتالوگ زبان مورد نظر ممکن نبود. این مشکل معمولا به خاطر استفاده از" +" Encrypted Cookies Session Storage backend در جنگو ۱.۴ یا بالاتر رخ " +"می‌دهد.
با افزودن خط زیر به فایل تنظیمات پروژه معمولا این مشکل را حل " +"می‌کند:
ROSETTA_STORAGE_CLASS = 'rosetta.storage.CacheRosettaStorage'" + +#: 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:33 +msgid "Progress" +msgstr "پیشرفت" + +#: templates/rosetta/languages.html:34 +msgid "Messages" +msgstr "پیام‌ها" + +#: templates/rosetta/languages.html:35 +msgid "Translated" +msgstr "ترجمه شده" + +#: templates/rosetta/languages.html:36 templates/rosetta/pofile.html:71 +msgid "Fuzzy" +msgstr "نیاز به بازبینی" + +#: templates/rosetta/languages.html:37 +msgid "Obsolete" +msgstr "کهنه" + +#: templates/rosetta/languages.html:38 +msgid "File" +msgstr "پرونده" + +#: templates/rosetta/languages.html:61 +msgid "Nothing to translate!" +msgstr "موردی برای ترجمه وجود ندارد!" + +#: 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:63 +#, python-format +msgid "" +"Please refer to Django's I18N " +"documentation for a guide on how to set up internationalization for your" +" project." +msgstr "" +"لطفا به مستندات جهانی‌سازی جنگو " +"documentation برای راهنما در مورد روش راه‌اندازی امکانات جهانی‌سازی برای" +" پروژه‌تان مراجعه کنید." + +#: templates/rosetta/pofile.html:9 +msgid "Pick another file" +msgstr "انتخاب یک فایل دیگر" + +#: templates/rosetta/pofile.html:10 +msgid "Download this catalog" +msgstr "دانلود این کاتالوگ" + +#: templates/rosetta/pofile.html:25 +#, python-format +msgid "Progress: %(percent_translated)s%%" +msgstr "درصد پیشرفت: %(percent_translated)s%%" + +#: templates/rosetta/pofile.html:27 +msgid "File is read-only: download the file when done editing!" +msgstr "" +"فایل ترجمه غیر قابل نوشتن است، پس از اتمام ترجمه فایل حاصل را دانلود نمایید!" + +#: 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:32 +#, python-format +msgid "Translate into %(rosetta_i18n_lang_name)s" +msgstr "در حال ترجمه به %(rosetta_i18n_lang_name)s" + +#: templates/rosetta/pofile.html:35 +msgid "Display:" +msgstr "نمایش:" + +#: templates/rosetta/pofile.html:36 +msgid "Untranslated only" +msgstr "فقط ترجمه نشده‌ها" + +#: templates/rosetta/pofile.html:37 +msgid "Translated only" +msgstr "فقط ترجمه شده‌ها" + +#: templates/rosetta/pofile.html:38 +msgid "Fuzzy only" +msgstr "فقط موارد برای بازبینی" + +#: templates/rosetta/pofile.html:46 +msgid "Search" +msgstr "جستجو" + +#: templates/rosetta/pofile.html:48 +msgid "Go" +msgstr "برو" + +#: templates/rosetta/pofile.html:68 +msgid "Original" +msgstr "اصلی" + +#: templates/rosetta/pofile.html:72 +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 +msgid "Context hint" +msgstr "راهنمای محلی" + +#: templates/rosetta/pofile.html:114 +msgid "suggest" +msgstr "پیشنهاد" + +#: templates/rosetta/pofile.html:125 +#, 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 +msgid "Save and translate next block" +msgstr "ذخیره و ترجمه‌ی دسته‌ی بعدی" + +#: templates/rosetta/pofile.html:141 +msgid "Skip to page:" +msgstr "پرش به صفحه:" + +#: templates/rosetta/pofile.html:154 +msgid "Displaying:" +msgstr "در حال نمایش:" + +#: templates/rosetta/pofile.html:158 +#, 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 پیام" From f170f2cfdd1783a76ca4b343afee30e8d475530a Mon Sep 17 00:00:00 2001 From: Marco Bonetti Date: Mon, 1 Apr 2013 17:41:25 +0300 Subject: [PATCH 04/11] Update CHANGES --- CHANGES | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES b/CHANGES index 44e9fca..ab14286 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,7 @@ Version 0.7.2 ------------- * Fix for when settings imports unicode_literals for some reason (Issue #67) * Fixed mess with app_id between pages (Issue #68, thanks @tsouvarev) +* Added Farsi tranlsation. Thanks, @amiraliakbari Version 0.7.1 ------------- From 840b3c51f9e8d082bbcf2619447def9774d0d97b Mon Sep 17 00:00:00 2001 From: Marco Bonetti Date: Mon, 1 Apr 2013 17:41:47 +0300 Subject: [PATCH 05/11] typo --- CHANGES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index ab14286..eca9220 100644 --- a/CHANGES +++ b/CHANGES @@ -2,7 +2,7 @@ Version 0.7.2 ------------- * Fix for when settings imports unicode_literals for some reason (Issue #67) * Fixed mess with app_id between pages (Issue #68, thanks @tsouvarev) -* Added Farsi tranlsation. Thanks, @amiraliakbari +* Added Farsi translation. Thanks, @amiraliakbari Version 0.7.1 ------------- From 6e5e6ef28ef46cb474a632a353bdb4f3e4d11582 Mon Sep 17 00:00:00 2001 From: kanu Date: Fri, 12 Apr 2013 12:36:57 +0200 Subject: [PATCH 06/11] fixed lang_sel view picking the wrong file. --- rosetta/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rosetta/views.py b/rosetta/views.py index 80fd4c6..618c497 100644 --- a/rosetta/views.py +++ b/rosetta/views.py @@ -371,7 +371,7 @@ def lang_sel(request, langid, idx): third_party_apps = rosetta_i18n_catalog_filter in ('all', 'third-party') django_apps = rosetta_i18n_catalog_filter in ('all', 'django') project_apps = rosetta_i18n_catalog_filter in ('all', 'project') - file_ = find_pos(langid, project_apps=project_apps, django_apps=django_apps, third_party_apps=third_party_apps)[int(idx)] + file_ = sorted(find_pos(langid, project_apps=project_apps, django_apps=django_apps, third_party_apps=third_party_apps), key=get_app_name)[int(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])) From b4ac8057cc37700c7fd50f7344fced5ee6804389 Mon Sep 17 00:00:00 2001 From: David Winterbottom Date: Tue, 16 Apr 2013 11:17:15 +0100 Subject: [PATCH 07/11] Set execute bit on test runner scripts --- runtests.sh | 0 runtests_coverage.sh | 0 runtests_multi_venv.sh | 0 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 runtests.sh mode change 100644 => 100755 runtests_coverage.sh mode change 100644 => 100755 runtests_multi_venv.sh diff --git a/runtests.sh b/runtests.sh old mode 100644 new mode 100755 diff --git a/runtests_coverage.sh b/runtests_coverage.sh old mode 100644 new mode 100755 diff --git a/runtests_multi_venv.sh b/runtests_multi_venv.sh old mode 100644 new mode 100755 From 718f9430ad6e7cd564841c6adb272e037ffac0b6 Mon Sep 17 00:00:00 2001 From: David Winterbottom Date: Tue, 16 Apr 2013 11:31:36 +0100 Subject: [PATCH 08/11] Allow access control function to be replaced The current access control function `can_translate` is not always sufficient. For instance, some projects require access to translation to be controlled using a permission rather than using groups. This change introduces a new setting `ROSETTA_ACCESS_CONTROL_FUNCTION` that allows an alternative predicate to be specified. The default is to use the current function so this change is backwards compatible. --- README.rst | 1 + rosetta/access.py | 36 ++++++++++++++++++++++++++++++++++++ rosetta/conf/settings.py | 3 +++ rosetta/tests/__init__.py | 19 +++++++++++++++++++ rosetta/views.py | 18 +----------------- 5 files changed, 60 insertions(+), 17 deletions(-) create mode 100644 rosetta/access.py diff --git a/README.rst b/README.rst index 7c42092..858d3e5 100644 --- a/README.rst +++ b/README.rst @@ -61,6 +61,7 @@ Rosetta can be configured via the following parameters, to be defined in your pr * ``ROSETTA_REQUIRES_AUTH``: Require authentication for all Rosetta views. Defaults to ``True``. * ``ROSETTA_POFILE_WRAP_WIDTH``: Sets the line-length of the edited PO file. Set this to ``0`` to mimic ``makemessage``'s ``--no-wrap`` option. Defaults to ``78``. * ``ROSETTA_STORAGE_CLASS``: See the note below on Storages. Defaults to ``rosetta.storage.CacheRosettaStorage`` +* ``ROSETTA_ACCESS_CONTROL_FUNCTION``: An alternative function that determines if a given user can access the translation views. ******** Storages diff --git a/rosetta/access.py b/rosetta/access.py new file mode 100644 index 0000000..b3641bc --- /dev/null +++ b/rosetta/access.py @@ -0,0 +1,36 @@ +from django.conf import settings +from django.utils import importlib + + +def can_translate(user): + return get_access_control_function()(user) + + +def get_access_control_function(): + """ + Return a predicate for determining if a user can access the Rosetta views + """ + fn_path = getattr(settings, 'ROSETTA_ACCESS_CONTROL_FUNCTION', None) + if fn_path is None: + return is_superuser_staff_or_in_translators_group + # Dynamically load a permissions function + perm_module, perm_func = fn_path.rsplit('.', 1) + perm_module = importlib.import_module(perm_module) + return getattr(perm_module, perm_func) + + +# Default access control test +def is_superuser_staff_or_in_translators_group(user): + if not getattr(settings, 'ROSETTA_REQUIRES_AUTH', True): + return True + if not user.is_authenticated(): + return False + 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 diff --git a/rosetta/conf/settings.py b/rosetta/conf/settings.py index 967afaf..7cd73d6 100644 --- a/rosetta/conf/settings.py +++ b/rosetta/conf/settings.py @@ -16,6 +16,9 @@ MAIN_LANGUAGE = getattr(settings, 'ROSETTA_MAIN_LANGUAGE', None) MESSAGES_SOURCE_LANGUAGE_CODE = getattr(settings, 'ROSETTA_MESSAGES_SOURCE_LANGUAGE_CODE', 'en') MESSAGES_SOURCE_LANGUAGE_NAME = getattr(settings, 'ROSETTA_MESSAGES_SOURCE_LANGUAGE_NAME', 'English') +ACCESS_CONTROL_FUNCTION = getattr( + settings, 'ROSETTA_ACCESS_CONTROL_FUNCTION', None) + """ When running WSGI daemon mode, using mod_wsgi 2.0c5 or later, this setting diff --git a/rosetta/tests/__init__.py b/rosetta/tests/__init__.py index 2a96c6b..4a316b5 100644 --- a/rosetta/tests/__init__.py +++ b/rosetta/tests/__init__.py @@ -537,3 +537,22 @@ class RosettaTestCase(TestCase): 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 + + +# Stubbed access control function +def no_access(user): + return False diff --git a/rosetta/views.py b/rosetta/views.py index 80fd4c6..ce3b9b4 100644 --- a/rosetta/views.py +++ b/rosetta/views.py @@ -13,6 +13,7 @@ from rosetta.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 import re import rosetta import unicodedata @@ -392,20 +393,3 @@ def lang_sel(request, langid, idx): storage.set('rosetta_i18n_write', False) return HttpResponseRedirect(reverse('rosetta-home')) - - -def can_translate(user): - if not getattr(settings, 'ROSETTA_REQUIRES_AUTH', True): - return True - if not user.is_authenticated(): - return False - 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 - From 13717f0807285710af4a9649a78d2cf4617f1648 Mon Sep 17 00:00:00 2001 From: Marco Bonetti Date: Tue, 16 Apr 2013 13:13:52 +0200 Subject: [PATCH 09/11] merged @tangentlabs PR to handle more advanced permission mechanisms --- CHANGES | 1 + README.rst | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index eca9220..fad2c89 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,7 @@ Version 0.7.2 * Fix for when settings imports unicode_literals for some reason (Issue #67) * Fixed mess with app_id between pages (Issue #68, thanks @tsouvarev) * Added Farsi translation. Thanks, @amiraliakbari +* Improved the permission system, allowing for more advanced permission mechanisms. Thanks, @tangentlabs Version 0.7.1 ------------- diff --git a/README.rst b/README.rst index 858d3e5..9940061 100644 --- a/README.rst +++ b/README.rst @@ -61,7 +61,7 @@ Rosetta can be configured via the following parameters, to be defined in your pr * ``ROSETTA_REQUIRES_AUTH``: Require authentication for all Rosetta views. Defaults to ``True``. * ``ROSETTA_POFILE_WRAP_WIDTH``: Sets the line-length of the edited PO file. Set this to ``0`` to mimic ``makemessage``'s ``--no-wrap`` option. Defaults to ``78``. * ``ROSETTA_STORAGE_CLASS``: See the note below on Storages. Defaults to ``rosetta.storage.CacheRosettaStorage`` -* ``ROSETTA_ACCESS_CONTROL_FUNCTION``: An alternative function that determines if a given user can access the translation views. +* ``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. ******** Storages From 204636e04a4c7da0858df21d0b4aa1bb723ebfda Mon Sep 17 00:00:00 2001 From: Marco Bonetti Date: Tue, 16 Apr 2013 13:16:42 +0200 Subject: [PATCH 10/11] fixed attribution of PR74 --- CHANGES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index fad2c89..1fed740 100644 --- a/CHANGES +++ b/CHANGES @@ -3,7 +3,7 @@ Version 0.7.2 * Fix for when settings imports unicode_literals for some reason (Issue #67) * Fixed mess with app_id between pages (Issue #68, thanks @tsouvarev) * Added Farsi translation. Thanks, @amiraliakbari -* Improved the permission system, allowing for more advanced permission mechanisms. Thanks, @tangentlabs +* Improved the permission system, allowing for more advanced permission mechanisms. Thanks, @codeinthehole and @tangentlabs Version 0.7.1 ------------- From 5c38efed1ee5b555f6d97e88b5bc430eac2a8956 Mon Sep 17 00:00:00 2001 From: Marco Bonetti Date: Tue, 16 Apr 2013 13:21:54 +0200 Subject: [PATCH 11/11] changes for PR 73 --- CHANGES | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES b/CHANGES index 1fed740..d51ae5a 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,7 @@ Version 0.7.2 * Fixed mess with app_id between pages (Issue #68, thanks @tsouvarev) * 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) Version 0.7.1 -------------