Adds i18n support for Javascript.

Uses Django's built-in client-side i18n machinery to
support translation strings in javascript code as well.

Various cleanup, etc. included to make translation file
generation succeed and remove obsolete strings.

Implements blueprint javascript-i18n.

Change-Id: I62c237ae98b26307e1e7d8a7d913237530e7324f
This commit is contained in:
Gabriel Hurley 2012-08-12 14:48:51 -07:00
parent 05cf900492
commit ee17b1588b
34 changed files with 11181 additions and 4511 deletions

View File

@ -73,11 +73,10 @@ class CreateSubnetInfoAction(workflows.Action):
class Meta: class Meta:
name = ("Subnet") name = ("Subnet")
help_text = _("You can create a subnet associated with the new " help_text = _('You can create a subnet associated with the new '
"network. \"Network Address\" must be specified. " 'network, in which case "Network Address" must be '
"\n\n" 'specified. If you wish to create a network WITHOUT a '
"If you are creating a network WITHOUT a subnet, " 'subnet, uncheck the "Create Subnet" checkbox.')
"clear \"Create Subnet\" checkbox.")
def clean(self): def clean(self):
cleaned_data = super(CreateSubnetInfoAction, self).clean() cleaned_data = super(CreateSubnetInfoAction, self).clean()
@ -110,7 +109,7 @@ class CreateNetwork(workflows.Workflow):
slug = "create_network" slug = "create_network"
name = _("Create Network") name = _("Create Network")
finalize_button_name = _("Create") finalize_button_name = _("Create")
success_message = _('Created new network "%s".') success_message = _('Created network "%s".')
failure_message = _('Unable to create network "%s".') failure_message = _('Unable to create network "%s".')
success_url = "horizon:nova:networks:index" success_url = "horizon:nova:networks:index"
default_steps = (CreateNetworkInfo, default_steps = (CreateNetworkInfo,
@ -127,10 +126,10 @@ class CreateNetwork(workflows.Workflow):
name=data['net_name']) name=data['net_name'])
network.set_id_as_name_if_empty() network.set_id_as_name_if_empty()
self.context['net_id'] = network.id self.context['net_id'] = network.id
msg = _('Network %s was successfully created.') % network.name msg = _('Network "%s" was successfully created.') % network.name
LOG.debug(msg) LOG.debug(msg)
except: except:
msg = _('Failed to create network %s') % data['net_name'] msg = _('Failed to create network "%s".') % data['net_name']
LOG.info(msg) LOG.info(msg)
redirect = reverse('horizon:nova:networks:index') redirect = reverse('horizon:nova:networks:index')
exceptions.handle(request, msg, redirect=redirect) exceptions.handle(request, msg, redirect=redirect)
@ -140,7 +139,7 @@ class CreateNetwork(workflows.Workflow):
if not data['with_subnet']: if not data['with_subnet']:
return True return True
# create the subnet # Create the subnet.
try: try:
params = {'network_id': network.id, params = {'network_id': network.id,
'name': data['subnet_name'], 'name': data['subnet_name'],
@ -149,14 +148,14 @@ class CreateNetwork(workflows.Workflow):
if data['gateway_ip']: if data['gateway_ip']:
params['gateway_ip'] = data['gateway_ip'] params['gateway_ip'] = data['gateway_ip']
api.quantum.subnet_create(request, **params) api.quantum.subnet_create(request, **params)
msg = _('Subnet %s was successfully created.') % data['cidr'] msg = _('Subnet "%s" was successfully created.') % data['cidr']
LOG.debug(msg) LOG.debug(msg)
except Exception: except Exception:
msg = _('Failed to create subnet %s for network %s') % \ msg = _('Failed to create subnet "%(sub)s" for network "%(net)s".')
(data['cidr'], network.id)
LOG.info(msg)
redirect = reverse('horizon:nova:networks:index') redirect = reverse('horizon:nova:networks:index')
exceptions.handle(request, msg, redirect=redirect) exceptions.handle(request,
msg % {"sub": data['cidr'], "net": network.id},
redirect=redirect)
return False return False
return True return True

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,71 @@
# 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: 2012-08-12 21:48+0000\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"
#: static/horizon/js/horizon.forms.js:57
msgid "Additional information here..."
msgstr ""
#: static/horizon/js/horizon.forms.js:63
#: static/horizon/js/horizon.projects.js:12
msgid "Filter"
msgstr ""
#: static/horizon/js/horizon.instances.js:28
msgid "There was a problem communicating with the server, please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:125
msgid "There was an error submitting the form. Please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:159 static/horizon/js/horizon.tabs.js:9
msgid "Loading"
msgstr ""
#: static/horizon/js/horizon.modals.js:178
msgid "An error occurred. Please try again."
msgstr ""
#: static/horizon/js/horizon.projects.js:9
msgid "This project currently has no members."
msgstr ""
#: static/horizon/js/horizon.projects.js:10
msgid "No more available users to add."
msgstr ""
#: static/horizon/js/horizon.projects.js:11
msgid "No users found."
msgstr ""
#: static/horizon/js/horizon.tables.js:52
msgid "An error occurred while updating."
msgstr ""
#: static/horizon/js/horizon.tables.js:130
msgid "Confirm "
msgstr ""
#: static/horizon/js/horizon.tables.js:131
msgid "Please confirm your selection. This action cannot be undone."
msgstr ""
#: static/horizon/js/horizon.tables.js:145
msgid "Working"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,72 @@
# 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: 2012-08-12 21:48+0000\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=2; plural=(n != 1)\n"
#: static/horizon/js/horizon.forms.js:57
msgid "Additional information here..."
msgstr ""
#: static/horizon/js/horizon.forms.js:63
#: static/horizon/js/horizon.projects.js:12
msgid "Filter"
msgstr ""
#: static/horizon/js/horizon.instances.js:28
msgid "There was a problem communicating with the server, please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:125
msgid "There was an error submitting the form. Please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:159 static/horizon/js/horizon.tabs.js:9
msgid "Loading"
msgstr ""
#: static/horizon/js/horizon.modals.js:178
msgid "An error occurred. Please try again."
msgstr ""
#: static/horizon/js/horizon.projects.js:9
msgid "This project currently has no members."
msgstr ""
#: static/horizon/js/horizon.projects.js:10
msgid "No more available users to add."
msgstr ""
#: static/horizon/js/horizon.projects.js:11
msgid "No users found."
msgstr ""
#: static/horizon/js/horizon.tables.js:52
msgid "An error occurred while updating."
msgstr ""
#: static/horizon/js/horizon.tables.js:130
msgid "Confirm "
msgstr ""
#: static/horizon/js/horizon.tables.js:131
msgid "Please confirm your selection. This action cannot be undone."
msgstr ""
#: static/horizon/js/horizon.tables.js:145
msgid "Working"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,72 @@
# 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: 2012-08-12 21:48+0000\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=2; plural=(n > 1)\n"
#: static/horizon/js/horizon.forms.js:57
msgid "Additional information here..."
msgstr ""
#: static/horizon/js/horizon.forms.js:63
#: static/horizon/js/horizon.projects.js:12
msgid "Filter"
msgstr ""
#: static/horizon/js/horizon.instances.js:28
msgid "There was a problem communicating with the server, please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:125
msgid "There was an error submitting the form. Please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:159 static/horizon/js/horizon.tabs.js:9
msgid "Loading"
msgstr ""
#: static/horizon/js/horizon.modals.js:178
msgid "An error occurred. Please try again."
msgstr ""
#: static/horizon/js/horizon.projects.js:9
msgid "This project currently has no members."
msgstr ""
#: static/horizon/js/horizon.projects.js:10
msgid "No more available users to add."
msgstr ""
#: static/horizon/js/horizon.projects.js:11
msgid "No users found."
msgstr ""
#: static/horizon/js/horizon.tables.js:52
msgid "An error occurred while updating."
msgstr ""
#: static/horizon/js/horizon.tables.js:130
msgid "Confirm "
msgstr ""
#: static/horizon/js/horizon.tables.js:131
msgid "Please confirm your selection. This action cannot be undone."
msgstr ""
#: static/horizon/js/horizon.tables.js:145
msgid "Working"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,72 @@
# 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: 2012-08-12 21:48+0000\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=1; plural=0\n"
#: static/horizon/js/horizon.forms.js:57
msgid "Additional information here..."
msgstr ""
#: static/horizon/js/horizon.forms.js:63
#: static/horizon/js/horizon.projects.js:12
msgid "Filter"
msgstr ""
#: static/horizon/js/horizon.instances.js:28
msgid "There was a problem communicating with the server, please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:125
msgid "There was an error submitting the form. Please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:159 static/horizon/js/horizon.tabs.js:9
msgid "Loading"
msgstr ""
#: static/horizon/js/horizon.modals.js:178
msgid "An error occurred. Please try again."
msgstr ""
#: static/horizon/js/horizon.projects.js:9
msgid "This project currently has no members."
msgstr ""
#: static/horizon/js/horizon.projects.js:10
msgid "No more available users to add."
msgstr ""
#: static/horizon/js/horizon.projects.js:11
msgid "No users found."
msgstr ""
#: static/horizon/js/horizon.tables.js:52
msgid "An error occurred while updating."
msgstr ""
#: static/horizon/js/horizon.tables.js:130
msgid "Confirm "
msgstr ""
#: static/horizon/js/horizon.tables.js:131
msgid "Please confirm your selection. This action cannot be undone."
msgstr ""
#: static/horizon/js/horizon.tables.js:145
msgid "Working"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,73 @@
# 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: 2012-08-12 21:48+0000\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=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2)\n"
#: static/horizon/js/horizon.forms.js:57
msgid "Additional information here..."
msgstr ""
#: static/horizon/js/horizon.forms.js:63
#: static/horizon/js/horizon.projects.js:12
msgid "Filter"
msgstr ""
#: static/horizon/js/horizon.instances.js:28
msgid "There was a problem communicating with the server, please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:125
msgid "There was an error submitting the form. Please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:159 static/horizon/js/horizon.tabs.js:9
msgid "Loading"
msgstr ""
#: static/horizon/js/horizon.modals.js:178
msgid "An error occurred. Please try again."
msgstr ""
#: static/horizon/js/horizon.projects.js:9
msgid "This project currently has no members."
msgstr ""
#: static/horizon/js/horizon.projects.js:10
msgid "No more available users to add."
msgstr ""
#: static/horizon/js/horizon.projects.js:11
msgid "No users found."
msgstr ""
#: static/horizon/js/horizon.tables.js:52
msgid "An error occurred while updating."
msgstr ""
#: static/horizon/js/horizon.tables.js:130
msgid "Confirm "
msgstr ""
#: static/horizon/js/horizon.tables.js:131
msgid "Please confirm your selection. This action cannot be undone."
msgstr ""
#: static/horizon/js/horizon.tables.js:145
msgid "Working"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,72 @@
# 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: 2012-08-12 21:48+0000\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=2; plural=(n != 1)\n"
#: static/horizon/js/horizon.forms.js:57
msgid "Additional information here..."
msgstr ""
#: static/horizon/js/horizon.forms.js:63
#: static/horizon/js/horizon.projects.js:12
msgid "Filter"
msgstr ""
#: static/horizon/js/horizon.instances.js:28
msgid "There was a problem communicating with the server, please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:125
msgid "There was an error submitting the form. Please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:159 static/horizon/js/horizon.tabs.js:9
msgid "Loading"
msgstr ""
#: static/horizon/js/horizon.modals.js:178
msgid "An error occurred. Please try again."
msgstr ""
#: static/horizon/js/horizon.projects.js:9
msgid "This project currently has no members."
msgstr ""
#: static/horizon/js/horizon.projects.js:10
msgid "No more available users to add."
msgstr ""
#: static/horizon/js/horizon.projects.js:11
msgid "No users found."
msgstr ""
#: static/horizon/js/horizon.tables.js:52
msgid "An error occurred while updating."
msgstr ""
#: static/horizon/js/horizon.tables.js:130
msgid "Confirm "
msgstr ""
#: static/horizon/js/horizon.tables.js:131
msgid "Please confirm your selection. This action cannot be undone."
msgstr ""
#: static/horizon/js/horizon.tables.js:145
msgid "Working"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,72 @@
# 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: 2012-08-12 21:48+0000\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=1; plural=0\n"
#: static/horizon/js/horizon.forms.js:57
msgid "Additional information here..."
msgstr ""
#: static/horizon/js/horizon.forms.js:63
#: static/horizon/js/horizon.projects.js:12
msgid "Filter"
msgstr ""
#: static/horizon/js/horizon.instances.js:28
msgid "There was a problem communicating with the server, please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:125
msgid "There was an error submitting the form. Please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:159 static/horizon/js/horizon.tabs.js:9
msgid "Loading"
msgstr ""
#: static/horizon/js/horizon.modals.js:178
msgid "An error occurred. Please try again."
msgstr ""
#: static/horizon/js/horizon.projects.js:9
msgid "This project currently has no members."
msgstr ""
#: static/horizon/js/horizon.projects.js:10
msgid "No more available users to add."
msgstr ""
#: static/horizon/js/horizon.projects.js:11
msgid "No users found."
msgstr ""
#: static/horizon/js/horizon.tables.js:52
msgid "An error occurred while updating."
msgstr ""
#: static/horizon/js/horizon.tables.js:130
msgid "Confirm "
msgstr ""
#: static/horizon/js/horizon.tables.js:131
msgid "Please confirm your selection. This action cannot be undone."
msgstr ""
#: static/horizon/js/horizon.tables.js:145
msgid "Working"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,72 @@
# 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: 2012-08-12 21:48+0000\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=1; plural=0\n"
#: static/horizon/js/horizon.forms.js:57
msgid "Additional information here..."
msgstr ""
#: static/horizon/js/horizon.forms.js:63
#: static/horizon/js/horizon.projects.js:12
msgid "Filter"
msgstr ""
#: static/horizon/js/horizon.instances.js:28
msgid "There was a problem communicating with the server, please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:125
msgid "There was an error submitting the form. Please try again."
msgstr ""
#: static/horizon/js/horizon.modals.js:159 static/horizon/js/horizon.tabs.js:9
msgid "Loading"
msgstr ""
#: static/horizon/js/horizon.modals.js:178
msgid "An error occurred. Please try again."
msgstr ""
#: static/horizon/js/horizon.projects.js:9
msgid "This project currently has no members."
msgstr ""
#: static/horizon/js/horizon.projects.js:10
msgid "No more available users to add."
msgstr ""
#: static/horizon/js/horizon.projects.js:11
msgid "No users found."
msgstr ""
#: static/horizon/js/horizon.tables.js:52
msgid "An error occurred while updating."
msgstr ""
#: static/horizon/js/horizon.tables.js:130
msgid "Confirm "
msgstr ""
#: static/horizon/js/horizon.tables.js:131
msgid "Please confirm your selection. This action cannot be undone."
msgstr ""
#: static/horizon/js/horizon.tables.js:145
msgid "Working"
msgstr ""

View File

@ -28,7 +28,11 @@ urlpatterns = patterns('horizon.views',
) )
urlpatterns += patterns('', urlpatterns += patterns('',
url(r'^i18n/setlang/$', 'django.views.i18n.set_language', url(r'^i18n/js/(?P<packages>\S+?)/$',
'django.views.i18n.javascript_catalog',
name='jsi18n'),
url(r'^i18n/setlang/$',
'django.views.i18n.set_language',
name="set_language"), name="set_language"),
url(r'^i18n/', include('django.conf.urls.i18n')) url(r'^i18n/', include('django.conf.urls.i18n'))
) )

View File

@ -50,6 +50,22 @@ horizon.forms.prevent_multiple_submission = function (el) {
}); });
}; };
horizon.forms.init_examples = function (el) {
var $el = $(el);
// Generic examples.
$el.find("#id_description").example(gettext("Additional information here..."));
// Update/create image form.
$el.find("#create_image_form input#id_copy_from").example("http://example.com/image.iso");
// Table search box.
$el.find(".table_search input").example(gettext("Filter"));
// Volume attachment form.
$el.find("#attach_volume_form #id_device").example("/dev/vdc/");
};
horizon.addInitFunction(function () { horizon.addInitFunction(function () {
horizon.forms.prevent_multiple_submission($('body')); horizon.forms.prevent_multiple_submission($('body'));
horizon.modals.addModalInitFunction(horizon.forms.prevent_multiple_submission); horizon.modals.addModalInitFunction(horizon.forms.prevent_multiple_submission);
@ -57,6 +73,9 @@ horizon.addInitFunction(function () {
horizon.forms.bind_add_item_handlers($("body")); horizon.forms.bind_add_item_handlers($("body"));
horizon.modals.addModalInitFunction(horizon.forms.bind_add_item_handlers); horizon.modals.addModalInitFunction(horizon.forms.bind_add_item_handlers);
horizon.forms.init_examples($("body"));
horizon.modals.addModalInitFunction(horizon.forms.init_examples);
horizon.forms.handle_source_group(); horizon.forms.handle_source_group();
horizon.forms.handle_snapshot_source(); horizon.forms.handle_snapshot_source();
@ -112,45 +131,4 @@ horizon.addInitFunction(function () {
}); });
// Hide the help text for js-capable browsers // Hide the help text for js-capable browsers
$('span.help-block').hide(); $('span.help-block').hide();
/* Form examples */
// Update/create image form.
$("#image_form input#id_name").example("ami-ubuntu");
$("#image_form input#id_kernel").example("123");
$("#image_form input#id_ramdisk").example("123");
$("#image_form input#id_state").example("available");
$("#image_form input#id_location").example("file:///var/lib/glance/images/123");
$("#image_form input#id_architecture").example("x86_64");
$("#image_form input#id_project_id").example("some");
$("#image_form input#id_disk_format").example("ari");
$("#image_form input#id_container_format").example("ari");
$("#image_form input#id_ramdisk").example("123");
// Launch instance form.
$("#launch_img input#id_name").example("YetAnotherInstance");
$("#launch_img input#id_security_groups").example("group1,group2");
// Create flavor form.
$("#flavor_form input#id_flavorid").example("1234");
$("#flavor_form input#id_name").example("small");
$("#flavor_form input#id_vcpus").example("256");
$("#flavor_form input#id_memory_mb").example("256");
$("#flavor_form input#id_disk_gb").example("256");
// Update/create tenant.
$("#tenant_form input#id__id").example("YetAnotherTenant");
$("#tenant_form textarea#id_description").example("One or two sentence description.");
// Update/create tenant.
$("#user_form input#id_id").example("username");
$("#user_form input#id_email").example("email@example.com");
$("#user_form input#id_password").example("password");
// Table search box.
$(".table_search input").example("Filter");
// Volume attachment form.
$("#attach_volume_form #id_device").example("/dev/vdc/");
}); });

