Enable translation jobs
This patch adds translation support as suggested by the global guidelines. Co-Authored-By: Liuqing Jing <lawrancejing@gmail.com> Change-Id: Ia57a0a88b57a53543f35275254dc9dd1827fc17b
This commit is contained in:
parent
85fb2463f0
commit
8ffeba91a7
5
babel-django.cfg
Normal file
5
babel-django.cfg
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[extractors]
|
||||||
|
django = django_babel.extract:extract_django
|
||||||
|
|
||||||
|
[python: **.py]
|
||||||
|
[django: **/templates/**.html]
|
14
babel-djangojs.cfg
Normal file
14
babel-djangojs.cfg
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[extractors]
|
||||||
|
# We use a custom extractor to find translatable strings in AngularJS
|
||||||
|
# templates. The extractor is included in horizon.utils for now.
|
||||||
|
# See http://babel.pocoo.org/docs/messages/#referencing-extraction-methods for
|
||||||
|
# details on how this works.
|
||||||
|
angular = horizon.utils.babel_extract_angular:extract_angular
|
||||||
|
|
||||||
|
[javascript: **.js]
|
||||||
|
|
||||||
|
# We need to look into all static folders for HTML files.
|
||||||
|
# The **/static ensures that we also search within
|
||||||
|
# /openstack_dashboard/dashboards/XYZ/static which will ensure
|
||||||
|
# that plugins are also translated.
|
||||||
|
[angular: **/static/**.html]
|
805
senlin_dashboard/locale/django.pot
Normal file
805
senlin_dashboard/locale/django.pot
Normal file
@ -0,0 +1,805 @@
|
|||||||
|
# Translations template for PROJECT.
|
||||||
|
# Copyright (C) 2016 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2016-02-19 11:27-0500\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"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.2.0\n"
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/dashboard.py:19
|
||||||
|
#: senlin_dashboard/cluster/nodes/forms.py:33
|
||||||
|
#: senlin_dashboard/cluster/receivers/forms.py:36
|
||||||
|
msgid "Cluster"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:31
|
||||||
|
msgid "Cluster Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:32
|
||||||
|
#: senlin_dashboard/cluster/nodes/forms.py:30
|
||||||
|
msgid "Profile"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:34
|
||||||
|
msgid "Min Size"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:37
|
||||||
|
msgid "Min size of the cluster. Default to 0."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:39
|
||||||
|
msgid "Max Size"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:42
|
||||||
|
msgid "Max size of the cluster. Default to -1, means unlimited."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:45
|
||||||
|
msgid "Desired Capacity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:47
|
||||||
|
msgid "Desired capacity of the cluster. Default to 0."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:49
|
||||||
|
msgid "Parent Cluster"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:53
|
||||||
|
msgid "Timeout"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:55
|
||||||
|
msgid "Cluster creation timeout in seconds."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:58
|
||||||
|
#: senlin_dashboard/cluster/nodes/forms.py:42
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/_detail_overview.html:30
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:105
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:169
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_detail_overview.html:28
|
||||||
|
msgid "Metadata"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:60
|
||||||
|
msgid "YAML formated metadata"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:67
|
||||||
|
#: senlin_dashboard/cluster/nodes/forms.py:51
|
||||||
|
msgid "Select Profile"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:81
|
||||||
|
#, python-format
|
||||||
|
msgid "The specified metadata is not a valid YAML format: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:86
|
||||||
|
#, python-format
|
||||||
|
msgid "Creating cluster \"%s\" successfully"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/forms.py:92
|
||||||
|
msgid "Unable to create cluster."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/panel.py:21
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:132
|
||||||
|
#: senlin_dashboard/cluster/clusters/views.py:31
|
||||||
|
#: senlin_dashboard/cluster/clusters/templates/clusters/index.html:3
|
||||||
|
msgid "Clusters"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:27
|
||||||
|
#: senlin_dashboard/cluster/clusters/views.py:46
|
||||||
|
#: senlin_dashboard/cluster/clusters/templates/clusters/_create.html:4
|
||||||
|
#: senlin_dashboard/cluster/clusters/templates/clusters/_create.html:13
|
||||||
|
#: senlin_dashboard/cluster/clusters/templates/clusters/create.html:3
|
||||||
|
msgid "Create Cluster"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:47
|
||||||
|
msgid "Delete Cluster"
|
||||||
|
msgid_plural "Delete Clusters"
|
||||||
|
msgstr[0] ""
|
||||||
|
msgstr[1] ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:55
|
||||||
|
msgid "Deleted Cluster"
|
||||||
|
msgid_plural "Deleted Clusters"
|
||||||
|
msgstr[0] ""
|
||||||
|
msgstr[1] ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:90
|
||||||
|
msgctxt "Current status of a Cluster"
|
||||||
|
msgid "INIT"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:91
|
||||||
|
msgctxt "Current status of a Cluster"
|
||||||
|
msgid "ACTIVE"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:92
|
||||||
|
msgctxt "Current status of a Cluster"
|
||||||
|
msgid "ERROR"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:93
|
||||||
|
msgctxt "Current status of a Cluster"
|
||||||
|
msgid "DELETED"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:94
|
||||||
|
msgctxt "Current status of a Cluster"
|
||||||
|
msgid "CRITICAL"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:96
|
||||||
|
msgctxt "Current status of a Cluster"
|
||||||
|
msgid "WARNING"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:97
|
||||||
|
msgctxt "Current status of a Cluster"
|
||||||
|
msgid "CREATING"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:99
|
||||||
|
msgctxt "Current status of a Cluster"
|
||||||
|
msgid "UPDATING"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:101
|
||||||
|
msgctxt "Current status of a Cluster"
|
||||||
|
msgid "DELETING"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:105
|
||||||
|
#: senlin_dashboard/cluster/clusters/templates/clusters/_detail_overview.html:7
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:105
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/_detail_overview.html:7
|
||||||
|
#: senlin_dashboard/cluster/policies/forms.py:35
|
||||||
|
#: senlin_dashboard/cluster/policies/tables.py:58
|
||||||
|
#: senlin_dashboard/cluster/policies/templates/policies/_detail_overview.html:7
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:72
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:156
|
||||||
|
#: senlin_dashboard/cluster/profiles/tables.py:66
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_detail_overview.html:7
|
||||||
|
#: senlin_dashboard/cluster/receivers/forms.py:34
|
||||||
|
#: senlin_dashboard/cluster/receivers/tables.py:58
|
||||||
|
msgid "Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:108
|
||||||
|
#: senlin_dashboard/cluster/clusters/templates/clusters/_detail_overview.html:13
|
||||||
|
#: senlin_dashboard/cluster/nodes/event_tables.py:49
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:115
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/_detail_overview.html:13
|
||||||
|
msgid "Status"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:113
|
||||||
|
#: senlin_dashboard/cluster/nodes/event_tables.py:54
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:120
|
||||||
|
msgid "Status Reason"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:116
|
||||||
|
#: senlin_dashboard/cluster/clusters/templates/clusters/_detail_overview.html:9
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:109
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/_detail_overview.html:9
|
||||||
|
msgid "Profile Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:119
|
||||||
|
#: senlin_dashboard/cluster/clusters/templates/clusters/_detail_overview.html:15
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:123
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/_detail_overview.html:21
|
||||||
|
#: senlin_dashboard/cluster/policies/tables.py:63
|
||||||
|
#: senlin_dashboard/cluster/policies/templates/policies/_detail_overview.html:13
|
||||||
|
#: senlin_dashboard/cluster/profiles/tables.py:71
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_detail_overview.html:19
|
||||||
|
#: senlin_dashboard/cluster/receivers/tables.py:64
|
||||||
|
msgid "Created"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tables.py:126
|
||||||
|
#: senlin_dashboard/cluster/clusters/templates/clusters/_detail_overview.html:18
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:130
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/_detail_overview.html:24
|
||||||
|
#: senlin_dashboard/cluster/policies/tables.py:70
|
||||||
|
#: senlin_dashboard/cluster/policies/templates/policies/_detail_overview.html:16
|
||||||
|
#: senlin_dashboard/cluster/profiles/tables.py:78
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_detail_overview.html:22
|
||||||
|
#: senlin_dashboard/cluster/receivers/tables.py:71
|
||||||
|
msgid "Updated"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tabs.py:24
|
||||||
|
#: senlin_dashboard/cluster/nodes/tabs.py:23
|
||||||
|
#: senlin_dashboard/cluster/policies/tabs.py:19
|
||||||
|
#: senlin_dashboard/cluster/profiles/tabs.py:19
|
||||||
|
msgid "Overview"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tabs.py:42
|
||||||
|
msgid "Unable to retrieve cluster event list."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tabs.py:47
|
||||||
|
#: senlin_dashboard/cluster/nodes/panel.py:21
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:136
|
||||||
|
#: senlin_dashboard/cluster/nodes/views.py:31
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/index.html:3
|
||||||
|
msgid "Nodes"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/tabs.py:61
|
||||||
|
msgid "Unable to retrieve nodes from cluster."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/views.py:40
|
||||||
|
msgid "Unable to retrieve clusters."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/views.py:67
|
||||||
|
msgid "Unable to retrieve cluster."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/templates/clusters/_create.html:7
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/_create.html:7
|
||||||
|
#: senlin_dashboard/cluster/policies/templates/policies/_create.html:7
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_create.html:8
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_update.html:7
|
||||||
|
#: senlin_dashboard/cluster/receivers/templates/receivers/_create.html:7
|
||||||
|
msgid "Description:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/templates/clusters/_create.html:8
|
||||||
|
msgid ""
|
||||||
|
"Cluster is the collection of cloud objects, e.g. Nova servers, Heat "
|
||||||
|
"stacks, Cinder volumes, etc."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/templates/clusters/_create.html:12
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/_create.html:12
|
||||||
|
#: senlin_dashboard/cluster/policies/templates/policies/_create.html:13
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_create.html:14
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_update.html:12
|
||||||
|
#: senlin_dashboard/cluster/receivers/templates/receivers/_create.html:12
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/templates/clusters/_detail_overview.html:4
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/_detail_overview.html:4
|
||||||
|
#: senlin_dashboard/cluster/policies/templates/policies/_detail_overview.html:4
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_detail_overview.html:4
|
||||||
|
msgid "Information"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/clusters/templates/clusters/_detail_overview.html:11
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/_detail_overview.html:11
|
||||||
|
#: senlin_dashboard/cluster/policies/templates/policies/_detail_overview.html:9
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_detail_overview.html:9
|
||||||
|
msgid "ID"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/event_tables.py:33
|
||||||
|
msgctxt "Current status of the event"
|
||||||
|
msgid "INIT"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/event_tables.py:34
|
||||||
|
msgctxt "Current status of the event"
|
||||||
|
msgid "ACTIVE"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/event_tables.py:35
|
||||||
|
msgctxt "Current status of the event"
|
||||||
|
msgid "ERROR"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/event_tables.py:36
|
||||||
|
msgctxt "Current status of the event"
|
||||||
|
msgid "DELETED"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/event_tables.py:37
|
||||||
|
msgctxt "Current status of the event"
|
||||||
|
msgid "WARNING"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/event_tables.py:39
|
||||||
|
msgctxt "Current status of the event"
|
||||||
|
msgid "CREATING"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/event_tables.py:41
|
||||||
|
msgctxt "Current status of the event"
|
||||||
|
msgid "UPDATING"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/event_tables.py:43
|
||||||
|
msgctxt "Current status of the event"
|
||||||
|
msgid "DELETING"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/event_tables.py:46
|
||||||
|
msgid "Object ID"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/event_tables.py:47
|
||||||
|
msgid "Object Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/event_tables.py:55
|
||||||
|
#: senlin_dashboard/cluster/receivers/forms.py:40
|
||||||
|
#: senlin_dashboard/cluster/receivers/tables.py:61
|
||||||
|
msgid "Action"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/event_tables.py:57
|
||||||
|
msgid "Timestamp"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/event_tables.py:62
|
||||||
|
#: senlin_dashboard/cluster/nodes/tabs.py:32
|
||||||
|
msgid "Event"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/forms.py:28
|
||||||
|
msgid "Node Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/forms.py:31
|
||||||
|
msgid "Profile used for this node."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/forms.py:35
|
||||||
|
msgid "Cluster for this node."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/forms.py:38
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:113
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/_detail_overview.html:18
|
||||||
|
msgid "Role"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/forms.py:40
|
||||||
|
msgid "Role for this node in the specific cluster."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/forms.py:44
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:108
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:172
|
||||||
|
msgid "YAML formatted metadata."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/forms.py:56
|
||||||
|
#: senlin_dashboard/cluster/receivers/forms.py:57
|
||||||
|
msgid "Select Cluster"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/forms.py:67
|
||||||
|
#, python-format
|
||||||
|
msgid "The specified metadata is not a valid YAML: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/forms.py:75
|
||||||
|
#, python-format
|
||||||
|
msgid "Creating node \"%s\" successfully"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/forms.py:81
|
||||||
|
msgid "Unable to create node."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:27
|
||||||
|
#: senlin_dashboard/cluster/nodes/views.py:46
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/_create.html:4
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/_create.html:13
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/create.html:3
|
||||||
|
msgid "Create Node"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:38
|
||||||
|
msgid "Delete Node"
|
||||||
|
msgid_plural "Delete Nodes"
|
||||||
|
msgstr[0] ""
|
||||||
|
msgstr[1] ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:46
|
||||||
|
msgid "Deleted Node"
|
||||||
|
msgid_plural "Deleted Nodes"
|
||||||
|
msgstr[0] ""
|
||||||
|
msgstr[1] ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:95
|
||||||
|
msgctxt "Current status of a Node"
|
||||||
|
msgid "INIT"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:96
|
||||||
|
msgctxt "Current status of a Node"
|
||||||
|
msgid "ACTIVE"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:97
|
||||||
|
msgctxt "Current status of a Node"
|
||||||
|
msgid "ERROR"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:98
|
||||||
|
msgctxt "Current status of a Node"
|
||||||
|
msgid "DELETED"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:99
|
||||||
|
msgctxt "Current status of a Node"
|
||||||
|
msgid "WARNING"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:100
|
||||||
|
msgctxt "Current status of a Node"
|
||||||
|
msgid "CREATING"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:101
|
||||||
|
msgctxt "Current status of a Node"
|
||||||
|
msgid "UPDATING"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:102
|
||||||
|
msgctxt "Current status of a Node"
|
||||||
|
msgid "DELETING"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/tables.py:112
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/_detail_overview.html:15
|
||||||
|
msgid "Physical ID"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/tabs.py:46
|
||||||
|
msgid "Unable to retrieve node event list."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/views.py:40
|
||||||
|
msgid "Unable to retrieve nodes."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/views.py:65
|
||||||
|
msgid "Unable to retrieve node."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/nodes/templates/nodes/_create.html:8
|
||||||
|
msgid ""
|
||||||
|
"Nodes are the physical objects, which can belong to any cluster of the "
|
||||||
|
"same profile type."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/forms.py:37
|
||||||
|
#: senlin_dashboard/cluster/policies/templates/policies/_detail_overview.html:11
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:158
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_detail_overview.html:13
|
||||||
|
msgid "Spec"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/forms.py:39
|
||||||
|
msgid "The spec yaml used to create the policy."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/forms.py:41
|
||||||
|
msgid "Cooldown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/forms.py:45
|
||||||
|
msgid ""
|
||||||
|
"An integer indicating the cooldown seconds once the policy is effected. "
|
||||||
|
"Default to 0."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/forms.py:48
|
||||||
|
msgid "Level"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/forms.py:53
|
||||||
|
msgid ""
|
||||||
|
"An integer between 0 and 100 representing the enforcement level. Default "
|
||||||
|
"to 0."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/forms.py:60
|
||||||
|
#, python-format
|
||||||
|
msgid "The specified data is not a valid YAML data: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/forms.py:72
|
||||||
|
#, python-format
|
||||||
|
msgid "Your policy %s has been created."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/forms.py:77
|
||||||
|
msgid "Unable to create new policy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/panel.py:21
|
||||||
|
#: senlin_dashboard/cluster/policies/tables.py:75
|
||||||
|
#: senlin_dashboard/cluster/policies/views.py:33
|
||||||
|
#: senlin_dashboard/cluster/policies/templates/policies/index.html:3
|
||||||
|
msgid "Policies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/tables.py:25
|
||||||
|
#: senlin_dashboard/cluster/policies/views.py:48
|
||||||
|
#: senlin_dashboard/cluster/policies/templates/policies/_create.html:4
|
||||||
|
#: senlin_dashboard/cluster/policies/templates/policies/_create.html:14
|
||||||
|
#: senlin_dashboard/cluster/policies/templates/policies/create.html:3
|
||||||
|
msgid "Create Policy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/tables.py:35
|
||||||
|
msgid "Delete Policy"
|
||||||
|
msgid_plural "Delete Policies"
|
||||||
|
msgstr[0] ""
|
||||||
|
msgstr[1] ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/tables.py:43
|
||||||
|
msgid "Deleted Policy"
|
||||||
|
msgid_plural "Deleted Policies"
|
||||||
|
msgstr[0] ""
|
||||||
|
msgstr[1] ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/tables.py:60
|
||||||
|
#: senlin_dashboard/cluster/profiles/tables.py:68
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_detail_overview.html:11
|
||||||
|
#: senlin_dashboard/cluster/receivers/forms.py:43
|
||||||
|
#: senlin_dashboard/cluster/receivers/tables.py:59
|
||||||
|
msgid "Type"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/views.py:42
|
||||||
|
msgid "Unable to retrieve policies."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/views.py:68
|
||||||
|
msgid "Unable to retrieve policy."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/templates/policies/_create.html:8
|
||||||
|
msgid ""
|
||||||
|
"A policy is a set of rules that can be checked and/or enforced when an "
|
||||||
|
"Action is performed on a Cluster."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/policies/templates/policies/_create.html:9
|
||||||
|
msgid "Policy Spec Examples"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:46
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:58
|
||||||
|
#, python-format
|
||||||
|
msgid "The specified file is not a valid YAML file: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:74
|
||||||
|
msgid "Spec Source"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:76
|
||||||
|
msgid "File"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:77
|
||||||
|
msgid "YAML"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:82
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:86
|
||||||
|
msgid "Spec File"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:88
|
||||||
|
msgid "The spec file used to create the profile."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:90
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:96
|
||||||
|
msgid "Spec YAML"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:97
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:161
|
||||||
|
msgid "The spec yaml used to create the profile."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:100
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:164
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_detail_overview.html:16
|
||||||
|
msgid "Permission"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:103
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:167
|
||||||
|
msgid "A string format permission for this profile."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:118
|
||||||
|
msgid "A spec file or yaml must be specified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:121
|
||||||
|
msgid "Can not specify both sepc file and yaml."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:141
|
||||||
|
#, python-format
|
||||||
|
msgid "Your profile %s has been created."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:149
|
||||||
|
msgid "Unable to create new profile"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:186
|
||||||
|
#, python-format
|
||||||
|
msgid "Your profile %s has been updated."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/forms.py:194
|
||||||
|
msgid "Unable to update profile"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/panel.py:21
|
||||||
|
#: senlin_dashboard/cluster/profiles/tables.py:83
|
||||||
|
#: senlin_dashboard/cluster/profiles/views.py:33
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/index.html:3
|
||||||
|
msgid "Profiles"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/tables.py:25
|
||||||
|
#: senlin_dashboard/cluster/profiles/views.py:49
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_create.html:5
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_create.html:15
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/create.html:3
|
||||||
|
msgid "Create Profile"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/tables.py:33
|
||||||
|
#: senlin_dashboard/cluster/profiles/views.py:57
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_update.html:4
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_update.html:13
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/update.html:3
|
||||||
|
msgid "Update Profile"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/tables.py:43
|
||||||
|
msgid "Delete Profile"
|
||||||
|
msgid_plural "Delete Profiles"
|
||||||
|
msgstr[0] ""
|
||||||
|
msgstr[1] ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/tables.py:51
|
||||||
|
msgid "Deleted Profile"
|
||||||
|
msgid_plural "Deleted Profiles"
|
||||||
|
msgstr[0] ""
|
||||||
|
msgstr[1] ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/views.py:41
|
||||||
|
msgid "Unable to retrieve profiles."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/views.py:85
|
||||||
|
#: senlin_dashboard/cluster/profiles/views.py:119
|
||||||
|
msgid "Unable to retrieve profile."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_create.html:9
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_update.html:8
|
||||||
|
msgid "A profile encodes the information needed for node creation."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/profiles/templates/profiles/_create.html:10
|
||||||
|
msgid "Profile Spec Examples"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/forms.py:37
|
||||||
|
msgid "Targeted cluster for this receiver."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/forms.py:41
|
||||||
|
msgid "Name or ID of the targeted action to be triggered."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/forms.py:45
|
||||||
|
msgid "Type of the receiver to create. Defailt to webhook"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/forms.py:47
|
||||||
|
msgid "Parameters"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/forms.py:50
|
||||||
|
msgid ""
|
||||||
|
"YAML formatted parameters that will be passed to target action when the "
|
||||||
|
"receiver is triggered."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/forms.py:61
|
||||||
|
msgid "Select Type"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/forms.py:70
|
||||||
|
#, python-format
|
||||||
|
msgid "The parameters is not a valid YAML formatted: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/forms.py:78
|
||||||
|
#, python-format
|
||||||
|
msgid "Your receiver %s has been created successfully."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/forms.py:83
|
||||||
|
msgid "Unable to create new receiver"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/panel.py:21
|
||||||
|
#: senlin_dashboard/cluster/receivers/tables.py:76
|
||||||
|
#: senlin_dashboard/cluster/receivers/views.py:28
|
||||||
|
#: senlin_dashboard/cluster/receivers/templates/receivers/index.html:3
|
||||||
|
msgid "Receivers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/tables.py:24
|
||||||
|
#: senlin_dashboard/cluster/receivers/views.py:43
|
||||||
|
#: senlin_dashboard/cluster/receivers/templates/receivers/_create.html:4
|
||||||
|
#: senlin_dashboard/cluster/receivers/templates/receivers/_create.html:13
|
||||||
|
#: senlin_dashboard/cluster/receivers/templates/receivers/create.html:3
|
||||||
|
msgid "Create Receiver"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/tables.py:35
|
||||||
|
msgid "Delete Receiver"
|
||||||
|
msgid_plural "Delete Receivers"
|
||||||
|
msgstr[0] ""
|
||||||
|
msgstr[1] ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/tables.py:43
|
||||||
|
msgid "Deleted Receiver"
|
||||||
|
msgid_plural "Deleted Receivers"
|
||||||
|
msgstr[0] ""
|
||||||
|
msgstr[1] ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/tables.py:60
|
||||||
|
msgid "Cluster ID"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/views.py:37
|
||||||
|
msgid "Unable to retrieve receivers."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: senlin_dashboard/cluster/receivers/templates/receivers/_create.html:8
|
||||||
|
msgid ""
|
||||||
|
"A Receiver is used to prepare Senlin engine to react to external alarms "
|
||||||
|
"or events so that a specific Action can be initiated on a senlin cluster "
|
||||||
|
"automatically. For example, when workload on a cluster climbs high, a "
|
||||||
|
"receiver can change the size of a specified cluster."
|
||||||
|
msgstr ""
|
||||||
|
|
19
senlin_dashboard/locale/djangojs.pot
Normal file
19
senlin_dashboard/locale/djangojs.pot
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Translations template for PROJECT.
|
||||||
|
# Copyright (C) 2016 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2016-02-19 11:27-0500\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"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.2.0\n"
|
||||||
|
|
5
tox.ini
5
tox.ini
@ -36,6 +36,11 @@ commands = python setup.py build_sphinx
|
|||||||
[testenv:debug]
|
[testenv:debug]
|
||||||
commands = oslo_debug_helper {posargs}
|
commands = oslo_debug_helper {posargs}
|
||||||
|
|
||||||
|
[testenv:makemessages]
|
||||||
|
commands =
|
||||||
|
pybabel extract -F babel-django.cfg -o senlin_dashboard/locale/django.pot -k gettext_noop -k gettext_lazy -k ngettext_lazy:1,2 -k ugettext_noop -k ugettext_lazy -k ungettext_lazy:1,2 -k npgettext:1c,2,3 -k pgettext_lazy:1c,2 -k npgettext_lazy:1c,2,3 senlin_dashboard
|
||||||
|
pybabel extract -F babel-djangojs.cfg -o senlin_dashboard/locale/djangojs.pot -k gettext_noop -k gettext_lazy -k ngettext_lazy:1,2 -k ugettext_noop -k ugettext_lazy -k ungettext_lazy:1,2 -k npgettext:1c,2,3 -k pgettext_lazy:1c,2 -k npgettext_lazy:1c,2,3 senlin_dashboard
|
||||||
|
|
||||||
[flake8]
|
[flake8]
|
||||||
show-source = True
|
show-source = True
|
||||||
exclude=.venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build,.ropeproject,tools
|
exclude=.venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build,.ropeproject,tools
|
||||||
|
Loading…
Reference in New Issue
Block a user