Yves-Gwenael Bourhis f4594e8199 Allow translators to translate BatchActions
Currently BatchAction proposes only an action_present and action_past verb
to be concatenated with a data_type_singular or data_type_plural string.

The issue is that many languages need to conjugate the verb with the
plural/singular subject, and some translations where terribly awfull and
impossible to do.
Indeed, some languages have up to 5 plural forms depending on the number of
items.

This patch introduces the fact that action_present is a method instead of an
attribute, which in conjonction with https://review.openstack.org/57701 allows
better translation to be performed.

This patch also adds contextual mrkers to STATUS_DISPLAY_CHOICES,
TASK_DISPLAY_CHOICES and POWER_DISPLAY_CHOICES because it was impossible to
translate the stand-alone words out of context for a translator (i.e. the word
"active" will be translated differently if the active object is feminine or
masculine, since feminine and masculine depends also on the language, it is
mission impossible for the translator to translate "active" if he does not know
"what" is "active").

It is important to use unicode strings with contextual markers because of the
following django bug:
https://code.djangoproject.com/ticket/22565
The django community was very quick and responsive and fixed the bug very fast:
https://code.djangoproject.com/changeset/142c27218a0bb07bb197faab7b1d8eb3a084f5b9
and back-ported their fix in the 1.6 and 1.7 django branches:
https://code.djangoproject.com/changeset/61fd00d4fd65f44d0a05be4c7e95124e4102ec27
https://code.djangoproject.com/changeset/034866204b39f797c73997b03cd90443aa03aa91
but since in horizon we support back to django 1.4, we will have to live with
it by providing unicode strings until we drop support of old django versions.

We can't introduce contextual markers and ungettext (pluralization) verywhere
at once because Translators would totally loose their previous work. So we have
to progressively introduce contextual markers and pluralization, when a string
is changed, or for new strings. It is also the reason why this patch changes
only the strings of the instance view actions.

Since we can't use contextual markers and pluralization for all the code at
once, this patch partially:

partial-bug: 1307476

Change-Id: I4cef42dc4a12f55cf750d9a18083254c6a96e716
2014-09-09 13:49:03 +02:00

90 lines
3.2 KiB
INI

[tox]
envlist = py26,py27,py27dj14,py27dj15,pep8,py33
minversion = 1.6
skipsdist = True
[testenv]
usedevelop = True
install_command = pip install --allow-external netaddr --allow-insecure netaddr -U {opts} {packages}
setenv = VIRTUAL_ENV={envdir}
NOSE_WITH_OPENSTACK=1
NOSE_OPENSTACK_COLOR=1
NOSE_OPENSTACK_RED=0.05
NOSE_OPENSTACK_YELLOW=0.025
NOSE_OPENSTACK_SHOW_ELAPSED=1
# Note the hash seed is set to 0 until horizon can be tested with a
# random hash seed successfully.
PYTHONHASHSEED=0
deps = -r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
commands = /bin/bash run_tests.sh -N --no-pep8 {posargs}
[testenv:pep8]
commands = /bin/bash run_tests.sh -N --pep8
[testenv:venv]
commands = {posargs}
[testenv:cover]
commands = /bin/bash run_tests.sh -N --no-pep8 --coverage {posargs}
[testenv:py27dj14]
basepython = python2.7
commands = pip install django>=1.4,<1.5
/bin/bash run_tests.sh -N --no-pep8 {posargs}
[testenv:py27dj15]
basepython = python2.7
commands = pip install django>=1.5,<1.6
/bin/bash run_tests.sh -N --no-pep8 {posargs}
[testenv:py27integration]
basepython = python2.7
commands = /bin/bash run_tests.sh -N --integration --selenium-headless {posargs}
[testenv:py26integration]
basepython = python2.6
commands = /bin/bash run_tests.sh -N --integration --selenium-headless {posargs}
[testenv:jshint]
commands = nodeenv -p
npm install jshint -g
/bin/bash run_tests.sh -N --jshint
[testenv:docs]
setenv = DJANGO_SETTINGS_MODULE=openstack_dashboard.test.settings
commands = python setup.py build_sphinx
[tox:jenkins]
downloadcache = ~/cache/pip
[flake8]
exclude = .venv,.git,.tox,dist,*openstack/common*,*lib/python*,*egg,build,panel_template,dash_template,local_settings.py,*/local/*,*/test/test_plugins/*,.ropeproject
# E127 continuation line over-indented for visual indent
# E128 continuation line under-indented for visual indent
# H307 like imports should be grouped together
# H405 multi line docstring summary not separated with an empty line
# H803 git commit title should not end with period (disabled on purpose, see bug #1236621)
# H904 Wrap long lines in parentheses instead of a backslash
ignore = E127,E128,H307,H405,H803,H904
[hacking]
import_exceptions = collections.defaultdict,
django.conf.settings,
django.core.urlresolvers.reverse,
django.core.urlresolvers.reverse_lazy,
django.template.loader.render_to_string,
django.test.utils.override_settings,
django.utils.datastructures.SortedDict,
django.utils.encoding.force_text,
django.utils.html.conditional_escape,
django.utils.html.escape,
django.utils.http.urlencode,
django.utils.safestring.mark_safe,
django.utils.translation.npgettext_lazy,
django.utils.translation.pgettext_lazy,
django.utils.translation.ugettext_lazy,
django.utils.translation.ungettext_lazy,
operator.attrgetter,
StringIO.StringIO