View File

@ -25,7 +25,7 @@ horizon.instances = {
error: function(response) { error: function(response) {
if(via_user_submit) { if(via_user_submit) {
horizon.clearErrorMessages(); horizon.clearErrorMessages();
horizon.alert('error', 'There was a problem communicating with the server, please try again.'); horizon.alert('error', gettext('There was a problem communicating with the server, please try again.'));
} }
} }
}); });

View File

@ -122,7 +122,7 @@ horizon.addInitFunction(function() {
}, },
error: function (jqXHR, status, errorThrown) { error: function (jqXHR, status, errorThrown) {
$form.closest(".modal").modal("hide"); $form.closest(".modal").modal("hide");
horizon.alert("error", "There was an error submitting the form. Please try again."); horizon.alert("error", gettext("There was an error submitting the form. Please try again."));
} }
}); });
}); });
@ -156,7 +156,7 @@ horizon.addInitFunction(function() {
horizon.modals._request = $.ajax($this.attr('href'), { horizon.modals._request = $.ajax($this.attr('href'), {
beforeSend: function () { beforeSend: function () {
horizon.modals.modal_spinner("Loading"); horizon.modals.modal_spinner(gettext("Loading"));
}, },
complete: function () { complete: function () {
// Clear the global storage; // Clear the global storage;
@ -175,7 +175,7 @@ horizon.addInitFunction(function() {
else { else {
if (!horizon.ajax.get_messages(jqXHR)) { if (!horizon.ajax.get_messages(jqXHR)) {
// Generic error handler. Really generic. // Generic error handler. Really generic.
horizon.alert("error", "An error occurred. Please try again."); horizon.alert("error", gettext("An error occurred. Please try again."));
} }
} }
}, },

View File

@ -6,11 +6,10 @@ horizon.projects = {
roles: [], roles: [],
default_role_id: "", default_role_id: "",
workflow_loaded: false, workflow_loaded: false,
no_project_members: 'This project currently has no members.', no_project_members: gettext('This project currently has no members.'),
no_available_users: 'No more available users to add.', no_available_users: gettext('No more available users to add.'),
no_filter_results: 'No users found.', no_filter_results: gettext('No users found.'),
filter_btn_text: 'Filter', filter_btn_text: gettext('Filter'),
/* Parses the form field selector's ID to get either the /* Parses the form field selector's ID to get either the
* role or user id (i.e. returns "id12345" when * role or user id (i.e. returns "id12345" when
@ -20,7 +19,6 @@ horizon.projects = {
return id_string.slice(id_string.lastIndexOf("_") + 1); return id_string.slice(id_string.lastIndexOf("_") + 1);
}, },
/* /*
* Gets the html select element associated with a given * Gets the html select element associated with a given
* role id for role_id. * role id for role_id.
@ -29,7 +27,6 @@ horizon.projects = {
return $('select[id^="id_role_' + role_id + '"]'); return $('select[id^="id_role_' + role_id + '"]');
}, },
/* /*
* Initializes all of the horizon.projects lists with * Initializes all of the horizon.projects lists with
* data parsed from the hidden form fields, as well as the * data parsed from the hidden form fields, as well as the
@ -42,7 +39,6 @@ horizon.projects = {
horizon.projects.init_current_membership(); horizon.projects.init_current_membership();
}, },
/* /*
* Initializes an associative array mapping user ids to user names. * Initializes an associative array mapping user ids to user names.
**/ **/
@ -52,7 +48,6 @@ horizon.projects = {
}); });
}, },
/* /*
* Initializes an associative array mapping role ids to role names. * Initializes an associative array mapping role ids to role names.
**/ **/
@ -63,7 +58,6 @@ horizon.projects = {
}); });
}, },
/* /*
* Initializes an associative array of lists of the current * Initializes an associative array of lists of the current
* members for each available role. * members for each available role.
@ -88,13 +82,12 @@ horizon.projects = {
}); });
}, },
/* /*
* Checks to see whether a user is a member of the current project. * Checks to see whether a user is a member of the current project.
* If they are, returns the id of their primary role. * If they are, returns the id of their primary role.
**/ **/
is_project_member: function(user_id) { is_project_member: function(user_id) {
for (role in horizon.projects.current_membership) { for (var role in horizon.projects.current_membership) {
if ($.inArray(user_id, horizon.projects.current_membership[role]) >= 0) { if ($.inArray(user_id, horizon.projects.current_membership[role]) >= 0) {
return role; return role;
} }
@ -102,7 +95,6 @@ horizon.projects = {
return false; return false;
}, },
/* /*
* Updates the selected values on the role_list's form field, as * Updates the selected values on the role_list's form field, as
* well as the current_membership dictionary's list. * well as the current_membership dictionary's list.
@ -114,7 +106,6 @@ horizon.projects = {
horizon.projects.current_membership[role_id] = new_list; horizon.projects.current_membership[role_id] = new_list;
}, },
/* /*
* Helper function for remove_user_from_role. * Helper function for remove_user_from_role.
**/ **/
@ -127,36 +118,34 @@ horizon.projects = {
} }
}, },
/* /*
* Searches through the role lists and removes a given user * Searches through the role lists and removes a given user
* from the lists. * from the lists.
**/ **/
remove_user_from_role: function(user_id, role_id) { remove_user_from_role: function(user_id, role_id) {
var role_list;
if (role_id) { if (role_id) {
var role_list = horizon.projects.current_membership[role_id]; role_list = horizon.projects.current_membership[role_id];
horizon.projects.remove_user(user_id, role_id, role_list) horizon.projects.remove_user(user_id, role_id, role_list);
} }
else { else {
// search for membership in role lists // search for membership in role lists
for (var role in horizon.projects.current_membership) { for (var role in horizon.projects.current_membership) {
var role_list = horizon.projects.current_membership[role]; role_list = horizon.projects.current_membership[role];
horizon.projects.remove_user(user_id, role, role_list) horizon.projects.remove_user(user_id, role, role_list);
} }
} }
}, },
/* /*
* Adds a given user to a given role list. * Adds a given user to a given role list.
**/ **/
add_user_to_role: function(user_id, role_id) { add_user_to_role: function(user_id, role_id) {
var role_list = horizon.projects.current_membership[role_id]; var role_list = horizon.projects.current_membership[role_id];
role_list.push(user_id); role_list.push(user_id);
horizon.projects.update_role_lists(role_id, role_list) horizon.projects.update_role_lists(role_id, role_list);
}, },
/* /*
* Generates the HTML structure for a user that will be displayed * Generates the HTML structure for a user that will be displayed
* as a list item in the project member list. * as a list item in the project member list.
@ -191,6 +180,7 @@ horizon.projects = {
* Generates the HTML structure for the project membership UI. * Generates the HTML structure for the project membership UI.
**/ **/
generate_html: function() { generate_html: function() {
var user;
for (user in horizon.projects.users) { for (user in horizon.projects.users) {
var user_id = user; var user_id = user;
var user_name = horizon.projects.users[user]; var user_name = horizon.projects.users[user];
@ -198,7 +188,7 @@ horizon.projects = {
if (role_id) { if (role_id) {
$(".project_members").append(this.generate_user_element(user_name, user_id, "-")); $(".project_members").append(this.generate_user_element(user_name, user_id, "-"));
var $selected_role = $("li[data-user-id$='" + user_id + "']").siblings('.dropdown').children('.dropdown-toggle').children('span'); var $selected_role = $("li[data-user-id$='" + user_id + "']").siblings('.dropdown').children('.dropdown-toggle').children('span');
horizon.projects.set_selected_role($selected_role, role_id) horizon.projects.set_selected_role($selected_role, role_id);
} }
else { else {
$(".available_users").append(this.generate_user_element(user_name, user_id, "+")); $(".available_users").append(this.generate_user_element(user_name, user_id, "+"));
@ -207,14 +197,13 @@ horizon.projects = {
horizon.projects.detect_no_results(); horizon.projects.detect_no_results();
}, },
/* /*
* Triggers on click of link to add/remove member from the project. * Triggers on click of link to add/remove member from the project.
**/ **/
update_membership: function() { update_membership: function() {
$(".available_users, .project_members").on('click', ".btn-group a[href='#add_remove']", function (evt) { $(".available_users, .project_members").on('click', ".btn-group a[href='#add_remove']", function (evt) {
var available = $(".available_users").has($(this)).length; var available = $(".available_users").has($(this)).length;
var user_id = horizon.projects.get_field_id($(this).parent().siblings().attr('data-user-id')) var user_id = horizon.projects.get_field_id($(this).parent().siblings().attr('data-user-id'));
if (available) { if (available) {
$(this).text("-"); $(this).text("-");
@ -232,7 +221,7 @@ horizon.projects = {
// set the selection back to default role // set the selection back to default role
var $selected_role = $(this).parent().siblings('.dropdown').children('.dropdown-toggle').children('.selected_role'); var $selected_role = $(this).parent().siblings('.dropdown').children('.dropdown-toggle').children('.selected_role');
horizon.projects.set_selected_role($selected_role, horizon.projects.default_role_id) horizon.projects.set_selected_role($selected_role, horizon.projects.default_role_id);
} }
// update lists // update lists
@ -244,21 +233,21 @@ horizon.projects = {
}); });
}, },
/* /*
* Detects whether each list has members and if it does not * Detects whether each list has members and if it does not
* displays a message to the user. * displays a message to the user.
**/ **/
detect_no_results: function () { detect_no_results: function () {
$('.filterable').each( function () { $('.filterable').each( function () {
var filter = $(this).find('ul').attr('class'); var filter = $(this).find('ul').attr('class'),
text;
if (filter == 'project_members') if (filter == 'project_members')
var text = horizon.projects.no_project_members; text = horizon.projects.no_project_members;
else else
var text = horizon.projects.no_available_users; text = horizon.projects.no_available_users;
if ($('.' + filter).children('ul').length == 0) { if (!$('.' + filter).children('ul').length) {
$('#no_' + filter).text(text) $('#no_' + filter).text(text);
$('#no_' + filter).show(); $('#no_' + filter).show();
$("input[id='" + filter + "']").attr('disabled', 'disabled'); $("input[id='" + filter + "']").attr('disabled', 'disabled');
} }
@ -269,14 +258,13 @@ horizon.projects = {
}); });
}, },
/* /*
* Triggers on selection of new role for a member. * Triggers on selection of new role for a member.
**/ **/
select_member_role: function() { select_member_role: function() {
$(".available_users, .project_members").on('click', '.role_dropdown li', function (evt) { $(".available_users, .project_members").on('click', '.role_dropdown li', function (evt) {
var $selected_el = $(this).parent().prev().children('.selected_role'); var $selected_el = $(this).parent().prev().children('.selected_role');
$selected_el.text($(this).text()) $selected_el.text($(this).text());
// get the newly selected role and the member's name // get the newly selected role and the member's name
var new_role_id = $(this).attr("data-role-id"); var new_role_id = $(this).attr("data-role-id");
@ -285,11 +273,10 @@ horizon.projects = {
// update role lists // update role lists
horizon.projects.remove_user_from_role(user_id, $selected_el.attr('data-role-id')); horizon.projects.remove_user_from_role(user_id, $selected_el.attr('data-role-id'));
horizon.projects.add_user_to_role(user_id, new_role_id) horizon.projects.add_user_to_role(user_id, new_role_id);
}); });
}, },
/* /*
* Triggers on the addition of a new user via the inline object creation field. * Triggers on the addition of a new user via the inline object creation field.
**/ **/
@ -302,7 +289,7 @@ horizon.projects = {
// add the user to the hidden role lists and the users list // add the user to the hidden role lists and the users list
horizon.projects.users[user_id] = user_name; horizon.projects.users[user_id] = user_name;
$("select[multiple='multiple']").append("<option value='" + user_id + "'>" + horizon.projects.users[user_id] + "</option>") $("select[multiple='multiple']").append("<option value='" + user_id + "'>" + horizon.projects.users[user_id] + "</option>");
horizon.projects.add_user_to_role(user_id, horizon.projects.default_role_id); horizon.projects.add_user_to_role(user_id, horizon.projects.default_role_id);
// remove option from hidden select // remove option from hidden select
@ -314,12 +301,11 @@ horizon.projects = {
$("input.filter").val(horizon.projects.filter_btn_text); $("input.filter").val(horizon.projects.filter_btn_text);
// fix styling // fix styling
$(".project_members .btn-group").css('border-bottom','none') $(".project_members .btn-group").css('border-bottom','none');
$(".project_members .btn-group:last").css('border-bottom','1px solid #ddd') $(".project_members .btn-group:last").css('border-bottom','1px solid #ddd');
}); });
}, },
/* /*
* Style the inline object creation button, hide the associated field. * Style the inline object creation button, hide the associated field.
**/ **/
@ -331,7 +317,6 @@ horizon.projects = {
$(add_user_el).find("label, .input").addClass("add_user_btn"); $(add_user_el).find("label, .input").addClass("add_user_btn");
}, },
/* /*
* Fixes the striping of the fake table upon modification of the lists. * Fixes the striping of the fake table upon modification of the lists.
**/ **/
@ -362,7 +347,6 @@ horizon.projects = {
}); });
}, },
/* /*
* Sets up filtering for each list of users. * Sets up filtering for each list of users.
**/ **/
@ -415,7 +399,6 @@ horizon.projects = {
}); });
}, },
/* /*
* Calls set-up functions upon loading the workflow. * Calls set-up functions upon loading the workflow.
**/ **/
@ -455,10 +438,8 @@ horizon.projects = {
}); });
} }
} }
}; };
horizon.addInitFunction(function() { horizon.addInitFunction(function() {
$('.btn').on('click', function (evt) { $('.btn').on('click', function (evt) {
horizon.projects.workflow_loaded = false; horizon.projects.workflow_loaded = false;

View File

@ -49,7 +49,7 @@ horizon.datatables = {
break; break;
default: default:
if (horizon.conf.debug) { if (horizon.conf.debug) {
horizon.alert("error", "An error occurred while updating."); horizon.alert("error", gettext("An error occurred while updating."));
} }
$row.removeClass("ajax-update"); $row.removeClass("ajax-update");
$row.find("i.ajax-updating").remove(); $row.find("i.ajax-updating").remove();
@ -127,8 +127,8 @@ horizon.datatables.confirm = function (action) {
return; return;
} }
action_string = $action.text(); action_string = $action.text();
title = "Confirm " + action_string; title = gettext("Confirm ") + action_string;
body = "Please confirm your selection. This action cannot be undone."; body = gettext("Please confirm your selection. This action cannot be undone.");
modal = horizon.modals.create(title, body, action_string); modal = horizon.modals.create(title, body, action_string);
modal.modal(); modal.modal();
if($modal_parent.length) { if($modal_parent.length) {
@ -142,7 +142,7 @@ horizon.datatables.confirm = function (action) {
form.append("<input type='hidden' name='" + $action.attr('name') + "' value='" + $action.attr('value') + "'/>"); form.append("<input type='hidden' name='" + $action.attr('name') + "' value='" + $action.attr('value') + "'/>");
form.submit(); form.submit();
modal.modal('hide'); modal.modal('hide');
horizon.modals.modal_spinner("Working"); horizon.modals.modal_spinner(gettext("Working"));
return false; return false;
}); });
return modal; return modal;

View File

@ -6,7 +6,7 @@ horizon.tabs.load_tab = function (evt) {
tab_pane = $(tab_id); tab_pane = $(tab_id);
// FIXME(gabriel): This style mucking shouldn't be in the javascript. // FIXME(gabriel): This style mucking shouldn't be in the javascript.
tab_pane.append("<span style='margin-left: 30px;'>loading&hellip;</span>"); tab_pane.append("<span style='margin-left: 30px;'>" + gettext("Loading") + "&hellip;</span>");
tab_pane.spin(horizon.conf.spinner_options.inline); tab_pane.spin(horizon.conf.spinner_options.inline);
$(tab_pane.data().spinner.el).css('top', '9px'); $(tab_pane.data().spinner.el).css('top', '9px');
$(tab_pane.data().spinner.el).css('left', '15px'); $(tab_pane.data().spinner.el).css('left', '15px');

View File

@ -1,5 +1,8 @@
{% load compress %} {% load compress %}
{% comment %} Django's JavaScript i18n Implementation {% endcomment %}
<script type="text/javascript" src="{% url horizon:jsi18n 'horizon' %}"></script>
{% compress js %} {% compress js %}
{% comment %} jQuery and Plugins {% endcomment %} {% comment %} jQuery and Plugins {% endcomment %}
<script src='{{ STATIC_URL }}horizon/lib/jquery/jquery.min.js' type='text/javascript' charset="utf-8"></script> <script src='{{ STATIC_URL }}horizon/lib/jquery/jquery.min.js' type='text/javascript' charset="utf-8"></script>

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-07-09 02:29+0000\n" "POT-Creation-Date: 2012-08-12 21:48+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,39 +17,39 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: settings.py:136 #: settings.py:141
msgid "English" msgid "English"
msgstr "" msgstr ""
#: settings.py:137 #: settings.py:142
msgid "Italiano" msgid "Italiano"
msgstr "" msgstr ""
#: settings.py:138 #: settings.py:143
msgid "Spanish" msgid "Spanish"
msgstr "" msgstr ""
#: settings.py:139 #: settings.py:144
msgid "French" msgid "French"
msgstr "" msgstr ""
#: settings.py:140 #: settings.py:145
msgid "Japanese" msgid "Japanese"
msgstr "" msgstr ""
#: settings.py:141 #: settings.py:146
msgid "Portuguese" msgid "Portuguese"
msgstr "" msgstr ""
#: settings.py:142 #: settings.py:147
msgid "Polish" msgid "Polish"
msgstr "" msgstr ""
#: settings.py:143 #: settings.py:148
msgid "Simplified Chinese" msgid "Simplified Chinese"
msgstr "" msgstr ""
#: settings.py:144 #: settings.py:149
msgid "Traditional Chinese" msgid "Traditional Chinese"
msgstr "" msgstr ""
@ -86,27 +86,3 @@ msgid ""
"An unexpected error occurred while processing your request. Please try your " "An unexpected error occurred while processing your request. Please try your "
"request again." "request again."
msgstr "" msgstr ""
#: templates/_header.html:3
msgid "Logged in as"
msgstr ""
#: templates/_header.html:4
msgid "Settings"
msgstr ""
#: templates/_header.html:5
msgid "Sign Out"
msgstr ""
#: templates/splash.html:7 templates/auth/login.html:4
msgid "Login"
msgstr ""
#: templates/auth/_login.html:4
msgid "Log In"
msgstr ""
#: templates/auth/_login.html:17
msgid "Sign In"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-07-09 02:29+0000\n" "POT-Creation-Date: 2012-08-12 21:48+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,39 +18,39 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: settings.py:136 #: settings.py:141
msgid "English" msgid "English"
msgstr "" msgstr ""
#: settings.py:137 #: settings.py:142
msgid "Italiano" msgid "Italiano"
msgstr "" msgstr ""
#: settings.py:138 #: settings.py:143
msgid "Spanish" msgid "Spanish"
msgstr "" msgstr ""
#: settings.py:139 #: settings.py:144
msgid "French" msgid "French"
msgstr "" msgstr ""
#: settings.py:140 #: settings.py:145
msgid "Japanese" msgid "Japanese"
msgstr "" msgstr ""
#: settings.py:141 #: settings.py:146
msgid "Portuguese" msgid "Portuguese"
msgstr "" msgstr ""
#: settings.py:142 #: settings.py:147
msgid "Polish" msgid "Polish"
msgstr "" msgstr ""
#: settings.py:143 #: settings.py:148
msgid "Simplified Chinese" msgid "Simplified Chinese"
msgstr "" msgstr ""
#: settings.py:144 #: settings.py:149
msgid "Traditional Chinese" msgid "Traditional Chinese"
msgstr "" msgstr ""
@ -87,27 +87,3 @@ msgid ""
"An unexpected error occurred while processing your request. Please try your " "An unexpected error occurred while processing your request. Please try your "
"request again." "request again."
msgstr "" msgstr ""
#: templates/_header.html:3
msgid "Logged in as"
msgstr ""
#: templates/_header.html:4
msgid "Settings"
msgstr ""
#: templates/_header.html:5
msgid "Sign Out"
msgstr ""
#: templates/splash.html:7 templates/auth/login.html:4
msgid "Login"
msgstr ""
#: templates/auth/_login.html:4
msgid "Log In"
msgstr ""
#: templates/auth/_login.html:17
msgid "Sign In"
msgstr ""

View File

@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: openstack-dashboard\n" "Project-Id-Version: openstack-dashboard\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-07-09 02:29+0000\n" "POT-Creation-Date: 2012-08-12 21:48+0000\n"
"PO-Revision-Date: 2012-05-08 00:20+0100\n" "PO-Revision-Date: 2012-05-08 00:20+0100\n"
"Last-Translator: Erwan Gallen <erwan@zinux.com>\n" "Last-Translator: Erwan Gallen <erwan@zinux.com>\n"
"Language-Team: French <fr@zinux.com>\n" "Language-Team: French <fr@zinux.com>\n"
@ -16,39 +16,39 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n"
#: settings.py:136 #: settings.py:141
msgid "English" msgid "English"
msgstr "Anglais" msgstr "Anglais"
#: settings.py:137 #: settings.py:142
msgid "Italiano" msgid "Italiano"
msgstr "Italien" msgstr "Italien"
#: settings.py:138 #: settings.py:143
msgid "Spanish" msgid "Spanish"
msgstr "Espagnol" msgstr "Espagnol"
#: settings.py:139 #: settings.py:144
msgid "French" msgid "French"
msgstr "Français" msgstr "Français"
#: settings.py:140 #: settings.py:145
msgid "Japanese" msgid "Japanese"
msgstr "Japonais" msgstr "Japonais"
#: settings.py:141 #: settings.py:146
msgid "Portuguese" msgid "Portuguese"
msgstr "Portugais" msgstr "Portugais"
#: settings.py:142 #: settings.py:147
msgid "Polish" msgid "Polish"
msgstr "Polonais" msgstr "Polonais"
#: settings.py:143 #: settings.py:148
msgid "Simplified Chinese" msgid "Simplified Chinese"
msgstr "Chinois simplifié" msgstr "Chinois simplifié"
#: settings.py:144 #: settings.py:149
msgid "Traditional Chinese" msgid "Traditional Chinese"
msgstr "Chinois traditionnel" msgstr "Chinois traditionnel"
@ -88,28 +88,3 @@ msgid ""
msgstr "" msgstr ""
"Une erreur inattendue s'est produite lors du traitement de votre demande. " "Une erreur inattendue s'est produite lors du traitement de votre demande. "
"Veuillez essayer à nouveau votre demande." "Veuillez essayer à nouveau votre demande."
#: templates/_header.html:3
msgid "Logged in as"
msgstr "Connecté"
#: templates/_header.html:4
msgid "Settings"
msgstr "Réglages"
#: templates/_header.html:5
msgid "Sign Out"
msgstr "Déconnexion"
#: templates/splash.html:7 templates/auth/login.html:4
msgid "Login"
msgstr ""
#: templates/auth/_login.html:4
msgid "Log In"
msgstr ""
#: templates/auth/_login.html:17
#, fuzzy
msgid "Sign In"
msgstr "Déconnexion"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-07-09 02:29+0000\n" "POT-Creation-Date: 2012-08-12 21:48+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,39 +18,39 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0\n" "Plural-Forms: nplurals=1; plural=0\n"
#: settings.py:136 #: settings.py:141
msgid "English" msgid "English"
msgstr "" msgstr ""
#: settings.py:137 #: settings.py:142
msgid "Italiano" msgid "Italiano"
msgstr "" msgstr ""
#: settings.py:138 #: settings.py:143
msgid "Spanish" msgid "Spanish"
msgstr "" msgstr ""
#: settings.py:139 #: settings.py:144
msgid "French" msgid "French"
msgstr "" msgstr ""
#: settings.py:140 #: settings.py:145
msgid "Japanese" msgid "Japanese"
msgstr "" msgstr ""
#: settings.py:141 #: settings.py:146
msgid "Portuguese" msgid "Portuguese"
msgstr "" msgstr ""
#: settings.py:142 #: settings.py:147
msgid "Polish" msgid "Polish"
msgstr "" msgstr ""
#: settings.py:143 #: settings.py:148
msgid "Simplified Chinese" msgid "Simplified Chinese"
msgstr "" msgstr ""
#: settings.py:144 #: settings.py:149
msgid "Traditional Chinese" msgid "Traditional Chinese"
msgstr "" msgstr ""
@ -87,27 +87,3 @@ msgid ""
"An unexpected error occurred while processing your request. Please try your " "An unexpected error occurred while processing your request. Please try your "
"request again." "request again."
msgstr "" msgstr ""
#: templates/_header.html:3
msgid "Logged in as"
msgstr ""
#: templates/_header.html:4
msgid "Settings"
msgstr ""
#: templates/_header.html:5
msgid "Sign Out"
msgstr ""
#: templates/splash.html:7 templates/auth/login.html:4
msgid "Login"
msgstr ""
#: templates/auth/_login.html:4
msgid "Log In"
msgstr ""
#: templates/auth/_login.html:17
msgid "Sign In"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-07-09 02:29+0000\n" "POT-Creation-Date: 2012-08-12 21:48+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -19,39 +19,39 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2)\n" "|| n%100>=20) ? 1 : 2)\n"
#: settings.py:136 #: settings.py:141
msgid "English" msgid "English"
msgstr "" msgstr ""
#: settings.py:137 #: settings.py:142
msgid "Italiano" msgid "Italiano"
msgstr "" msgstr ""
#: settings.py:138 #: settings.py:143
msgid "Spanish" msgid "Spanish"
msgstr "" msgstr ""
#: settings.py:139 #: settings.py:144
msgid "French" msgid "French"
msgstr "" msgstr ""
#: settings.py:140 #: settings.py:145
msgid "Japanese" msgid "Japanese"
msgstr "" msgstr ""
#: settings.py:141 #: settings.py:146
msgid "Portuguese" msgid "Portuguese"
msgstr "" msgstr ""
#: settings.py:142 #: settings.py:147
msgid "Polish" msgid "Polish"
msgstr "" msgstr ""
#: settings.py:143 #: settings.py:148
msgid "Simplified Chinese" msgid "Simplified Chinese"
msgstr "" msgstr ""
#: settings.py:144 #: settings.py:149
msgid "Traditional Chinese" msgid "Traditional Chinese"
msgstr "" msgstr ""
@ -88,27 +88,3 @@ msgid ""
"An unexpected error occurred while processing your request. Please try your " "An unexpected error occurred while processing your request. Please try your "
"request again." "request again."
msgstr "" msgstr ""
#: templates/_header.html:3
msgid "Logged in as"
msgstr ""
#: templates/_header.html:4
msgid "Settings"
msgstr ""
#: templates/_header.html:5
msgid "Sign Out"
msgstr ""
#: templates/splash.html:7 templates/auth/login.html:4
msgid "Login"
msgstr ""
#: templates/auth/_login.html:4
msgid "Log In"
msgstr ""
#: templates/auth/_login.html:17
msgid "Sign In"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-07-09 02:29+0000\n" "POT-Creation-Date: 2012-08-12 21:48+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,39 +18,39 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: settings.py:136 #: settings.py:141
msgid "English" msgid "English"
msgstr "" msgstr ""
#: settings.py:137 #: settings.py:142
msgid "Italiano" msgid "Italiano"
msgstr "" msgstr ""
#: settings.py:138 #: settings.py:143
msgid "Spanish" msgid "Spanish"
msgstr "" msgstr ""
#: settings.py:139 #: settings.py:144
msgid "French" msgid "French"
msgstr "" msgstr ""
#: settings.py:140 #: settings.py:145
msgid "Japanese" msgid "Japanese"
msgstr "" msgstr ""
#: settings.py:141 #: settings.py:146
msgid "Portuguese" msgid "Portuguese"
msgstr "" msgstr ""
#: settings.py:142 #: settings.py:147
msgid "Polish" msgid "Polish"
msgstr "" msgstr ""
#: settings.py:143 #: settings.py:148
msgid "Simplified Chinese" msgid "Simplified Chinese"
msgstr "" msgstr ""
#: settings.py:144 #: settings.py:149
msgid "Traditional Chinese" msgid "Traditional Chinese"
msgstr "" msgstr ""
@ -87,27 +87,3 @@ msgid ""
"An unexpected error occurred while processing your request. Please try your " "An unexpected error occurred while processing your request. Please try your "
"request again." "request again."
msgstr "" msgstr ""
#: templates/_header.html:3
msgid "Logged in as"
msgstr ""
#: templates/_header.html:4
msgid "Settings"
msgstr ""
#: templates/_header.html:5
msgid "Sign Out"
msgstr ""
#: templates/splash.html:7 templates/auth/login.html:4
msgid "Login"
msgstr ""
#: templates/auth/_login.html:4
msgid "Log In"
msgstr ""
#: templates/auth/_login.html:17
msgid "Sign In"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-07-09 02:29+0000\n" "POT-Creation-Date: 2012-08-12 21:48+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,39 +17,39 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: settings.py:136 #: settings.py:141
msgid "English" msgid "English"
msgstr "" msgstr ""
#: settings.py:137 #: settings.py:142
msgid "Italiano" msgid "Italiano"
msgstr "" msgstr ""
#: settings.py:138 #: settings.py:143
msgid "Spanish" msgid "Spanish"
msgstr "" msgstr ""
#: settings.py:139 #: settings.py:144
msgid "French" msgid "French"
msgstr "" msgstr ""
#: settings.py:140 #: settings.py:145
msgid "Japanese" msgid "Japanese"
msgstr "" msgstr ""
#: settings.py:141 #: settings.py:146
msgid "Portuguese" msgid "Portuguese"
msgstr "" msgstr ""
#: settings.py:142 #: settings.py:147
msgid "Polish" msgid "Polish"
msgstr "" msgstr ""
#: settings.py:143 #: settings.py:148
msgid "Simplified Chinese" msgid "Simplified Chinese"
msgstr "" msgstr ""
#: settings.py:144 #: settings.py:149
msgid "Traditional Chinese" msgid "Traditional Chinese"
msgstr "" msgstr ""
@ -86,27 +86,3 @@ msgid ""
"An unexpected error occurred while processing your request. Please try your " "An unexpected error occurred while processing your request. Please try your "
"request again." "request again."
msgstr "" msgstr ""
#: templates/_header.html:3
msgid "Logged in as"
msgstr ""
#: templates/_header.html:4
msgid "Settings"
msgstr ""
#: templates/_header.html:5
msgid "Sign Out"
msgstr ""
#: templates/splash.html:7 templates/auth/login.html:4
msgid "Login"
msgstr ""
#: templates/auth/_login.html:4
msgid "Log In"
msgstr ""
#: templates/auth/_login.html:17
msgid "Sign In"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-07-09 02:29+0000\n" "POT-Creation-Date: 2012-08-12 21:48+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,39 +17,39 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: settings.py:136 #: settings.py:141
msgid "English" msgid "English"
msgstr "" msgstr ""
#: settings.py:137 #: settings.py:142
msgid "Italiano" msgid "Italiano"
msgstr "" msgstr ""
#: settings.py:138 #: settings.py:143
msgid "Spanish" msgid "Spanish"
msgstr "" msgstr ""
#: settings.py:139 #: settings.py:144
msgid "French" msgid "French"
msgstr "" msgstr ""
#: settings.py:140 #: settings.py:145
msgid "Japanese" msgid "Japanese"
msgstr "" msgstr ""
#: settings.py:141 #: settings.py:146
msgid "Portuguese" msgid "Portuguese"
msgstr "" msgstr ""
#: settings.py:142 #: settings.py:147
msgid "Polish" msgid "Polish"
msgstr "" msgstr ""
#: settings.py:143 #: settings.py:148
msgid "Simplified Chinese" msgid "Simplified Chinese"
msgstr "" msgstr ""
#: settings.py:144 #: settings.py:149
msgid "Traditional Chinese" msgid "Traditional Chinese"
msgstr "" msgstr ""
@ -86,27 +86,3 @@ msgid ""
"An unexpected error occurred while processing your request. Please try your " "An unexpected error occurred while processing your request. Please try your "
"request again." "request again."
msgstr "處理過程中發生無法預期的錯誤。請再嘗試。" msgstr "處理過程中發生無法預期的錯誤。請再嘗試。"
#: templates/_header.html:3
msgid "Logged in as"
msgstr "目前登入者"
#: templates/_header.html:4
msgid "Settings"
msgstr "設定"
#: templates/_header.html:5
msgid "Sign Out"
msgstr "登出"
#: templates/splash.html:7 templates/auth/login.html:4
msgid "Login"
msgstr ""
#: templates/auth/_login.html:4
msgid "Log In"
msgstr ""
#: templates/auth/_login.html:17
msgid "Sign In"
msgstr "登入"

View File

@ -301,13 +301,15 @@ function run_tests {
function run_makemessages { function run_makemessages {
cd horizon cd horizon
${command_wrapper} $root/manage.py makemessages --all ${command_wrapper} $root/manage.py makemessages --all --no-obsolete
HORIZON_RESULT=$? HORIZON_PY_RESULT=$?
${command_wrapper} $root/manage.py makemessages -d djangojs --all --no-obsolete
HORIZON_JS_RESULT=$?
cd ../openstack_dashboard cd ../openstack_dashboard
${command_wrapper} $root/manage.py makemessages --all ${command_wrapper} $root/manage.py makemessages --all --no-obsolete
DASHBOARD_RESULT=$? DASHBOARD_RESULT=$?
cd .. cd ..
exit $(($HORIZON_RESULT || $DASHBOARD_RESULT)) exit $(($HORIZON_PY_RESULT || $HORIZON_JS_RESULT || $DASHBOARD_RESULT))
} }